Leitung und stellvertretende Leitung für Organisationseinheit
git-svn-id: https://svn.libreccm.org/ccm/trunk@218 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
c3d0b15777
commit
061ef166d1
|
|
@ -22,8 +22,8 @@ import com.arsdigita.kernel.ACSObject;
|
|||
|
||||
object type Membership extends ACSObject {
|
||||
MembershipStatus[1..1] status = join ct_memberships.status_id to ct_membershipstatus.status_id;
|
||||
Date[1..1] memberFrom = ct_memberships.member_from DATE;
|
||||
Date[1..1] memberTo = ct_memberships.member_to DATE;
|
||||
Date[0..1] memberFrom = ct_memberships.member_from DATE;
|
||||
Date[0..1] memberTo = ct_memberships.member_to DATE;
|
||||
Person[0..1] targetItem = join ct_memberships.target_item_id to ct_persons.person_id;
|
||||
|
||||
reference key(ct_memberships.membership_id);
|
||||
|
|
@ -32,7 +32,7 @@ object type Membership extends ACSObject {
|
|||
|
||||
association {
|
||||
composite OrganizationalUnit[0..1] membershipOwner = join ct_memberships.owner_id to ct_organizationalunits.organizationalunit_id;
|
||||
composite Membership[0..n] members = join ct_organizationalunits.organizationalunit_id to ct_memberships.ownerId;
|
||||
composite Membership[0..n] members = join ct_organizationalunits.organizationalunit_id to ct_memberships.owner_id;
|
||||
}
|
||||
|
||||
query getMembershipsReferingToUnits {
|
||||
|
|
|
|||
|
|
@ -28,4 +28,17 @@ object type OrganizationalUnit extends ContentPage {
|
|||
String[0..1] organizationalunitDescription = ct_organizationalunits.organizationalunit_description VARCHAR(2048);
|
||||
|
||||
reference key (ct_organizationalunits.organizationalunit_id);
|
||||
}
|
||||
//aggressive load (direction.id);
|
||||
//aggressive load (assistentDirection.id);
|
||||
}
|
||||
|
||||
association {
|
||||
Person[0..1] direction = join ct_organizationalunits.direction_id to ct_persons.person_id;
|
||||
OrganizationalUnit[0..n] directedUnit = join ct_persons.person_id to ct_organizationalunits.direction_id;
|
||||
}
|
||||
|
||||
association {
|
||||
Person[0..1] assistentDirection = join ct_organizationalunits.assistantDirection_id to ct_persons.person_id;
|
||||
OrganizationalUnit[0..n] assistenedDirectedUnit = join ct_persons.person_id to ct_organizationalunits.assistantDirection_id;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,26 +18,40 @@
|
|||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrganizationalUnitPropertiesStep"
|
||||
ordering="1"/>
|
||||
|
||||
<ctd:authoring-step labelKey="organizationalunit.authoring.chooseDirector.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
descriptionKey="organizationalunit.authoring.chooseDirector_properties.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrganizationalUnitChooseDirectorStep"
|
||||
ordering="2"/>
|
||||
|
||||
<ctd:authoring-step labelKey="organizationalunit.authoring.chooseAssistentDirector.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
descriptionKey="organizationalunit.authoring.chooseAssistentDirector_properties.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrganizationalUnitChooseAssistentDirectorStep"
|
||||
ordering="3"/>
|
||||
|
||||
<ctd:authoring-step labelKey="organizationalunit.authoring.subunits.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
descriptionKey="organizationalunit.authoring.subunits_properties.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrgaUnit2OrgaUnitPropertiesStep"
|
||||
ordering="2"/>
|
||||
ordering="4"/>
|
||||
|
||||
<ctd:authoring-step labelKey="organizationalunit.authoring.members.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
descriptionKey="organizationalunit.authoring.members_properties.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.MembershipPropertiesStep"
|
||||
ordering="3"/>
|
||||
ordering="5"/>
|
||||
|
||||
<ctd:authoring-step labelKey="organizationalunit.authoring.membershipstatus.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
descriptionKey="organizationalunit.authoring.membershipstatus_properties.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.MembershipStatusPropertiesStep"
|
||||
ordering="4"/>
|
||||
ordering="6"/>
|
||||
|
||||
|
||||
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ public class Membership extends ACSObject {
|
|||
|
||||
public void setMembershipOwner(OrganizationalUnit ou) {
|
||||
Assert.exists(ou, OrganizationalUnit.class);
|
||||
logger.debug("Setting membership owner to " + ou.getOrganizationalUnitName());
|
||||
setAssociation(MEMBERSHIP_OWNER, ou);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,12 @@ package com.arsdigita.cms.contenttypes;
|
|||
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.util.Assert;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -30,9 +33,14 @@ import java.math.BigDecimal;
|
|||
*/
|
||||
public class OrganizationalUnit extends ContentPage {
|
||||
|
||||
private final static Logger logger = Logger.getLogger(OrganizationalUnit.class);
|
||||
|
||||
public final static String ORGANIZATIONALUNIT_NAME = "organizationalunitName";
|
||||
public final static String ORGANIZATIONALUNIT_DESCRIPTION = "organizationalunitDescription";
|
||||
|
||||
public final static String DIRECTION = "direction";
|
||||
public final static String ASSISTANT_DIRECTION = "assistentDirection";
|
||||
|
||||
public final static String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.OrganizationalUnit";
|
||||
|
||||
public OrganizationalUnit() {
|
||||
|
|
@ -71,4 +79,39 @@ public class OrganizationalUnit extends ContentPage {
|
|||
public void setOrganizationalUnitDescription(String description) {
|
||||
set(ORGANIZATIONALUNIT_DESCRIPTION, description);
|
||||
}
|
||||
|
||||
public Person getDirection() {
|
||||
DataObject dobj = (DataObject) get(DIRECTION);
|
||||
if (dobj != null) {
|
||||
return (Person) DomainObjectFactory.newInstance(dobj);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setDirection(Person person) {
|
||||
logger.debug("Setting direction...");
|
||||
Assert.exists(person, Person.class);
|
||||
setAssociation(DIRECTION, person);
|
||||
}
|
||||
|
||||
public Person getAssistentDirection() {
|
||||
DataObject dobj = (DataObject) get(ASSISTANT_DIRECTION);
|
||||
if (dobj != null) {
|
||||
return (Person) DomainObjectFactory.newInstance(dobj);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setAssistentDirection(Person person) {
|
||||
Assert.exists(person, Person.class);
|
||||
setAssociation(ASSISTANT_DIRECTION, person);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBaseDataObjectType() {
|
||||
return BASE_DATA_OBJECT_TYPE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import java.util.Iterator;
|
|||
public class ChangeableSingleSelect extends SingleSelect {
|
||||
|
||||
private ArrayList m_options;
|
||||
private ArrayList m_selected;
|
||||
private RequestLocal m_requestOptions = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
|
|
@ -25,12 +26,17 @@ public class ChangeableSingleSelect extends SingleSelect {
|
|||
}
|
||||
};
|
||||
|
||||
private final static String TOO_MANY_OPTIONS_SELECTED =
|
||||
"Only one option may be selected by default on this option group.";
|
||||
|
||||
public ChangeableSingleSelect(String name) {
|
||||
super(new StringParameter(name));
|
||||
this.m_selected = new ArrayList();
|
||||
}
|
||||
|
||||
public ChangeableSingleSelect(ParameterModel model) {
|
||||
super(model);
|
||||
this.m_selected = new ArrayList();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -109,4 +115,25 @@ public class ChangeableSingleSelect extends SingleSelect {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setOptionSelected(String value) {
|
||||
Assert.assertNotLocked(this);
|
||||
if (!isMultiple()) {
|
||||
// only one option may be selected
|
||||
// to this selected list better be empty
|
||||
Assert.assertTrue(m_selected.size() == 0, TOO_MANY_OPTIONS_SELECTED);
|
||||
m_selected.add(value);
|
||||
getParameterModel().setDefaultValue(value);
|
||||
} else {
|
||||
m_selected.add(value);
|
||||
getParameterModel().setDefaultValue(m_selected.toArray());
|
||||
}
|
||||
}
|
||||
|
||||
public void setOptionSelected(Option option) {
|
||||
setOptionSelected(option.getValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ import com.arsdigita.persistence.DataCollection;
|
|||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -155,9 +157,11 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
|
|||
|
||||
protected Membership createMembership(PageState state) {
|
||||
OrganizationalUnit ou = this.getOrganizationalUnit(state);
|
||||
logger.debug("Owning ou: " + ou.getOrganizationalUnitName());
|
||||
Assert.exists(ou);
|
||||
Membership membership = new Membership();
|
||||
membership.setMembershipOwner(ou);
|
||||
logger.debug("set ou to: " + membership.getMembershipOwner().getOrganizationalUnitName());
|
||||
return membership;
|
||||
}
|
||||
|
||||
|
|
@ -167,6 +171,13 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
|
|||
|
||||
membership.setTargetItem((Person) data.get(PERSON_SEARCH));
|
||||
|
||||
MembershipStatus status = new MembershipStatus(new BigDecimal((String) this.m_status.getValue(state)));
|
||||
logger.debug("this.m_status.getValues() = " + this.m_status.getValue(state));
|
||||
membership.setStatus(status);
|
||||
|
||||
membership.setFrom((Date) this.m_from.getValue(state));
|
||||
membership.setTo((Date) this.m_to.getValue(state));
|
||||
|
||||
membership.save();
|
||||
}
|
||||
|
||||
|
|
@ -200,7 +211,7 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
|
|||
}
|
||||
} else {
|
||||
data.put(PERSON_SEARCH, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void process(FormSectionEvent e) throws FormProcessException {
|
||||
|
|
|
|||
|
|
@ -96,7 +96,26 @@ public class MembershipTable extends Table {
|
|||
String url = membership.getURI(state);
|
||||
if (column == m_personCol.getModelIndex()) {
|
||||
Person person = membership.getTargetItem();
|
||||
String fullName = String.format("%s %s %s, %s", person.getTitlePre(), person.getGivenName(), person.getSurname(), person.getTitlePost());
|
||||
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 = String.format("%s %s %s, %s", person.getTitlePre(), person.getGivenName(), person.getSurname(), person.getTitlePost());
|
||||
String fullName = fullNameBuilder.toString();
|
||||
ExternalLink extLink = new ExternalLink(fullName, url);
|
||||
return extLink;
|
||||
} else if(column == m_statusCol.getModelIndex()) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.organizationalunit;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
|
||||
import com.arsdigita.cms.ui.authoring.WorkflowLockedComponentAccess;
|
||||
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class OrganizationalUnitChooseAssistentDirectorStep extends SimpleEditStep {
|
||||
|
||||
private static String EDIT_SHEET_NAME = "edit";
|
||||
|
||||
public OrganizationalUnitChooseAssistentDirectorStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) {
|
||||
super(itemModel, parent);
|
||||
|
||||
OrganizationalUnitChooseAssistentDirectorTable table = new OrganizationalUnitChooseAssistentDirectorTable(itemModel, this);
|
||||
|
||||
addComponent(EDIT_SHEET_NAME, "Select assistent director", new WorkflowLockedComponentAccess(table, itemModel));
|
||||
|
||||
setDisplayComponent(getOrganizationalUnitPropertiesSheet(itemModel));
|
||||
}
|
||||
|
||||
private Component getOrganizationalUnitPropertiesSheet(ItemSelectionModel itemModel) {
|
||||
DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel);
|
||||
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_title_pre"), "assistentDirection.titlepre");
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_givenname"), "assistentDirection.givenname");
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_surname"), "assistentDirection.surname");
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_title_post"), "assistentDirection.titlepost");
|
||||
|
||||
return sheet;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
/*
|
||||
* Copyright (C) 2009 Jens Pelzetter, for the Center for Social Policy Research of the University of Bremen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.cms.contenttypes.ui.organizationalunit;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
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.bebop.table.TableModel;
|
||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.OrganizationalUnit;
|
||||
import com.arsdigita.cms.contenttypes.Person;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* Table used to select the assistent director of
|
||||
* an organizational unit.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class OrganizationalUnitChooseAssistentDirectorTable extends Table implements TableActionListener {
|
||||
|
||||
private static final String COL_PERSON = "Person";
|
||||
private static final String COL_CHOOSE_PERSON = "Select";
|
||||
private ItemSelectionModel m_selOrgaUnit;
|
||||
private OrganizationalUnitChooseAssistentDirectorStep m_parent;
|
||||
|
||||
public OrganizationalUnitChooseAssistentDirectorTable(ItemSelectionModel selOrgaUnit, OrganizationalUnitChooseAssistentDirectorStep parent) {
|
||||
|
||||
super();
|
||||
|
||||
this.m_parent = parent;
|
||||
this.m_selOrgaUnit = selOrgaUnit;
|
||||
|
||||
TableColumnModel model = getColumnModel();
|
||||
model.add(new TableColumn(0, COL_PERSON));
|
||||
model.add(new TableColumn(1, COL_CHOOSE_PERSON));
|
||||
|
||||
setEmptyView(new Label("New Persons available."));
|
||||
setModelBuilder(new OrganizationalUnitChooseAssistentDirectorTableModelBuilder());
|
||||
|
||||
model.get(1).setCellRenderer(new SelectCellRenderer());
|
||||
|
||||
addTableActionListener(this);
|
||||
}
|
||||
|
||||
private class OrganizationalUnitChooseAssistentDirectorTableModelBuilder extends LockableImpl implements TableModelBuilder {
|
||||
|
||||
public TableModel makeModel(Table t, PageState s) {
|
||||
t.getRowSelectionModel().clearSelection(s);
|
||||
DataCollection m_persons = SessionManager.getSession().retrieve(Person.BASE_DATA_OBJECT_TYPE);
|
||||
m_persons.addEqualsFilter(ContentItem.VERSION, ContentItem.DRAFT);
|
||||
return new OrganizationalUnitChooseAssistentDirectorTableModel(t, m_persons);
|
||||
}
|
||||
}
|
||||
|
||||
private class OrganizationalUnitChooseAssistentDirectorTableModel implements TableModel {
|
||||
|
||||
private Table m_table;
|
||||
private DataCollection m_persons;
|
||||
private Person m_person;
|
||||
|
||||
private OrganizationalUnitChooseAssistentDirectorTableModel(Table t, DataCollection persons) {
|
||||
m_table = t;
|
||||
m_persons = persons;
|
||||
}
|
||||
|
||||
public int getColumnCount() {
|
||||
return m_table.getColumnModel().size();
|
||||
}
|
||||
|
||||
public boolean nextRow() {
|
||||
if (m_persons.next()) {
|
||||
m_person = (Person) DomainObjectFactory.newInstance(m_persons.getDataObject());
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getElementAt(int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 0:
|
||||
StringBuilder personNameBuilder = new StringBuilder();
|
||||
if ((m_person.getTitlePre() != null) &&
|
||||
m_person.getTitlePre().length() > 0) {
|
||||
personNameBuilder.append(m_person.getTitlePre());
|
||||
personNameBuilder.append(" ");
|
||||
}
|
||||
if ((m_person.getGivenName() != null) &&
|
||||
m_person.getGivenName().length() > 0) {
|
||||
personNameBuilder.append(m_person.getGivenName());
|
||||
personNameBuilder.append(" ");
|
||||
}
|
||||
if ((m_person.getSurname() != null) &&
|
||||
m_person.getSurname().length() > 0) {
|
||||
personNameBuilder.append(m_person.getSurname());
|
||||
personNameBuilder.append(" ");
|
||||
}
|
||||
if ((m_person.getTitlePost() != null) &&
|
||||
m_person.getTitlePost().length() > 0) {
|
||||
personNameBuilder.append(m_person.getTitlePost());
|
||||
}
|
||||
return personNameBuilder.toString();
|
||||
case 1:
|
||||
return COL_CHOOSE_PERSON;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getKeyAt(int columnIndex) {
|
||||
return m_person.getID();
|
||||
}
|
||||
}
|
||||
|
||||
private class SelectCellRenderer extends LockableImpl implements TableCellRenderer {
|
||||
|
||||
public Component getComponent(Table table, PageState state, Object value, boolean isSelected, Object key, int row, int column) {
|
||||
ControlLink link = new ControlLink(value.toString());
|
||||
link.setConfirmation("Select this person?");
|
||||
return link;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void cellSelected(TableActionEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
TableColumn col = getColumnModel().get(e.getColumn().intValue());
|
||||
String colName = (String) col.getHeaderValue();
|
||||
|
||||
if (COL_CHOOSE_PERSON.equals(colName)) {
|
||||
m_parent.showDisplayPane(state);
|
||||
BigDecimal personID = new BigDecimal (e.getRowKey().toString());
|
||||
OrganizationalUnit orgaunit = (OrganizationalUnit) this.m_selOrgaUnit.getSelectedObject(state);
|
||||
Person person = (Person) DomainObjectFactory.newInstance(new OID(Person.BASE_DATA_OBJECT_TYPE, personID));
|
||||
orgaunit.setAssistentDirection(person);
|
||||
}
|
||||
}
|
||||
|
||||
public void headSelected(TableActionEvent e) {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.organizationalunit;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
|
||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
||||
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class OrganizationalUnitChooseDirectorStep extends SimpleEditStep {
|
||||
|
||||
private static String EDIT_SHEET_NAME = "edit";
|
||||
|
||||
public OrganizationalUnitChooseDirectorStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) {
|
||||
super(itemModel, parent);
|
||||
|
||||
OrganizationalUnitChooseDirectorTable table = new OrganizationalUnitChooseDirectorTable(itemModel, this);
|
||||
|
||||
addComponent(EDIT_SHEET_NAME, "Select Director", new WorkflowLockedComponentAccess(table, itemModel));
|
||||
|
||||
setDisplayComponent(getOrganizationalUnitPropertiesSheet(itemModel));
|
||||
}
|
||||
|
||||
private Component getOrganizationalUnitPropertiesSheet(ItemSelectionModel itemModel) {
|
||||
DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel);
|
||||
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_title_pre"), "direction.titlepre");
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_givenname"), "direction.givenname");
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_surname"), "direction.surname");
|
||||
sheet.add(GlobalizationUtil.globalize("cms.contenttypes.ui.director_title_post"), "direction.titlepost");
|
||||
|
||||
return sheet;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
/*
|
||||
* Copyright (C) 2009 Jens Pelzetter, for the Center for Social Policy Research of the University of Bremen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
package com.arsdigita.cms.contenttypes.ui.organizationalunit;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
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.bebop.table.TableModel;
|
||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.OrganizationalUnit;
|
||||
import com.arsdigita.cms.contenttypes.Person;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Table used to select the Director of
|
||||
* an organizational unit.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class OrganizationalUnitChooseDirectorTable extends Table implements TableActionListener {
|
||||
|
||||
private final static Logger logger = Logger.getLogger(OrganizationalUnitChooseDirectorTable.class);
|
||||
private static final String COL_PERSON = "Person";
|
||||
private static final String COL_CHOOSE_PERSON = "Select";
|
||||
private ItemSelectionModel m_selOrgaUnit;
|
||||
private OrganizationalUnitChooseDirectorStep m_parent;
|
||||
|
||||
public OrganizationalUnitChooseDirectorTable(ItemSelectionModel selOrgaUnit, OrganizationalUnitChooseDirectorStep parent) {
|
||||
|
||||
super();
|
||||
|
||||
this.m_parent = parent;
|
||||
this.m_selOrgaUnit = selOrgaUnit;
|
||||
|
||||
TableColumnModel model = getColumnModel();
|
||||
model.add(new TableColumn(0, COL_PERSON));
|
||||
model.add(new TableColumn(1, COL_CHOOSE_PERSON));
|
||||
|
||||
setEmptyView(new Label("New Persons available."));
|
||||
setModelBuilder(new OrganizationalUnitChooseDirectorTableModelBuilder());
|
||||
|
||||
model.get(1).setCellRenderer(new SelectCellRenderer());
|
||||
|
||||
addTableActionListener(this);
|
||||
}
|
||||
|
||||
private class OrganizationalUnitChooseDirectorTableModelBuilder extends LockableImpl implements TableModelBuilder {
|
||||
|
||||
public TableModel makeModel(Table t, PageState s) {
|
||||
t.getRowSelectionModel().clearSelection(s);
|
||||
DataCollection m_persons = SessionManager.getSession().retrieve(Person.BASE_DATA_OBJECT_TYPE);
|
||||
m_persons.addEqualsFilter(ContentItem.VERSION, ContentItem.DRAFT);
|
||||
return new OrganizationalUnitChooseDirectorTableModel(t, m_persons);
|
||||
}
|
||||
}
|
||||
|
||||
private class OrganizationalUnitChooseDirectorTableModel implements TableModel {
|
||||
|
||||
private Table m_table;
|
||||
private DataCollection m_persons;
|
||||
private Person m_person;
|
||||
|
||||
private OrganizationalUnitChooseDirectorTableModel(Table t, DataCollection persons) {
|
||||
m_table = t;
|
||||
m_persons = persons;
|
||||
}
|
||||
|
||||
public int getColumnCount() {
|
||||
return m_table.getColumnModel().size();
|
||||
}
|
||||
|
||||
public boolean nextRow() {
|
||||
if (m_persons.next()) {
|
||||
m_person = (Person) DomainObjectFactory.newInstance(m_persons.getDataObject());
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getElementAt(int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 0:
|
||||
StringBuilder personNameBuilder = new StringBuilder();
|
||||
if ((m_person.getTitlePre() != null) &&
|
||||
m_person.getTitlePre().length() > 0) {
|
||||
personNameBuilder.append(m_person.getTitlePre());
|
||||
personNameBuilder.append(" ");
|
||||
}
|
||||
if ((m_person.getGivenName() != null) &&
|
||||
m_person.getGivenName().length() > 0) {
|
||||
personNameBuilder.append(m_person.getGivenName());
|
||||
personNameBuilder.append(" ");
|
||||
}
|
||||
if ((m_person.getSurname() != null) &&
|
||||
m_person.getSurname().length() > 0) {
|
||||
personNameBuilder.append(m_person.getSurname());
|
||||
personNameBuilder.append(" ");
|
||||
}
|
||||
if ((m_person.getTitlePost() != null) &&
|
||||
m_person.getTitlePost().length() > 0) {
|
||||
personNameBuilder.append(m_person.getTitlePost());
|
||||
}
|
||||
return personNameBuilder.toString();
|
||||
case 1:
|
||||
return COL_CHOOSE_PERSON;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getKeyAt(int columnIndex) {
|
||||
return m_person.getID();
|
||||
}
|
||||
}
|
||||
|
||||
private class SelectCellRenderer extends LockableImpl implements TableCellRenderer {
|
||||
|
||||
public Component getComponent(Table table, PageState state, Object value, boolean isSelected, Object key, int row, int column) {
|
||||
ControlLink link = new ControlLink(value.toString());
|
||||
link.setConfirmation("Select this person?");
|
||||
return link;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void cellSelected(TableActionEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
TableColumn col = getColumnModel().get(e.getColumn().intValue());
|
||||
String colName = (String) col.getHeaderValue();
|
||||
|
||||
logger.debug("Cell selected invoked...");
|
||||
|
||||
if (COL_CHOOSE_PERSON.equals(colName)) {
|
||||
logger.debug ("Col is choose person col...");
|
||||
m_parent.showDisplayPane(state);
|
||||
BigDecimal personID = new BigDecimal (e.getRowKey().toString());
|
||||
OrganizationalUnit orgaunit = (OrganizationalUnit) this.m_selOrgaUnit.getSelectedObject(state);
|
||||
Person person = (Person) DomainObjectFactory.newInstance(new OID(Person.BASE_DATA_OBJECT_TYPE, personID));
|
||||
orgaunit.setDirection(person);
|
||||
}
|
||||
}
|
||||
|
||||
public void headSelected(TableActionEvent e) {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue