/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.repository.capabilities; import com.liferay.document.library.kernel.util.DLProcessorRegistryUtil; import com.liferay.portal.kernel.repository.LocalRepository; import com.liferay.portal.kernel.repository.Repository; import com.liferay.portal.kernel.repository.capabilities.ProcessorCapability; import com.liferay.portal.kernel.repository.event.RepositoryEventAware; import com.liferay.portal.kernel.repository.event.RepositoryEventListener; import com.liferay.portal.kernel.repository.event.RepositoryEventType; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.FileVersion; import com.liferay.portal.kernel.repository.registry.RepositoryEventRegistry; import com.liferay.portal.kernel.transaction.TransactionCommitCallbackUtil; import com.liferay.portal.repository.liferayrepository.LiferayProcessorLocalRepositoryWrapper; import com.liferay.portal.repository.liferayrepository.LiferayProcessorRepositoryWrapper; import com.liferay.portal.repository.util.RepositoryWrapperAware; import java.util.concurrent.Callable; /** * @author Adolfo PĂ©rez */ public class LiferayProcessorCapability implements ProcessorCapability, RepositoryEventAware, RepositoryWrapperAware { public LiferayProcessorCapability() { this(ResourceGenerationStrategy.REUSE); } public LiferayProcessorCapability( ResourceGenerationStrategy resourceGenerationStrategy) { _resourceGenerationStrategy = resourceGenerationStrategy; } @Override public void cleanUp(FileEntry fileEntry) { DLProcessorRegistryUtil.cleanUp(fileEntry); } @Override public void cleanUp(FileVersion fileVersion) { DLProcessorRegistryUtil.cleanUp(fileVersion); } @Override public void copy(FileEntry fileEntry, FileVersion fileVersion) { if (_resourceGenerationStrategy == ResourceGenerationStrategy.REUSE) { registerDLProcessorCallback(fileEntry, fileVersion); } else { generateNew(fileEntry); } } @Override public void generateNew(FileEntry fileEntry) { registerDLProcessorCallback(fileEntry, null); } @Override public void registerRepositoryEventListeners( RepositoryEventRegistry repositoryEventRegistry) { repositoryEventRegistry.registerRepositoryEventListener( RepositoryEventType.Delete.class, FileEntry.class, new RepositoryEventListener <RepositoryEventType.Delete, FileEntry>() { @Override public void execute(FileEntry fileEntry) { cleanUp(fileEntry); } }); } @Override public LocalRepository wrapLocalRepository( LocalRepository localRepository) { return new LiferayProcessorLocalRepositoryWrapper( localRepository, this); } @Override public Repository wrapRepository(Repository repository) { return new LiferayProcessorRepositoryWrapper(repository, this); } public enum ResourceGenerationStrategy { ALWAYS_GENERATE, REUSE } protected void registerDLProcessorCallback( final FileEntry fileEntry, final FileVersion fileVersion) { TransactionCommitCallbackUtil.registerCallback( new Callable<Void>() { @Override public Void call() throws Exception { DLProcessorRegistryUtil.trigger( fileEntry, fileVersion, true); return null; } }); } private final ResourceGenerationStrategy _resourceGenerationStrategy; }