Ejemplo n.º 1
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));
  }
Ejemplo n.º 2
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));
  }
Ejemplo n.º 3
0
  /**
   * Returns a {@code NodeTypeTemplate} based on the definition given in {@code ntd}. This template
   * can then be used to define a node type and passed to {@link
   * JcrNodeTypeManager#registerNodeType(NodeTypeDefinition, boolean)}
   *
   * @param ntd an existing node type definition; null values will be ignored
   * @return an empty {@code NodeTypeTemplate} which can then be used to define a node type and
   *     passed to {@link JcrNodeTypeManager#registerNodeType(NodeTypeDefinition, boolean)}.
   * @throws RepositoryException if another error occurs
   */
  @Override
  @SuppressWarnings("unchecked")
  public NodeTypeTemplate createNodeTypeTemplate(NodeTypeDefinition ntd)
      throws RepositoryException {
    NodeTypeTemplate ntt = new JcrNodeTypeTemplate(context(), true);

    if (ntd != null) {
      ntt.setName(ntd.getName());
      ntt.setAbstract(ntd.isAbstract());
      ntt.setDeclaredSuperTypeNames(ntd.getDeclaredSupertypeNames());
      ntt.setMixin(ntd.isMixin());
      ntt.setOrderableChildNodes(ntd.hasOrderableChildNodes());
      ntt.setPrimaryItemName(ntd.getPrimaryItemName());
      ntt.setQueryable(ntd.isQueryable());

      // copy child nodes and props
      for (NodeDefinition nodeDefinition : ntd.getDeclaredChildNodeDefinitions()) {
        JcrNodeDefinitionTemplate ndt = new JcrNodeDefinitionTemplate(context());

        ndt.setAutoCreated(nodeDefinition.isAutoCreated());
        ndt.setDefaultPrimaryTypeName(nodeDefinition.getDefaultPrimaryTypeName());
        ndt.setMandatory(nodeDefinition.isMandatory());
        if (nodeDefinition.getName() != null) {
          ndt.setName(nodeDefinition.getName());
        }
        ndt.setOnParentVersion(nodeDefinition.getOnParentVersion());
        ndt.setProtected(nodeDefinition.isProtected());
        ndt.setRequiredPrimaryTypeNames(nodeDefinition.getRequiredPrimaryTypeNames());
        ndt.setSameNameSiblings(nodeDefinition.allowsSameNameSiblings());

        ntt.getNodeDefinitionTemplates().add(ndt);
      }

      for (PropertyDefinition propertyDefinition : ntd.getDeclaredPropertyDefinitions()) {
        JcrPropertyDefinitionTemplate pdt = new JcrPropertyDefinitionTemplate(context());

        pdt.setAutoCreated(propertyDefinition.isAutoCreated());
        pdt.setAvailableQueryOperators(propertyDefinition.getAvailableQueryOperators());
        pdt.setDefaultValues(propertyDefinition.getDefaultValues());
        pdt.setFullTextSearchable(propertyDefinition.isFullTextSearchable());
        pdt.setMandatory(propertyDefinition.isMandatory());
        pdt.setMultiple(propertyDefinition.isMultiple());
        if (propertyDefinition.getName() != null) {
          pdt.setName(propertyDefinition.getName());
        }
        pdt.setOnParentVersion(propertyDefinition.getOnParentVersion());
        pdt.setProtected(propertyDefinition.isProtected());
        pdt.setQueryOrderable(propertyDefinition.isQueryOrderable());
        pdt.setRequiredType(propertyDefinition.getRequiredType());
        pdt.setValueConstraints(propertyDefinition.getValueConstraints());

        ntt.getPropertyDefinitionTemplates().add(pdt);
      }
    }

    return ntt;
  }
Ejemplo n.º 4
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));
  }
Ejemplo n.º 5
0
  @Test
  public void shouldAllowDefinitionWithProperties() 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);

    JcrPropertyDefinitionTemplate prop2 = new JcrPropertyDefinitionTemplate(this.context);
    prop2.setRequiredType(PropertyType.STRING);
    prop2.setMultiple(true);
    ntTemplate.getPropertyDefinitionTemplates().add(prop2);

    JcrPropertyDefinitionTemplate prop3 = new JcrPropertyDefinitionTemplate(this.context);
    prop3.setName(TEST_PROPERTY_NAME);
    prop3.setRequiredType(PropertyType.STRING);
    ntTemplate.getPropertyDefinitionTemplates().add(prop3);

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