diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/CompoundContentItemPanel.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/CompoundContentItemPanel.java index efc28df2b..f7078ed1f 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/CompoundContentItemPanel.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/CompoundContentItemPanel.java @@ -37,6 +37,7 @@ import com.arsdigita.web.URL; import com.arsdigita.web.Web; import com.arsdigita.xml.Element; import java.util.Iterator; +import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; /** @@ -61,6 +62,8 @@ public abstract class CompoundContentItemPanel * Parameter which indicates which page to show */ protected StringParameter m_show; + private String showDefault; + private boolean showOnlyDefault = false; private static final String PAGE_NUMBER = "pageNumber"; /** * Parameter for a paginator @@ -125,7 +128,7 @@ public abstract class CompoundContentItemPanel if (!context.hasContentItem()) { return null; } - return context.getContentItem(); + return context.getContentItem().getLiveVersion(); } else { return m_item; } @@ -151,7 +154,7 @@ public abstract class CompoundContentItemPanel resolved = bundle.getPrimaryInstance(); } - m_item = resolved; + m_item = resolved.getLiveVersion(); } else { m_item = item; } @@ -245,8 +248,28 @@ public abstract class CompoundContentItemPanel * * @return Default value for the show parameter. */ - protected abstract String getDefaultForShowParam(); + protected final String getDefaultForShowParam() { + if ((showDefault == null) || showDefault.isEmpty()) { + return getDefaultShowParam(); + } else { + return showDefault; + } + } + + public void setDefaultForShowParam(final String showDefault) { + this.showDefault = showDefault; + } + + protected abstract String getDefaultShowParam(); + public boolean isShowOnlyDefault() { + return showOnlyDefault; + } + + public void setShowOnlyDefault(final boolean showOnlyDefault) { + this.showOnlyDefault = showOnlyDefault; + } + protected String getShowParam(final PageState state) { String show; try { @@ -267,6 +290,15 @@ public abstract class CompoundContentItemPanel return show; } + + protected String getHttpParam(final String param, final PageState state) { + final HttpServletRequest request = state.getRequest(); + String value; + + value = request.getParameter(param); + + return value; + } protected long getPageNumber(final PageState state) { int pageNumber = 1; diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java index db5d00c67..40746b9b4 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java @@ -40,15 +40,15 @@ import org.apache.log4j.Logger; */ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { - private final static Logger logger = Logger.getLogger(GenericOrganizationalUnit.class); - + private final static Logger logger = + Logger.getLogger(GenericOrganizationalUnit.class); public static final String SHOW_CONTACTS = "contacts"; public static final String SHOW_MEMBERS = "members"; private boolean displayContacts = true; private boolean displayMembers = true; @Override - protected String getDefaultForShowParam() { + protected String getDefaultShowParam() { return SHOW_CONTACTS; } @@ -75,7 +75,7 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { protected void generateContactsXML(GenericOrganizationalUnit orga, Element parent, PageState state) { - long start = System.currentTimeMillis(); + long start = System.currentTimeMillis(); GenericOrganizationalUnitContactCollection contacts; contacts = orga.getContacts(); @@ -97,12 +97,14 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { contact = contacts.getContact(); generateGenericContactXML(contact, - contactsElem, - state, - Integer.toString(contacts.getContactOrder()), - true); + contactsElem, + state, + Integer.toString( + contacts.getContactOrder()), + true); } - System.out.printf("Generated Contacts XML in %d ms.\n", System.currentTimeMillis() - start); + System.out.printf("Generated Contacts XML in %d ms.\n", System. + currentTimeMillis() - start); } protected void generateMembersXML(GenericOrganizationalUnit orga, @@ -162,12 +164,12 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { } } } - + protected void generateContactXML(final GenericContact contact, final Element parent, final PageState state, final String order, - final boolean withPerson) { + final boolean withPerson) { Element contactElem = parent.newChildElement("contact"); contactElem.addAttribute("order", order); @@ -249,43 +251,75 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { } protected void generateGenericContactXML(final GenericContact contact, - final Element parent, - final PageState state, - final String order, - final boolean withPerson) { + final Element parent, + final PageState state, + final String order, + final boolean withPerson) { ContactXmlLGenerator generator = new ContactXmlLGenerator(contact); - - generator.generateXML(state, parent, order); + + generator.generateXML(state, parent, order); } - @Override - public void generateXML(ContentItem item, Element element, - PageState state) { - Element content = generateBaseXML(item, element, state); - - Element availableData = content.newChildElement("availableData"); - - GenericOrganizationalUnit orga = (GenericOrganizationalUnit) item; - + protected void generateAvailableDataXml(final GenericOrganizationalUnit orga, + final Element element, + final PageState state) { if ((orga.getContacts() != null) && (orga.getContacts().size() > 0) && displayMembers) { - availableData.newChildElement("contacts"); + element.newChildElement("contacts"); } if ((orga.getPersons() != null) && (orga.getPersons().size() > 0) && displayMembers) { - availableData.newChildElement("members"); + element.newChildElement("members"); } + } + protected void generateDataXml(final GenericOrganizationalUnit orga, + final Element element, + final PageState state) { String show = getShowParam(state); if (SHOW_CONTACTS.equals(show)) { - generateContactsXML(orga, content, state); + generateContactsXML(orga, element, state); } else if (SHOW_MEMBERS.equals(show)) { - generateMembersXML(orga, content, state); + generateMembersXML(orga, element, state); } } + @Override + public void generateXML(ContentItem item, + Element element, + PageState state) { + Element content = generateBaseXML(item, element, state); + + GenericOrganizationalUnit orga = (GenericOrganizationalUnit) item; + Element availableData = content.newChildElement("availableData"); + + if (!isShowOnlyDefault()) { + generateAvailableDataXml(orga, availableData, state); + } + + generateDataXml(orga, content, state); + + /*if ((orga.getContacts() != null) + && (orga.getContacts().size() > 0) + && displayMembers) { + availableData.newChildElement("contacts"); + } + if ((orga.getPersons() != null) + && (orga.getPersons().size() > 0) + && displayMembers) { + availableData.newChildElement("members"); + } + + String show = getShowParam(state); + if (SHOW_CONTACTS.equals(show)) { + generateContactsXML(orga, content, state); + } else if (SHOW_MEMBERS.equals(show)) { + generateMembersXML(orga, content, state); + }*/ + } + private class ContactXmlLGenerator extends SimpleXMLGenerator { private GenericContact contact; diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/CompareFilter.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/CompareFilter.java new file mode 100644 index 000000000..70b4cb3e5 --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/CompareFilter.java @@ -0,0 +1,207 @@ +package com.arsdigita.cms.contenttypes.ui.panels; + +import com.arsdigita.xml.Element; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * The {@code CompareFilter} + * filters the object list using a provided value and a operator. Valid + * operators defined in the {@link Operators} enumeration. + * + * @author Jens Pelzetter + */ +public class CompareFilter implements Filter { + + private static final String ALL = "--ALL--"; + private final String property; + private final String label; + private final boolean allOption; + private final boolean allOptionIsDefault; + private final boolean propertyIsNumeric; + private Map options = new LinkedHashMap(); + private String value; + + public CompareFilter(final String label, + final String property, + final boolean allOption, + final boolean allOptionIsDefault, + final boolean propertyIsNumeric) { + this.property = property; + this.label = label; + this.allOption = allOption; + this.allOptionIsDefault = allOptionIsDefault; + this.propertyIsNumeric = propertyIsNumeric; + } + + @Override + public String getProperty() { + return property; + } + + @Override + public String getLabel() { + return label; + } + + public CompareFilter addOption(final String label, final String value) { + return addOption(label, Operators.EQ, value, false); + } + + public CompareFilter addOption(final String label, + final Operators operator, + final String value, + final boolean includeNull) { + Option option; + option = new Option(label, operator, value, includeNull); + options.put(label, option); + return this; + } + + public String getFilter() { + Option selectedOption; + StringBuffer filter; + + if ((value == null) || value.isEmpty()) { + if (allOptionIsDefault) { + value = ALL; + } else { + value = + new ArrayList