From a8fe4ffc04b70066b1aa0626f73648b323973fc8 Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Tue, 17 Jun 2008 15:21:08 +0000 Subject: [PATCH] AVM Site Store added to bootstrap for new installs and added patch for existing repos. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9501 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/bootstrap-context.xml | 11 ++ .../messages/patch-service.properties | 2 + .../alfresco/patch/patch-services-context.xml | 12 ++ config/alfresco/version.properties | 2 +- .../repo/admin/patch/impl/SiteStorePatch.java | 70 +++++++++ .../alfresco/repo/site/SiteAVMBootstrap.java | 136 ++++++++++++++++++ 6 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 source/java/org/alfresco/repo/admin/patch/impl/SiteStorePatch.java create mode 100644 source/java/org/alfresco/repo/site/SiteAVMBootstrap.java diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml index 22fa823d6b..2e2caea19c 100644 --- a/config/alfresco/bootstrap-context.xml +++ b/config/alfresco/bootstrap-context.xml @@ -309,6 +309,17 @@ + + + + + + sitestore + + + alfresco + + diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties index cf79df4522..605739fcd6 100644 --- a/config/alfresco/messages/patch-service.properties +++ b/config/alfresco/messages/patch-service.properties @@ -220,3 +220,5 @@ patch.wcmPostPermissionSnapshotPatch.result=Snapshot complete after WCM ACL chan patch.updateDmPermissions.description=Update ACLs on all DM node objects to the new 3.0 permission model patch.updateDmPermissions.result=Updated ACLs. Created {0} defining ACLs. +patch.createSiteStore.description=Create the AVM store for site data structure for 3.0 web-tier clients. +patch.createSiteStore.result=Created the AVM site data store. \ No newline at end of file diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index a8020fd571..b6f4751204 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -1479,4 +1479,16 @@ + + patch.createSiteStore + patch.createSiteStore.description + 0 + 126 + 127 + + + + + + diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties index d4b663dcce..e041a1041b 100644 --- a/config/alfresco/version.properties +++ b/config/alfresco/version.properties @@ -19,4 +19,4 @@ version.build=@build-number@ # Schema number -version.schema=126 +version.schema=127 \ No newline at end of file diff --git a/source/java/org/alfresco/repo/admin/patch/impl/SiteStorePatch.java b/source/java/org/alfresco/repo/admin/patch/impl/SiteStorePatch.java new file mode 100644 index 0000000000..2c09de36a6 --- /dev/null +++ b/source/java/org/alfresco/repo/admin/patch/impl/SiteStorePatch.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ +package org.alfresco.repo.admin.patch.impl; + +import org.alfresco.i18n.I18NUtil; +import org.alfresco.repo.admin.patch.AbstractPatch; +import org.alfresco.repo.site.SiteAVMBootstrap; + +/** + * @author Kevin Roast + */ +public class SiteStorePatch extends AbstractPatch +{ + private static final String MSG_RESULT = "patch.createSiteStore.result"; + + private SiteAVMBootstrap siteBootstrap; + + + /** + * @param siteBootstrap the SiteAVMBootstrap component to set + */ + public void setSiteAVMBootstrap(SiteAVMBootstrap siteBootstrap) + { + this.siteBootstrap = siteBootstrap; + } + + + /** + * @see org.alfresco.repo.admin.patch.AbstractPatch#checkProperties() + */ + @Override + protected void checkProperties() + { + super.checkProperties(); + checkPropertyNotNull(this.siteBootstrap, "siteAVMBootstrap"); + } + + /** + * @see org.alfresco.repo.admin.patch.AbstractPatch#applyInternal() + */ + @Override + protected String applyInternal() throws Exception + { + this.siteBootstrap.bootstrap(); + + return I18NUtil.getMessage(MSG_RESULT); + } +} diff --git a/source/java/org/alfresco/repo/site/SiteAVMBootstrap.java b/source/java/org/alfresco/repo/site/SiteAVMBootstrap.java new file mode 100644 index 0000000000..808323f0a2 --- /dev/null +++ b/source/java/org/alfresco/repo/site/SiteAVMBootstrap.java @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ +package org.alfresco.repo.site; + +import org.alfresco.repo.domain.PropertyValue; +import org.alfresco.service.cmr.avm.AVMService; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.AbstractLifecycleBean; +import org.springframework.context.ApplicationEvent; + +/** + * This component is responsible for bootstraping the special Site AVM store. + * + * @author Kevin Roast + */ +public class SiteAVMBootstrap extends AbstractLifecycleBean +{ + /** AVM store name to create */ + private String storeName; + + /** Root directory name to create */ + private String rootDir; + + /** The AVM Service to use */ + private AVMService avmService; + + /** The Permission Service to use */ + private PermissionService permissionService; + + + /** + * @param rootDir the rootDir to set + */ + public void setRootdir(String rootdir) + { + this.rootDir = rootdir; + } + + /** + * @param storeName the storeName to set + */ + public void setStorename(String storename) + { + this.storeName = storename; + } + + /** + * @param avmService the AVMService avmService to set + */ + public void setAvmService(AVMService avmService) + { + this.avmService = avmService; + } + + /** + * @param permissionService the PermissionService to set + */ + public void setPermissionService(PermissionService permissionService) + { + this.permissionService = permissionService; + } + + /* (non-Javadoc) + * @see org.alfresco.util.AbstractLifecycleBean#onBootstrap(org.springframework.context.ApplicationEvent) + */ + @Override + protected void onBootstrap(ApplicationEvent event) + { + bootstrap(); + } + + /** + * Bootstrap the AVM store + */ + public void bootstrap() + { + // ensure properties have been set + assert(avmService != null); + assert(permissionService != null); + assert(storeName != null && storeName.length() != 0); + assert(rootDir != null && rootDir.length() != 0); + + if (this.avmService.getStore(storeName) == null) + { + // create the site store + this.avmService.createStore(storeName); + + // apply the special marker property - so we know this is a "sitestore" + // this will then be found by the FTP/CIFS virtual filesystem and expose the store + this.avmService.setStoreProperty(storeName, QName.createQName(null, ".sitestore"), + new PropertyValue(DataTypeDefinition.TEXT, "true")); + + // create the root directory + this.avmService.createDirectory(storeName + ":/", rootDir); + + // set default permissions on the new store + StoreRef store = new StoreRef(StoreRef.PROTOCOL_AVM, storeName); + this.permissionService.setPermission(store, PermissionService.ALL_AUTHORITIES, PermissionService.READ, true); + this.permissionService.setPermission(store, PermissionService.GUEST_AUTHORITY, PermissionService.READ, true); + } + } + + /* (non-Javadoc) + * @see org.alfresco.util.AbstractLifecycleBean#onShutdown(org.springframework.context.ApplicationEvent) + */ + @Override + protected void onShutdown(ApplicationEvent event) + { + // nothing to do + } +}