From: <mb...@re...> - 2005-02-25 12:51:04
|
Author: mbooth Date: 2005-02-25 13:49:44 +0100 (Fri, 25 Feb 2005) New Revision: 299 Modified: ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/TermWidget.java Log: Automatically Map LGSL -> LGCL and GCL Modified: ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java =================================================================== --- ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java 2005-02-24 19:20:47 UTC (rev 298) +++ ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java 2005-02-25 12:49:44 UTC (rev 299) @@ -37,7 +37,7 @@ import com.arsdigita.cms.ui.authoring.ItemCategoryForm; import java.util.List; -import java.util.ArrayList; +import java.util.LinkedList; import java.util.Iterator; import java.math.BigDecimal; @@ -63,13 +63,27 @@ PageState state = ev.getPageState(); Domain domain = getDomain(state); - if (domain == null || !domain.getKey().equals("LGCL")) { - fireCompletionEvent(ev.getPageState()); + String domainKey = domain.getKey(); + + if (s_log.isDebugEnabled()) { + s_log.debug("Saving categories in: " + domainKey); } ContentItem item = CMS.getContext().getContentItem(); ContentBundle bundle = (ContentBundle)item.getParent(); + if ("LGCL".equals(domainKey)) { + lgclSelected(domain, bundle); + } + + else if ("LGDL".equals(domainKey)) { + lgdlSelected(domain, bundle); + } + + fireCompletionEvent(state); + } + + private void lgclSelected(Domain domain, ContentBundle bundle) { // adding processing or mapping from LGCL to APLAWS-NAV too boolean lgclOverrideAnav = Aplaws.getAplawsConfig().getOverrideAnavFromLGCLMappings().booleanValue(); @@ -88,15 +102,47 @@ clearTerms(gcl, bundle); assignTerms(gclTerms, bundle); - clearTerms(lgsl, bundle); - assignTerms(lgslTerms, bundle); + // The assignment below is removed to satisfy requirement 4.1, + // use case 1 of the document "Metadata Improvements" version 1 + // by Camden, dated 23/01/05. + //clearTerms(lgsl, bundle); + //assignTerms(lgslTerms, bundle); + if (lgclOverrideAnav) { clearTerms(aplawsNav, bundle); assignTerms(aplawsNavTerms, bundle); } + } - fireCompletionEvent(state); + // User has selected a term in the LGDL hierarchy, which includes + // terms from the LGSL. We're only interested in LGSL terms here. + private void lgdlSelected(Domain domain, ContentBundle bundle) { + Domain lgsl = Domain.retrieve("LGSL"); + Domain gcl = Domain.retrieve("GCL"); + Domain lgcl = Domain.retrieve("LGCL"); + + // We have a mapping LGSL -> LGCL based on the reverse of a + // published mapping. We don't have a mapping LGSL -> GCL, so we + // do LGSL -> LGCL -> GCL instead. + + List lgslTerms = getCurrentCategories(lgsl, bundle); + List lgclTerms = getRelatedTerms(lgslTerms, lgcl); + + LinkedList lgclIDs = new LinkedList(); + Iterator i = lgclTerms.iterator(); + while (i.hasNext()) { + Term term = (Term) i.next(); + lgclIDs.add(term.getModel().getID()); + } + + List gclTerms = getRelatedTerms(lgclIDs, gcl); + + clearTerms(lgcl, bundle); + assignTerms(lgclTerms, bundle); + + clearTerms(gcl, bundle); + assignTerms(gclTerms, bundle); } } @@ -105,10 +151,11 @@ if (s_log.isDebugEnabled()) { s_log.debug("Getting terms from " + domain + " to " + bundle); } - List current = new ArrayList(); DomainCollection terms = domain.getTerms(); terms.addEqualsFilter("model.childObjects.id", bundle.getID()); terms.addPath("model.id"); + + List current = new LinkedList(); while (terms.next()) { if (s_log.isDebugEnabled()) { s_log.debug("Got term " + terms.get("model.id")); @@ -123,7 +170,7 @@ if (s_log.isDebugEnabled()) { s_log.debug("Getting terms from " + domain + " to " + bundle); } - List current = new ArrayList(); + List current = new LinkedList(); DomainCollection terms = domain.getTerms(); terms.addEqualsFilter("model.childObjects.id", bundle.getID()); terms.addPath("model.id"); @@ -145,15 +192,14 @@ if (src.isEmpty()) { // this is a hack, it would be better not to use a completion event listener as // this is called even when the form is cancelled... - return new ArrayList(); + return new LinkedList(); } DomainCollection terms = domain.getTerms(); // these next two lines build the query terms.addEqualsFilter("model.parents.link.relationType", "related"); terms.addFilter("model.parents.id in :ids").set("ids", src); - - List related = new ArrayList(); + List related = new LinkedList(); while (terms.next()) { if (s_log.isDebugEnabled()) { s_log.debug("Got term " + terms.getDomainObject()); Modified: ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/TermWidget.java =================================================================== --- ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/TermWidget.java 2005-02-24 19:20:47 UTC (rev 298) +++ ccm-ldn-aplaws/trunk/src/com/arsdigita/aplaws/ui/TermWidget.java 2005-02-25 12:49:44 UTC (rev 299) @@ -39,14 +39,14 @@ import com.arsdigita.cms.CMS; -import java.util.Set; +import java.math.BigDecimal; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; import java.util.Map; -import java.util.HashMap; -import java.util.List; -import java.util.LinkedList; -import java.util.Iterator; -import java.math.BigDecimal; +import java.util.Set; /** * A Widget for selecting Terms. Based heavily on CategoryWidget. |