/** * Checks if all workspaces are present according to the repository mapping, creates any missing workspace. */ private void validateWorkspaces() throws RepositoryException { Iterator<String> configuredNames = repositoryMapping.getWorkspaces().iterator(); while (configuredNames.hasNext()) { registerWorkspace(configuredNames.next()); } }
/** * Get default workspace name. * * @return default name if there are no workspaces defined or there is no workspace present with name "default", otherwise return same name as repository name. */ public static String getDefaultWorkspace(String repositoryId) { RepositoryDefinition mapping = getRepositoryMapping(repositoryId); if (mapping == null) { return DEFAULT_WORKSPACE; } Collection<String> workspaces = mapping.getWorkspaces(); if (workspaces.contains(getMappedWorkspaceName(repositoryId))) { return repositoryId; } return DEFAULT_WORKSPACE; }
/** * Verify that workspace exists in clustered repository. * @param workspace The name of the workspace * @return {@code true} if workspace is a shared workspace that is configured in a clustered repository */ public boolean isClusteredWorkspace(String workspace) { String clusterConfigFile = magnoliaConfigurationProperties.getProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_CONFIG); if (StringUtils.isBlank(clusterConfigFile)) { return false; } Collection<RepositoryDefinition> repoDefinitions = workspaceMapping.getRepositoryDefinitions(); for (RepositoryDefinition repoDefinition : repoDefinitions) { if (repoDefinition.getParameters().containsValue(clusterConfigFile) && repoDefinition.getWorkspaces().contains(workspace)) { return true; } } return false; }
@Override public void loadRepository(RepositoryDefinition definition) throws RepositoryNotInitializedException, InstantiationException, IllegalAccessException, ClassNotFoundException { log.info("Loading JCR {}", definition.getName()); // create also mgnlVersion and mgnlSystem for each repository. Set<String> workspaces = new LinkedHashSet<>(definition.getWorkspaces()); workspaces.addAll(Arrays.asList(RepositoryConstants.SYSTEM, RepositoryConstants.VERSION_STORE)); definition.getWorkspaces().clear(); definition.getWorkspaces().addAll(workspaces); Class<? extends Provider> providerClass = Classes.getClassFactory().forName(definition.getProvider()); Provider provider = Components.getComponentProvider().newInstance(providerClass); provider.init(definition); Repository repository = provider.getUnderlyingRepository(); workspaceMapping.setRepository(definition.getName(), repository); workspaceMapping.setRepositoryProvider(definition.getName(), provider); if (definition.isLoadOnStartup()) { for (String workspaceId : workspaces) { registerNameSpacesAndNodeTypes(workspaceId, definition, provider); } } }
/** * 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()); } }
if (!rm.getWorkspaces().contains(workspace)) { log.debug("Loading new workspace: {}", workspace);
if (repositoryDefinition.getWorkspaces().isEmpty()) { repositoryDefinition.addWorkspace("default");
@Override @Before public void setUp() throws Exception { properties = mock(MagnoliaConfigurationProperties.class); WorkspaceMapping workspaceMapping = mock(WorkspaceMapping.class); given(workspaceMapping.getLogicalWorkspaceNames()).willReturn(newArrayList("website")); RepositoryDefinition repositoryDefinition = mock(RepositoryDefinition.class); Map<String, String> definitionMap = newHashMap(); definitionMap.put("website", "website"); given(repositoryDefinition.getParameters()).willReturn(definitionMap); given(repositoryDefinition.getWorkspaces()).willReturn(newArrayList("website")); given(workspaceMapping.getRepositoryDefinitions()).willReturn(newArrayList(repositoryDefinition)); FileSystemHelper fileSystemHelper = new FileSystemHelper(properties); DefaultRepositoryManager repositoryManager = new DefaultRepositoryManager(properties, workspaceMapping, fileSystemHelper); handler = new WebappVersionHandler(repositoryManager); context = mock(InstallContext.class); super.setUp(); Session session = MgnlContext.getJCRSession("website"); session.getRootNode().addNode("x"); }
@Override @Before public void setUp() throws Exception { super.setUp(); Session session = MgnlContext.getJCRSession(RepositoryConstants.WEBSITE); root = session.getRootNode(); properties = mock(MagnoliaConfigurationProperties.class); WorkspaceMapping workspaceMapping = mock(WorkspaceMapping.class); given(workspaceMapping.getLogicalWorkspaceNames()).willReturn(newArrayList("website")); Provider provider = mock(Provider.class); given(workspaceMapping.getRepositoryProvider(anyString())).willReturn(provider); RepositoryDefinition repositoryDefinition = mock(RepositoryDefinition.class); Map<String, String> definitionMap = newHashMap(); definitionMap.put("website", "website"); given(repositoryDefinition.getParameters()).willReturn(definitionMap); given(repositoryDefinition.getWorkspaces()).willReturn(newArrayList("website")); given(workspaceMapping.getRepositoryDefinitions()).willReturn(newArrayList(repositoryDefinition)); DefaultRepositoryManager repositoryManager = new DefaultRepositoryManager(properties, workspaceMapping); repoMan = Components.getComponent(RepositoryManager.class); ComponentsTestUtil.setInstance(RepositoryManager.class, repositoryManager); }
assertEquals("value1", magnolia.getParameters().get("parameter1")); assertEquals("value2", magnolia.getParameters().get("parameter2")); assertEquals(2, magnolia.getWorkspaces().size()); assertTrue(magnolia.getWorkspaces().contains("website")); assertTrue(magnolia.getWorkspaces().contains("config")); assertFalse(anotherRepository.isLoadOnStartup()); assertEquals(0, anotherRepository.getParameters().size()); assertEquals(1, anotherRepository.getWorkspaces().size()); assertTrue(anotherRepository.getWorkspaces().contains("physicalName")); assertFalse(repositoryWithoutWorkspaces.isLoadOnStartup()); assertEquals(0, repositoryWithoutWorkspaces.getParameters().size()); assertEquals(1, repositoryWithoutWorkspaces.getWorkspaces().size()); assertTrue(repositoryWithoutWorkspaces.getWorkspaces().contains("default"));
@Test public void repositoryIsClusteredAndClusterMaster() throws Exception { // GIVEN MagnoliaConfigurationProperties properties = mock(MagnoliaConfigurationProperties.class); given(properties.getProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_CONFIG)).willReturn("website"); given(properties.getBooleanProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_MASTER)).willReturn(true); given(properties.hasProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_MASTER)).willReturn(true); WorkspaceMapping workspaceMapping = new WorkspaceMapping(); RepositoryDefinition repositoryDefinition = mock(RepositoryDefinition.class); Map<String, String> definitionMap = newHashMap(); definitionMap.put("website", "website"); definitionMap.put("null-mgnlVersion", "mgnlVersion"); given(repositoryDefinition.getName()).willReturn("magnolia"); given(repositoryDefinition.getParameters()).willReturn(definitionMap); given(repositoryDefinition.getWorkspaces()).willReturn(newArrayList("website", "mgnlVersion")); workspaceMapping.addRepositoryDefinition(repositoryDefinition); workspaceMapping.addWorkspaceMapping(new WorkspaceMappingDefinition("magnolia-mgnlVersion", "magnolia", "mgnlVersion")); workspaceMapping.addWorkspaceMapping(new WorkspaceMappingDefinition("website", "magnolia", "website")); DefaultRepositoryManager repositoryManager = new DefaultRepositoryManager(properties, workspaceMapping); ComponentsTestUtil.setInstance(RepositoryManager.class, repositoryManager); // WHEN ModuleManagerImpl moduleManager = new TestModuleManagerImpl(moduleVersionHandlers, context, moduleDefinitionReader, moduleRegistry, repositoryManager); moduleManager.applyDeltas(moduleDefinition, newArrayList(delta), context); // THEN assertThat(websiteSession.hasPendingChanges(), is(false)); }