CategoryForm / TermWidget
* Die ausgewählten Kategorien werden nun auch in den Unterkategorien markiert (verbesserte Version) * Kategorienzuweisungen lassen sich jetzt auch im Formular löschen git-svn-id: https://svn.libreccm.org/ccm/trunk@871 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
979c8853e7
commit
c5b1c11bf9
|
|
@ -41,6 +41,7 @@ import com.arsdigita.categorization.CategoryCollection;
|
||||||
import com.arsdigita.domain.DomainObjectFactory;
|
import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.kernel.ACSObject;
|
import com.arsdigita.kernel.ACSObject;
|
||||||
import com.arsdigita.persistence.OID;
|
import com.arsdigita.persistence.OID;
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* abstract form for assigning categories to acs_objects. The assigned
|
* abstract form for assigning categories to acs_objects. The assigned
|
||||||
|
|
@ -110,13 +111,23 @@ public abstract class ACSObjectCategoryForm extends Form {
|
||||||
|
|
||||||
ACSObject object = getObject(state);
|
ACSObject object = getObject(state);
|
||||||
|
|
||||||
|
HashSet curSelectesdCat = new HashSet();
|
||||||
|
CategoryCollection cats = new CategorizedObject(object).getParents();
|
||||||
|
while (cats.next()) {
|
||||||
|
curSelectesdCat.add(cats.getCategory().getID());
|
||||||
|
}
|
||||||
|
|
||||||
BigDecimal[] ids = (BigDecimal[]) m_category.getValue(state);
|
BigDecimal[] ids = (BigDecimal[]) m_category.getValue(state);
|
||||||
for (int i = 0; i < ids.length; i++) {
|
for (int i = 0; i < ids.length; i++) {
|
||||||
Category cat = (Category) DomainObjectFactory.newInstance(
|
Category cat = (Category) DomainObjectFactory.newInstance(
|
||||||
new OID(Category.BASE_DATA_OBJECT_TYPE,
|
new OID(Category.BASE_DATA_OBJECT_TYPE,
|
||||||
ids[i]));
|
ids[i]));
|
||||||
|
|
||||||
cat.addChild(object);
|
if(!curSelectesdCat.contains(ids[i])) {
|
||||||
|
cat.addChild(object);
|
||||||
|
} else {
|
||||||
|
cat.removeChild(object);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fireCompletionEvent(state);
|
fireCompletionEvent(state);
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.arsdigita.london.terms.ui;
|
package com.arsdigita.london.terms.ui;
|
||||||
|
|
||||||
import com.arsdigita.bebop.SimpleContainer;
|
import com.arsdigita.bebop.SimpleContainer;
|
||||||
|
|
@ -54,31 +53,28 @@ import org.apache.log4j.Logger;
|
||||||
public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
|
|
||||||
private static final Logger s_log = Logger.getLogger(ACSObjectCategoryPicker.class);
|
private static final Logger s_log = Logger.getLogger(ACSObjectCategoryPicker.class);
|
||||||
|
|
||||||
private ACSObjectCategoryForm m_form;
|
private ACSObjectCategoryForm m_form;
|
||||||
private BigDecimalParameter m_root;
|
private BigDecimalParameter m_root;
|
||||||
|
|
||||||
public ACSObjectCategoryPicker(BigDecimalParameter root,
|
public ACSObjectCategoryPicker(BigDecimalParameter root, StringParameter mode) {
|
||||||
StringParameter mode) {
|
|
||||||
|
m_form = getForm(root, mode);
|
||||||
m_form = getForm(root, mode);
|
|
||||||
m_root = root;
|
m_root = root;
|
||||||
|
|
||||||
add(m_form);
|
add(m_form);
|
||||||
m_form.addCompletionListener(new ItemCategoryFormCompletion());
|
m_form.addCompletionListener(new ItemCategoryFormCompletion());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract ACSObjectCategoryForm getForm(BigDecimalParameter root,
|
protected abstract ACSObjectCategoryForm getForm(BigDecimalParameter root,
|
||||||
StringParameter mode);
|
StringParameter mode);
|
||||||
|
|
||||||
protected abstract ACSObject getObject(PageState state);
|
protected abstract ACSObject getObject(PageState state);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private class ItemCategoryFormCompletion implements ActionListener {
|
private class ItemCategoryFormCompletion implements ActionListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
public void actionPerformed(ActionEvent ev) {
|
public void actionPerformed(ActionEvent ev) {
|
||||||
|
|
||||||
PageState state = ev.getPageState();
|
PageState state = ev.getPageState();
|
||||||
Domain domain = getDomain(state);
|
Domain domain = getDomain(state);
|
||||||
String domainKey = domain.getKey();
|
String domainKey = domain.getKey();
|
||||||
|
|
@ -87,80 +83,76 @@ public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
s_log.debug("Saving categories in: " + domainKey);
|
s_log.debug("Saving categories in: " + domainKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
ACSObject object = getObject(state);
|
// ACSObject object = getObject(state);
|
||||||
|
//
|
||||||
if ("LGCL".equals(domainKey)) {
|
// if ("LGCL".equals(domainKey)) {
|
||||||
lgclSelected(domain, object);
|
// lgclSelected(domain, object);
|
||||||
}
|
// } else if ("LGDL".equals(domainKey)) {
|
||||||
|
// lgdlSelected(domain, object);
|
||||||
|
// }
|
||||||
|
|
||||||
else if ("LGDL".equals(domainKey)) {
|
fireCompletionEvent(state);
|
||||||
lgdlSelected(domain, object);
|
|
||||||
}
|
|
||||||
|
|
||||||
fireCompletionEvent(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void lgclSelected(Domain domain, ACSObject object) {
|
|
||||||
List lgclTerms = getCurrentCategories(domain, object);
|
|
||||||
|
|
||||||
Domain gcl = Domain.retrieve("GCL");
|
|
||||||
Collection gclTerms = getRelatedTerms(lgclTerms, gcl);
|
|
||||||
clearTerms(gcl, object);
|
|
||||||
assignTerms(gclTerms, object);
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
//Domain lgsl = Domain.retrieve("LGSL");
|
|
||||||
//Collection lgslTerms = getRelatedTerms(lgclTerms, lgsl);
|
|
||||||
//clearTerms(lgsl, object);
|
|
||||||
//assignTerms(lgslTerms, object);
|
|
||||||
|
|
||||||
// adding processing or mapping from LGCL to APLAWS-NAV too
|
|
||||||
// Deactivated here.
|
|
||||||
// If needed
|
|
||||||
// boolean lgclOverrideAnav = Aplaws.getAplawsConfig().getOverrideAnavFromLGCLMappings().booleanValue();
|
|
||||||
// if (lgclOverrideAnav) {
|
|
||||||
// Domain aplawsNav = Domain.retrieve("APLAWS-NAV");
|
|
||||||
// Collection aplawsNavTerms = getRelatedTerms(lgclTerms, aplawsNav);
|
|
||||||
// clearTerms(aplawsNav, object);
|
|
||||||
// assignTerms(aplawsNavTerms, object);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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, ACSObject object) {
|
|
||||||
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, object);
|
|
||||||
Collection 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());
|
|
||||||
}
|
|
||||||
|
|
||||||
Collection gclTerms = getRelatedTerms(lgclIDs, gcl);
|
|
||||||
|
|
||||||
clearTerms(lgcl, object);
|
|
||||||
assignTerms(lgclTerms, object);
|
|
||||||
|
|
||||||
clearTerms(gcl, object);
|
|
||||||
assignTerms(gclTerms, object);
|
|
||||||
}
|
}
|
||||||
|
// private void lgclSelected(Domain domain, ACSObject object) {
|
||||||
|
// List lgclTerms = getCurrentCategories(domain, object);
|
||||||
|
//
|
||||||
|
// Domain gcl = Domain.retrieve("GCL");
|
||||||
|
// Collection gclTerms = getRelatedTerms(lgclTerms, gcl);
|
||||||
|
// clearTerms(gcl, object);
|
||||||
|
// assignTerms(gclTerms, object);
|
||||||
|
//
|
||||||
|
// // 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.
|
||||||
|
// //Domain lgsl = Domain.retrieve("LGSL");
|
||||||
|
// //Collection lgslTerms = getRelatedTerms(lgclTerms, lgsl);
|
||||||
|
// //clearTerms(lgsl, object);
|
||||||
|
// //assignTerms(lgslTerms, object);
|
||||||
|
//
|
||||||
|
// // adding processing or mapping from LGCL to APLAWS-NAV too
|
||||||
|
//// Deactivated here.
|
||||||
|
//// If needed
|
||||||
|
//// boolean lgclOverrideAnav = Aplaws.getAplawsConfig().getOverrideAnavFromLGCLMappings().booleanValue();
|
||||||
|
//// if (lgclOverrideAnav) {
|
||||||
|
//// Domain aplawsNav = Domain.retrieve("APLAWS-NAV");
|
||||||
|
//// Collection aplawsNavTerms = getRelatedTerms(lgclTerms, aplawsNav);
|
||||||
|
//// clearTerms(aplawsNav, object);
|
||||||
|
//// assignTerms(aplawsNavTerms, object);
|
||||||
|
//// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 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, ACSObject object) {
|
||||||
|
// 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, object);
|
||||||
|
// Collection 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());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Collection gclTerms = getRelatedTerms(lgclIDs, gcl);
|
||||||
|
//
|
||||||
|
// clearTerms(lgcl, object);
|
||||||
|
// assignTerms(lgclTerms, object);
|
||||||
|
//
|
||||||
|
// clearTerms(gcl, object);
|
||||||
|
// assignTerms(gclTerms, object);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List getCurrentCategories(Domain domain,
|
protected List getCurrentCategories(Domain domain, ACSObject object) {
|
||||||
ACSObject object) {
|
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Getting terms from " + domain + " to " + object);
|
s_log.debug("Getting terms from " + domain + " to " + object);
|
||||||
}
|
}
|
||||||
|
|
@ -179,8 +171,7 @@ public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO move out of UI code
|
// TODO move out of UI code
|
||||||
public static Collection getCurrentTerms(Domain domain,
|
public static Collection getCurrentTerms(Domain domain, ACSObject object) {
|
||||||
ACSObject object) {
|
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Getting terms from " + domain + " to " + object);
|
s_log.debug("Getting terms from " + domain + " to " + object);
|
||||||
}
|
}
|
||||||
|
|
@ -198,22 +189,21 @@ public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO move out of UI code
|
// TODO move out of UI code
|
||||||
public static Collection getRelatedTerms(Collection src,
|
public static Collection getRelatedTerms(Collection src, Domain domain) {
|
||||||
Domain domain) {
|
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Getting related terms to " + domain);
|
s_log.debug("Getting related terms to " + domain);
|
||||||
|
|
||||||
|
}
|
||||||
|
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 LinkedList();
|
||||||
}
|
}
|
||||||
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 LinkedList();
|
|
||||||
}
|
|
||||||
DomainCollection terms = domain.getTerms();
|
DomainCollection terms = domain.getTerms();
|
||||||
// these next two lines build the query
|
// these next two lines build the query
|
||||||
terms.addEqualsFilter("model.parents.link.relationType", "related");
|
terms.addEqualsFilter("model.parents.link.relationType", "related");
|
||||||
terms.addFilter("model.parents.id in :ids").set("ids", src);
|
terms.addFilter("model.parents.id in :ids").set("ids", src);
|
||||||
|
|
||||||
Collection related = new LinkedList();
|
Collection related = new LinkedList();
|
||||||
while (terms.next()) {
|
while (terms.next()) {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
|
|
@ -223,15 +213,14 @@ public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
}
|
}
|
||||||
return related;
|
return related;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void clearTerms(Domain domain,
|
protected void clearTerms(Domain domain, ACSObject object) {
|
||||||
ACSObject object) {
|
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Removing terms from " + domain + " to " + object);
|
s_log.debug("Removing terms from " + domain + " to " + object);
|
||||||
}
|
}
|
||||||
Iterator terms = getCurrentTerms(domain, object).iterator();
|
Iterator terms = getCurrentTerms(domain, object).iterator();
|
||||||
while (terms.hasNext()) {
|
while (terms.hasNext()) {
|
||||||
Term term = (Term)terms.next();
|
Term term = (Term) terms.next();
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Removing term " + term + " from " + object);
|
s_log.debug("Removing term " + term + " from " + object);
|
||||||
}
|
}
|
||||||
|
|
@ -239,16 +228,14 @@ public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO move out of UI code
|
// TODO move out of UI code
|
||||||
public static void assignTerms(Collection terms,
|
public static void assignTerms(Collection terms, ACSObject object) {
|
||||||
ACSObject object) {
|
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Assigning terms to " + object);
|
s_log.debug("Assigning terms to " + object);
|
||||||
}
|
}
|
||||||
Iterator i = terms.iterator();
|
Iterator i = terms.iterator();
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
Term term = (Term)i.next();
|
Term term = (Term) i.next();
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Assigning term " + term + " to " + object);
|
s_log.debug("Assigning term " + term + " to " + object);
|
||||||
}
|
}
|
||||||
|
|
@ -261,14 +248,11 @@ public abstract class ACSObjectCategoryPicker extends SimpleContainer {
|
||||||
s_log.debug("Getting domain for " + state.getValue(m_root));
|
s_log.debug("Getting domain for " + state.getValue(m_root));
|
||||||
}
|
}
|
||||||
|
|
||||||
DataCollection domains = SessionManager.getSession()
|
DataCollection domains = SessionManager.getSession().retrieve(Domain.BASE_DATA_OBJECT_TYPE);
|
||||||
.retrieve(Domain.BASE_DATA_OBJECT_TYPE);
|
domains.addEqualsFilter("model.id", state.getValue(m_root));
|
||||||
domains.addEqualsFilter("model.id",
|
|
||||||
state.getValue(m_root));
|
|
||||||
|
|
||||||
if (domains.next()) {
|
if (domains.next()) {
|
||||||
Domain domain = (Domain)DomainObjectFactory
|
Domain domain = (Domain) DomainObjectFactory.newInstance(domains.getDataObject());
|
||||||
.newInstance(domains.getDataObject());
|
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Got domain " + domain);
|
s_log.debug("Got domain " + domain);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.arsdigita.london.terms.ui;
|
package com.arsdigita.london.terms.ui;
|
||||||
|
|
||||||
import com.arsdigita.bebop.FormData;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
// import java.util.Iterator;
|
// import java.util.Iterator;
|
||||||
// import java.util.Map;
|
// import java.util.Map;
|
||||||
|
|
@ -11,17 +10,13 @@ import org.apache.log4j.Logger;
|
||||||
import com.arsdigita.bebop.Page;
|
import com.arsdigita.bebop.Page;
|
||||||
import com.arsdigita.bebop.PageState;
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.SimpleComponent;
|
import com.arsdigita.bebop.SimpleComponent;
|
||||||
import com.arsdigita.bebop.parameters.ParameterData;
|
|
||||||
import com.arsdigita.bebop.parameters.StringParameter;
|
import com.arsdigita.bebop.parameters.StringParameter;
|
||||||
import com.arsdigita.categorization.Category;
|
import com.arsdigita.categorization.Category;
|
||||||
import com.arsdigita.domain.DomainObjectFactory;
|
import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.persistence.OID;
|
import com.arsdigita.persistence.OID;
|
||||||
import com.arsdigita.util.Assert;
|
|
||||||
import com.arsdigita.xml.Element;
|
import com.arsdigita.xml.Element;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import javax.servlet.http.HttpSession;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate part of the category tree. Used by Assign Category authoring step.
|
* Generate part of the category tree. Used by Assign Category authoring step.
|
||||||
|
|
@ -61,7 +56,7 @@ public class CategorySubtree extends SimpleComponent {
|
||||||
HashSet ids = new HashSet();
|
HashSet ids = new HashSet();
|
||||||
if (((String) state.getValue(selectedCatsparam)) != null) {
|
if (((String) state.getValue(selectedCatsparam)) != null) {
|
||||||
StringTokenizer values = new StringTokenizer((String) state.getValue(selectedCatsparam), ",");
|
StringTokenizer values = new StringTokenizer((String) state.getValue(selectedCatsparam), ",");
|
||||||
while(values.hasMoreTokens()) {
|
while (values.hasMoreTokens()) {
|
||||||
ids.add(new BigDecimal(values.nextToken().trim()));
|
ids.add(new BigDecimal(values.nextToken().trim()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -75,5 +70,4 @@ public class CategorySubtree extends SimpleComponent {
|
||||||
s_log.debug("generating subtree for cat " + root.getID());
|
s_log.debug("generating subtree for cat " + root.getID());
|
||||||
TermWidget.generateSubtree(p, root, ids);
|
TermWidget.generateSubtree(p, root, ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,8 +105,13 @@ public class TermWidget extends Widget {
|
||||||
ids.addAll(Arrays.asList(values));
|
ids.addAll(Arrays.asList(values));
|
||||||
}
|
}
|
||||||
|
|
||||||
String selectedCats = ids.toString();
|
Element selEl = widget.newChildElement("cms:selectedCategories", CMS.CMS_XML_NS);
|
||||||
widget.addAttribute("selectedCats", selectedCats.substring(1, selectedCats.length() - 1));
|
selEl.addAttribute("name", this.getName());
|
||||||
|
Iterator selCats = ids.iterator();
|
||||||
|
while (selCats.hasNext()) {
|
||||||
|
Element selCat = selEl.newChildElement("cms:category", CMS.CMS_XML_NS);
|
||||||
|
selCat.addAttribute("id", selCats.next().toString());
|
||||||
|
}
|
||||||
|
|
||||||
// only root terms at first, the rest is loaded on-demand via AJAX
|
// only root terms at first, the rest is loaded on-demand via AJAX
|
||||||
DomainCollection terms = domain.getRootTerms();
|
DomainCollection terms = domain.getRootTerms();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue