Search in sources :

Example 6 with M2Type

use of org.alfresco.repo.dictionary.M2Type in project alfresco-repository by Alfresco.

the class ComparePropertyValueEvaluatorTest method createTestModel.

private void createTestModel() {
    M2Model model = M2Model.createModel("test:comparepropertyvalueevaluatortest");
    model.createNamespace(TEST_TYPE_NAMESPACE, "test");
    model.createImport(NamespaceService.DICTIONARY_MODEL_1_0_URI, NamespaceService.DICTIONARY_MODEL_PREFIX);
    model.createImport(NamespaceService.SYSTEM_MODEL_1_0_URI, NamespaceService.SYSTEM_MODEL_PREFIX);
    model.createImport(NamespaceService.CONTENT_MODEL_1_0_URI, NamespaceService.CONTENT_MODEL_PREFIX);
    M2Type testType = model.createType("test:" + TEST_TYPE_QNAME.getLocalName());
    testType.setParentName("cm:" + ContentModel.TYPE_CONTENT.getLocalName());
    M2Property prop1 = testType.createProperty("test:" + PROP_TEXT.getLocalName());
    prop1.setMandatory(false);
    prop1.setType("d:" + DataTypeDefinition.TEXT.getLocalName());
    prop1.setMultiValued(false);
    M2Property prop2 = testType.createProperty("test:" + PROP_INT.getLocalName());
    prop2.setMandatory(false);
    prop2.setType("d:" + DataTypeDefinition.INT.getLocalName());
    prop2.setMultiValued(false);
    M2Property prop3 = testType.createProperty("test:" + PROP_DATETIME.getLocalName());
    prop3.setMandatory(false);
    prop3.setType("d:" + DataTypeDefinition.DATETIME.getLocalName());
    prop3.setMultiValued(false);
    M2Property prop4 = testType.createProperty("test:" + PROP_NODEREF.getLocalName());
    prop4.setMandatory(false);
    prop4.setType("d:" + DataTypeDefinition.NODE_REF.getLocalName());
    prop4.setMultiValued(false);
    M2Property prop5 = testType.createProperty("test:" + PROP_MULTI_VALUE.getLocalName());
    prop5.setMandatory(false);
    prop5.setType("d:" + DataTypeDefinition.TEXT.getLocalName());
    prop5.setMultiValued(true);
    dictionaryDAO.putModel(model);
}
Also used : M2Type(org.alfresco.repo.dictionary.M2Type) M2Property(org.alfresco.repo.dictionary.M2Property) M2Model(org.alfresco.repo.dictionary.M2Model)

Example 7 with M2Type

use of org.alfresco.repo.dictionary.M2Type in project alfresco-repository by Alfresco.

the class SOLRTrackingComponentTest method testModelDiffs.

@Test
public void testModelDiffs() {
    Collection<QName> allModels = dictionaryService.getAllModels();
    ModelDiffsTracker tracker = new ModelDiffsTracker();
    ModelDiffResults diffResults = tracker.diff();
    // number of diffs should equal the number of models in the repository
    assertEquals("Unexpected number of new models", allModels.size(), diffResults.getNewModels().size());
    assertEquals("Expected no removed models", 0, diffResults.getRemovedModels().size());
    assertEquals("Expected no changed models", 0, diffResults.getChangedModels().size());
    // create a new model
    InputStream modelStream = getClass().getClassLoader().getResourceAsStream("org/alfresco/repo/solr/testModel.xml");
    M2Model testModel = M2Model.createModel(modelStream);
    dictionaryDAO.putModel(testModel);
    // call model diffs - should detect new model
    ModelDiffResults diffResults1 = tracker.diff();
    assertEquals("Expected 1 new model", 1, diffResults1.getNewModels().size());
    assertEquals("Unexpected number of changed models", 0, diffResults1.getChangedModels().size());
    assertEquals("Unexpected number of removed models", 0, diffResults1.getRemovedModels().size());
    AlfrescoModelDiff diff = diffResults1.getNewModels().get(0);
    assertEquals("Unexpected model name change", QName.createQName(testModel.getName(), namespaceService).toString(), diff.getModelName());
    // get current checksum for the test model
    Long testModelChecksum = tracker.getChecksum(QName.createQName(testModel.getName(), namespaceService));
    assertNotNull("", testModelChecksum);
    // create a new type and add it to the new test model
    M2Type anotherType = testModel.createType("anothertype");
    M2Property prop1 = anotherType.createProperty("prop1");
    prop1.setType("d:text");
    // call model diffs - should detect test model changes
    ModelDiffResults diffResults2 = tracker.diff();
    List<AlfrescoModelDiff> changedModels = diffResults2.getChangedModels();
    assertEquals("Expected no new models", 0, diffResults2.getNewModels().size());
    assertEquals("Expected no removed models", 0, diffResults2.getRemovedModels().size());
    assertEquals("Expected detection of changed testmodel", 1, changedModels.size());
    AlfrescoModelDiff changedModel = changedModels.get(0);
    assertEquals("Unexpected changed model name", QName.createQName(testModel.getName(), namespaceService).toString(), changedModel.getModelName());
    assertNotNull("", changedModel.getOldChecksum().longValue());
    assertEquals("Old checksum value is incorrect", testModelChecksum.longValue(), changedModel.getOldChecksum().longValue());
    assertNotSame("Expected checksums to be different", changedModel.getOldChecksum(), changedModel.getNewChecksum());
    // remove the model
    dictionaryDAO.removeModel(QName.createQName(testModel.getName(), namespaceService));
    // call model diffs - check that the model has been removed
    ModelDiffResults diffResults3 = tracker.diff();
    List<AlfrescoModelDiff> removedModels = diffResults3.getRemovedModels();
    assertEquals("Expected 1 removed model", 1, removedModels.size());
    QName removedModelName = QName.createQName(removedModels.get(0).getModelName());
    String removedModelNamespace = removedModelName.getNamespaceURI();
    String removedModelLocalName = removedModelName.getLocalName();
    assertEquals("Removed model namespace is incorrect", "http://www.alfresco.org/model/solrtest/1.0", removedModelNamespace);
    assertEquals("Removed model name is incorrect", "contentmodel", removedModelLocalName);
    assertEquals("Expected no new models", 0, diffResults3.getNewModels().size());
    assertEquals("Expected no changed modeks", 0, diffResults3.getChangedModels().size());
}
Also used : M2Type(org.alfresco.repo.dictionary.M2Type) QName(org.alfresco.service.namespace.QName) InputStream(java.io.InputStream) M2Property(org.alfresco.repo.dictionary.M2Property) M2Model(org.alfresco.repo.dictionary.M2Model) BaseSpringTest(org.alfresco.util.BaseSpringTest) Test(org.junit.Test)

Example 8 with M2Type

use of org.alfresco.repo.dictionary.M2Type in project alfresco-repository by Alfresco.

the class UpdateRepoEventIT method testUpdateNodeTypeWithCustomType.

@Test
public void testUpdateNodeTypeWithCustomType() {
    String modelName = "testModel" + System.currentTimeMillis();
    String modelDescription = "testModel description";
    Pair<String, String> namespacePair = getNamespacePair();
    M2Model model = M2Model.createModel(namespacePair.getSecond() + QName.NAMESPACE_PREFIX + modelName);
    model.createNamespace(namespacePair.getFirst(), namespacePair.getSecond());
    model.setDescription(modelDescription);
    String typeName = "testType";
    M2Type m2Type = model.createType(namespacePair.getSecond() + QName.NAMESPACE_PREFIX + typeName);
    m2Type.setTitle("Test type title");
    // Create active model
    CustomModelDefinition modelDefinition = retryingTransactionHelper.doInTransaction(() -> customModelService.createCustomModel(model, true));
    assertNotNull(modelDefinition);
    assertEquals(modelName, modelDefinition.getName().getLocalName());
    assertEquals(modelDescription, modelDefinition.getDescription());
    // List all of the model's types
    Collection<TypeDefinition> types = modelDefinition.getTypeDefinitions();
    assertEquals(1, types.size());
    // node.Created event should be generated for the model
    RepoEvent<EventData<NodeResource>> resultRepoEvent = getRepoEvent(1);
    assertEquals("Wrong repo event type.", EventType.NODE_CREATED.getType(), resultRepoEvent.getType());
    NodeResource nodeResource = getNodeResource(resultRepoEvent);
    assertEquals("Incorrect node type was found", "cm:dictionaryModel", nodeResource.getNodeType());
    final NodeRef nodeRef = createNode(ContentModel.TYPE_CONTENT);
    // old node's type
    assertEquals(ContentModel.TYPE_CONTENT, nodeService.getType(nodeRef));
    // node.Created event should be generated
    resultRepoEvent = getRepoEvent(2);
    assertEquals("Wrong repo event type.", EventType.NODE_CREATED.getType(), resultRepoEvent.getType());
    nodeResource = getNodeResource(resultRepoEvent);
    assertEquals("cm:content node type was not found", "cm:content", nodeResource.getNodeType());
    QName typeQName = QName.createQName("{" + namespacePair.getFirst() + "}" + typeName);
    retryingTransactionHelper.doInTransaction(() -> {
        nodeService.setType(nodeRef, typeQName);
        // new node's type
        assertEquals(typeQName, nodeService.getType(nodeRef));
        return null;
    });
    // we should have 3 events, node.Created for the model, node.Created for the node and node.Updated
    checkNumOfEvents(3);
    resultRepoEvent = getRepoEvent(3);
    assertEquals("Wrong repo event type.", EventType.NODE_UPDATED.getType(), resultRepoEvent.getType());
    nodeResource = getNodeResource(resultRepoEvent);
    assertEquals("Incorrect node type was found", namespacePair.getSecond() + QName.NAMESPACE_PREFIX + typeName, nodeResource.getNodeType());
    NodeResource resourceBefore = getNodeResourceBefore(3);
    assertEquals("Incorrect node type was found", "cm:content", resourceBefore.getNodeType());
    assertNull(resourceBefore.getId());
    assertNull(resourceBefore.getContent());
    assertNull(resourceBefore.isFile());
    assertNull(resourceBefore.isFolder());
    assertNull(resourceBefore.getModifiedByUser());
    assertNull(resourceBefore.getCreatedAt());
    assertNull(resourceBefore.getCreatedByUser());
    assertNull(resourceBefore.getProperties());
    assertNull(resourceBefore.getAspectNames());
    assertNull(resourceBefore.getPrimaryHierarchy());
}
Also used : NodeResource(org.alfresco.repo.event.v1.model.NodeResource) CustomModelDefinition(org.alfresco.service.cmr.dictionary.CustomModelDefinition) NodeRef(org.alfresco.service.cmr.repository.NodeRef) M2Type(org.alfresco.repo.dictionary.M2Type) QName(org.alfresco.service.namespace.QName) M2Model(org.alfresco.repo.dictionary.M2Model) EventData(org.alfresco.repo.event.v1.model.EventData) TypeDefinition(org.alfresco.service.cmr.dictionary.TypeDefinition) Test(org.junit.Test)

Aggregations

M2Model (org.alfresco.repo.dictionary.M2Model)8 M2Type (org.alfresco.repo.dictionary.M2Type)8 M2Property (org.alfresco.repo.dictionary.M2Property)4 QName (org.alfresco.service.namespace.QName)3 Test (org.junit.Test)3 M2Aspect (org.alfresco.repo.dictionary.M2Aspect)2 M2Association (org.alfresco.repo.dictionary.M2Association)2 TypeDefinition (org.alfresco.service.cmr.dictionary.TypeDefinition)2 NodeRef (org.alfresco.service.cmr.repository.NodeRef)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 File (java.io.File)1 InputStream (java.io.InputStream)1 HashSet (java.util.HashSet)1 LinkedHashSet (java.util.LinkedHashSet)1 ZipFile (java.util.zip.ZipFile)1 UserTransaction (javax.transaction.UserTransaction)1 AlfrescoRuntimeException (org.alfresco.error.AlfrescoRuntimeException)1 DictionaryDAO (org.alfresco.repo.dictionary.DictionaryDAO)1 M2ChildAssociation (org.alfresco.repo.dictionary.M2ChildAssociation)1 M2Constraint (org.alfresco.repo.dictionary.M2Constraint)1