ResearchNetwork: Code vollstaendig, kompiliert aber noch nicht

git-svn-id: https://svn.libreccm.org/ccm/trunk@224 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2009-07-31 13:35:20 +00:00
parent f55e82c6f6
commit e553d2e2cd
13 changed files with 894 additions and 11 deletions

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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");
}
}
}

View File

@ -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);
}
}

View File

@ -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) {
}
}
}

View File

@ -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();
}
}
}

View File

@ -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;
}
}

View File

@ -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());
}
}
}