diff --git a/config/alfresco/import-export-context.xml b/config/alfresco/import-export-context.xml index 8b904e2014..66e4987505 100644 --- a/config/alfresco/import-export-context.xml +++ b/config/alfresco/import-export-context.xml @@ -166,7 +166,7 @@ ${version.store.version2Store} - versions + versions2 diff --git a/config/alfresco/node-services-context.xml b/config/alfresco/node-services-context.xml index 678d6e0d79..954bc8794c 100644 --- a/config/alfresco/node-services-context.xml +++ b/config/alfresco/node-services-context.xml @@ -126,6 +126,9 @@ + + + true diff --git a/source/java/org/alfresco/repo/node/integrity/IntegrityChecker.java b/source/java/org/alfresco/repo/node/integrity/IntegrityChecker.java index affd8e1bef..998d749805 100644 --- a/source/java/org/alfresco/repo/node/integrity/IntegrityChecker.java +++ b/source/java/org/alfresco/repo/node/integrity/IntegrityChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2008 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 @@ -34,6 +34,7 @@ import java.util.Map; import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; +import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.service.cmr.dictionary.AspectDefinition; @@ -103,6 +104,7 @@ public class IntegrityChecker private PolicyComponent policyComponent; private DictionaryService dictionaryService; private NodeService nodeService; + private TenantService tenantService; private boolean enabled; private boolean failOnViolation; private int maxErrorsPerTransaction; @@ -172,6 +174,11 @@ public class IntegrityChecker { this.nodeService = nodeService; } + + public void setTenantService(TenantService tenantService) + { + this.tenantService = tenantService; + } /** * @param enabled set to false to disable integrity checking completely @@ -330,7 +337,7 @@ public class IntegrityChecker public void onCreateNode(ChildAssociationRef childAssocRef) { NodeRef childRef = childAssocRef.getChildRef(); - if (! storesToIgnore.contains(childRef.getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(childRef.getStoreRef()).toString())) { IntegrityEvent event = null; // check properties on child node @@ -380,7 +387,7 @@ public class IntegrityChecker Map before, Map after) { - if (! storesToIgnore.contains(nodeRef.getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(nodeRef.getStoreRef()).toString())) { IntegrityEvent event = null; // check properties on node @@ -402,7 +409,7 @@ public class IntegrityChecker */ public void onAddAspect(NodeRef nodeRef, QName aspectTypeQName) { - if (! storesToIgnore.contains(nodeRef.getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(nodeRef.getStoreRef()).toString())) { IntegrityEvent event = null; // check properties on node @@ -438,7 +445,7 @@ public class IntegrityChecker */ public void onRemoveAspect(NodeRef nodeRef, QName aspectTypeQName) { - if (! storesToIgnore.contains(nodeRef.getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(nodeRef.getStoreRef()).toString())) { IntegrityEvent event = null; // check mandatory aspects @@ -463,7 +470,7 @@ public class IntegrityChecker return; } - if (! storesToIgnore.contains(childAssocRef.getChildRef().getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(childAssocRef.getChildRef().getStoreRef()).toString())) { IntegrityEvent event = null; // check source type @@ -513,7 +520,7 @@ public class IntegrityChecker */ public void onDeleteChildAssociation(ChildAssociationRef childAssocRef) { - if (! storesToIgnore.contains(childAssocRef.getChildRef().getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(childAssocRef.getChildRef().getStoreRef()).toString())) { IntegrityEvent event = null; // check source multiplicity @@ -543,7 +550,7 @@ public class IntegrityChecker */ public void onCreateAssociation(AssociationRef nodeAssocRef) { - if (! storesToIgnore.contains(nodeAssocRef.getSourceRef().getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(nodeAssocRef.getSourceRef().getStoreRef()).toString())) { IntegrityEvent event = null; // check source type @@ -585,7 +592,7 @@ public class IntegrityChecker */ public void onDeleteAssociation(AssociationRef nodeAssocRef) { - if (! storesToIgnore.contains(nodeAssocRef.getSourceRef().getStoreRef().toString())) + if (! storesToIgnore.contains(tenantService.getBaseName(nodeAssocRef.getSourceRef().getStoreRef()).toString())) { IntegrityEvent event = null; // check source multiplicity diff --git a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java index 6e31eef93c..d79e25a07c 100755 --- a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java +++ b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java @@ -200,7 +200,8 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo public static final String PROTOCOL_STORE_ARCHIVE = "archive"; public static final String STORE_BASE_ID_USER = "alfrescoUserStore"; public static final String STORE_BASE_ID_SYSTEM = "system"; - public static final String STORE_BASE_ID_VERSION = "lightWeightVersionStore"; + public static final String STORE_BASE_ID_VERSION1 = "lightWeightVersionStore"; // deprecated + public static final String STORE_BASE_ID_VERSION2 = "version2Store"; public static final String STORE_BASE_ID_SPACES = "SpacesStore"; @@ -338,8 +339,12 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo ImporterBootstrap systemImporterBootstrap = (ImporterBootstrap)ctx.getBean("systemBootstrap"); bootstrapSystemTenantStore(systemImporterBootstrap, tenantDomain); + // deprecated ImporterBootstrap versionImporterBootstrap = (ImporterBootstrap)ctx.getBean("versionBootstrap"); bootstrapVersionTenantStore(versionImporterBootstrap, tenantDomain); + + ImporterBootstrap version2ImporterBootstrap = (ImporterBootstrap)ctx.getBean("version2Bootstrap"); + bootstrapVersionTenantStore(version2ImporterBootstrap, tenantDomain); ImporterBootstrap spacesArchiveImporterBootstrap = (ImporterBootstrap)ctx.getBean("spacesArchiveBootstrap"); bootstrapSpacesArchiveTenantStore(spacesArchiveImporterBootstrap, tenantDomain); @@ -648,7 +653,8 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo // delete tenant-specific stores nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_WORKSPACE, STORE_BASE_ID_SPACES))); nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_ARCHIVE, STORE_BASE_ID_SPACES))); - nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_WORKSPACE, STORE_BASE_ID_VERSION))); + nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_WORKSPACE, STORE_BASE_ID_VERSION1))); + nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_WORKSPACE, STORE_BASE_ID_VERSION2))); nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_SYSTEM, STORE_BASE_ID_SYSTEM))); nodeService.deleteStore(tenantService.getName(tenantAdminUser, new StoreRef(PROTOCOL_STORE_USER, STORE_BASE_ID_USER))); @@ -701,7 +707,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void importBootstrapSystemTenantStore(String tenantDomain, File directorySource) - { + { // Import Bootstrap (restore) Tenant-Specific Version Store Properties bootstrapView = new Properties(); bootstrapView.put("path", "/"); @@ -720,7 +726,8 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo private void bootstrapSystemTenantStore(ImporterBootstrap systemImporterBootstrap, String tenantDomain) { // Bootstrap Tenant-Specific System Store - StoreRef bootstrapStoreRef = new StoreRef(PROTOCOL_STORE_SYSTEM, tenantService.getName(STORE_BASE_ID_SYSTEM, tenantDomain)); + StoreRef bootstrapStoreRef = systemImporterBootstrap.getStoreRef(); + bootstrapStoreRef = new StoreRef(bootstrapStoreRef.getProtocol(), tenantService.getName(bootstrapStoreRef.getIdentifier(), tenantDomain)); systemImporterBootstrap.setStoreUrl(bootstrapStoreRef.toString()); // override default property (workspace://SpacesStore) @@ -734,7 +741,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void importBootstrapUserTenantStore(String tenantDomain, File directorySource) - { + { // Import Bootstrap (restore) Tenant-Specific User Store Properties bootstrapView = new Properties(); bootstrapView.put("path", "/"); @@ -751,9 +758,10 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void bootstrapUserTenantStore(ImporterBootstrap userImporterBootstrap, String tenantDomain, char[] tenantAdminRawPassword) - { + { // Bootstrap Tenant-Specific User Store - StoreRef bootstrapStoreRef = new StoreRef(PROTOCOL_STORE_USER, tenantService.getName(STORE_BASE_ID_USER, tenantDomain)); + StoreRef bootstrapStoreRef = userImporterBootstrap.getStoreRef(); + bootstrapStoreRef = new StoreRef(bootstrapStoreRef.getProtocol(), tenantService.getName(bootstrapStoreRef.getIdentifier(), tenantDomain)); userImporterBootstrap.setStoreUrl(bootstrapStoreRef.toString()); // override admin username property @@ -772,11 +780,11 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void importBootstrapVersionTenantStore(String tenantDomain, File directorySource) - { + { // Import Bootstrap (restore) Tenant-Specific Version Store Properties bootstrapView = new Properties(); bootstrapView.put("path", "/"); - bootstrapView.put("location", directorySource.getPath()+"/"+tenantDomain+"_versions.acp"); + bootstrapView.put("location", directorySource.getPath()+"/"+tenantDomain+"_versions2.acp"); List bootstrapViews = new ArrayList(1); bootstrapViews.add(bootstrapView); @@ -791,7 +799,8 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo private void bootstrapVersionTenantStore(ImporterBootstrap versionImporterBootstrap, String tenantDomain) { // Bootstrap Tenant-Specific Version Store - StoreRef bootstrapStoreRef = new StoreRef(PROTOCOL_STORE_WORKSPACE, tenantService.getName(STORE_BASE_ID_VERSION, tenantDomain)); + StoreRef bootstrapStoreRef = versionImporterBootstrap.getStoreRef(); + bootstrapStoreRef = new StoreRef(bootstrapStoreRef.getProtocol(), tenantService.getName(bootstrapStoreRef.getIdentifier(), tenantDomain)); versionImporterBootstrap.setStoreUrl(bootstrapStoreRef.toString()); versionImporterBootstrap.bootstrap(); @@ -800,7 +809,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void importBootstrapSpacesArchiveTenantStore(String tenantDomain, File directorySource) - { + { // Import Bootstrap (restore) Tenant-Specific Spaces Archive Store Properties bootstrapView = new Properties(); bootstrapView.put("path", "/"); @@ -818,13 +827,14 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo private void bootstrapSpacesArchiveTenantStore(ImporterBootstrap spacesArchiveImporterBootstrap, String tenantDomain) { - // Bootstrap Tenant-Specific Spaces Archive Store - StoreRef bootstrapStoreRef = new StoreRef(PROTOCOL_STORE_ARCHIVE, tenantService.getName(STORE_BASE_ID_SPACES, tenantDomain)); + // Bootstrap Tenant-Specific Spaces Archive Store + StoreRef bootstrapStoreRef = spacesArchiveImporterBootstrap.getStoreRef(); + bootstrapStoreRef = new StoreRef(bootstrapStoreRef.getProtocol(), tenantService.getName(bootstrapStoreRef.getIdentifier(), tenantDomain)); spacesArchiveImporterBootstrap.setStoreUrl(bootstrapStoreRef.toString()); // override default property (archive://SpacesStore) List mustNotExistStoreUrls = new ArrayList(); - mustNotExistStoreUrls.add(new StoreRef(PROTOCOL_STORE_ARCHIVE, tenantService.getName(STORE_BASE_ID_SPACES, tenantDomain)).toString()); + mustNotExistStoreUrls.add(bootstrapStoreRef.toString()); spacesArchiveImporterBootstrap.setMustNotExistStoreUrls(mustNotExistStoreUrls); spacesArchiveImporterBootstrap.bootstrap(); @@ -833,7 +843,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void importBootstrapSpacesModelsTenantStore(String tenantDomain, File directorySource) - { + { // Import Bootstrap (restore) Tenant-Specific Spaces Store Properties bootstrapView = new Properties(); bootstrapView.put("path", "/"); @@ -850,7 +860,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } private void importBootstrapSpacesTenantStore(String tenantDomain, File directorySource) - { + { // Import Bootstrap (restore) Tenant-Specific Spaces Store Properties bootstrapView = new Properties(); bootstrapView.put("path", "/"); @@ -871,8 +881,9 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo private void bootstrapSpacesTenantStore(ImporterBootstrap spacesImporterBootstrap, String tenantDomain) { - // Bootstrap Tenant-Specific Spaces Store - StoreRef bootstrapStoreRef = new StoreRef(PROTOCOL_STORE_WORKSPACE, tenantService.getName(STORE_BASE_ID_SPACES, tenantDomain)); + // Bootstrap Tenant-Specific Spaces Store + StoreRef bootstrapStoreRef = spacesImporterBootstrap.getStoreRef(); + bootstrapStoreRef = new StoreRef(bootstrapStoreRef.getProtocol(), tenantService.getName(bootstrapStoreRef.getIdentifier(), tenantDomain)); spacesImporterBootstrap.setStoreUrl(bootstrapStoreRef.toString()); // override admin username property @@ -1156,6 +1167,11 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo return tenantService.getUserDomain(username); } + public String getBaseNameUser(String username) + { + return tenantService.getBaseNameUser(username); + } + public String getDomainUser(String baseUsername, String tenantDomain) { return tenantService.getDomainUser(baseUsername, tenantDomain); diff --git a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java index e1e4bdd9be..26a80eac8e 100644 --- a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java +++ b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java @@ -105,6 +105,7 @@ public class MultiTDemoTest extends TestCase public static final String TEST_USER2 = "bob"; public static final String TEST_USER3 = "eve"; + private static final int DEFAULT_DM_STORE_COUNT = 6; public static StoreRef SPACES_STORE = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore"); @@ -348,7 +349,7 @@ public class MultiTDemoTest extends TestCase } } - public void testCreateUserContent() + public void testCreateVersionableUserContent() { logger.info("Create demo content"); @@ -370,11 +371,14 @@ public class MultiTDemoTest extends TestCase public Object doWork() throws Exception { NodeRef homeSpaceRef = getHomeSpaceFolderNode(tenantUserName); - addTextContent(homeSpaceRef, tenantUserName+" quick brown fox.txt", "The quick brown fox jumps over the lazy dog (tenant " + tenantDomain + ")"); + + NodeRef contentRef = addTextContent(homeSpaceRef, tenantUserName+" quick brown fox.txt", "The quick brown fox jumps over the lazy dog (tenant " + tenantDomain + ")"); + nodeService.addAspect(contentRef, ContentModel.ASPECT_VERSIONABLE, null); if (tenantDomain.equals(TEST_TENANT_DOMAIN2)) { - addTextContent(homeSpaceRef, tenantUserName+" quick brown fox ANO.txt", "The quick brown fox jumps over the lazy dog ANO (tenant " + tenantDomain + ")"); + contentRef = addTextContent(homeSpaceRef, tenantUserName+" quick brown fox ANO.txt", "The quick brown fox jumps over the lazy dog ANO (tenant " + tenantDomain + ")"); + nodeService.addAspect(contentRef, ContentModel.ASPECT_VERSIONABLE, null); } return null; @@ -389,8 +393,27 @@ public class MultiTDemoTest extends TestCase { logger.info("Get tenant stores"); - // super tenant - assertTrue("Super tenant: ", (nodeService.getStores().size() >= 5)); + // system + AuthenticationUtil.runAs(new RunAsWork() + { + public Object doWork() throws Exception + { + assertTrue("System: ", (nodeService.getStores().size() >= (DEFAULT_DM_STORE_COUNT * (tenants.size()+1)))); + return null; + } + }, AuthenticationUtil.getSystemUserName()); + + // super admin + AuthenticationUtil.runAs(new RunAsWork() + { + public Object doWork() throws Exception + { + assertTrue("Super admin: ", (nodeService.getStores().size() >= DEFAULT_DM_STORE_COUNT)); + return null; + } + }, TenantService.ADMIN_BASENAME); + + assertTrue("Super tenant: ", (nodeService.getStores().size() >= DEFAULT_DM_STORE_COUNT)); for (final String tenantDomain : tenants) { @@ -400,7 +423,7 @@ public class MultiTDemoTest extends TestCase { public Object doWork() throws Exception { - assertEquals("Tenant: "+tenantDomain, 5, nodeService.getStores().size()); + assertEquals("Tenant: "+tenantDomain, DEFAULT_DM_STORE_COUNT, nodeService.getStores().size()); return null; } @@ -602,7 +625,7 @@ public class MultiTDemoTest extends TestCase return (NodeRef)this.nodeService.getProperty(personService.getPerson(userName), ContentModel.PROP_HOMEFOLDER); } - private void addTextContent(NodeRef spaceRef, String name, String textData) + private NodeRef addTextContent(NodeRef spaceRef, String name, String textData) { Map contentProps = new HashMap(); contentProps.put(ContentModel.PROP_NAME, name); @@ -627,6 +650,8 @@ public class MultiTDemoTest extends TestCase writer.setEncoding("UTF-8"); writer.putContent(textData); + + return content; } diff --git a/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java b/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java index fc2a9adc50..e17035925e 100644 --- a/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java +++ b/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java @@ -46,7 +46,7 @@ import org.springframework.aop.support.DelegatingIntroductionInterceptor; * * @since 3.0 * @author Derek Hulley - * @author Jan Vonka + * @author janv */ public class MultiTNodeServiceInterceptor extends DelegatingIntroductionInterceptor//implements NodeService { @@ -253,6 +253,9 @@ public class MultiTNodeServiceInterceptor extends DelegatingIntroductionIntercep { return null; } + + // TODO use getBaseName ... + // Deal with collections Object value = rawValue; if (rawValue instanceof Collection) @@ -267,7 +270,7 @@ public class MultiTNodeServiceInterceptor extends DelegatingIntroductionIntercep else if (rawValue instanceof NodeRef) { NodeRef ref = (NodeRef) rawValue; - value = tenantService.getName(ref); + value = tenantService.getBaseName(ref); } else if (rawValue instanceof ChildAssociationRef) { @@ -279,6 +282,24 @@ public class MultiTNodeServiceInterceptor extends DelegatingIntroductionIntercep AssociationRef ref = (AssociationRef) rawValue; value = tenantService.getName(ref); } + /* TODO + else if (rawValue instanceof Path) + { + Path ref = (Path)rawValue; + Path outboundPath = new Path(); + Iterator itr = ref.iterator(); + while (itr.hasNext()) + { + Path.Element pathElement = itr.next(); + if (pathElement instanceof Path.ChildAssocElement) + { + pathElement = new Path.ChildAssocElement(tenantService.getBaseName(((Path.ChildAssocElement)pathElement).getRef())); + } + outboundPath.append(pathElement); + } + value = outboundPath; + } + */ // Done return value; } diff --git a/source/java/org/alfresco/repo/tenant/MultiTServiceImpl.java b/source/java/org/alfresco/repo/tenant/MultiTServiceImpl.java index c7989ae43b..67c117c75d 100755 --- a/source/java/org/alfresco/repo/tenant/MultiTServiceImpl.java +++ b/source/java/org/alfresco/repo/tenant/MultiTServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2008 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 @@ -61,6 +61,9 @@ public class MultiTServiceImpl implements TenantService this.tenantsCache = tenantsCache; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(org.alfresco.service.cmr.repository.NodeRef) + */ public NodeRef getName(NodeRef nodeRef) { if (nodeRef == null) { return null; } @@ -68,6 +71,9 @@ public class MultiTServiceImpl implements TenantService return new NodeRef(nodeRef.getStoreRef().getProtocol(), getName(nodeRef.getStoreRef().getIdentifier()), nodeRef.getId()); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef) + */ public NodeRef getName(NodeRef inNodeRef, NodeRef nodeRef) { if (inNodeRef == null || nodeRef == null) { return null; } @@ -82,6 +88,9 @@ public class MultiTServiceImpl implements TenantService return nodeRef; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(org.alfresco.service.cmr.repository.StoreRef) + */ public StoreRef getName(StoreRef storeRef) { if (storeRef == null) { return null; } @@ -89,6 +98,9 @@ public class MultiTServiceImpl implements TenantService return new StoreRef(storeRef.getProtocol(), getName(storeRef.getIdentifier())); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(org.alfresco.service.cmr.repository.ChildAssociationRef) + */ public ChildAssociationRef getName(ChildAssociationRef childAssocRef) { if (childAssocRef == null) { return null; } @@ -102,6 +114,9 @@ public class MultiTServiceImpl implements TenantService childAssocRef.getNthSibling()); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(org.alfresco.service.cmr.repository.AssociationRef) + */ public AssociationRef getName(AssociationRef assocRef) { if (assocRef == null) { return null; } @@ -109,10 +124,12 @@ public class MultiTServiceImpl implements TenantService return new AssociationRef( getName(assocRef.getSourceRef()), assocRef.getTypeQName(), - getName(assocRef.getTargetRef()) - ); + getName(assocRef.getTargetRef())); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(java.lang.String, org.alfresco.service.cmr.repository.StoreRef) + */ public StoreRef getName(String username, StoreRef storeRef) { if (storeRef == null) { return null; } @@ -157,6 +174,9 @@ public class MultiTServiceImpl implements TenantService return name; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ public QName getName(NodeRef inNodeRef, QName name) { // Check that all the passed values are not null @@ -198,6 +218,9 @@ public class MultiTServiceImpl implements TenantService return name; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getName(java.lang.String) + */ public String getName(String name) { // Check that all the passed values are not null @@ -227,12 +250,18 @@ public class MultiTServiceImpl implements TenantService return name; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(org.alfresco.service.namespace.QName, boolean) + */ public QName getBaseName(QName name, boolean forceForNonTenant) { String baseNamespaceURI = getBaseName(name.getNamespaceURI(), forceForNonTenant); return QName.createQName(baseNamespaceURI, name.getLocalName()); } - + + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(org.alfresco.service.cmr.repository.NodeRef) + */ public NodeRef getBaseName(NodeRef nodeRef) { if (nodeRef == null) { return null; } @@ -240,6 +269,9 @@ public class MultiTServiceImpl implements TenantService return new NodeRef(nodeRef.getStoreRef().getProtocol(), getBaseName(nodeRef.getStoreRef().getIdentifier()), nodeRef.getId()); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(org.alfresco.service.cmr.repository.StoreRef) + */ public StoreRef getBaseName(StoreRef storeRef) { if (storeRef == null) { return null; } @@ -247,11 +279,15 @@ public class MultiTServiceImpl implements TenantService return new StoreRef(storeRef.getProtocol(), getBaseName(storeRef.getIdentifier())); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(org.alfresco.service.cmr.repository.ChildAssociationRef) + */ public ChildAssociationRef getBaseName(ChildAssociationRef childAssocRef) { if (childAssocRef == null) { return null; } - return new ChildAssociationRef(childAssocRef.getTypeQName(), + return new ChildAssociationRef( + childAssocRef.getTypeQName(), getBaseName(childAssocRef.getParentRef()), childAssocRef.getQName(), getBaseName(childAssocRef.getChildRef()), @@ -259,12 +295,31 @@ public class MultiTServiceImpl implements TenantService childAssocRef.getNthSibling()); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(org.alfresco.service.cmr.repository.AssociationRef) + */ + public AssociationRef getBaseName(AssociationRef assocRef) + { + if (assocRef == null) { return null; } + + return new AssociationRef( + getBaseName(assocRef.getSourceRef()), + assocRef.getTypeQName(), + getBaseName(assocRef.getTargetRef())); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(java.lang.String) + */ public String getBaseName(String name) { // get base name, but don't force for non-tenant user (e.g. super admin) return getBaseName(name, false); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseName(java.lang.String, boolean) + */ public String getBaseName(String name, boolean forceForNonTenant) { // Check that all the passed values are not null @@ -293,6 +348,9 @@ public class MultiTServiceImpl implements TenantService return name; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getBaseNameUser(java.lang.String) + */ public String getBaseNameUser(String name) { // can be null (e.g. for System user / during app ctx init) @@ -307,6 +365,9 @@ public class MultiTServiceImpl implements TenantService return name; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#checkDomainUser(java.lang.String) + */ public void checkDomainUser(String username) { // Check that all the passed values are not null @@ -333,6 +394,9 @@ public class MultiTServiceImpl implements TenantService } } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#checkDomain(java.lang.String) + */ public void checkDomain(String name) { // Check that all the passed values are not null @@ -356,6 +420,9 @@ public class MultiTServiceImpl implements TenantService } } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getRootNode(org.alfresco.service.cmr.repository.NodeService, org.alfresco.service.cmr.search.SearchService, org.alfresco.service.namespace.NamespaceService, java.lang.String, org.alfresco.service.cmr.repository.NodeRef) + */ public NodeRef getRootNode(NodeService nodeService, SearchService searchService, NamespaceService namespaceService, String rootPath, NodeRef rootNodeRef) { // Check that all the passed values are not null @@ -428,11 +495,17 @@ public class MultiTServiceImpl implements TenantService } } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#isTenantUser() + */ public boolean isTenantUser() { return isTenantUser(AuthenticationUtil.getCurrentUserName()); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#isTenantUser(java.lang.String) + */ public boolean isTenantUser(String username) { // can be null (e.g. for System user / during app ctx init) @@ -446,6 +519,9 @@ public class MultiTServiceImpl implements TenantService return false; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#isTenantName(java.lang.String) + */ public boolean isTenantName(String name) { // Check that all the passed values are not null @@ -464,6 +540,9 @@ public class MultiTServiceImpl implements TenantService return false; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getUserDomain(java.lang.String) + */ public String getUserDomain(String username) { // can be null (e.g. for System user / during app ctx init) @@ -483,12 +562,18 @@ public class MultiTServiceImpl implements TenantService return DEFAULT_DOMAIN; // default domain - non-tenant user } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantUserService#getCurrentUserDomain() + */ public String getCurrentUserDomain() { String user = AuthenticationUtil.getCurrentUserName(); return getUserDomain(user); } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantUserService#getDomain(java.lang.String) + */ public String getDomain(String name) { // Check that all the passed values are not null @@ -513,6 +598,9 @@ public class MultiTServiceImpl implements TenantService return nameDomain; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantUserService#getDomainUser(java.lang.String, java.lang.String) + */ public String getDomainUser(String baseUsername, String tenantDomain) { // Check that all the passed values are not null @@ -550,6 +638,9 @@ public class MultiTServiceImpl implements TenantService } } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantService#getTenant(java.lang.String) + */ public Tenant getTenant(String tenantDomain) { Tenant tenant = tenantsCache.get(tenantDomain); @@ -573,6 +664,9 @@ public class MultiTServiceImpl implements TenantService return tenant; } + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantUserService#isEnabled() + */ public boolean isEnabled() { return true; diff --git a/source/java/org/alfresco/repo/tenant/SingleTAdminServiceImpl.java b/source/java/org/alfresco/repo/tenant/SingleTAdminServiceImpl.java index b297d5b938..6b4fe6ad7a 100644 --- a/source/java/org/alfresco/repo/tenant/SingleTAdminServiceImpl.java +++ b/source/java/org/alfresco/repo/tenant/SingleTAdminServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2008 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 @@ -117,6 +117,14 @@ public class SingleTAdminServiceImpl implements TenantAdminService return TenantService.DEFAULT_DOMAIN; } + /** + * @return Returns the given username always + */ + public String getBaseNameUser(String username) + { + return username; + } + /** * @return Returns the given baseUserName always */ diff --git a/source/java/org/alfresco/repo/tenant/SingleTServiceImpl.java b/source/java/org/alfresco/repo/tenant/SingleTServiceImpl.java index 5fa960c612..73a6c5ac95 100644 --- a/source/java/org/alfresco/repo/tenant/SingleTServiceImpl.java +++ b/source/java/org/alfresco/repo/tenant/SingleTServiceImpl.java @@ -99,6 +99,11 @@ public class SingleTServiceImpl implements TenantService return childAssocRef; } + public AssociationRef getBaseName(AssociationRef assocRef) + { + return assocRef; + } + public String getBaseName(String name) { return name; diff --git a/source/java/org/alfresco/repo/tenant/TenantService.java b/source/java/org/alfresco/repo/tenant/TenantService.java index 4edcac1d1c..aa89e23fdc 100644 --- a/source/java/org/alfresco/repo/tenant/TenantService.java +++ b/source/java/org/alfresco/repo/tenant/TenantService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2008 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 @@ -108,6 +108,11 @@ public interface TenantService extends TenantUserService */ public ChildAssociationRef getBaseName(ChildAssociationRef childAssocRef); + /** + * @return the reference without the tenant-specific ID attached + */ + public AssociationRef getBaseName(AssociationRef assocRef); + /** * @return the reference without the tenant-specific ID attached */ @@ -118,8 +123,6 @@ public interface TenantService extends TenantUserService */ public String getBaseName(String name, boolean forceIfNonTenant); - public String getBaseNameUser(String name); - public void checkDomainUser(String username); public void checkDomain(String name); diff --git a/source/java/org/alfresco/repo/tenant/TenantUserService.java b/source/java/org/alfresco/repo/tenant/TenantUserService.java index 621497affc..07f56f4ad6 100644 --- a/source/java/org/alfresco/repo/tenant/TenantUserService.java +++ b/source/java/org/alfresco/repo/tenant/TenantUserService.java @@ -1,3 +1,27 @@ +/* + * Copyright (C) 2005-2008 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.tenant; /** @@ -9,13 +33,33 @@ package org.alfresco.repo.tenant; */ public interface TenantUserService { - public String getCurrentUserDomain(); - - public String getDomain(String name); - - public String getUserDomain(String username); - + /** + * @return the username with the tenant-specific ID attached + */ public String getDomainUser(String baseUsername, String tenantDomain); + /** + * @return the username without the tenant-specific ID attached + */ + public String getBaseNameUser(String name); + + /** + * @return the tenant-specific ID for current user + */ + public String getCurrentUserDomain(); + + /** + * @return the tenant-specific ID for specified username + */ + public String getUserDomain(String username); + + /** + * @return the tenant-specific ID for specified identifier + */ + public String getDomain(String name); + + /** + * @return true if the system is configured to be MT-enabled + */ public boolean isEnabled(); }