ChangeableSingleSelect (SingleSelect mit nachträglich veränderbaren Optionen)

git-svn-id: https://svn.libreccm.org/ccm/trunk@214 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2009-07-15 15:15:47 +00:00
parent 930c86c178
commit 82a007ce17
4 changed files with 150 additions and 11 deletions

View File

@ -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 <jens@jp-digital.de>
*/
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;
}
}
}
}

View File

@ -10,6 +10,7 @@ import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.ui.ResettableContainer; import com.arsdigita.cms.contenttypes.ui.ResettableContainer;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.workflow.WorkflowLockedContainer; 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 { public class MembershipPropertiesStep extends ResettableContainer {
private static final Logger logger = Logger.getLogger(MembershipPropertiesStep.class);
private AuthoringKitWizard m_parent; private AuthoringKitWizard m_parent;
private ItemSelectionModel m_itemModel; private ItemSelectionModel m_itemModel;
private BigDecimalParameter m_membershipParam = new BigDecimalParameter("membership"); private BigDecimalParameter m_membershipParam = new BigDecimalParameter("membership");
private MembershipSelectionModel m_membershipModel; // = new MembershipSelectionModel(m_membershipParam); private MembershipSelectionModel m_membershipModel; // = new MembershipSelectionModel(m_membershipParam);
public MembershipPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { public MembershipPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) {
logger.debug("Creating MembershipPropertiesStep");
this.m_itemModel = itemModel; this.m_itemModel = itemModel;
this.m_parent = parent; this.m_parent = parent;
setMembershipSelectionModel(); setMembershipSelectionModel();
@ -59,7 +62,9 @@ public class MembershipPropertiesStep extends ResettableContainer {
} }
public FormSection getEditSheet() { public FormSection getEditSheet() {
return new MembershipPropertyForm(m_itemModel, m_membershipModel); MembershipPropertyForm propertyForm = new MembershipPropertyForm(m_itemModel, m_membershipModel);
propertyForm.setPropertiesStep(this);
return propertyForm;
} }
@Override @Override
@ -67,5 +72,4 @@ public class MembershipPropertiesStep extends ResettableContainer {
super.register(p); super.register(p);
p.addComponentStateParam(this, m_membershipParam); p.addComponentStateParam(this, m_membershipParam);
} }
} }

View File

@ -35,6 +35,7 @@ import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import java.util.Iterator;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
@ -49,10 +50,11 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
private MembershipSelectionModel m_membershipModel; private MembershipSelectionModel m_membershipModel;
private ItemSearchWidget m_personSearch; private ItemSearchWidget m_personSearch;
private final static String PERSON_SEARCH = "membership"; 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_from;
private com.arsdigita.bebop.form.Date m_to; private com.arsdigita.bebop.form.Date m_to;
private SaveCancelSection m_saveCancelSection; private SaveCancelSection m_saveCancelSection;
private MembershipPropertiesStep propertiesStep;
public MembershipPropertyForm(ItemSelectionModel itemModel, MembershipSelectionModel membershipModel) { public MembershipPropertyForm(ItemSelectionModel itemModel, MembershipSelectionModel membershipModel) {
super(new ColumnPanel(2)); super(new ColumnPanel(2));
@ -68,22 +70,23 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
addSubmissionListener(this); addSubmissionListener(this);
} }
protected void setPropertiesStep(MembershipPropertiesStep propertiesStep) {
this.propertiesStep = propertiesStep;
}
protected void addWidgets() { protected void addWidgets() {
logger.debug("adding widgets...");
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.orgnizationalunit.membership.Person"))); 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")); this.m_personSearch = new ItemSearchWidget(PERSON_SEARCH, ContentType.findByAssociatedObjectType("com.arsdigita.cms.contenttypes.Person"));
add(this.m_personSearch); add(this.m_personSearch);
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.orgnizationalunit.membership.Status"))); add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.orgnizationalunit.membership.Status")));
ParameterModel statusParam = new StringParameter((Membership.STATUS)); ParameterModel statusParam = new StringParameter((Membership.STATUS));
this.m_status = new SingleSelect(statusParam); this.m_status = new ChangeableSingleSelect(statusParam);
add(this.m_status); add(this.m_status);
//MembershipStatusCollection statusValues = MembershipStatusCollection.getMembershipStatusCollection(); //MembershipStatusCollection statusValues = MembershipStatusCollection.getMembershipStatusCollection();
DataCollection statusValues = SessionManager.getSession().retrieve(MembershipStatus.BASE_DATA_OBJECT_TYPE); this.addStatusOptions();
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()));
}
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.organizationalunit.membership.from"))); add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.organizationalunit.membership.from")));
ParameterModel fromParam = new DateParameter(Membership.FROM); ParameterModel fromParam = new DateParameter(Membership.FROM);
@ -97,6 +100,15 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
add(this.m_to); 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() { protected void addSaveCancelSection() {
this.m_saveCancelSection = new SaveCancelSection(); this.m_saveCancelSection = new SaveCancelSection();
try { try {
@ -159,9 +171,20 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
} }
public void init(FormSectionEvent e) throws FormProcessException { public void init(FormSectionEvent e) throws FormProcessException {
logger.debug("Init listener invoked.");
FormData data = e.getFormData(); FormData data = e.getFormData();
PageState state = e.getPageState(); 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); setVisible(state, true);
Membership membership; Membership membership;

View File

@ -118,7 +118,7 @@ public class MembershipStatusPropertyForm extends FormSection implements FormIni
//FormData data = e.getFormData(); //FormData data = e.getFormData();
status.setStatusName((String) m_statusName.getValue(state)); status.setStatusName((String) m_statusName.getValue(state));
status.save(); status.save();
logger.debug("properties set"); logger.debug("properties set");
} }