/** * Registers a new node type for the given repository and type. * @throws RepositoryException when node type can't be registered. Most often this happens when the node type of given name already exists or when the definition is invalid */ public static void registerNodeType(TypeDefinition type) throws RepositoryException { String nodeTypes = null; nodeTypes = type.getNodeTypes(); // default value if (StringUtils.isEmpty(nodeTypes)) { nodeTypes = DataModule.NODE_TYPE_DEF_TEMPLATE.format(new String[] { type.getName() }); } ContentRepository.getRepositoryProvider(DataModule.WORKSPACE).registerNodeTypes(new ByteArrayInputStream(nodeTypes.getBytes())); }
@Override protected void doExecute(InstallContext installContext) throws RepositoryException, TaskExecutionException { TypeDefinition type = new TypeDefinition(); type.setName(typeName); String nodeTypes = null; try { nodeTypes = type.getNodeTypes(); // default value if (StringUtils.isEmpty(nodeTypes)) { nodeTypes = DataModule.NODE_TYPE_DEF_TEMPLATE.format(new String[] { type.getName() }); } ContentRepository.getRepositoryProvider(DataModule.WORKSPACE).registerNodeTypes(new ByteArrayInputStream(nodeTypes.getBytes())); } catch (RepositoryException e) { log.error("Failed to register node type: {}", nodeTypes); throw new RuntimeException(e); } } }
@Test @Ignore public void testUnknownRepositoryShouldAlsoYieldMeaningfulExceptionMessageForRepositoryProviders() { try { ContentRepository.getRepositoryProvider("dummy"); fail("should have failed, since we haven't set any repository at all"); } catch (Throwable t) { assertEquals("Failed to retrieve repository provider 'dummy' (mapped as 'dummy'). Your Magnolia instance might not have been initialized properly.", t.getMessage()); } } }
@Test public void testAddMixin() throws IOException, RepositoryException { final Content content = getTestContent(); final String repoName = content.getWorkspace().getName(); final String mixDeleted = "mgnl:deleted"; final Provider repoProvider = ContentRepository.getRepositoryProvider(repoName); final String mgnlMixDeleted = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<nodeTypes" + " xmlns:rep=\"internal\"" + " xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\"" + " xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\"" + " xmlns:mgnl=\"http://www.magnolia.info/jcr/mgnl\"" + " xmlns:jcr=\"http://www.jcp.org/jcr/1.0\">" + "<nodeType name=\"" + mixDeleted + "\" isMixin=\"true\" hasOrderableChildNodes=\"true\" primaryItemName=\"\">" + "<supertypes>" + "<supertype>nt:base</supertype>" + "</supertypes>" + "</nodeType>" + "</nodeTypes>"; try { repoProvider.registerNodeTypes(new ByteArrayInputStream(mgnlMixDeleted.getBytes())); } catch (RepositoryException e) { // ignore, either it's already registered and test will pass, or type can't be registered and test should fail } assertTrue(content.getJCRNode().canAddMixin(mixDeleted)); content.addMixin(mixDeleted); }