@SuppressWarnings("unchecked")
  @Test
  public void shouldAllowUnregisteringUnusedTypesWithMutualDependencies() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);

    JcrNodeDefinitionTemplate childNode = new JcrNodeDefinitionTemplate(this.context);
    childNode.setDefaultPrimaryTypeName(TEST_TYPE_NAME2);
    ntTemplate.getNodeDefinitionTemplates().add(childNode);

    NodeTypeTemplate ntTemplate2 = new JcrNodeTypeTemplate(this.context);
    ntTemplate2.setName(TEST_TYPE_NAME2);

    JcrNodeDefinitionTemplate childNode2 = new JcrNodeDefinitionTemplate(this.context);
    childNode2.setDefaultPrimaryTypeName(TEST_TYPE_NAME);
    ntTemplate2.getNodeDefinitionTemplates().add(childNode2);

    try {
      repoTypeManager.registerNodeTypes(
          Arrays.asList(new NodeTypeDefinition[] {ntTemplate, ntTemplate2}));
    } catch (Exception ex) {
      fail(ex.getMessage());
    }

    Name typeNameAsName = nameFactory.create(TEST_TYPE_NAME);
    Name type2NameAsName = nameFactory.create(TEST_TYPE_NAME2);
    int nodeTypeCount = nodeTypes().getAllNodeTypes().size();
    repoTypeManager.unregisterNodeType(
        Arrays.asList(new Name[] {typeNameAsName, type2NameAsName}), true);
    assertThat(nodeTypes().getAllNodeTypes().size(), is(nodeTypeCount - 2));
    assertThat(nodeTypes().getNodeType(typeNameAsName), is(nullValue()));
    assertThat(nodeTypes().getNodeType(type2NameAsName), is(nullValue()));
  }
  @Test(expected = NodeTypeExistsException.class)
  public void shouldNotAllowRedefinitionOfNewTypeIfAllowUpdatesIsFalse() throws Exception {
    Name testTypeName = nameFactory.create(TEST_TYPE_NAME);
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base"});

    JcrNodeType testNodeType = repoTypeManager.registerNodeType(ntTemplate);

    assertThat(testNodeType.getName(), is(TEST_TYPE_NAME));
    JcrNodeType nodeTypeFromRepo = nodeTypes().getNodeType(testTypeName);
    assertThat(nodeTypeFromRepo, is(notNullValue()));
    assertThat(nodeTypeFromRepo.getName(), is(TEST_TYPE_NAME));

    testNodeType = repoTypeManager.registerNodeType(ntTemplate);
  }
Example #3
0
 Schemata schemata() {
   if (schemata == null) {
     schemata = repositoryTypeManager.getRepositorySchemata().getSchemataForSession(session);
     assert schemata != null;
   }
   return schemata;
 }
 RepositoryNodeTypeManager with(
     JcrRepository.RunningState repository,
     boolean includeColumnsForInheritedProperties,
     boolean includePseudoColumnsInSelectStar) {
   assert this.systemWorkspaceName.equals(repository.repositoryCache().getSystemWorkspaceName());
   PathFactory pathFactory = repository.context().getValueFactories().getPathFactory();
   Path nodeTypesPath = pathFactory.createAbsolutePath(JcrLexicon.SYSTEM, JcrLexicon.NODE_TYPES);
   assert this.nodeTypesPath.equals(nodeTypesPath);
   RepositoryNodeTypeManager result =
       new RepositoryNodeTypeManager(
           repository, includeColumnsForInheritedProperties, includePseudoColumnsInSelectStar);
   // Now copy the node types from this cache into the new manager's cache ...
   // (If we didn't do this, we'd have to refresh from the system storage)
   result.nodeTypesCache = result.nodeTypesCache.with(this.nodeTypesCache.getAllNodeTypes());
   return result;
 }
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowOverridingPropertyIfTypeDoesNotNarrow() throws Exception {
    /*
     * testNode declares SV property testProperty of type BOOLEAN
     * testNodeB extends testNode with SV property testProperty of type DOUBLE -> ILLEGAL
     */
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(
        new String[] {
          "nt:base",
        });

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.BOOLEAN);
    prop.setMultiple(false);
    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    JcrNodeTypeTemplate nodeBTemplate = new JcrNodeTypeTemplate(this.context);
    nodeBTemplate.setName(TEST_TYPE_NAME + "B");
    nodeBTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.DOUBLE);
    prop.setMultiple(false);
    nodeBTemplate.getPropertyDefinitionTemplates().add(prop);

    List<NodeTypeDefinition> templates =
        Arrays.asList(new NodeTypeDefinition[] {ntTemplate, nodeBTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
  @Test
  public void shouldAllowTypeWithMultipleChildNodes() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrNodeDefinitionTemplate child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(TEST_CHILD_NODE_NAME);
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    child.setSameNameSiblings(true);
    ntTemplate.getNodeDefinitionTemplates().add(child);

    child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(TEST_CHILD_NODE_NAME);
    child.setRequiredPrimaryTypeNames(new String[] {"nt:unstructured"});
    child.setSameNameSiblings(false);
    ntTemplate.getNodeDefinitionTemplates().add(child);

    child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(TEST_CHILD_NODE_NAME + "2");
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    child.setSameNameSiblings(true);
    ntTemplate.getNodeDefinitionTemplates().add(child);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowOverridingChildNodeIfRequiredTypesDoNotNarrow() throws Exception {
    /*
     * testNode declares No-SNS childNode testChildNode requiring type nt:hierarchy
     * testNodeB extends testNode with No-SNS childNode testChildNode requiring type nt:base -> ILLEGAL
     */
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(
        new String[] {
          "nt:base",
        });

    JcrNodeDefinitionTemplate child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(TEST_CHILD_NODE_NAME);
    child.setRequiredPrimaryTypeNames(new String[] {"nt:hierarchyNode"});
    child.setSameNameSiblings(false);
    ntTemplate.getNodeDefinitionTemplates().add(child);

    JcrNodeTypeTemplate nodeBTemplate = new JcrNodeTypeTemplate(this.context);
    nodeBTemplate.setName(TEST_TYPE_NAME + "B");
    nodeBTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(TEST_CHILD_NODE_NAME);
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    child.setSameNameSiblings(false);
    nodeBTemplate.getNodeDefinitionTemplates().add(child);

    List<NodeTypeDefinition> templates =
        Arrays.asList(new NodeTypeDefinition[] {ntTemplate, nodeBTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
  @Test
  public void shouldAllowOverridingPropertyIfTypeNarrows() throws Exception {
    /*
     * testNode declares SV property testProperty of type UNDEFINED
     * testNodeB extends testNode with SV property testProperty of type STRING -> LEGAL
     */
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(
        new String[] {
          "nt:base",
        });

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.UNDEFINED);
    prop.setMultiple(false);
    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    JcrNodeTypeTemplate nodeBTemplate = new JcrNodeTypeTemplate(this.context);
    nodeBTemplate.setName(TEST_TYPE_NAME + "B");
    nodeBTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.STRING);
    prop.setMultiple(false);
    nodeBTemplate.getPropertyDefinitionTemplates().add(prop);

    List<NodeTypeDefinition> templates =
        Arrays.asList(new NodeTypeDefinition[] {ntTemplate, nodeBTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
 @Test(expected = InvalidNodeTypeDefinitionException.class)
 public void shouldNotAllowUnregisteringRequiredPrimaryType() throws Exception {
   repoTypeManager.unregisterNodeType(
       Arrays.asList(
           new Name[] {
             JcrNtLexicon.FROZEN_NODE,
           }),
       true);
 }
Example #10
0
 @Test(expected = InvalidNodeTypeDefinitionException.class)
 public void shouldNotAllowUnregisteringSupertype() throws Exception {
   repoTypeManager.unregisterNodeType(
       Arrays.asList(
           new Name[] {
             JcrNtLexicon.HIERARCHY_NODE,
           }),
       true);
 }
Example #11
0
  @Test
  public void shouldAllowUnregisteringUnusedType() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);

    JcrNodeDefinitionTemplate childNode = new JcrNodeDefinitionTemplate(this.context);
    childNode.setDefaultPrimaryTypeName(JcrNtLexicon.FILE.getString(this.registry));
    ntTemplate.getNodeDefinitionTemplates().add(childNode);

    try {
      repoTypeManager.registerNodeType(ntTemplate);
    } catch (Exception ex) {
      fail(ex.getMessage());
    }

    Name typeNameAsName = nameFactory.create(TEST_TYPE_NAME);
    int nodeTypeCount = nodeTypes().getAllNodeTypes().size();
    repoTypeManager.unregisterNodeType(Arrays.asList(new Name[] {typeNameAsName}), true);
    assertThat(nodeTypes().getAllNodeTypes().size(), is(nodeTypeCount - 1));
    assertThat(nodeTypes().getNodeType(typeNameAsName), is(nullValue()));
  }
Example #12
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowUnregisteringDefaultPrimaryType() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);

    JcrNodeDefinitionTemplate childNode = new JcrNodeDefinitionTemplate(this.context);
    childNode.setDefaultPrimaryTypeName(JcrNtLexicon.FILE.getString(this.registry));
    ntTemplate.getNodeDefinitionTemplates().add(childNode);

    try {
      repoTypeManager.registerNodeType(ntTemplate);
    } catch (Exception ex) {
      fail(ex.getMessage());
    }

    repoTypeManager.unregisterNodeType(
        Arrays.asList(
            new Name[] {
              JcrNtLexicon.FILE,
            }),
        true);
  }
Example #13
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowOverridingProtectedChildNode() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"mode:root", "mix:referenceable"});

    JcrNodeDefinitionTemplate child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(JcrLexicon.SYSTEM.getString(registry));
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    ntTemplate.getNodeDefinitionTemplates().add(child);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #14
0
  @Test
  public void shouldAllowDefinitionWithExistingSupertypes() throws Exception {
    Name testTypeName = nameFactory.create(TEST_TYPE_NAME);
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrNodeType testNodeType = repoTypeManager.registerNodeType(ntTemplate);

    assertThat(testNodeType.getName(), is(TEST_TYPE_NAME));
    JcrNodeType nodeTypeFromRepo = nodeTypes().getNodeType(testTypeName);
    assertThat(nodeTypeFromRepo, is(notNullValue()));
    assertThat(nodeTypeFromRepo.getName(), is(TEST_TYPE_NAME));
  }
Example #15
0
  @Test
  public void shouldAllowDefinitionWithAProperty() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setRequiredType(PropertyType.LONG);

    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #16
0
  @Test
  public void shouldAllowDefinitionWithSupertypesFromTypesRegisteredInSameCall() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrNodeTypeTemplate ntTemplate2 = new JcrNodeTypeTemplate(context);
    ntTemplate2.setName(TEST_TYPE_NAME2);
    ntTemplate2.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    List<NodeTypeDefinition> templates =
        Arrays.asList(new NodeTypeDefinition[] {ntTemplate, ntTemplate2});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #17
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowOverridingProtectedProperty() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(JcrLexicon.PRIMARY_TYPE.getString(registry));
    prop.setRequiredType(PropertyType.NAME);
    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #18
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowAutocreatedResidualProperty() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(JcrNodeType.RESIDUAL_ITEM_NAME);
    prop.setRequiredType(PropertyType.UNDEFINED);
    prop.setAutoCreated(true);
    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #19
0
  /**
   * Registers or updates the specified Collection of {@code NodeTypeDefinition} objects. This
   * method is used to register or update a set of node types with mutual dependencies. Returns an
   * iterator over the resulting {@code NodeType} objects.
   *
   * <p>The effect of the method is "all or nothing"; if an error occurs, no node types are
   * registered or updated.
   *
   * @param templates the new node types to register
   * @param allowUpdates this flag is not used
   * @return the {@code newly created node types}
   * @throws InvalidNodeTypeDefinitionException if a {@code NodeTypeDefinition} within the
   *     collection is invalid
   * @throws NodeTypeExistsException if {@code allowUpdate} is false and a {@code
   *     NodeTypeDefinition} within the collection specifies a node type name that already exists
   * @throws UnsupportedRepositoryOperationException if {@code allowUpdate} is true; ModeShape does
   *     not allow updating node types at this time.
   * @throws AccessDeniedException if the current session does not have the {@link
   *     ModeShapePermissions#REGISTER_TYPE register type permission}.
   * @throws RepositoryException if another error occurs
   */
  public NodeTypeIterator registerNodeTypes(
      Collection<NodeTypeDefinition> templates, boolean allowUpdates)
      throws InvalidNodeTypeDefinitionException, NodeTypeExistsException,
          UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {

    session.checkLive();
    try {
      session.checkPermission((Path) null, ModeShapePermissions.REGISTER_TYPE);
    } catch (AccessControlException ace) {
      throw new AccessDeniedException(ace);
    }
    return new JcrNodeTypeIterator(
        repositoryTypeManager.registerNodeTypes(templates, !allowUpdates, false, true));
  }
Example #20
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowMandatoryResidualChildNode() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrNodeDefinitionTemplate child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(JcrNodeType.RESIDUAL_ITEM_NAME);
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    child.setMandatory(true);
    ntTemplate.getNodeDefinitionTemplates().add(child);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #21
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowAutocreatedChildNodeWithNoDefaultPrimaryType() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrNodeDefinitionTemplate child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(TEST_CHILD_NODE_NAME);
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    child.setAutoCreated(true);
    ntTemplate.getNodeDefinitionTemplates().add(child);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #22
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowDefinitionWithSupertypesFromTypesRegisteredInSameCallInWrongOrder()
      throws Exception {
    // Try to register the supertype AFTER the class that registers it
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrNodeTypeTemplate ntTemplate2 = new JcrNodeTypeTemplate(context);
    ntTemplate2.setName(TEST_TYPE_NAME2);
    ntTemplate2.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    repoTypeManager.registerNodeTypes(
        Arrays.asList(new NodeTypeDefinition[] {ntTemplate2, ntTemplate}));
  }
Example #23
0
  @FixFor("MODE-826")
  @Test
  public void shouldAllowRegisteringNodeTypeWithOnlyResidualChildNodeDefinition() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);

    // Create the residual child node definition ...
    JcrNodeDefinitionTemplate childNode = new JcrNodeDefinitionTemplate(this.context);
    childNode.setDefaultPrimaryTypeName(TEST_TYPE_NAME2);
    childNode.setName("*");
    ntTemplate.getNodeDefinitionTemplates().add(childNode);

    // And register it ...
    repoTypeManager.registerNodeTypes(Arrays.asList(new NodeTypeDefinition[] {ntTemplate}));
  }
Example #24
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowSingleValuedPropertyWithMultipleDefaults() throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(new String[] {"nt:base", "mix:referenceable"});

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.STRING);
    prop.setAutoCreated(true);
    prop.setDefaultValues(valuesFrom("<default>", "too many values"));
    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    List<NodeTypeDefinition> templates = Arrays.asList(new NodeTypeDefinition[] {ntTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #25
0
  @FixFor("MODE-826")
  @Test
  public void
      shouldAllowRegisteringNodeTypeWithPrimaryItemNameAndOnlyNonResidualChildNodeDefinition()
          throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    // Set the primary item name to be a name that DOES match the child node definition ...
    ntTemplate.setPrimaryItemName(TEST_CHILD_NODE_NAME);

    // Create the residual child node definition ...
    JcrNodeDefinitionTemplate childNode = new JcrNodeDefinitionTemplate(this.context);
    childNode.setDefaultPrimaryTypeName(TEST_TYPE_NAME2);
    childNode.setName(TEST_CHILD_NODE_NAME);
    ntTemplate.getNodeDefinitionTemplates().add(childNode);

    // And register it ...
    repoTypeManager.registerNodeTypes(Arrays.asList(new NodeTypeDefinition[] {ntTemplate}));
  }
Example #26
0
  @FixFor("MODE-826")
  @Test
  public void
      shouldAllowRegisteringNodeTypeWithPrimaryItemNameAndOnlyNonResidualPropertyNodeDefinition()
          throws Exception {
    ntTemplate.setName(TEST_TYPE_NAME);
    // Set the primary item name to be a name that DOES match the property definition ...
    ntTemplate.setPrimaryItemName(TEST_PROPERTY_NAME);

    // Create the residual property definition ...
    JcrPropertyDefinitionTemplate propertyDefn = new JcrPropertyDefinitionTemplate(this.context);
    propertyDefn.setRequiredType(PropertyType.STRING);
    propertyDefn.setName(TEST_PROPERTY_NAME);
    ntTemplate.getPropertyDefinitionTemplates().add(propertyDefn);

    // And register it ...
    repoTypeManager.registerNodeTypes(Arrays.asList(new NodeTypeDefinition[] {ntTemplate}));
  }
Example #27
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowOverridingChildNodeFromDifferentAncestors() throws Exception {
    /*
     * testNode
     * testNodeB extends testNode and declares node testChildNode
     * testNodeC extends testNode and declares node testChildNode
     * testNodeD extends testNodeB and testNodeC and overrides testChildNode --> ILLEGAL
     */
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(
        new String[] {
          "nt:base",
        });

    JcrNodeTypeTemplate nodeBTemplate = new JcrNodeTypeTemplate(this.context);
    nodeBTemplate.setName(TEST_TYPE_NAME + "B");
    nodeBTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    JcrNodeDefinitionTemplate child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(JcrLexicon.SYSTEM.getString(registry));
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    nodeBTemplate.getNodeDefinitionTemplates().add(child);

    JcrNodeTypeTemplate nodeCTemplate = new JcrNodeTypeTemplate(this.context);
    nodeCTemplate.setName(TEST_TYPE_NAME + "C");
    nodeCTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    child = new JcrNodeDefinitionTemplate(this.context);
    child.setName(JcrLexicon.SYSTEM.getString(registry));
    child.setRequiredPrimaryTypeNames(new String[] {"nt:base"});
    nodeCTemplate.getNodeDefinitionTemplates().add(child);

    JcrNodeTypeTemplate nodeDTemplate = new JcrNodeTypeTemplate(this.context);
    nodeDTemplate.setName(TEST_TYPE_NAME + "D");
    nodeDTemplate.setDeclaredSuperTypeNames(
        new String[] {nodeBTemplate.getName(), nodeCTemplate.getName()});

    List<NodeTypeDefinition> templates =
        Arrays.asList(
            new NodeTypeDefinition[] {ntTemplate, nodeBTemplate, nodeCTemplate, nodeDTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #28
0
  @Test(expected = InvalidNodeTypeDefinitionException.class)
  public void shouldNotAllowOverridingPropertyFromDifferentAncestors() throws Exception {
    /*
     * testNode
     * testNodeB extends testNode and declares prop testProperty
     * testNodeC extends testNode and declares prop testProperty
     * testNodeD extends testNodeB and testNodeC and overrides testProperty --> ILLEGAL
     */
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(
        new String[] {
          "nt:base",
        });

    JcrNodeTypeTemplate nodeBTemplate = new JcrNodeTypeTemplate(this.context);
    nodeBTemplate.setName(TEST_TYPE_NAME + "B");
    nodeBTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.UNDEFINED);
    nodeBTemplate.getPropertyDefinitionTemplates().add(prop);

    JcrNodeTypeTemplate nodeCTemplate = new JcrNodeTypeTemplate(this.context);
    nodeCTemplate.setName(TEST_TYPE_NAME + "C");
    nodeCTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.UNDEFINED);
    nodeCTemplate.getPropertyDefinitionTemplates().add(prop);

    JcrNodeTypeTemplate nodeDTemplate = new JcrNodeTypeTemplate(this.context);
    nodeDTemplate.setName(TEST_TYPE_NAME + "D");
    nodeDTemplate.setDeclaredSuperTypeNames(
        new String[] {nodeBTemplate.getName(), nodeCTemplate.getName()});

    List<NodeTypeDefinition> templates =
        Arrays.asList(
            new NodeTypeDefinition[] {ntTemplate, nodeBTemplate, nodeCTemplate, nodeDTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }
Example #29
0
  /**
   * Allows the collection of node types to be unregistered if they are not referenced by other node
   * types as supertypes, default primary types of child nodes, or required primary types of child
   * nodes.
   *
   * @param nodeTypeNames the names of the node types to be unregistered
   * @throws NoSuchNodeTypeException if any of the node type names do not correspond to a registered
   *     node type
   * @throws InvalidNodeTypeDefinitionException if any of the node types with the given names cannot
   *     be unregistered because they are the supertype, one of the required primary types, or a
   *     default primary type of a node type that is not being unregistered.
   * @throws AccessDeniedException if the current session does not have the {@link
   *     ModeShapePermissions#REGISTER_TYPE register type permission}.
   * @throws RepositoryException if any other error occurs
   */
  public void unregisterNodeTypes(Collection<String> nodeTypeNames)
      throws NoSuchNodeTypeException, InvalidNodeTypeDefinitionException, RepositoryException {
    NameFactory nameFactory = context().getValueFactories().getNameFactory();

    try {
      session.checkPermission((Path) null, ModeShapePermissions.REGISTER_TYPE);
    } catch (AccessControlException ace) {
      throw new AccessDeniedException(ace);
    }

    Collection<Name> names = new ArrayList<Name>(nodeTypeNames.size());
    for (String name : nodeTypeNames) {
      names.add(nameFactory.create(name));
    }

    // Unregister the node types, but perform a check to see if any of the node types are currently
    // being used.
    // Unregistering a node type that is being used will likely cause the system to become unstable.
    boolean failIfNodeTypesAreUsed = true;
    repositoryTypeManager.unregisterNodeType(names, failIfNodeTypesAreUsed);
  }
Example #30
0
  @Test
  public void shouldAllowExtendingPropertyIfMultipleChanges() throws Exception {
    /*
     * testNode declares SV property testProperty
     * testNodeB extends testNode with MV property testProperty with incompatible type -> LEGAL
     * testNodeC extends testNode, testNodeB -> LEGAL
     */
    ntTemplate.setName(TEST_TYPE_NAME);
    ntTemplate.setDeclaredSuperTypeNames(
        new String[] {
          "nt:base",
        });

    JcrPropertyDefinitionTemplate prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.DOUBLE);
    prop.setMultiple(false);
    ntTemplate.getPropertyDefinitionTemplates().add(prop);

    JcrNodeTypeTemplate nodeBTemplate = new JcrNodeTypeTemplate(this.context);
    nodeBTemplate.setName(TEST_TYPE_NAME + "B");
    nodeBTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME});

    prop = new JcrPropertyDefinitionTemplate(this.context);
    prop.setName(TEST_PROPERTY_NAME);
    prop.setRequiredType(PropertyType.BOOLEAN);
    prop.setMultiple(true);
    nodeBTemplate.getPropertyDefinitionTemplates().add(prop);

    JcrNodeTypeTemplate nodeCTemplate = new JcrNodeTypeTemplate(this.context);
    nodeCTemplate.setName(TEST_TYPE_NAME + "C");
    nodeCTemplate.setDeclaredSuperTypeNames(new String[] {TEST_TYPE_NAME, nodeBTemplate.getName()});

    List<NodeTypeDefinition> templates =
        Arrays.asList(new NodeTypeDefinition[] {ntTemplate, nodeBTemplate, nodeCTemplate});
    compareTemplatesToNodeTypes(templates, repoTypeManager.registerNodeTypes(templates));
  }