diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index ca20c7a849..bc07a0f182 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -1222,6 +1222,7 @@ + diff --git a/source/java/org/alfresco/repo/dictionary/DictionaryModelType.java b/source/java/org/alfresco/repo/dictionary/DictionaryModelType.java index 870e819ccf..83576d1346 100644 --- a/source/java/org/alfresco/repo/dictionary/DictionaryModelType.java +++ b/source/java/org/alfresco/repo/dictionary/DictionaryModelType.java @@ -669,7 +669,7 @@ public class DictionaryModelType implements ContentServicePolicies.OnContentUpda } // Try and compile the model - CompiledModel compiledModel= m2Model.compile(dictionaryDAO, namespaceDAO); + CompiledModel compiledModel= m2Model.compile(dictionaryDAO, namespaceDAO, true); ModelDefinition modelDefinition = compiledModel.getModelDefinition(); // Update the meta data for the model diff --git a/source/java/org/alfresco/repo/solr/AlfrescoModel.java b/source/java/org/alfresco/repo/solr/AlfrescoModel.java index 95682bfe36..71ba9fa8fb 100644 --- a/source/java/org/alfresco/repo/solr/AlfrescoModel.java +++ b/source/java/org/alfresco/repo/solr/AlfrescoModel.java @@ -15,7 +15,7 @@ public class AlfrescoModel protected AlfrescoModel(ModelDefinition modelDef) { this.modelDef = modelDef; - this.checksum = modelDef.getChecksum(ModelDefinition.XMLBindingType.SOLR); + this.checksum = modelDef.getChecksum(ModelDefinition.XMLBindingType.DEFAULT); } public ModelDefinition getModelDef() diff --git a/source/java/org/alfresco/repo/solr/AlfrescoModelDiff.java b/source/java/org/alfresco/repo/solr/AlfrescoModelDiff.java index 15cac4bacc..98bdc9f434 100644 --- a/source/java/org/alfresco/repo/solr/AlfrescoModelDiff.java +++ b/source/java/org/alfresco/repo/solr/AlfrescoModelDiff.java @@ -16,12 +16,19 @@ public class AlfrescoModelDiff NEW, CHANGED, REMOVED; }; - private QName modelName; + private String modelName; private TYPE type; private Long oldChecksum; private Long newChecksum; - public AlfrescoModelDiff(QName modelName, TYPE type, Long oldChecksum, Long newChecksum) + /** + * use full model name or it will be converted to the prefix form - as we are requesting the model it may not be on the other side - so the namespace is unknown. + * @param modelName + * @param type + * @param oldChecksum + * @param newChecksum + */ + public AlfrescoModelDiff(String modelName, TYPE type, Long oldChecksum, Long newChecksum) { super(); this.modelName = modelName; @@ -29,8 +36,13 @@ public class AlfrescoModelDiff this.oldChecksum = oldChecksum; this.newChecksum = newChecksum; } + + public AlfrescoModelDiff(QName modelName, TYPE type, Long oldChecksum, Long newChecksum) + { + this(modelName.toString(), type, oldChecksum, newChecksum); + } - public QName getModelName() + public String getModelName() { return modelName; } diff --git a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java index 24f1cb6947..44902463da 100644 --- a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java +++ b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java @@ -18,6 +18,10 @@ */ package org.alfresco.repo.solr; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; @@ -28,18 +32,22 @@ import java.util.Map; import java.util.Set; import org.alfresco.model.ContentModel; +import org.alfresco.repo.dictionary.CompiledModel; import org.alfresco.repo.dictionary.DictionaryDAO; +import org.alfresco.repo.dictionary.DictionaryDAOImpl; import org.alfresco.repo.domain.node.Node; import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.node.NodeDAO.ChildAssocRefQueryCallback; import org.alfresco.repo.domain.qname.QNameDAO; import org.alfresco.repo.domain.solr.SOLRDAO; +import org.alfresco.repo.solr.AlfrescoModelDiff.TYPE; import org.alfresco.repo.tenant.TenantService; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.ModelDefinition; import org.alfresco.service.cmr.dictionary.PropertyDefinition; +import org.alfresco.service.cmr.dictionary.ModelDefinition.XMLBindingType; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; @@ -50,6 +58,7 @@ import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.alfresco.util.PropertyCheck; +import org.alfresco.util.TempFileProvider; /** * Component providing data for SOLR tracking @@ -102,6 +111,13 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent this.dictionaryService = dictionaryService; } + + + public void setDictionaryDAO(DictionaryDAO dictionaryDAO) + { + this.dictionaryDAO = dictionaryDAO; + } + /** * Initialize */ @@ -114,6 +130,7 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent PropertyCheck.mandatory(this, "ownableService", ownableService); PropertyCheck.mandatory(this, "tenantService", tenantService); PropertyCheck.mandatory(this, "dictionaryService", dictionaryService); + PropertyCheck.mandatory(this, "dictionaryDAO", dictionaryDAO); } @Override @@ -581,6 +598,30 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent } } +// for(AlfrescoModelDiff diff : diffs) +// { +// if(diff.getType() != TYPE.REMOVED) +// { +// CompiledModel cm = ((DictionaryDAOImpl)dictionaryDAO).getCompiledModel(QName.createQName(diff.getModelName())); +// File file = TempFileProvider.createTempFile(cm.getM2Model().getChecksum(XMLBindingType.DEFAULT)+ cm.getM2Model().getNamespaces().get(0).getPrefix(), ".xml"); +// FileOutputStream os; +// try +// { +// os = new FileOutputStream(file); +// cm.getM2Model().toXML(os); +// os.flush(); +// os.close(); +// +// } +// catch (IOException e) +// { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// +// } + return diffs; } diff --git a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java index 6f735b6e20..53ed5cadbf 100644 --- a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java +++ b/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java @@ -340,7 +340,7 @@ public class SOLRTrackingComponentTest extends TestCase 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), diff.getModelName()); + 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)); @@ -359,7 +359,7 @@ public class SOLRTrackingComponentTest extends TestCase assertEquals("Expected detection of changed testmodel", 1, changedModels.size()); AlfrescoModelDiff changedModel = changedModels.get(0); - assertEquals("Unexpected changed model name", QName.createQName(testModel.getName(), namespaceService), + 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()); @@ -372,7 +372,7 @@ public class SOLRTrackingComponentTest extends TestCase ModelDiffResults diffResults3 = tracker.diff(); List removedModels = diffResults3.getRemovedModels(); assertEquals("Expected 1 removed model", 1, removedModels.size()); - QName removedModelName = removedModels.get(0).getModelName(); + 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); @@ -427,7 +427,7 @@ public class SOLRTrackingComponentTest extends TestCase if(diff.getType().equals(AlfrescoModelDiff.TYPE.NEW)) { newModels.add(diff); - trackedModels.put(diff.getModelName(), diff.getNewChecksum()); + trackedModels.put(QName.createQName(diff.getModelName()), diff.getNewChecksum()); } else if(diff.getType().equals(AlfrescoModelDiff.TYPE.CHANGED)) {