Leitung und stellvertretende Leitung für Organisationseinheit

git-svn-id: https://svn.libreccm.org/ccm/trunk@218 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2009-07-22 15:07:17 +00:00
parent c3d0b15777
commit 061ef166d1
12 changed files with 566 additions and 9 deletions

View File

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

View File

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

View File

@ -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"/>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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