ChangeableSingleSelect (SingleSelect mit nachträglich veränderbaren Optionen)
git-svn-id: https://svn.libreccm.org/ccm/trunk@214 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
930c86c178
commit
82a007ce17
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue