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);
}
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());
}
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());
}
Aggregations