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 {
|
object type Membership extends ACSObject {
|
||||||
MembershipStatus[1..1] status = join ct_memberships.status_id to ct_membershipstatus.status_id;
|
MembershipStatus[1..1] status = join ct_memberships.status_id to ct_membershipstatus.status_id;
|
||||||
Date[1..1] memberFrom = ct_memberships.member_from DATE;
|
Date[0..1] memberFrom = ct_memberships.member_from DATE;
|
||||||
Date[1..1] memberTo = ct_memberships.member_to 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;
|
Person[0..1] targetItem = join ct_memberships.target_item_id to ct_persons.person_id;
|
||||||
|
|
||||||
reference key(ct_memberships.membership_id);
|
reference key(ct_memberships.membership_id);
|
||||||
|
|
@ -32,7 +32,7 @@ object type Membership extends ACSObject {
|
||||||
|
|
||||||
association {
|
association {
|
||||||
composite OrganizationalUnit[0..1] membershipOwner = join ct_memberships.owner_id to ct_organizationalunits.organizationalunit_id;
|
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 {
|
query getMembershipsReferingToUnits {
|
||||||
|
|
|
||||||
|
|
@ -28,4 +28,17 @@ object type OrganizationalUnit extends ContentPage {
|
||||||
String[0..1] organizationalunitDescription = ct_organizationalunits.organizationalunit_description VARCHAR(2048);
|
String[0..1] organizationalunitDescription = ct_organizationalunits.organizationalunit_description VARCHAR(2048);
|
||||||
|
|
||||||
reference key (ct_organizationalunits.organizationalunit_id);
|
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"
|
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrganizationalUnitPropertiesStep"
|
||||||
ordering="1"/>
|
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"
|
<ctd:authoring-step labelKey="organizationalunit.authoring.subunits.title"
|
||||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||||
descriptionKey="organizationalunit.authoring.subunits_properties.description"
|
descriptionKey="organizationalunit.authoring.subunits_properties.description"
|
||||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrgaUnit2OrgaUnitPropertiesStep"
|
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.OrgaUnit2OrgaUnitPropertiesStep"
|
||||||
ordering="2"/>
|
ordering="4"/>
|
||||||
|
|
||||||
<ctd:authoring-step labelKey="organizationalunit.authoring.members.title"
|
<ctd:authoring-step labelKey="organizationalunit.authoring.members.title"
|
||||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||||
descriptionKey="organizationalunit.authoring.members_properties.description"
|
descriptionKey="organizationalunit.authoring.members_properties.description"
|
||||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.MembershipPropertiesStep"
|
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.MembershipPropertiesStep"
|
||||||
ordering="3"/>
|
ordering="5"/>
|
||||||
|
|
||||||
<ctd:authoring-step labelKey="organizationalunit.authoring.membershipstatus.title"
|
<ctd:authoring-step labelKey="organizationalunit.authoring.membershipstatus.title"
|
||||||
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
labelBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||||
descriptionKey="organizationalunit.authoring.membershipstatus_properties.description"
|
descriptionKey="organizationalunit.authoring.membershipstatus_properties.description"
|
||||||
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
descriptionBundle="com.arsdigita.cms.contenttypes.OrganizationalUnitResources"
|
||||||
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.MembershipStatusPropertiesStep"
|
component="com.arsdigita.cms.contenttypes.ui.organizationalunit.MembershipStatusPropertiesStep"
|
||||||
ordering="4"/>
|
ordering="6"/>
|
||||||
|
|
||||||
|
|
||||||
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
<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) {
|
public void setMembershipOwner(OrganizationalUnit ou) {
|
||||||
Assert.exists(ou, OrganizationalUnit.class);
|
Assert.exists(ou, OrganizationalUnit.class);
|
||||||
|
logger.debug("Setting membership owner to " + ou.getOrganizationalUnitName());
|
||||||
setAssociation(MEMBERSHIP_OWNER, ou);
|
setAssociation(MEMBERSHIP_OWNER, ou);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,12 @@ package com.arsdigita.cms.contenttypes;
|
||||||
|
|
||||||
import com.arsdigita.cms.ContentPage;
|
import com.arsdigita.cms.ContentPage;
|
||||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||||
|
import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.persistence.DataObject;
|
import com.arsdigita.persistence.DataObject;
|
||||||
import com.arsdigita.persistence.OID;
|
import com.arsdigita.persistence.OID;
|
||||||
|
import com.arsdigita.util.Assert;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -30,9 +33,14 @@ import java.math.BigDecimal;
|
||||||
*/
|
*/
|
||||||
public class OrganizationalUnit extends ContentPage {
|
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_NAME = "organizationalunitName";
|
||||||
public final static String ORGANIZATIONALUNIT_DESCRIPTION = "organizationalunitDescription";
|
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 final static String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.OrganizationalUnit";
|
||||||
|
|
||||||
public OrganizationalUnit() {
|
public OrganizationalUnit() {
|
||||||
|
|
@ -71,4 +79,39 @@ public class OrganizationalUnit extends ContentPage {
|
||||||
public void setOrganizationalUnitDescription(String description) {
|
public void setOrganizationalUnitDescription(String description) {
|
||||||
set(ORGANIZATIONALUNIT_DESCRIPTION, 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 {
|
public class ChangeableSingleSelect extends SingleSelect {
|
||||||
|
|
||||||
private ArrayList m_options;
|
private ArrayList m_options;
|
||||||
|
private ArrayList m_selected;
|
||||||
private RequestLocal m_requestOptions = new RequestLocal() {
|
private RequestLocal m_requestOptions = new RequestLocal() {
|
||||||
|
|
||||||
@Override
|
@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) {
|
public ChangeableSingleSelect(String name) {
|
||||||
super(new StringParameter(name));
|
super(new StringParameter(name));
|
||||||
|
this.m_selected = new ArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangeableSingleSelect(ParameterModel model) {
|
public ChangeableSingleSelect(ParameterModel model) {
|
||||||
super(model);
|
super(model);
|
||||||
|
this.m_selected = new ArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.persistence.SessionManager;
|
||||||
import com.arsdigita.util.Assert;
|
import com.arsdigita.util.Assert;
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
@ -155,9 +157,11 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
|
||||||
|
|
||||||
protected Membership createMembership(PageState state) {
|
protected Membership createMembership(PageState state) {
|
||||||
OrganizationalUnit ou = this.getOrganizationalUnit(state);
|
OrganizationalUnit ou = this.getOrganizationalUnit(state);
|
||||||
|
logger.debug("Owning ou: " + ou.getOrganizationalUnitName());
|
||||||
Assert.exists(ou);
|
Assert.exists(ou);
|
||||||
Membership membership = new Membership();
|
Membership membership = new Membership();
|
||||||
membership.setMembershipOwner(ou);
|
membership.setMembershipOwner(ou);
|
||||||
|
logger.debug("set ou to: " + membership.getMembershipOwner().getOrganizationalUnitName());
|
||||||
return membership;
|
return membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,6 +171,13 @@ public class MembershipPropertyForm extends FormSection implements FormInitListe
|
||||||
|
|
||||||
membership.setTargetItem((Person) data.get(PERSON_SEARCH));
|
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();
|
membership.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,26 @@ public class MembershipTable extends Table {
|
||||||
String url = membership.getURI(state);
|
String url = membership.getURI(state);
|
||||||
if (column == m_personCol.getModelIndex()) {
|
if (column == m_personCol.getModelIndex()) {
|
||||||
Person person = membership.getTargetItem();
|
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);
|
ExternalLink extLink = new ExternalLink(fullName, url);
|
||||||
return extLink;
|
return extLink;
|
||||||
} else if(column == m_statusCol.getModelIndex()) {
|
} 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