Esempio n. 1
0
  @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));
  }
Esempio n. 2
0
  @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));
  }
Esempio n. 3
0
  @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));
  }
Esempio n. 4
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));
  }
Esempio n. 5
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}));
  }
Esempio n. 6
0
  @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));
  }
Esempio n. 7
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));
  }
Esempio n. 8
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));
  }
Esempio n. 9
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));
  }
Esempio n. 10
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));
  }
Esempio n. 11
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));
  }
Esempio n. 12
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));
  }
Esempio n. 13
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));
  }
Esempio n. 14
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));
  }
Esempio n. 15
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));
  }
Esempio n. 16
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));
  }
Esempio n. 17
0
  @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);
  }
Esempio n. 18
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));
  }