ResearchNetwork: Code vollstaendig, kompiliert aber noch nicht
git-svn-id: https://svn.libreccm.org/ccm/trunk@224 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
f55e82c6f6
commit
e553d2e2cd
|
|
@ -24,7 +24,7 @@ import com.arsdigita.cms.ContentPage;
|
|||
import com.arsdigita.cms.DomainObject;
|
||||
|
||||
object type type ResearchNetwork extends ContentPage {
|
||||
String[0..1] researchNetworkTitle = ct_researchNetworks.researchnetwork_title VARCHAR(512);
|
||||
String[1..1] researchNetworkTitle = ct_researchNetworks.researchnetwork_title VARCHAR(512);
|
||||
String[0..1] researchNetworkDirection = ct_researchnetwork.researchnetwork_direction VARCHAR(1024);
|
||||
String[0..1] researchNetworkCoordination = ct_researchnetwork.researchnetwork_coordination VARCHAR(1024);
|
||||
String[0..1] researchNetworkDescription = ct_researchnetwork.researchnetwork_description VARCHAR(4096);
|
||||
|
|
|
|||
|
|
@ -20,24 +20,24 @@ model com.arsdigita.cms.contenttypes;
|
|||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.kernel.ACSObject;
|
||||
|
||||
object type ResearchNetworkMembers extends ACSObject {
|
||||
Person[0..1] targetItem = join ct_researchnetworkmembers_target_item_id to ct_persons.person_id;
|
||||
object type ResearchNetworkMembership extends ACSObject {
|
||||
Person[0..1] targetItem = join ct_researchnetworkmemberships_target_item_id to ct_persons.person_id;
|
||||
|
||||
reference key(ct_researchnetworkmembers.member_id);
|
||||
aggressive load (memberOwner.id);
|
||||
reference key(ct_researchnetworkmemberships.membership_id);
|
||||
aggressive load (membershipOwner.id);
|
||||
}
|
||||
|
||||
association {
|
||||
composite ResearchNetwork[0..1] memberOwner = join ct_researchnetworkmembers.owner_id to ct_researchnetworks_researchnetwork_id;
|
||||
composite ResearchNetworkMembers[0..n] members = join ct_researchnetworks.researchnetwork.id to ct_researchnetworkmembers.owner_id;
|
||||
composite ResearchNetwork[0..1] membershipOwner = join ct_researchnetworkmemberships.owner_id to ct_researchnetworks_researchnetwork_id;
|
||||
composite ResearchNetworkMembers[0..n] members = join ct_researchnetworks.researchnetwork.id to ct_researchnetworkmemberships.owner_id;
|
||||
}
|
||||
|
||||
query getResearchNetworkMemberReferingToResearchNetworks {
|
||||
query getResearchNetworkMembershipsReferingToResearchNetworks {
|
||||
BigDecimal id;
|
||||
|
||||
do {
|
||||
select m.member_id from ResearchNetworkMembers m where m.target_item_id = :itemID;
|
||||
select m.member_id from ResearchNetworkMemberships m where m.target_item_id = :itemID;
|
||||
} map {
|
||||
id = m.researchnetworkmember_id;
|
||||
id = m.membership_id;
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package src.com.arsdigita.cms.contenttypes;
|
||||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.runtime.LegacyInitEvent;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkInitializer extends ContentTypeInitializer {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(ResearchNetworkInitializer.class);
|
||||
|
||||
public ResearchNetworkInitializer() {
|
||||
super("ccm-cms-types-researchnetwork.pdl.mf", ResearchNetwork.BASE_DATA_OBJECT_TYPE);
|
||||
}
|
||||
|
||||
public String getStylesheet() {
|
||||
return "static/content-types/com/arsdigita/cms/contenttypes/ResearchNetwork.xsl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(LegacyInitEvent evt) {
|
||||
super.init(evt);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkLoader extends AbstractContentTypeLoader {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ResearchNetworkLoader.class);
|
||||
private final static String[] TYPES = {"/WEB-INF/content-types/com/arsdigita/cms/contenttypes/ResearchNetwork.xml"};
|
||||
|
||||
@Override
|
||||
protected String[] getTypes() {
|
||||
return TYPES;
|
||||
}
|
||||
|
||||
public ResearchNetworkLoader() {
|
||||
super();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.dispatcher.ItemResolver;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.kernel.ACSObject;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.Filter;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.Session;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.web.URL;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkMembership extends ACSObject {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(ResearchNetwork.class);
|
||||
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.ResearchNetworkMember";
|
||||
public static final String MEMBER_OWNER = "memberOwner";
|
||||
public static final String TARGET_ITEM = "targetItem";
|
||||
|
||||
public ResearchNetworkMembership() {
|
||||
super(BASE_DATA_OBJECT_TYPE);
|
||||
}
|
||||
|
||||
public ResearchNetworkMembership(DataObject obj) {
|
||||
super(obj);
|
||||
}
|
||||
|
||||
public ResearchNetworkMembership(BigDecimal id) {
|
||||
this(new OID(BASE_DATA_OBJECT_TYPE, id));
|
||||
}
|
||||
|
||||
public ResearchNetworkMembership(OID oid) {
|
||||
super(oid);
|
||||
}
|
||||
|
||||
public ResearchNetworkMembership(String type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
public ResearchNetwork getResearchNetworkMembershipOwner() {
|
||||
DataObject obj = (DataObject) get(MEMBER_OWNER);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
} else {
|
||||
return (ResearchNetwork) DomainObjectFactory.newInstance(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public void setResearchNetworkMembershipOwner(ResearchNetwork rn) {
|
||||
Assert.exists(rn, ResearchNetwork.class);
|
||||
s_log.debug("Setting member owner to " + rn.getResearchNetworkTitle());
|
||||
setAssociation(MEMBER_OWNER, rn);
|
||||
}
|
||||
|
||||
public Person getTargetItem() {
|
||||
DataObject obj = (DataObject) get(TARGET_ITEM);
|
||||
return (Person) DomainObjectFactory.newInstance(obj);
|
||||
}
|
||||
|
||||
public void setTargetItem(Person person) {
|
||||
Assert.exists(person, Person.class);
|
||||
setAssociation(TARGET_ITEM, person);
|
||||
}
|
||||
|
||||
public String getURI(PageState state) {
|
||||
Person person = this.getTargetItem();
|
||||
|
||||
if (person == null) {
|
||||
s_log.error(getOID() + " is a link between a ResearchNetwork and a Person, but the associated person is null");
|
||||
return "";
|
||||
}
|
||||
|
||||
ContentSection section = person.getContentSection();
|
||||
ItemResolver resolver = section.getItemResolver();
|
||||
String url = resolver.generateItemURL(state, person, section, person.getVersion());
|
||||
|
||||
return URL.there(state.getRequest(), url).toString();
|
||||
}
|
||||
|
||||
public static DataCollection getReferingPersons(Person person) {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection members = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
Filter filter = members.addInSubqueryFilter("id", "com.arsdigita.cms.contenttypes.getReferingPersons");
|
||||
filter.set("itemID", person.getID());
|
||||
|
||||
return members;
|
||||
}
|
||||
|
||||
public static DataCollection getMemberships(ResearchNetwork rn) {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection dc = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
dc.addEqualsFilter(MEMBER_OWNER + ".id", rn.getID());
|
||||
return dc;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormSection;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedContainer;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkMembershipPropertiesStep extends ResettableContainer {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(ResearchNetworkMembershipPropertiesStep.class);
|
||||
private AuthoringKitWizard m_parent;
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private BigDecimalParameter m_membershipParam = new BigDecimalParameter("membership");
|
||||
private ResearchNetworkMembershipSelectionModel m_membershipModel;
|
||||
|
||||
public ResearchNetworkMembershipPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) {
|
||||
s_log.debug("Creating ResearchNetworkMembershipPropertiesStep");
|
||||
this.m_itemModel = itemModel;
|
||||
this.m_parent = parent;
|
||||
setMembershipSelectionModel();
|
||||
add(getDisplayComponent());
|
||||
|
||||
Form form = new Form("researchNetworkMembershipEditForm");
|
||||
form.add(getEditSheet());
|
||||
|
||||
WorkflowLockedContainer edit = new WorkflowLockedContainer(itemModel);
|
||||
edit.add(form);
|
||||
add(edit);
|
||||
}
|
||||
|
||||
protected void setMembershipSelectionModel() {
|
||||
setMembershipSelectionModel(new ResearchNetworkMembershipSelectionModel(this.m_membershipParam));
|
||||
}
|
||||
|
||||
protected void setMembershipSelectionModel(ResearchNetworkMembershipSelectionModel membershipModel) {
|
||||
this.m_membershipModel = membershipModel;
|
||||
}
|
||||
|
||||
protected ResearchNetworkMembershipSelectionModel getMembershipSelectionModel() {
|
||||
return this.m_membershipModel;
|
||||
}
|
||||
|
||||
protected BigDecimalParameter getMembershipParam() {
|
||||
return this.m_membershipParam;
|
||||
}
|
||||
|
||||
public Component getDisplayComponent() {
|
||||
SimpleContainer container = new SimpleContainer();
|
||||
container.add(new ResearchNetworkMembershipTable(m_itemModel, m_membershipModel));
|
||||
return container;
|
||||
}
|
||||
|
||||
public FormSection getEditSheet() {
|
||||
ResearchNetworkMembershipPropertyForm propertyForm = new ResearchNetworkMembershipPropertyForm(m_itemModel, m_membershipModel);
|
||||
propertyForm.setPropertiesStep(this);
|
||||
return propertyForm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(Page p) {
|
||||
super.register(p);
|
||||
p.addComponentStateParam(this, m_membershipParam);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,182 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.FormSection;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SaveCancelSection;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||
import com.arsdigita.bebop.event.FormValidationListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ContentType;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.Person;
|
||||
import com.arsdigita.cms.contenttypes.ResearchNetwork;
|
||||
import com.arsdigita.cms.contenttypes.ResearchNetworkMembership;
|
||||
import com.arsdigita.cms.ui.ItemSearchWidget;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkMembershipPropertyForm extends FormSection implements FormInitListener, FormProcessListener, FormValidationListener, FormSubmissionListener {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ResearchNetworkMembershipPropertyForm.class);
|
||||
public final static String ID = "researchnetwork_membership_edit";
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private ResearchNetworkMembershipSelectionModel m_membershipModel;
|
||||
private ItemSearchWidget m_personSearch;
|
||||
private final static String PERSON_SEARCH = "membership";
|
||||
private SaveCancelSection m_saveCancelSection;
|
||||
private ResearchNetworkMembershipPropertiesStep m_properties_step;
|
||||
|
||||
public ResearchNetworkMembershipPropertyForm(ItemSelectionModel itemModel, ResearchNetworkMembershipSelectionModel membershipModel) {
|
||||
super(new ColumnPanel(2));
|
||||
this.m_itemModel = itemModel;
|
||||
this.m_membershipModel = membershipModel;
|
||||
|
||||
addWidgets();
|
||||
addSaveCancelSection();
|
||||
|
||||
addInitListener(this);
|
||||
addValidationListener(this);
|
||||
addProcessListener(this);
|
||||
addSubmissionListener(this);
|
||||
}
|
||||
|
||||
protected void setPropertiesStep(ResearchNetworkMembershipPropertiesStep propertiesStep) {
|
||||
this.m_properties_step = propertiesStep;
|
||||
}
|
||||
|
||||
protected void addWidgets() {
|
||||
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.researchnetwork.membership.person")));
|
||||
this.m_personSearch = new ItemSearchWidget(PERSON_SEARCH, ContentType.findByAssociatedObjectType("com.arsdigita.cms.contenttypes.Person"));
|
||||
add(this.m_personSearch);
|
||||
}
|
||||
|
||||
protected void addSaveCancelSection() {
|
||||
this.m_saveCancelSection = new SaveCancelSection();
|
||||
try {
|
||||
this.m_saveCancelSection.getCancelButton().addPrintListener(new PrintListener() {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
Submit target = (Submit) e.getTarget();
|
||||
if (m_membershipModel.isSelected(e.getPageState())) {
|
||||
target.setButtonLabel("cancel");
|
||||
} else {
|
||||
target.setButtonLabel("Reset");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.m_saveCancelSection.getSaveButton().addPrintListener(new PrintListener() {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
Submit target = (Submit) e.getTarget();
|
||||
if(m_membershipModel.isSelected(e.getPageState())) {
|
||||
target.setButtonLabel("Save");
|
||||
} else {
|
||||
target.setButtonLabel("Create");
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch(Exception ex) {
|
||||
throw new UncheckedWrapperException("this cannot happen", ex);
|
||||
}
|
||||
add(this.m_saveCancelSection, ColumnPanel.FULL_WIDTH);
|
||||
}
|
||||
|
||||
public SaveCancelSection getSaveCancelSection() {
|
||||
return this.m_saveCancelSection;
|
||||
}
|
||||
|
||||
protected ResearchNetworkMembershipSelectionModel getMembershipSelectionModel() {
|
||||
return this.m_membershipModel;
|
||||
}
|
||||
|
||||
protected ResearchNetwork getResearchNetwork(PageState state) {
|
||||
return (ResearchNetwork) m_itemModel.getSelectedItem(state);
|
||||
}
|
||||
|
||||
protected ResearchNetworkMembership createMembership(PageState state) {
|
||||
ResearchNetwork network = this.getResearchNetwork(state);
|
||||
s_log.debug ("Owning network " + network.getResearchNetworkTitle());
|
||||
Assert.exists(network);
|
||||
ResearchNetworkMembership membership = new ResearchNetworkMembership();
|
||||
membership.setResearchNetworkMembershipOwner(network);
|
||||
s_log.debug("set network to: " + membership.getResearchNetworkMembershipOwner().getResearchNetworkTitle());
|
||||
return membership;
|
||||
}
|
||||
|
||||
protected void setMembershipProperties(ResearchNetworkMembership membership, FormSectionEvent event) {
|
||||
PageState state = event.getPageState();
|
||||
FormData data = event.getFormData();
|
||||
|
||||
membership.setTargetItem((Person) data.get(PERSON_SEARCH));
|
||||
|
||||
membership.save();
|
||||
}
|
||||
|
||||
public void init(FormSectionEvent event) throws FormProcessException {
|
||||
FormData data = event.getFormData();
|
||||
PageState state = event.getPageState();
|
||||
|
||||
setVisible(state, true);
|
||||
|
||||
ResearchNetworkMembership membership;
|
||||
if (m_membershipModel.isSelected(state)) {
|
||||
membership = m_membershipModel.getSelectedMembership(state);
|
||||
try {
|
||||
data.put(PERSON_SEARCH, membership.getTargetItem());
|
||||
} catch(IllegalStateException ex) {
|
||||
throw ex;
|
||||
}
|
||||
} else {
|
||||
data.put(PERSON_SEARCH, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void process(FormSectionEvent event) throws FormProcessException {
|
||||
PageState state = event.getPageState();
|
||||
ResearchNetworkMembership membership;
|
||||
|
||||
if (this.getSaveCancelSection().getCancelButton().isSelected(state)) {
|
||||
this.m_membershipModel.clearSelection(state);
|
||||
} else {
|
||||
if (this.m_membershipModel.isSelected(state)) {
|
||||
membership = m_membershipModel.getSelectedMembership(state);
|
||||
} else {
|
||||
membership = createMembership(state);
|
||||
}
|
||||
setMembershipProperties(membership, event);
|
||||
}
|
||||
|
||||
this.m_membershipModel.clearSelection(state);
|
||||
init(event);
|
||||
}
|
||||
|
||||
public void validate(FormSectionEvent event) throws FormProcessException {
|
||||
if (event.getFormData().get(PERSON_SEARCH) == null) {
|
||||
throw new FormProcessException("Person selection is required");
|
||||
}
|
||||
}
|
||||
|
||||
public void submitted(FormSectionEvent event) throws FormProcessException {
|
||||
if (this.m_saveCancelSection.getCancelButton().isSelected(event.getPageState())) {
|
||||
m_membershipModel.clearSelection(event.getPageState());
|
||||
init(event);
|
||||
throw new FormProcessException("cancelled");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.cms.contenttypes.ResearchNetworkMembership;
|
||||
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkMembershipSelectionModel extends ACSObjectSelectionModel {
|
||||
|
||||
public ResearchNetworkMembershipSelectionModel(BigDecimalParameter param) {
|
||||
super(ResearchNetworkMembership.class.getName(), ResearchNetworkMembership.BASE_DATA_OBJECT_TYPE, param);
|
||||
}
|
||||
|
||||
public ResearchNetworkMembershipSelectionModel(String itemClass, String objectType, BigDecimalParameter param) {
|
||||
super(itemClass, objectType, param);
|
||||
}
|
||||
|
||||
public ResearchNetworkMembership getSelectedMembership(PageState state) {
|
||||
return (ResearchNetworkMembership) getSelectedObject(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.ExternalLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.event.TableActionEvent;
|
||||
import com.arsdigita.bebop.event.TableActionListener;
|
||||
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||
import com.arsdigita.bebop.table.TableColumn;
|
||||
import com.arsdigita.bebop.table.TableColumnModel;
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.dispatcher.Utilities;
|
||||
import com.arsdigita.cms.SecurityManager;
|
||||
import com.arsdigita.cms.contenttypes.Membership;
|
||||
import com.arsdigita.cms.contenttypes.Person;
|
||||
import com.arsdigita.cms.contenttypes.ResearchNetworkMembership;
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkMembershipTable extends Table {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ResearchNetworkMembershipTable.class);
|
||||
private ResearchNetworkMembershipSelectionModel m_membershipModel;
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private TableColumn m_personCol;
|
||||
private TableColumn m_editCol;
|
||||
private TableColumn m_delCol;
|
||||
private RequestLocal m_size;
|
||||
private RequestLocal m_editor;
|
||||
protected final static String EDIT_EVENT = "Edit";
|
||||
protected final static String DELETE_EVENT = "Delete";
|
||||
|
||||
public ResearchNetworkMembershipTable(ItemSelectionModel itemModel, ResearchNetworkMembershipSelectionModel membershipModel) {
|
||||
super();
|
||||
this.m_itemModel = itemModel;
|
||||
this.m_membershipModel = membershipModel;
|
||||
addColumns();
|
||||
|
||||
m_size = new RequestLocal();
|
||||
m_editor = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
public Object initialValue(PageState state) {
|
||||
SecurityManager sm = Utilities.getSecurityManager(state);
|
||||
ContentItem item = m_itemModel.getSelectedItem(state);
|
||||
Boolean val = new Boolean(sm.canAccess(state.getRequest(), SecurityManager.EDIT_ITEM, item));
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
Label empty = new Label("This research network has no associated persons.");
|
||||
setEmptyView(empty);
|
||||
addTableActionListener(new ResearchNetworkMembershipTableActionListener());
|
||||
setRowSelectionModel(m_membershipModel);
|
||||
setDefaultCellRenderer(new ResearchNetworkMembershipTableCellRenderer());
|
||||
setModelBuilder(new ResearchNetworkMembershipTableModelBuilder(itemModel));
|
||||
}
|
||||
|
||||
public void addColumns() {
|
||||
TableColumnModel model = getColumnModel();
|
||||
this.m_personCol = new TableColumn(0, "Person");
|
||||
this.m_editCol = new TableColumn(1, "Edit");
|
||||
this.m_delCol = new TableColumn(2, "Delete");
|
||||
|
||||
model.add(this.m_personCol);
|
||||
model.add(this.m_editCol);
|
||||
model.add(this.m_delCol);
|
||||
setColumnModel(model);
|
||||
}
|
||||
|
||||
private class ResearchNetworkMembershipTableCellRenderer implements TableCellRenderer {
|
||||
|
||||
public Component getComponent(Table table, PageState state, Object value, boolean isSelected, Object key, int row, int column) {
|
||||
ResearchNetworkMembership membership = (ResearchNetworkMembership) value;
|
||||
if (m_size.get(state) == null) {
|
||||
m_size.set(state, new Long(((ResearchNetworkMembershipTableModelBuilder.ResearchNetworkMembershipTableModel) table.getTableModel(state)).size()));
|
||||
}
|
||||
|
||||
String url = membership.getURI(state);
|
||||
if (column == m_personCol.getModelIndex()) {
|
||||
Person person = membership.getTargetItem();
|
||||
StringBuilder fullNameBuilder = new StringBuilder();
|
||||
|
||||
if (person.getTitlePre() != null) {
|
||||
fullNameBuilder.append(person.getTitlePre());
|
||||
fullNameBuilder.append(" ");
|
||||
}
|
||||
if (person.getGivenName() != null) {
|
||||
fullNameBuilder.append(person.getGivenName());
|
||||
fullNameBuilder.append(" ");
|
||||
}
|
||||
if (person.getSurname() != null) {
|
||||
fullNameBuilder.append(person.getSurname());
|
||||
fullNameBuilder.append(" ");
|
||||
}
|
||||
if (person.getTitlePost() != null) {
|
||||
fullNameBuilder.append(person.getTitlePost());
|
||||
}
|
||||
|
||||
String fullName = fullNameBuilder.toString();
|
||||
ExternalLink extLink = new ExternalLink(fullName, url);
|
||||
return extLink;
|
||||
} else if (column == m_editCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
if (isSelected) {
|
||||
return new Label(EDIT_EVENT, Label.BOLD);
|
||||
} else {
|
||||
return new ControlLink(EDIT_EVENT);
|
||||
}
|
||||
} else {
|
||||
return new Label(EDIT_EVENT);
|
||||
}
|
||||
} else if (column == m_delCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
return new ControlLink(DELETE_EVENT);
|
||||
} else {
|
||||
return new Label(DELETE_EVENT);
|
||||
}
|
||||
} else {
|
||||
throw new UncheckedWrapperException("column out of bounds");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class ResearchNetworkMembershipTableActionListener implements TableActionListener {
|
||||
|
||||
private ResearchNetworkMembership getMembership(TableActionEvent event) {
|
||||
Object obj = event.getRowKey();
|
||||
BigDecimal id;
|
||||
if (obj instanceof String) {
|
||||
id = new BigDecimal((String) obj);
|
||||
} else {
|
||||
id = (BigDecimal) obj;
|
||||
}
|
||||
|
||||
Assert.exists(id);
|
||||
ResearchNetworkMembership membership;
|
||||
try {
|
||||
membership = (ResearchNetworkMembership) DomainObjectFactory.newInstance(new OID(ResearchNetworkMembership.BASE_DATA_OBJECT_TYPE, id));
|
||||
} catch(DataObjectNotFoundException ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
return membership;
|
||||
}
|
||||
|
||||
public void cellSelected(TableActionEvent e) {
|
||||
int col = e.getColumn().intValue();
|
||||
PageState state = e.getPageState();
|
||||
ResearchNetworkMembership membership = getMembership(e);
|
||||
Assert.exists(membership);
|
||||
|
||||
if (col == m_editCol.getModelIndex()) {
|
||||
if(Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
m_membershipModel.setSelectedObject(state, membership);
|
||||
}
|
||||
} else if(col == m_delCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
try {
|
||||
m_membershipModel.clearSelection(state);
|
||||
membership.delete();
|
||||
} catch(Exception ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void headSelected(TableActionEvent e) {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.cms.contenttypes.*;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.table.TableModel;
|
||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkMembershipTableModelBuilder extends LockableImpl implements TableModelBuilder {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ResearchNetworkMembershipTableModelBuilder.class);
|
||||
|
||||
private ItemSelectionModel m_itemModel;
|
||||
|
||||
public ResearchNetworkMembershipTableModelBuilder(ItemSelectionModel itemModel) {
|
||||
this.m_itemModel = itemModel;
|
||||
}
|
||||
|
||||
public TableModel makeModel(Table t, PageState s) {
|
||||
DataCollection members = getMembers(s);
|
||||
|
||||
if(members.isEmpty()) {
|
||||
return Table.EMPTY_MODEL;
|
||||
} else {
|
||||
return new ResearchNetworkMembershipTableModel(members);
|
||||
}
|
||||
}
|
||||
|
||||
public DataCollection getMembers(PageState state) {
|
||||
Assert.isTrue(this.m_itemModel.isSelected(state), "item selected");
|
||||
ResearchNetwork network = (ResearchNetwork) this.m_itemModel.getSelectedItem(state);
|
||||
return ResearchNetworkMembership.getMemberships(network);
|
||||
}
|
||||
|
||||
public static class ResearchNetworkMembershipTableModel implements TableModel {
|
||||
|
||||
ResearchNetworkMembership m_membership;
|
||||
DataCollection m_memberships;
|
||||
|
||||
public ResearchNetworkMembershipTableModel(DataCollection memberships) {
|
||||
m_memberships = memberships;
|
||||
m_membership = null;
|
||||
}
|
||||
|
||||
public int getColumnCount() {
|
||||
return (int) m_memberships.size();
|
||||
}
|
||||
|
||||
public boolean nextRow() {
|
||||
if (m_memberships.next()) {
|
||||
DataObject obj = m_memberships.getDataObject();
|
||||
m_membership = (ResearchNetworkMembership) DomainObjectFactory.newInstance(obj);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getElementAt(int columnIndex) {
|
||||
return m_membership;
|
||||
}
|
||||
|
||||
public Object getKeyAt(int columnIndex) {
|
||||
return m_membership.getID();
|
||||
}
|
||||
|
||||
public long size() {
|
||||
return m_memberships.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
|
||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
||||
import com.arsdigita.domain.DomainObject;
|
||||
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
|
||||
import java.text.DateFormat;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkPropertiesStep extends SimpleEditStep {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ResearchNetworkPropertiesStep.class);
|
||||
public final static String EDIT_SHEET_NAME = "edit";
|
||||
|
||||
public ResearchNetworkPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) {
|
||||
super(itemModel, parent);
|
||||
|
||||
setDefaultEditKey(EDIT_SHEET_NAME);
|
||||
BasicPageForm editSheet;
|
||||
|
||||
editSheet = new ResearchNetworkPropertyForm(itemModel, this);
|
||||
add(EDIT_SHEET_NAME, "Edit", new WorkflowLockedComponentAccess(editSheet, itemModel), editSheet.getSaveCancelSection().getCancelButton());
|
||||
|
||||
setDisplayComponent(getResearchNetworkPropertySheet(itemModel));
|
||||
}
|
||||
|
||||
public static Component getResearchNetworkPropertySheet(ItemSelectionModel itemModel) {
|
||||
DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel);
|
||||
|
||||
if (!ContentSection.getConfig().getHideLaunchDate()) {
|
||||
sheet.add(GlobalizationUtil.globalize("cms.ui.authoring.page_launch_date"), ContentPage.LAUNCH_DATE, new DomainObjectPropertySheet.AttributeFormatter() {
|
||||
|
||||
public String format(DomainObject obj, String attribute, PageState state) {
|
||||
ContentPage page = (ContentPage) obj;
|
||||
if (page.getLaunchDate() != null) {
|
||||
return DateFormat.getDateInstance(DateFormat.LONG).format(page.getLaunchDate());
|
||||
} else {
|
||||
return (String) GlobalizationUtil.globalize("cms.ui.unknown").localize();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return sheet;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
package com.arsdigita.cms.contenttypes.ui;
|
||||
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||
import com.arsdigita.bebop.form.TextArea;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
||||
import com.arsdigita.bebop.parameters.ParameterModel;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.ResearchNetwork;
|
||||
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ResearchNetworkPropertyForm extends BasicPageForm implements FormProcessListener, FormInitListener, FormSubmissionListener {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ResearchNetworkPropertyForm.class);
|
||||
private ResearchNetworkPropertiesStep m_step;
|
||||
public final static String RESEARCHNETWORK_TITLE = ResearchNetwork.RESEARCHNETWORK_TITLE;
|
||||
public final static String RESEARCHNETWORK_DIRECTION = ResearchNetwork.RESEARCHNETWORK_DIRECTION;
|
||||
public final static String RESEARCHNETWORK_COORDINATION = ResearchNetwork.RESEARCHNETWORK_COORDINATION;
|
||||
public final static String RESEARCHNETWORK_DESCRIPTION = ResearchNetwork.RESEARCHNETWORK_DESCRIPTION;
|
||||
public final static String RESEARCHNETWORK_WEBSITE = ResearchNetwork.RESEARCHNETWORK_WEBSITE;
|
||||
public final static String ID = "ResearchNetwork_edit";
|
||||
|
||||
public ResearchNetworkPropertyForm(ItemSelectionModel itemModel) {
|
||||
this(itemModel, null);
|
||||
}
|
||||
|
||||
public ResearchNetworkPropertyForm(ItemSelectionModel itemModel, ResearchNetworkPropertiesStep step) {
|
||||
super(ID, itemModel);
|
||||
this.m_step = step;
|
||||
addSubmissionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWidgets() {
|
||||
super.addWidgets();
|
||||
|
||||
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.researchnetwork.ui.title")));
|
||||
ParameterModel researchNetworkTitleParam = new StringParameter(RESEARCHNETWORK_TITLE);
|
||||
TextField researchNetworkTitle = new TextField(researchNetworkTitleParam);
|
||||
researchNetworkTitle.addValidationListener(new NotNullValidationListener());
|
||||
add(researchNetworkTitle);
|
||||
|
||||
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.researchnetwork.ui.direction")));
|
||||
TextArea researchNetworkDirection = new TextArea(RESEARCHNETWORK_DIRECTION);
|
||||
researchNetworkDirection.setRows(5);
|
||||
researchNetworkDirection.setCols(30);
|
||||
add(researchNetworkDirection);
|
||||
|
||||
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.researchnetwork.ui.coordination")));
|
||||
TextArea researchNetworkCoordination = new TextArea(RESEARCHNETWORK_COORDINATION);
|
||||
researchNetworkCoordination.setRows(5);
|
||||
researchNetworkCoordination.setCols(30);
|
||||
add(researchNetworkCoordination);
|
||||
|
||||
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.researchnetwork.ui.website")));
|
||||
ParameterModel researchNetworkWebsiteParam = new StringParameter(RESEARCHNETWORK_WEBSITE);
|
||||
TextField researchNetworkWebsite = new TextField(researchNetworkWebsiteParam);
|
||||
add(researchNetworkWebsite);
|
||||
|
||||
add(new Label(GlobalizationUtil.globalize("cms.contenttypes.researchnetwork.ui.description")));
|
||||
TextArea researchNetworkAreaDescription = new TextArea(RESEARCHNETWORK_DESCRIPTION);
|
||||
researchNetworkAreaDescription.setRows(10);
|
||||
researchNetworkAreaDescription.setCols(30);
|
||||
add(researchNetworkAreaDescription);
|
||||
}
|
||||
|
||||
public void init(FormSectionEvent e) throws FormProcessException {
|
||||
FormData data = e.getFormData();
|
||||
ResearchNetwork network = (ResearchNetwork) super.initBasicWidgets(e);
|
||||
|
||||
data.put(RESEARCHNETWORK_TITLE, network.getResearchNetworkTitle());
|
||||
data.put(RESEARCHNETWORK_DIRECTION, network.getResearchNetworkDirection());
|
||||
data.put(RESEARCHNETWORK_COORDINATION, network.getResearchNetworkCoordination());
|
||||
data.put(RESEARCHNETWORK_WEBSITE, network.getResearchNetworkWebsite());
|
||||
data.put(RESEARCHNETWORK_DESCRIPTION, network.getResearchNetworkDescription());
|
||||
}
|
||||
|
||||
public void process(FormSectionEvent e) throws FormProcessException {
|
||||
FormData data = e.getFormData();
|
||||
|
||||
ResearchNetwork network = (ResearchNetwork) super.processBasicWidgets(e);
|
||||
|
||||
if ((network != null) && (getSaveCancelSection().getSaveButton().isSelected(e.getPageState()))) {
|
||||
network.setResearchNetworkTitle((String) data.get(RESEARCHNETWORK_TITLE));
|
||||
network.setResearchNetworkDirection((String) data.get(RESEARCHNETWORK_DIRECTION));
|
||||
network.setResearchNetworkCoordination(((String) data.get(RESEARCHNETWORK_COORDINATION)));
|
||||
network.setResearchNetworkWebsite((String) data.get(RESEARCHNETWORK_WEBSITE));
|
||||
network.setResearchNetworkDescription((String) data.get(RESEARCHNETWORK_DESCRIPTION));
|
||||
|
||||
network.save();
|
||||
}
|
||||
|
||||
if (this.m_step != null) {
|
||||
this.m_step.maybeForwardToNextStep(e.getPageState());
|
||||
}
|
||||
}
|
||||
|
||||
public void submitted(FormSectionEvent e) throws FormProcessException {
|
||||
if ((this.m_step != null) && (getSaveCancelSection().getCancelButton().isSelected(e.getPageState()))) {
|
||||
this.m_step.cancelStreamlinedCreation(e.getPageState());
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue