From: <mb...@re...> - 2005-02-25 12:52:57
|
Author: mbooth Date: 2005-02-25 13:51:36 +0100 (Fri, 25 Feb 2005) New Revision: 300 Modified: ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/DomainBuilder.java ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/HierarchyBuilder.java ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/MixedHierarchyBuilder.java ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/RelatedBuilder.java Log: Merge Camden's update to the terms importer which allows domains to be upgraded. Modified: ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/DomainBuilder.java =================================================================== --- ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/DomainBuilder.java 2005-02-25 12:49:44 UTC (rev 299) +++ ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/DomainBuilder.java 2005-02-25 12:51:36 UTC (rev 300) @@ -53,13 +53,27 @@ String version, String versionDate) throws Exception { + s_log.debug("key: "+key+" url: "+url+" title: "+title + +" description: "+description+" version: "+version + +" versionDate: "+versionDate); + DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Date released = format.parse(versionDate); + Domain domain = null; try { domain = Domain.retrieve(key); + s_log.debug("Retrieved Domain: "+domain); + + // Now update this. + domain.setURL(new URL(url)); + domain.setTitle(title); + domain.setDescription(description); + domain.setVersion(version); + domain.setReleased(released); + + } catch (DataObjectNotFoundException ex) { - DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - Date released = format.parse(versionDate); domain = Domain.create(key, new URL(url), @@ -67,6 +81,7 @@ null, version, released); + s_log.debug("created Domain "+domain); } m_domain = domain; s_log.debug("Domain " + m_domain); @@ -118,6 +133,6 @@ shortcut, m_domain); } - s_log.debug("Term " + term); + s_log.debug("doAddTerm " + term); } } Modified: ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/HierarchyBuilder.java =================================================================== --- ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/HierarchyBuilder.java 2005-02-25 12:49:44 UTC (rev 299) +++ ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/HierarchyBuilder.java 2005-02-25 12:51:36 UTC (rev 300) @@ -19,6 +19,7 @@ package com.arsdigita.london.terms.importer; +import com.arsdigita.domain.DomainCollection; import com.arsdigita.london.terms.Domain; import com.arsdigita.london.terms.Term; import com.arsdigita.util.Assert; @@ -36,17 +37,63 @@ public void findDomain(String url) throws Exception { + s_log.debug("Entering find domain"); m_domain = Domain.find(new URL(url)); s_log.debug("Domain " + m_domain); + removeRootTerms(); + removeNarrowerTerms(); } - public void addNarrowerTerm(Integer id, + /** + * Find all the terms and remove all + * the narrower associations in each + */ + private void removeNarrowerTerms() { + s_log.debug("Removing narrower terms from domain "+m_domain); + DomainCollection allTerms = m_domain.getTerms(); + while(allTerms.next()) + { + Term t = (Term)allTerms.getDomainObject(); + DomainCollection narrowerTerms = t.getNarrowerTerms(); + //s_log.debug("Term "+t+" has narrower terms "+narrowerTerms); + while(narrowerTerms.next()) + { + Term narrow = (Term)narrowerTerms.getDomainObject(); + //s_log.debug("removing term "+narrow+" from narrower association of term "+t); + t.removeNarrowerTerm(narrow); + + } + } + + } + + /** + * Find the existing root terms in the current domain + * and remove them all + */ + private void removeRootTerms() { + //s_log.debug("remvoing root terms of domain "+m_domain); + DomainCollection dc = m_domain.getRootTerms(); + while(dc.next()) + { + Term t = (Term)dc.getDomainObject(); + //s_log.debug("removing root term "+t); + m_domain.removeRootTerm(t); + + } + } + + public void addNarrowerTerm(Integer id, Integer narrowerID, Boolean isDefault, Boolean isPreferred) { Assert.exists(m_domain, Domain.class); Assert.exists(id, Integer.class); Assert.exists(narrowerID, Integer.class); + s_log.debug("addNarrowerTerm id" + id + + " narrowerID " + narrowerID + + " isDefault "+ isDefault + + " isPreferred "+isPreferred); Term term = m_domain.getTerm(id); Term narrowerTerm = m_domain.getTerm(narrowerID); @@ -56,14 +103,14 @@ isPreferred == null ? true : isPreferred.booleanValue()); - s_log.debug("Term " + term + " Narrower " + narrowerTerm); + s_log.debug("addNarrowerTerm " + term.getName() + " Narrower " + narrowerTerm.getName()); term.save(); } public void addRootTerm(Integer id) { Assert.exists(m_domain, Domain.class); Assert.exists(id, Integer.class); - + s_log.debug("addRootTerm "+id); Term term = m_domain.getTerm(id); m_domain.addRootTerm(term); term.save(); Modified: ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/MixedHierarchyBuilder.java =================================================================== --- ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/MixedHierarchyBuilder.java 2005-02-25 12:49:44 UTC (rev 299) +++ ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/MixedHierarchyBuilder.java 2005-02-25 12:51:36 UTC (rev 300) @@ -19,8 +19,10 @@ package com.arsdigita.london.terms.importer; +import com.arsdigita.domain.DomainCollection; import com.arsdigita.london.terms.Domain; import com.arsdigita.london.terms.Term; +import com.arsdigita.persistence.Filter; import com.arsdigita.util.Assert; import org.apache.log4j.Logger; @@ -32,8 +34,8 @@ private static final Logger s_log = Logger.getLogger(MixedHierarchyBuilder.class); - private Domain m_src_domain; - private Domain m_dst_domain; + private Domain m_src_domain = null; + private Domain m_dst_domain = null; public void findSourceDomain(String url) throws Exception { @@ -45,8 +47,44 @@ throws Exception { m_dst_domain = Domain.find(new URL(url)); s_log.debug("Dest Domain " + m_dst_domain); + removeNarrowerTerms(); } + /** + * Find all the terms and remove all + * the narrower associations in each + */ + private void removeNarrowerTerms() { + s_log.debug("Removing narrower terms from domain "+m_src_domain); + DomainCollection allTerms = m_src_domain.getTerms(); + while(allTerms.next()) + { + Term t = (Term)allTerms.getDomainObject(); + DomainCollection narrowerTerms = t.getNarrowerTerms(); + s_log.debug("Term "+t+" has narrower terms "+narrowerTerms); + s_log.debug(" narrower terms have "+narrowerTerms.size()+" terms"); + + // ok, we have all the narrower terms + // but really we only want the ones that are in the destination + // domain, so lets try and filter them. + Filter filter = narrowerTerms.getFilterFactory().equals(Term.DOMAIN,m_dst_domain.getURL().toExternalForm()); + narrowerTerms.addFilter(filter); + + // ok, now we have filtered them + + s_log.debug("Term "+t+" has filtered narrower terms "+narrowerTerms+" from domain "+m_dst_domain); + s_log.debug("filtered narrower terms have "+narrowerTerms.size()+" terms"); + + while(narrowerTerms.next()) + { + Term narrow = (Term)narrowerTerms.getDomainObject(); + t.removeNarrowerTerm(narrow); + + } + } + + } + public void addNarrowerTerm(Integer id, Integer narrowerID, Boolean isDefault, @@ -64,8 +102,7 @@ isPreferred == null ? true : isPreferred.booleanValue()); - s_log.debug("Term " + term + " Narrower " + narrowerTerm); - + s_log.debug("addNarrowerTerm " + term + " Narrower " + narrowerTerm); term.save(); } } Modified: ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/RelatedBuilder.java =================================================================== --- ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/RelatedBuilder.java 2005-02-25 12:49:44 UTC (rev 299) +++ ccm-ldn-terms/trunk/src/com/arsdigita/london/terms/importer/RelatedBuilder.java 2005-02-25 12:51:36 UTC (rev 300) @@ -19,26 +19,30 @@ package com.arsdigita.london.terms.importer; +import java.net.URL; + +import org.apache.log4j.Logger; + +import com.arsdigita.domain.DomainCollection; import com.arsdigita.london.terms.Domain; import com.arsdigita.london.terms.Term; import com.arsdigita.util.Assert; -import org.apache.log4j.Logger; - -import java.net.URL; - public class RelatedBuilder { private static final Logger s_log = - Logger.getLogger(HierarchyBuilder.class); + Logger.getLogger(RelatedBuilder.class); private Domain m_src_domain; - private Domain m_dst_domain; + private Domain m_dst_domain; + + private boolean m_removed_related_terms = false; public void findSourceDomain(String url) throws Exception { m_src_domain = Domain.find(new URL(url)); s_log.debug("Src Domain " + m_src_domain); + } public void findDestinationDomain(String url) @@ -47,12 +51,52 @@ s_log.debug("Dest Domain " + m_dst_domain); } - public void addRelatedTerm(Integer srcID, + /** + * + * remove all the related terms from the + * terms in the source domain to the destination domain, + * or within the source domain if the destination domain + * is null. + * This only happens on the first call. + * + */ + private void removeRelatedTerms() { + Assert.exists(m_src_domain); + s_log.debug("removing related terms from domain "+m_src_domain); + if(m_removed_related_terms) { + //done this!! + s_log.warn("This method has been called twice. This is unexpected."); + return; + } + m_removed_related_terms = true; + DomainCollection srcTerms = m_src_domain.getTerms(); + s_log.debug("got terms "+srcTerms); + Domain domain = m_dst_domain; + if(m_dst_domain == null) { + s_log.debug("destination domain is null. Assume related terms within a single domain"); + domain = m_src_domain; + + } + while(srcTerms.next()) { + Term srcTerm = (Term)srcTerms.getDomainObject(); + DomainCollection relatedTerms = srcTerm.getRelatedTerms(domain); + while(relatedTerms.next()){ + Term related = (Term)relatedTerms.getDomainObject(); + srcTerm.removeRelatedTerm(related); + } + } + } + + + public void addRelatedTerm(Integer srcID, Integer dstID) { Assert.exists(m_src_domain, Domain.class); Assert.exists(srcID, Integer.class); - Assert.exists(dstID, Integer.class); + Assert.exists(dstID, Integer.class); + if(!m_removed_related_terms) { + removeRelatedTerms(); + } Term srcTerm = m_src_domain.getTerm(srcID); Term dstTerm = m_dst_domain == null ? m_src_domain.getTerm(dstID) : |