diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt index 523be51..f4f7ebd 100644 --- a/browser/concept_macros.pt +++ b/browser/concept_macros.pt @@ -28,7 +28,6 @@

- Title diff --git a/concept.py b/concept.py index 5632051..86b3f39 100644 --- a/concept.py +++ b/concept.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2011 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Definition of the Concept and related classes. - -$Id$ """ from zope import component, schema @@ -209,9 +207,26 @@ class Concept(Contained, Persistent): return [r.first for r in self.getParentRelations(predicates, sort=sort, noSecurityCheck=noSecurityCheck)] - def assignChild(self, concept, predicate=None, order=0, relevance=1.0): + def checkPredicate(self, child, predicate=None): + cm = self.getConceptManager() + defaultPredicate = cm.getDefaultPredicate() if predicate is None: - predicate = self.getConceptManager().getDefaultPredicate() + predicate = defaultPredicate + if predicate == defaultPredicate: + subtypePred = cm.get('issubtype') + if subtypePred is not None: + subtypeRels = list(self.conceptType.getChildRelations( + [subtypePred], child.conceptType)) + if subtypeRels: + from loops.predicate import adaptedRelation + rel = adaptedRelation(subtypeRels[0]) + predName = rel.usePredicate + if predName and predName != u'standard': + predicate = cm[predName] + return predicate + + def assignChild(self, concept, predicate=None, order=0, relevance=1.0): + predicate = self.checkPredicate(concept, predicate) registry = component.getUtility(IRelationRegistry) rel = ConceptRelation(self, concept, predicate) if order != 0: diff --git a/configure.zcml b/configure.zcml index 908bb47..1692294 100644 --- a/configure.zcml +++ b/configure.zcml @@ -263,6 +263,15 @@ set_schema="loops.interfaces.IPredicate" /> + + + + + +