@Override public String getRepositoryNameForWorkspace(String logicalWorkspaceName) { if (hasWorkspace(logicalWorkspaceName)) { return workspaceMapping.getWorkspaceMapping(logicalWorkspaceName).getRepositoryName(); } throw new IllegalStateException("No repository known for logical workspace name " + logicalWorkspaceName); }
/** * Returns the name of the repository for a logical workspace name. * * @returns the repository name or if the logical name doesn't exist it is returned * @deprecated since 4.5 - use {@link info.magnolia.repository.RepositoryManager#getWorkspaceMapping(String)}. */ public static String getMappedRepositoryName(String logicalWorkspaceName) { RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class); WorkspaceMappingDefinition mapping = repositoryManager.getWorkspaceMapping(logicalWorkspaceName); return mapping != null ? mapping.getRepositoryName() : logicalWorkspaceName; }
/** * Returns the repository definition for a repository or the repository for a given workspace. */ // method copied 1-to-1 from former ContentRepository#getRepositoryMapping // TODO: ditch the terminology mix-up between former repositories and workspaces for good private info.magnolia.repository.definition.RepositoryDefinition getRepositoryMapping(String repositoryOrLogicalWorkspace) { if (!repositoryManager.hasRepository(repositoryOrLogicalWorkspace)) { WorkspaceMappingDefinition mapping = repositoryManager.getWorkspaceMapping(repositoryOrLogicalWorkspace); repositoryOrLogicalWorkspace = mapping != null ? mapping.getRepositoryName() : repositoryOrLogicalWorkspace; } return repositoryManager.getRepositoryDefinition(repositoryOrLogicalWorkspace); }
/** * Returns magnolia specific Repository name where this workspace is registered within <Repository/>. * * Note: if more than one repository has a physical workspace by this name this method is ambigious as to which it returns * * @throws RepositoryException if no physical workspace exists by that name * @deprecated since 4.5 - do not use. */ public static String getParentRepositoryName(String physicalWorkspaceName) throws RepositoryException { RepositoryManager repositoryManager = Components.getComponent(RepositoryManager.class); for (WorkspaceMappingDefinition mapping : repositoryManager.getWorkspaceMappings()) { if (physicalWorkspaceName.equalsIgnoreCase(mapping.getPhysicalWorkspaceName())) { return mapping.getRepositoryName(); } } throw new RepositoryException("No mapping found for " + physicalWorkspaceName + " repository in magnolia repositories.xml"); }
/** * Adds workspace mapping, if the physical workspace doesn't exist it is added. */ public void addWorkspaceMapping(WorkspaceMappingDefinition mapping) { if (workspaceMappingDefinitions.containsKey(mapping.getLogicalWorkspaceName())) { return; } addWorkspaceMappingDefinition(mapping); RepositoryDefinition repositoryDefinition = getRepositoryDefinition(mapping.getRepositoryName()); if (!repositoryDefinition.getWorkspaces().contains(mapping.getPhysicalWorkspaceName())) { repositoryDefinition.addWorkspace(mapping.getPhysicalWorkspaceName()); } }
@Override public void createWorkspace(String repository, String logicalWorkspaceName) throws RepositoryException { for (WorkspaceMappingDefinition mapping : workspaceMapping.getWorkspaceMappings()) { Session session = getSystemSession(mapping.getLogicalWorkspaceName()); try { if (mapping.getRepositoryName().equals(repository)) { Workspace workspace = session.getWorkspace(); workspace.createWorkspace(logicalWorkspaceName); workspaceMapping.addWorkspaceMapping(new WorkspaceMappingDefinition(logicalWorkspaceName, repository, logicalWorkspaceName)); return; } } finally { session.logout(); } } throw new RepositoryException("Repository [" + repository + "] doesn't exist."); }
@Override public Session getSession(String logicalWorkspaceName, Credentials credentials) throws RepositoryException { WorkspaceMappingDefinition mapping = this.workspaceMapping.getWorkspaceMapping(logicalWorkspaceName); if (mapping == null) throw new NoSuchWorkspaceException(logicalWorkspaceName); Repository repository = getRepository(mapping.getRepositoryName()); String physicalWorkspaceName = mapping.getPhysicalWorkspaceName(); Session session = repository.login(credentials, physicalWorkspaceName); return wrapSession(session, logicalWorkspaceName); }
@Override public Session getSystemSession(String logicalWorkspaceName) throws RepositoryException { WorkspaceMappingDefinition mapping = this.workspaceMapping.getWorkspaceMapping(logicalWorkspaceName); if (mapping == null) { throw new NoSuchWorkspaceException(logicalWorkspaceName); } Provider provider = getRepositoryProvider(mapping.getRepositoryName()); return wrapSession(provider.getSystemSession(mapping.getPhysicalWorkspaceName()), logicalWorkspaceName); }
WorkspaceMappingDefinition mapping1 = iterator.next(); assertEquals("website", mapping1.getLogicalWorkspaceName()); assertEquals("magnolia", mapping1.getRepositoryName()); assertEquals("website", mapping1.getPhysicalWorkspaceName()); assertEquals("anotherRepository", mapping2.getRepositoryName()); assertEquals("physicalName", mapping2.getPhysicalWorkspaceName()); assertEquals("magnolia", mapping3.getRepositoryName()); assertEquals("config", mapping3.getPhysicalWorkspaceName());