/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This 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 software 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. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.platform.wiki.creationjob.internal.steps; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; import org.xwiki.bridge.event.WikiCopiedEvent; import org.xwiki.bridge.event.WikiProvisionedEvent; import org.xwiki.bridge.event.WikiProvisioningEvent; import org.xwiki.bridge.event.WikiProvisioningFailedEvent; import org.xwiki.component.annotation.Component; import org.xwiki.component.annotation.InstantiationStrategy; import org.xwiki.component.descriptor.ComponentInstantiationStrategy; import org.xwiki.observation.ObservationManager; import org.xwiki.platform.wiki.creationjob.WikiCreationRequest; import org.xwiki.platform.wiki.creationjob.WikiCreationStep; import org.xwiki.platform.wiki.creationjob.WikiCreationException; import org.xwiki.platform.wiki.creationjob.internal.ExtensionInstaller; import org.xwiki.wiki.provisioning.WikiCopier; import org.xwiki.wiki.manager.WikiManagerException; import com.xpn.xwiki.XWikiContext; /** * Step that provision a new empty wiki with a template or an extension. * * @version $Id: cda93fc0124eb637f6d0c5e4d3157606101ba307 $ * @since 7.0M2 */ @Component @InstantiationStrategy(ComponentInstantiationStrategy.PER_LOOKUP) @Named("provision") public class ProvisionWikiStep implements WikiCreationStep { @Inject private WikiCopier wikiCopier; @Inject private ExtensionInstaller extensionInstaller; @Inject private ObservationManager observationManager; @Inject private Provider<XWikiContext> xcontextProvider; @Override public void execute(WikiCreationRequest request) throws WikiCreationException { try { if (request.getWikiSource() == null) { // No source is defined, we let the wiki empty and DW will do the rest return; } switch (request.getWikiSource()) { case EXTENSION: sendWikiProvisioningEvent(request); extensionInstaller.installExtension(request.getWikiId(), request.getExtensionId()); sendWikiProvisionedEvent(request); break; case TEMPLATE: sendWikiProvisioningEvent(request); wikiCopier.copyDocuments(request.getTemplateId(), request.getWikiId(), false); observationManager.notify(new WikiCopiedEvent(request.getTemplateId(), request.getWikiId()), request.getTemplateId(), xcontextProvider.get()); sendWikiProvisionedEvent(request); break; default: // No source is defined, we let the wiki empty and DW will do the rest break; } } catch (WikiManagerException | WikiCreationException e) { observationManager.notify(new WikiProvisioningFailedEvent(request.getWikiId()), request.getWikiId(), xcontextProvider.get()); throw new WikiCreationException(String.format("Failed to provision the wiki [%s].", request.getWikiId()), e); } } private void sendWikiProvisioningEvent(WikiCreationRequest request) { observationManager.notify(new WikiProvisioningEvent(request.getWikiId()), request.getWikiId(), xcontextProvider.get()); } private void sendWikiProvisionedEvent(WikiCreationRequest request) { observationManager.notify(new WikiProvisionedEvent(request.getWikiId()), request.getWikiId(), xcontextProvider.get()); } @Override public int getOrder() { return 3000; } }