From 82a007ce1743e9bec7bb5f0ef5b8a800f1a9abc2 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 15 Jul 2009 15:15:47 +0000 Subject: [PATCH] =?UTF-8?q?ChangeableSingleSelect=20(SingleSelect=20mit=20?= =?UTF-8?q?nachtr=C3=A4glich=20ver=C3=A4nderbaren=20Optionen)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@214 8810af33-2d31-482b-a856-94f89814c4df --- .../ChangeableSingleSelect.java | 112 ++++++++++++++++++ .../MembershipPropertiesStep.java | 8 +- .../MembershipPropertyForm.java | 39 ++++-- .../MembershipStatusPropertyForm.java | 2 +- 4 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/ChangeableSingleSelect.java diff --git a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/ChangeableSingleSelect.java b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/ChangeableSingleSelect.java new file mode 100644 index 000000000..06dd23484 --- /dev/null +++ b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/ChangeableSingleSelect.java @@ -0,0 +1,112 @@ +package com.arsdigita.cms.contenttypes.ui.organizationalunit; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.RequestLocal; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.SingleSelect; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.util.Assert; +import java.util.ArrayList; +import java.util.Iterator; + +/** + * + * @author Jens Pelzetter + */ +public class ChangeableSingleSelect extends SingleSelect { + + private ArrayList m_options; + private RequestLocal m_requestOptions = new RequestLocal() { + + @Override + public Object initialValue(PageState ps) { + return new ArrayList(); + } + }; + + public ChangeableSingleSelect(String name) { + super(new StringParameter(name)); + } + + public ChangeableSingleSelect(ParameterModel model) { + super(model); + } + + @Override + public Iterator getOptions() { + return m_options.iterator(); + } + + @Override + public Iterator getOptions(PageState ps) { + ArrayList allOptions = new ArrayList(); + allOptions.addAll(m_options); + ArrayList requestOptions = (ArrayList) m_requestOptions.get(ps); + for (Iterator i = requestOptions.iterator(); i.hasNext();) { + Object obj = i.next(); + if (!allOptions.contains(obj)) { + allOptions.add(obj); + } + } + return allOptions.iterator(); + } + + @Override + public void clearOptions() { + //Assert.assertNotLocked(this); + this.m_options = new ArrayList(); + } + + @Override + public void addOption(Option opt, PageState ps) { + if (this.m_options == null) { + this.m_options = new ArrayList(); + } + ArrayList list = m_options; + if (ps == null) { + //Assert.assertNotLocked(this); + } else { + list = (ArrayList) m_requestOptions.get(ps); + } + opt.setGroup(this); + list.add(opt); + } + + public void removeOption(Option opt, PageState ps) { + ArrayList list = m_options; + if (ps == null) { + //Assert.assertNotLocked(this); + } else { + list = (ArrayList) m_requestOptions.get(ps); + } + list.remove(opt); + } + + @Override + public void removeOption(String key) { + removeOption(key, null); + } + + @Override + public void removeOption(String key, PageState ps) { + // This is not an entirely efficient technique. A more + // efficient solution is to switch to using a HashMap. + ArrayList list = m_options; + if (ps == null) { + //Assert.assertNotLocked(this); + } else { + list = (ArrayList) m_requestOptions.get(ps); + } + + Iterator i = list.iterator(); + Option o = null; + while (i.hasNext()) { + o = (Option) i.next(); + if (o.getValue().equals(key)) { + list.remove(o); + break; + } + } + } +} diff --git a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertiesStep.java b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertiesStep.java index 237761d7a..5828279a9 100644 --- a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertiesStep.java +++ b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertiesStep.java @@ -10,6 +10,7 @@ import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.contenttypes.ui.ResettableContainer; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.workflow.WorkflowLockedContainer; +import org.apache.log4j.Logger; /** * @@ -17,12 +18,14 @@ import com.arsdigita.cms.ui.workflow.WorkflowLockedContainer; */ public class MembershipPropertiesStep extends ResettableContainer { + private static final Logger logger = Logger.getLogger(MembershipPropertiesStep.class); private AuthoringKitWizard m_parent; private ItemSelectionModel m_itemModel; private BigDecimalParameter m_membershipParam = new BigDecimalParameter("membership"); private MembershipSelectionModel m_membershipModel; // = new MembershipSelectionModel(m_membershipParam); public MembershipPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { + logger.debug("Creating MembershipPropertiesStep"); this.m_itemModel = itemModel; this.m_parent = parent; setMembershipSelectionModel(); @@ -59,7 +62,9 @@ public class MembershipPropertiesStep extends ResettableContainer { } public FormSection getEditSheet() { - return new MembershipPropertyForm(m_itemModel, m_membershipModel); + MembershipPropertyForm propertyForm = new MembershipPropertyForm(m_itemModel, m_membershipModel); + propertyForm.setPropertiesStep(this); + return propertyForm; } @Override @@ -67,5 +72,4 @@ public class MembershipPropertiesStep extends ResettableContainer { super.register(p); p.addComponentStateParam(this, m_membershipParam); } - } diff --git a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertyForm.java b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertyForm.java index 93e22df9a..67273d83b 100644 --- a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertyForm.java +++ b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipPropertyForm.java @@ -35,6 +35,7 @@ import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.SessionManager; import com.arsdigita.util.Assert; import com.arsdigita.util.UncheckedWrapperException; +import java.util.Iterator; import org.apache.log4j.Logger; /** @@ -49,10 +50,11 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe private MembershipSelectionModel m_membershipModel; private ItemSearchWidget m_personSearch; private final static String PERSON_SEARCH = "membership"; - private SingleSelect m_status; + private ChangeableSingleSelect m_status; private com.arsdigita.bebop.form.Date m_from; private com.arsdigita.bebop.form.Date m_to; private SaveCancelSection m_saveCancelSection; + private MembershipPropertiesStep propertiesStep; public MembershipPropertyForm(ItemSelectionModel itemModel, MembershipSelectionModel membershipModel) { super(new ColumnPanel(2)); @@ -68,22 +70,23 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe addSubmissionListener(this); } + protected void setPropertiesStep(MembershipPropertiesStep propertiesStep) { + this.propertiesStep = propertiesStep; + } + protected void addWidgets() { + logger.debug("adding widgets..."); + add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.orgnizationalunit.membership.Person"))); this.m_personSearch = new ItemSearchWidget(PERSON_SEARCH, ContentType.findByAssociatedObjectType("com.arsdigita.cms.contenttypes.Person")); add(this.m_personSearch); add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.orgnizationalunit.membership.Status"))); ParameterModel statusParam = new StringParameter((Membership.STATUS)); - this.m_status = new SingleSelect(statusParam); + this.m_status = new ChangeableSingleSelect(statusParam); add(this.m_status); //MembershipStatusCollection statusValues = MembershipStatusCollection.getMembershipStatusCollection(); - DataCollection statusValues = SessionManager.getSession().retrieve(MembershipStatus.BASE_DATA_OBJECT_TYPE); - while (statusValues.next()) { - //this.m_status.addOption(new Option(statusValues.getMembershipStatusId().toString(), statusValues.getMembershipStatusName())); - MembershipStatus status = (MembershipStatus) DomainObjectFactory.newInstance(statusValues.getDataObject()); - this.m_status.addOption(new Option(status.getID().toString(), status.getStatusName())); - } + this.addStatusOptions(); add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.organizationalunit.membership.from"))); ParameterModel fromParam = new DateParameter(Membership.FROM); @@ -97,6 +100,15 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe add(this.m_to); } + private void addStatusOptions() { + DataCollection statusValues = SessionManager.getSession().retrieve(MembershipStatus.BASE_DATA_OBJECT_TYPE); + while (statusValues.next()) { + //this.m_status.addOption(new Option(statusValues.getMembershipStatusId().toString(), statusValues.getMembershipStatusName())); + MembershipStatus status = (MembershipStatus) DomainObjectFactory.newInstance(statusValues.getDataObject()); + this.m_status.addOption(new Option(status.getID().toString(), status.getStatusName())); + } + } + protected void addSaveCancelSection() { this.m_saveCancelSection = new SaveCancelSection(); try { @@ -159,9 +171,20 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe } public void init(FormSectionEvent e) throws FormProcessException { + logger.debug("Init listener invoked."); + FormData data = e.getFormData(); PageState state = e.getPageState(); + //Iterator it = this.m_status.getOptions(); + //while(it.hasNext()) { + // Option o = (Option) it.next(); + // //this.m_status.removeOption(o); + //} + + this.m_status.clearOptions(); + this.addStatusOptions(); + setVisible(state, true); Membership membership; diff --git a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipStatusPropertyForm.java b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipStatusPropertyForm.java index 532e2d484..55e95b25f 100644 --- a/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipStatusPropertyForm.java +++ b/ccm-cms-types-organizationalunit/src/com/arsdigita/cms/contenttypes/ui/organizationalunit/MembershipStatusPropertyForm.java @@ -118,7 +118,7 @@ public class MembershipStatusPropertyForm extends FormSection implements FormIni //FormData data = e.getFormData(); status.setStatusName((String) m_statusName.getValue(state)); - status.save(); + status.save(); logger.debug("properties set"); }