From: <fg...@us...> - 2010-05-09 14:16:04
|
Revision: 2368 http://openutils.svn.sourceforge.net/openutils/?rev=2368&view=rev Author: fgiust Date: 2010-05-09 12:32:53 +0000 (Sun, 09 May 2010) Log Message: ----------- MEDIA-108 Don't add a subscription for the media repository when in single instance mode Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/ConditionallySubscribeMediaRepositoriesTask.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/SetupModuleRepositoriesWithoutSubscriberTask.java Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/ConditionallySubscribeMediaRepositoriesTask.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/ConditionallySubscribeMediaRepositoriesTask.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/ConditionallySubscribeMediaRepositoriesTask.java 2010-05-09 12:32:53 UTC (rev 2368) @@ -0,0 +1,112 @@ +/** + * + * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) + * Copyright (C)2008 - 2010, Openmind S.r.l. http://www.openmindonline.it + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package net.sourceforge.openutils.mgnlmedia.media.setup; + +import info.magnolia.cms.beans.config.ContentRepository; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.ItemType; +import info.magnolia.cms.exchange.ActivationManager; +import info.magnolia.cms.exchange.ActivationManagerFactory; +import info.magnolia.cms.exchange.Subscriber; +import info.magnolia.cms.util.ContentUtil; +import info.magnolia.module.InstallContext; +import info.magnolia.module.delta.AbstractTask; +import info.magnolia.module.delta.TaskExecutionException; +import info.magnolia.module.model.ModuleDefinition; +import info.magnolia.module.model.RepositoryDefinition; + +import javax.jcr.RepositoryException; + + +/** + * Adds a subscription for the media repositories only if the single-instance flag is not set. + * @author fgiust + * @version $Id$ + */ +public class ConditionallySubscribeMediaRepositoriesTask extends AbstractTask +{ + + public ConditionallySubscribeMediaRepositoriesTask() + { + super("Register workspaces for activation", "Register workspaces for activation."); + } + + /** + * {@inheritDoc} + */ + public void execute(InstallContext ctx) throws TaskExecutionException + { + + // check for the sigleinstance flag directly in jcr, the module is not started yet + boolean singleinstance = false; + Content moduleConfigNode = ContentUtil.getContent(ContentRepository.CONFIG, "/modules/media/config"); + if (moduleConfigNode != null) + { + singleinstance = moduleConfigNode.getNodeData("singleinstance").getBoolean(); + } + if (singleinstance) + { + return; + } + + final ModuleDefinition def = ctx.getCurrentModuleDefinition(); + + for (RepositoryDefinition repDef : def.getRepositories()) + { + for (final String workspace : repDef.getWorkspaces()) + { + subscribeRepository(workspace); + } + } + + } + + /** + * Register the repository to get used for activation TODO - use an API for this? But same remark as above, the + * component might not be ready yet. + */ + private void subscribeRepository(String repository) throws TaskExecutionException + { + ActivationManager sManager = ActivationManagerFactory.getActivationManager(); + for (Subscriber subscriber : sManager.getSubscribers()) + { + if (!subscriber.isSubscribed("/", repository)) + { + Content subscriptionsNode = ContentUtil.getContent(ContentRepository.CONFIG, sManager.getConfigPath() + + "/" + + subscriber.getName() + + "/subscriptions"); + try + { + Content newSubscription = subscriptionsNode.createContent(repository, ItemType.CONTENTNODE); + newSubscription.createNodeData("toURI").setValue("/"); + newSubscription.createNodeData("repository").setValue(repository); + newSubscription.createNodeData("fromURI").setValue("/"); + // subscriptionsNode.save(); + } + catch (RepositoryException re) + { + throw new TaskExecutionException("wasn't able to subscribe repository [" + repository + "]", re); + } + } + } + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/ConditionallySubscribeMediaRepositoriesTask.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2010-05-09 11:56:24 UTC (rev 2367) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2010-05-09 12:32:53 UTC (rev 2368) @@ -23,6 +23,7 @@ import info.magnolia.cms.core.SystemProperty; import info.magnolia.module.InstallContext; import info.magnolia.module.ModuleRegistry; +import info.magnolia.module.delta.SetupModuleRepositoriesTask; import info.magnolia.module.delta.Task; import it.openutils.mgnltasks.BootstrapMissingNodesTask; import it.openutils.mgnltasks.ChangeExistingPropertyTask; @@ -48,6 +49,31 @@ * {@inheritDoc} */ @Override + protected List<Task> getBasicInstallTasks(InstallContext installContext) + { + List<Task> basicInstallTasks = super.getBasicInstallTasks(installContext); + + for (int j = 0; j < basicInstallTasks.size(); j++) + { + if (basicInstallTasks.get(j) instanceof SetupModuleRepositoriesTask) + { + // replace SetupModuleRepositoriesTask with SetupModuleRepositoriesWithoutSubscriberTask + basicInstallTasks.remove(j); + basicInstallTasks.add(j, new SetupModuleRepositoriesWithoutSubscriberTask()); + break; + } + + } + + basicInstallTasks.add(new ConditionallySubscribeMediaRepositoriesTask()); + + return basicInstallTasks; + } + + /** + * {@inheritDoc} + */ + @Override protected List<Task> getStartupTasks(InstallContext installContext) { List<Task> tasks = new ArrayList<Task>(); Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/SetupModuleRepositoriesWithoutSubscriberTask.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/SetupModuleRepositoriesWithoutSubscriberTask.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/SetupModuleRepositoriesWithoutSubscriberTask.java 2010-05-09 12:32:53 UTC (rev 2368) @@ -0,0 +1,94 @@ +/** + * + * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) + * Copyright (C)2008 - 2010, Openmind S.r.l. http://www.openmindonline.it + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package net.sourceforge.openutils.mgnlmedia.media.setup; + +import info.magnolia.cms.beans.config.ContentRepository; +import info.magnolia.cms.security.Permission; +import info.magnolia.cms.security.Role; +import info.magnolia.cms.security.Security; +import info.magnolia.importexport.Bootstrapper; +import info.magnolia.module.InstallContext; +import info.magnolia.module.delta.AbstractTask; +import info.magnolia.module.delta.TaskExecutionException; +import info.magnolia.module.model.ModuleDefinition; +import info.magnolia.module.model.RepositoryDefinition; + + +/** + * A copy of SetupModuleRepositoriesTask without the activation subscription (not needed in case of single-instance + * configuration. + * @author fgiust + * @version $Id$ + */ +public class SetupModuleRepositoriesWithoutSubscriberTask extends AbstractTask +{ + + public SetupModuleRepositoriesWithoutSubscriberTask() + { + super( + "Setup module repositories", + "Bootstrap empty repositories and grant them to superuser."); + } + + /** + * {@inheritDoc} + */ + public void execute(InstallContext ctx) throws TaskExecutionException + { + try + { + final ModuleDefinition def = ctx.getCurrentModuleDefinition(); + // register repositories + for (RepositoryDefinition repDef : def.getRepositories()) + { + for (final String workspace : repDef.getWorkspaces()) + { + // bootstrap the workspace if empty + if (!ContentRepository.checkIfInitialized(workspace)) + { + final String[] bootstrapDirs = Bootstrapper.getBootstrapDirs(); + Bootstrapper.bootstrapRepository(bootstrapDirs, workspace, new Bootstrapper.BootstrapFilter() + { + + public boolean accept(String filename) + { + return filename.startsWith(workspace + "."); + } + }); + } + + grantRepositoryToSuperuser(workspace); + } + } + } + catch (Throwable e) + { + throw new TaskExecutionException("Could not bootstrap workspace: " + e.getMessage(), e); + } + + } + + private void grantRepositoryToSuperuser(String workspace) + { + final Role superuser = Security.getRoleManager().getRole("superuser"); + superuser.addPermission(workspace, "/*", Permission.ALL); + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/SetupModuleRepositoriesWithoutSubscriberTask.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |