Aktueller Stand Project Content Typ
git-svn-id: https://svn.libreccm.org/ccm/trunk@277 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
e9ebd50734
commit
1b7d0b1d8b
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0"?>
|
||||
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
|
||||
name="ccm-cms-types-project"
|
||||
prettyName="Red Hat CCM Content Types"
|
||||
release="1"
|
||||
webapp="ROOT">
|
||||
<ccm:dependencies>
|
||||
<ccm:requires name="ccm-core" version="6.6.0" relation="ge"/>
|
||||
<ccm:requires name="ccm-cms" version="6.6.0" relation="ge"/>
|
||||
<ccm:requires name="ccm-cms-types-person" version="6.6.0" relation="ge"/>
|
||||
<ccm:requires name="ccm-cms-types-organizationalunit" version="6.6.0" relation="ge"/>
|
||||
</ccm:dependencies>
|
||||
<ccm:directories>
|
||||
<ccm:directory name="pdl"/>
|
||||
<ccm:directory name="sql"/>
|
||||
<ccm:directory name="src"/>
|
||||
</ccm:directories>
|
||||
<ccm:contacts>
|
||||
<ccm:contact uri="mailto:ccm@barkhof.uni-bremen.de" type="support"/>
|
||||
</ccm:contacts>
|
||||
<ccm:description>
|
||||
Content type representing a project.
|
||||
</ccm:description>
|
||||
</ccm:application>
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
//
|
||||
// Copyright (C) 2009 Jens Pelzetter, for the Center of Social Politics 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
|
||||
//
|
||||
//
|
||||
|
||||
model com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.cms.DomainObject;
|
||||
|
||||
object type Project extends ContentPage {
|
||||
String[0..1] projectname = ct_projects.projectname VARCHAR(512);
|
||||
String[0..1] funding = ct_projects.funding VARCHAR(2048);
|
||||
String[0..1] projectDescription = ct_projects.projectdescription VARCHAR(2048);
|
||||
Project2OrgaUnit[0..n] organizationalUnits = join ct_projects.project_id to ct_project2orgaunits.owner_id;
|
||||
Date[0..1] beginDate = ct_projects.beginDate DATE;
|
||||
Date[0..1] endDate = ct_projects.endDate DATE;
|
||||
//boolean finished = ct_projects.finished BOOLEAN;
|
||||
|
||||
reference key (ct_projects.project_id);
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
//
|
||||
// Copyright (C) 2009 Jens Pelzetter, for the Center of Social Politics 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
|
||||
//
|
||||
//
|
||||
|
||||
model com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.kernel.ACSObject;
|
||||
|
||||
object type Project2OrgaUnit extends ACSObject {
|
||||
OrganizationalUnit[0..1] targetItem = join ct_project2orgaunits.target_item_id to ct_organizationalunits.organizationalunit_id;
|
||||
|
||||
Integer[0..1] unitOrder = ct_project2orgaunits.unit_order INTEGER;
|
||||
|
||||
reference key(ct_project2orgaunits.project2orgaunit_id);
|
||||
aggressive load(project.id);
|
||||
}
|
||||
|
||||
association {
|
||||
composite Project[0..1] project = join ct_project2orgaunits.project_id to ct_projects.project_id;
|
||||
composite Project2OrgaUnit[0..n] units = join ct_projects.project_id to ct_project2orgaunits.project_id;
|
||||
}
|
||||
|
||||
query getReferingProjects {
|
||||
BigDecimal id;
|
||||
|
||||
do {
|
||||
select u.organizationalunit_id from project2orgaunits u where u.target_item_id = :itemID
|
||||
} map {
|
||||
id = u.project2orgaunit_id;
|
||||
}
|
||||
}
|
||||
|
||||
data operation swapProject2OrgaUnitWithNextInGroup {
|
||||
do {
|
||||
update ct_project2orgaunits
|
||||
set unit_order = CASE WHEN (unit_order = :unitOrder) THEN
|
||||
(:nextUnitOrder)
|
||||
ELSE
|
||||
(:unitOrder)
|
||||
END
|
||||
where (unit_order = :unitOrder or unit_order = :nextUnitOrder)
|
||||
and project_id = :projectID
|
||||
}
|
||||
}
|
||||
|
||||
query allUnitsOrderForProject {
|
||||
Integer unitOrder;
|
||||
|
||||
do {
|
||||
select u.unit_order from ct_project2orgaunits u where u.project_id = :projectID
|
||||
} map {
|
||||
unitOrder = u.unit_order;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
//
|
||||
// Copyright (C) 2009 Center for Social Policy Reseearch, 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
|
||||
|
||||
model com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.kernel.ACSObject;
|
||||
|
||||
object type Project2Person extends ACSObject {
|
||||
String[0..1] task = ct_project2persons.task VARCHAR(150);
|
||||
Person[0..1] targetItem = join ct_project2persons.target_item_id to ct_persons.person_id;
|
||||
|
||||
Integer[0..1] personOrder = ct_project2persons.person_order INTEGER;
|
||||
|
||||
reference key(ct_project2persons.project2person_id);
|
||||
aggressive load(project.id);
|
||||
}
|
||||
|
||||
association {
|
||||
composite Project[0..1] project = join ct_project2persons.project_id to ct_projects.project_id;
|
||||
composite Project2Person[0..n] project2Person = join ct_projects.project_id to ct_project2persons.project_id;
|
||||
}
|
||||
|
||||
query getReferingProject2Persons {
|
||||
BigDecimal id;
|
||||
|
||||
do {
|
||||
select p.project2person_id from ct_project2persons p where p.target_item_id = :itemID
|
||||
} map {
|
||||
id = p.project2person_id;
|
||||
}
|
||||
}
|
||||
|
||||
data operation swapProject2PersonWithNextInGroup {
|
||||
do {
|
||||
update ct_project2persons
|
||||
set person_order = CASE WHEN (person_order = :personOrder) THEN
|
||||
(:nextPersonOrder)
|
||||
ELSE
|
||||
(:personOrder)
|
||||
END
|
||||
where (person_order = :personOrder or personOrder = :nextPersonOrder)
|
||||
and project_id = :projectID;
|
||||
}
|
||||
}
|
||||
|
||||
query allRoleOrderForProject2Person {
|
||||
Integer personOrder;
|
||||
|
||||
do {
|
||||
select p.person_order from ct_project2persons p where p.project_id = :projectID
|
||||
} map {
|
||||
personOrder = p.person_order;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<ctd:content-types xmlns:ctd="http://xmlns.redhat.com/cms/content-types"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
|
||||
|
||||
<ctd:content-type
|
||||
label="Project"
|
||||
description="A project content type"
|
||||
objectType="com.arsdigita.cms.contenttypes.Project"
|
||||
classname="com.arsdigita.cms.contenttypes.Project">
|
||||
|
||||
<ctd:authoring-kit
|
||||
createComponent="com.arsdigita.cms.ui.authoring.PageCreate">
|
||||
|
||||
<ctd:authoring-step
|
||||
labelKey="project.authoring.basic_properties.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.ProjectResources"
|
||||
descriptionKey="project.authoring.basic_properties.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.ProjectResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.project.ProjectPropertiesStep"
|
||||
ordering="1"/>
|
||||
|
||||
<ctd:authoring-step
|
||||
labelKey="project.authoring.project2orgaunit.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.ProjectResources"
|
||||
descriptionKey="project.authoring.project2orgaunit.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.ProjectResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.project.Project2OrgaUnitPropertiesStep"
|
||||
ordering="2"/>
|
||||
|
||||
<ctd:authoring-step
|
||||
labelKey="project.authoring.project2person.title"
|
||||
labelBundle="com.arsdigita.cms.contenttypes.ProjectResources"
|
||||
descriptionKey="project.authoring.project2person.description"
|
||||
descriptionBundle="com.arsdigita.cms.contenttypes.ProjectResources"
|
||||
component="com.arsdigita.cms.contenttypes.ui.project.Project2PersonPropertiesStep"
|
||||
ordering="1"/>
|
||||
|
||||
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
|
||||
</ctd:authoring-kit>
|
||||
|
||||
</ctd:content-type>
|
||||
|
||||
</ctd:content-types>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<xrd:adapters xmlns:xrd="http://xmlns.redhat.com/schemas/waf/xml-renderer-rules"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://rhea.redhat.com/schemas/waf/xml-renderer-rules xml-renderer-rules.xsd">
|
||||
|
||||
<xrd:context name="com.arsdigita.cms.dispatcher.SimpleXMLGenerator">
|
||||
|
||||
<xrd:adapter objectType="com.arsdigita.cms.contenttypes.Project"
|
||||
extends="com.arsdigita.cms.ContentPage">
|
||||
|
||||
<xrd:associations rule="include">
|
||||
<xrd:property name="/object/Project2OrgaUnit"/>
|
||||
<xrd:property name="/object/Project2OrgaUnit/targetItem"/>
|
||||
<xrd:property name="/object/Project2Person"/>
|
||||
<xrd:property name="/object/Project2Person/targetItem"/>
|
||||
</xrd:associations>
|
||||
|
||||
</xrd:adapter>
|
||||
|
||||
</xrd:context>
|
||||
|
||||
</xrd:adapters>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<registry>
|
||||
</registry>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<load>
|
||||
<requires>
|
||||
<table name="inits"/>
|
||||
<table name="acs_objects"/>
|
||||
<table name="cms_items"/>
|
||||
<table name="ct_organizationalunits"/>
|
||||
<table name="ct_persons"/>
|
||||
<initializer class="com.arsdigita.cms.Initializer" />
|
||||
</requires>
|
||||
<provides>
|
||||
<table name="ct_projects" />
|
||||
<initializer class="com.arsdigita.cms.contenttypes.ProjectInitializer" />
|
||||
</provides>
|
||||
<scripts>
|
||||
<schema directory="ccm-cms-types-project" />
|
||||
<data class="com.arsdigita.cms.contenttypes.ProjectLoader" />
|
||||
</scripts>
|
||||
</load>
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* 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;
|
||||
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Contenttype which represents a (scientific) project.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project extends ContentPage {
|
||||
|
||||
public static final String PROJECTNAME = "projectname";
|
||||
public static final String FUNDING = "funding";
|
||||
public static final String PROJECT_DESCRIPTION = "projectDescription";
|
||||
public static final String BEGINDATE = "beginDate";
|
||||
public static final String ENDDATE = "endDate";
|
||||
//public static final String FINISHED = "finished";
|
||||
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Project";
|
||||
private static final Logger s_log = Logger.getLogger(Project.class);
|
||||
|
||||
public Project() {
|
||||
this(BASE_DATA_OBJECT_TYPE);
|
||||
}
|
||||
|
||||
public Project(BigDecimal id) throws DataObjectNotFoundException {
|
||||
this(new OID(BASE_DATA_OBJECT_TYPE, id));
|
||||
}
|
||||
|
||||
public Project(OID oid) throws DataObjectNotFoundException {
|
||||
super(oid);
|
||||
}
|
||||
|
||||
public Project(DataObject obj) {
|
||||
super(obj);
|
||||
}
|
||||
|
||||
public Project(String type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
/* accessors ********************************/
|
||||
public String getProjectName() {
|
||||
return (String) get(PROJECTNAME);
|
||||
}
|
||||
|
||||
public void setProjectName(String projectName) {
|
||||
set(PROJECTNAME, projectName);
|
||||
}
|
||||
|
||||
public String getFunding() {
|
||||
return (String) get(FUNDING);
|
||||
}
|
||||
|
||||
public void setFunding(String funding) {
|
||||
set(FUNDING, funding);
|
||||
}
|
||||
|
||||
public String getProjectDescription() {
|
||||
return (String) get(PROJECT_DESCRIPTION);
|
||||
}
|
||||
|
||||
public void setProjectDescription(String projectDescription) {
|
||||
set(PROJECT_DESCRIPTION, projectDescription);
|
||||
}
|
||||
|
||||
public Date getBegin() {
|
||||
return (Date) get(BEGINDATE);
|
||||
}
|
||||
|
||||
public void setBegin(Date begin) {
|
||||
set(BEGINDATE, begin);
|
||||
}
|
||||
|
||||
public Date getEnd() {
|
||||
return (Date) get(ENDDATE);
|
||||
}
|
||||
|
||||
public void setEnd(Date end) {
|
||||
set(ENDDATE, end);
|
||||
}
|
||||
|
||||
/*public Boolean getFinished() {
|
||||
return (Boolean)get(FINISHED);
|
||||
}
|
||||
|
||||
public void setFinished(Boolean finished) {
|
||||
set(FINISHED, finished);
|
||||
}*/
|
||||
}
|
||||
|
|
@ -0,0 +1,263 @@
|
|||
/*
|
||||
* 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;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.dispatcher.ItemResolver;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.kernel.ACSObject;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.DataOperation;
|
||||
import com.arsdigita.persistence.DataQuery;
|
||||
import com.arsdigita.persistence.Filter;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.Session;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.web.URL;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Represents the relationship between a organizational unit and a project.
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2OrgaUnit extends ACSObject {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(Project2OrgaUnit.class);
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Project2OrgaUnit";
|
||||
|
||||
public static final String TARGET_ITEM = "targetItem";
|
||||
public static final String PROJECT = "project";
|
||||
public static final String UNIT_ORDER = "unitOrder";
|
||||
|
||||
public Project2OrgaUnit() {
|
||||
this(BASE_DATA_OBJECT_TYPE);
|
||||
}
|
||||
|
||||
public Project2OrgaUnit(BigDecimal id) {
|
||||
this(new OID(BASE_DATA_OBJECT_TYPE, id));
|
||||
}
|
||||
|
||||
public Project2OrgaUnit(OID oid) {
|
||||
super(oid);
|
||||
}
|
||||
|
||||
public Project2OrgaUnit(DataObject obj) {
|
||||
super(obj);
|
||||
}
|
||||
|
||||
public Project2OrgaUnit(String type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
DataObject obj = (DataObject) get(PROJECT);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
} else {
|
||||
return (Project) DomainObjectFactory.newInstance(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public void setProject(Project project) {
|
||||
Assert.exists(project, Project.class);
|
||||
s_log.debug(String.format("Setting project to %s", project.getProjectName()));
|
||||
setAssociation(PROJECT, project);
|
||||
}
|
||||
|
||||
public OrganizationalUnit getTargetItem() {
|
||||
DataObject object = (DataObject) get(TARGET_ITEM);
|
||||
if (object == null) {
|
||||
return null;
|
||||
} else {
|
||||
return (OrganizationalUnit) DomainObjectFactory.newInstance(object);
|
||||
}
|
||||
}
|
||||
|
||||
public void setTargetItem(OrganizationalUnit orgaUnit) {
|
||||
Assert.exists(orgaUnit, OrganizationalUnit.class);
|
||||
setAssociation(TARGET_ITEM, orgaUnit);
|
||||
}
|
||||
|
||||
public Integer getOrder() {
|
||||
return (Integer) get(UNIT_ORDER);
|
||||
}
|
||||
|
||||
public void setOrder(Integer order) {
|
||||
Assert.exists(order);
|
||||
set(UNIT_ORDER, order);
|
||||
}
|
||||
|
||||
public String getURI(PageState state) {
|
||||
OrganizationalUnit orgaUnit = getTargetItem();
|
||||
|
||||
if (orgaUnit == null) {
|
||||
s_log.error(getOID() + "is a link between a project and a organizational unit, but the associated organizational unit is null");
|
||||
return "";
|
||||
}
|
||||
|
||||
ContentSection section = orgaUnit.getContentSection();
|
||||
ItemResolver resolver = section.getItemResolver();
|
||||
String url = resolver.generateItemURL(state, orgaUnit, section, orgaUnit.getVersion());
|
||||
|
||||
return URL.there(state.getRequest(), url).toString();
|
||||
}
|
||||
|
||||
public static DataCollection getReferingProjects(OrganizationalUnit orgaUnit) {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection projects = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
Filter filter = projects.addInSubqueryFilter("id", "com.arsdigita.cmscontenttypes.getReferingProjects");
|
||||
filter.set("itemID", orgaUnit.getID());
|
||||
|
||||
return projects;
|
||||
}
|
||||
|
||||
public static DataCollection getUnits(Project project) {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection units = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
units.addEqualsFilter(PROJECT + ".id", project.getID());
|
||||
units.addOrder(UNIT_ORDER);
|
||||
|
||||
return units;
|
||||
}
|
||||
|
||||
public void swapWithNext() {
|
||||
swapWithNext("com.arsdigita.cms.contenttypes.allUnitsOrderForProject", "com.arsdigita.cms.contenttypes.swapProject2OrgaUnitWithNextInGroup");
|
||||
}
|
||||
|
||||
public void swapWithPrevious() {
|
||||
swapWithPrevious("com.arsdigita.cms.contenttypes.allUnitsOrderForProject", "com.arsdigita.cms.contenttypes.swapProject2OrgaUnitWithNextInGroup");
|
||||
}
|
||||
|
||||
public void swapWithNext(String queryName, String operationName) {
|
||||
swapKeys(true, queryName, operationName);
|
||||
}
|
||||
|
||||
public void swapWithPrevious(String queryName, String operationName) {
|
||||
swapKeys(false, queryName, operationName);
|
||||
}
|
||||
|
||||
protected DataQuery getSwapQuery(String queryName) {
|
||||
DataQuery query = SessionManager.getSession().retrieveQuery(queryName);
|
||||
query.setParameter("projectID", getProject().getID());
|
||||
return query;
|
||||
}
|
||||
|
||||
protected DataOperation getSwapOperation(String operationName) {
|
||||
DataOperation operation = SessionManager.getSession().retrieveDataOperation(operationName);
|
||||
operation.setParameter("projectID", getProject().getID());
|
||||
return operation;
|
||||
}
|
||||
|
||||
protected void swapKeys(boolean swapNext, String queryName, String operationName) {
|
||||
|
||||
String methodName = null;
|
||||
if (swapNext) {
|
||||
methodName = "swapWithNext";
|
||||
} else {
|
||||
methodName = "swapWithPrevious";
|
||||
}
|
||||
|
||||
Assert.isTrue(!isNew(), methodName + " cannon be called on an object that is new");
|
||||
|
||||
Integer currentKey = (Integer) get(UNIT_ORDER);
|
||||
|
||||
if (currentKey == null) {
|
||||
alphabetize();
|
||||
return;
|
||||
}
|
||||
|
||||
Assert.isTrue(currentKey != null, methodName + "cannot be called on a object htat is not currently in the list");
|
||||
|
||||
int key = currentKey.intValue();
|
||||
s_log.debug("current key: " + currentKey);
|
||||
s_log.debug("key = " + key);
|
||||
|
||||
DataQuery query = getSwapQuery(queryName);
|
||||
|
||||
int otherKey;
|
||||
if(swapNext) {
|
||||
otherKey = key + 1;
|
||||
query.addOrder("unitOrder ASC");
|
||||
query.addFilter(query.getFilterFactory().greaterThan("unitOrder", currentKey, true));
|
||||
} else {
|
||||
otherKey = key - 1;
|
||||
query.addOrder("unitOrder DESC");
|
||||
query.addFilter(query.getFilterFactory().lessThan("unitOrder", currentKey, true));
|
||||
}
|
||||
|
||||
if(query.next()) {
|
||||
otherKey = ((Integer) query.get("unitOrder")).intValue();
|
||||
query.close();
|
||||
}
|
||||
|
||||
s_log.debug("otherKey = " + otherKey);
|
||||
DataOperation operation = getSwapOperation(operationName);
|
||||
operation.setParameter("unitOrder", new Integer(key));
|
||||
operation.setParameter("nextUnitOrder", new Integer(otherKey));
|
||||
operation.execute();
|
||||
}
|
||||
|
||||
public void alphabetize() {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection projects = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
projects.addEqualsFilter(PROJECT + ".id", getProject().getID());
|
||||
int sortKey = 0;
|
||||
while(projects.next()) {
|
||||
sortKey++;
|
||||
Project2OrgaUnit p2ou = new Project2OrgaUnit(projects.getDataObject());
|
||||
p2ou.setOrder(sortKey);
|
||||
p2ou.save();
|
||||
}
|
||||
}
|
||||
|
||||
public int maxOrder() {
|
||||
Project project = getProject();
|
||||
if (project == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int returnOrder = 0;
|
||||
DataQuery query = SessionManager.getSession().retrieveQuery("com.arsdigita.cms.contenttypes.allUnitsOrderForProject");
|
||||
query.setParameter("projectID", getProject().getID());
|
||||
query.addOrder("unitOrder DESC");
|
||||
if(query.next()) {
|
||||
Integer unitOrder = ((Integer) query.get("unitOrder"));
|
||||
query.close();
|
||||
if(unitOrder != null) {
|
||||
returnOrder = unitOrder.intValue();
|
||||
}
|
||||
}
|
||||
|
||||
return returnOrder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSave() {
|
||||
super.beforeSave();
|
||||
if (getOrder() == null) {
|
||||
setOrder(maxOrder() + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,247 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.dispatcher.ItemResolver;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.kernel.ACSObject;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.DataOperation;
|
||||
import com.arsdigita.persistence.DataQuery;
|
||||
import com.arsdigita.persistence.Filter;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.Session;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.web.URL;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2Person extends ACSObject {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(Project2Person.class);
|
||||
public final static String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Project2Person";
|
||||
public final static String TASK = "task";
|
||||
public final static String TARGET_ITEM = "targetItem";
|
||||
public static final String PROJECT = "project";
|
||||
public final static String ROLE_ORDER = "personOrder";
|
||||
public final static String PROJECT2PERSON = "project2Person";
|
||||
|
||||
public Project2Person() {
|
||||
super(BASE_DATA_OBJECT_TYPE);
|
||||
}
|
||||
|
||||
public Project2Person(DataObject obj) {
|
||||
super(obj);
|
||||
}
|
||||
|
||||
public Project2Person(BigDecimal id) {
|
||||
this(new OID(BASE_DATA_OBJECT_TYPE, id));
|
||||
}
|
||||
|
||||
public Project2Person(OID oid) {
|
||||
super(oid);
|
||||
}
|
||||
|
||||
public Project2Person(String type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
public String getTask() {
|
||||
return (String) get(TASK);
|
||||
}
|
||||
|
||||
public void setTask(String task) {
|
||||
set(TASK, task);
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
DataObject obj = (DataObject) get(PROJECT);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
} else {
|
||||
return (Project) DomainObjectFactory.newInstance(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public void setProject(Project project) {
|
||||
Assert.exists(project, Project.class);
|
||||
setAssociation(PROJECT, project);
|
||||
}
|
||||
|
||||
public Person getTargetItem() {
|
||||
DataObject obj = (DataObject) get(TARGET_ITEM);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
} else {
|
||||
return (Person) DomainObjectFactory.newInstance(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public void setTargetItem(Person person) {
|
||||
Assert.exists(person, Person.class);
|
||||
setAssociation(TARGET_ITEM, person);
|
||||
}
|
||||
|
||||
public Integer getOrder() {
|
||||
return (Integer) get(ROLE_ORDER);
|
||||
}
|
||||
|
||||
public void setOrder(Integer order) {
|
||||
Assert.exists(order);
|
||||
set(ROLE_ORDER, order);
|
||||
}
|
||||
|
||||
|
||||
public String getURI(PageState state) {
|
||||
Person person = this.getTargetItem();
|
||||
|
||||
if (person == null) {
|
||||
s_log.error(getOID() + " is a link between a Project and a Person, but the associated Person is null");
|
||||
return "";
|
||||
}
|
||||
|
||||
ContentSection section = person.getContentSection();
|
||||
ItemResolver resolver = section.getItemResolver();
|
||||
String url = resolver.generateItemURL(state, person, section, person.getVersion());
|
||||
|
||||
return URL.there(state.getRequest(), url).toString();
|
||||
}
|
||||
|
||||
public static DataCollection getReferingProject2Persons(Person person) {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection project2Persons = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
Filter filter = project2Persons.addInSubqueryFilter("id", "com.arsdigita.cms.contenttypes.getReferingProject2Persons");
|
||||
filter.set("itemID", person.getID());
|
||||
|
||||
return project2Persons;
|
||||
}
|
||||
|
||||
public static DataCollection getProject2Persons(Project project) {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection dc = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
dc.addEqualsFilter(PROJECT + ".id", project.getID());
|
||||
return dc;
|
||||
}
|
||||
|
||||
public void swapWithNext() {
|
||||
swapWithNext("com.arsdigita.cms.contenttypes.allPersonsOrderForProject", "com.arsdigita.cms.contenttypes.swapProject2OrgaPersonWithNextInGroup");
|
||||
}
|
||||
|
||||
public void swapWithPrevious() {
|
||||
swapWithPrevious("com.arsdigita.cms.contenttypes.allPersonsOrderForProject", "com.arsdigita.cms.contenttypes.swapProject2OrgaPersonWithNextInGroup");
|
||||
}
|
||||
|
||||
public void swapWithNext(String queryName, String operationName) {
|
||||
swapKeys(true, queryName, operationName);
|
||||
}
|
||||
|
||||
public void swapWithPrevious(String queryName, String operationName) {
|
||||
swapKeys(false, queryName, operationName);
|
||||
}
|
||||
|
||||
protected DataQuery getSwapQuery(String queryName) {
|
||||
DataQuery query = SessionManager.getSession().retrieveQuery(queryName);
|
||||
query.setParameter("projectID", getProject().getID());
|
||||
return query;
|
||||
}
|
||||
|
||||
protected DataOperation getSwapOperation(String operationName) {
|
||||
DataOperation operation = SessionManager.getSession().retrieveDataOperation(operationName);
|
||||
operation.setParameter("projectID", getProject().getID());
|
||||
return operation;
|
||||
}
|
||||
|
||||
protected void swapKeys(boolean swapNext, String queryName, String operationName) {
|
||||
|
||||
String methodName = null;
|
||||
if (swapNext) {
|
||||
methodName = "swapWithNext";
|
||||
} else {
|
||||
methodName = "swapWithPrevious";
|
||||
}
|
||||
|
||||
Assert.isTrue(!isNew(), methodName + " cannon be called on an object that is new");
|
||||
|
||||
Integer currentKey = (Integer) get(ROLE_ORDER);
|
||||
|
||||
if (currentKey == null) {
|
||||
alphabetize();
|
||||
return;
|
||||
}
|
||||
|
||||
Assert.isTrue(currentKey != null, methodName + "cannot be called on a object htat is not currently in the list");
|
||||
|
||||
int key = currentKey.intValue();
|
||||
|
||||
DataQuery query = getSwapQuery(queryName);
|
||||
|
||||
int otherKey;
|
||||
if (swapNext) {
|
||||
otherKey = key + 1;
|
||||
query.addOrder("personOrder ASC");
|
||||
query.addFilter(query.getFilterFactory().greaterThan("personOrder", currentKey, true));
|
||||
} else {
|
||||
otherKey = key - 1;
|
||||
query.addOrder("personOrder DESC");
|
||||
query.addFilter(query.getFilterFactory().lessThan("personOrder", currentKey, true));
|
||||
}
|
||||
|
||||
if (query.next()) {
|
||||
otherKey = ((Integer) query.get("personOrder")).intValue();
|
||||
query.close();
|
||||
}
|
||||
|
||||
DataOperation operation = getSwapOperation(operationName);
|
||||
operation.setParameter("personOrder", new Integer(key));
|
||||
operation.setParameter("nextPersonOrder", new Integer(otherKey));
|
||||
operation.execute();
|
||||
}
|
||||
|
||||
public void alphabetize() {
|
||||
Session session = SessionManager.getSession();
|
||||
DataCollection projects = session.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||
projects.addEqualsFilter(PROJECT + ".id", getProject().getID());
|
||||
int sortKey = 0;
|
||||
while (projects.next()) {
|
||||
sortKey++;
|
||||
Project2Person p2ou = new Project2Person(projects.getDataObject());
|
||||
p2ou.setOrder(sortKey);
|
||||
p2ou.save();
|
||||
}
|
||||
}
|
||||
|
||||
public int maxOrder() {
|
||||
Project project = getProject();
|
||||
if (project == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int returnOrder = 0;
|
||||
DataQuery query = SessionManager.getSession().retrieveQuery("com.arsdigita.cms.contenttypes.allRoleOrderForProject2Person");
|
||||
query.setParameter("projectID", getProject().getID());
|
||||
query.addOrder("personOrder DESC");
|
||||
if (query.next()) {
|
||||
Integer personOrder = ((Integer) query.get("personOrder"));
|
||||
query.close();
|
||||
if (personOrder != null) {
|
||||
returnOrder = personOrder.intValue();
|
||||
}
|
||||
}
|
||||
|
||||
return returnOrder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSave() {
|
||||
super.beforeSave();
|
||||
if (getOrder() == null) {
|
||||
setOrder(maxOrder() + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ProjectGlobalizationUtil {
|
||||
|
||||
final public static String BUNDLE_NAME =
|
||||
"com.arsdigita.cms.contenttypes.ProjectResourceBundle";
|
||||
|
||||
/**
|
||||
* This returns a globalized message using the type specific bundle,
|
||||
* BUNDLE_NAME
|
||||
*/
|
||||
public static GlobalizedMessage globalize(String key) {
|
||||
return new GlobalizedMessage(key, BUNDLE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* This returns a globalized message using the type specific bundle,
|
||||
* BUNDLE_NAME
|
||||
*/
|
||||
public static GlobalizedMessage globalize(String key, Object[] args) {
|
||||
return new GlobalizedMessage(key, BUNDLE_NAME, args);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.runtime.LegacyInitEvent;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ProjectInitializer extends ContentTypeInitializer {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ProjectInitializer.class);
|
||||
|
||||
public ProjectInitializer() {
|
||||
super("ccm-cms-types-project.pdl.mf", Project.BASE_DATA_OBJECT_TYPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getStylesheets() {
|
||||
return new String[]{"/static/content-types/com/arsdigita/cms/contenttypes/Project.xsl"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraversalXML() {
|
||||
return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Project.xml";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ProjectLoader extends AbstractContentTypeLoader {
|
||||
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ProjectLoader.class);
|
||||
private final static String[] TYPES = {"/WEB-INF/content-types/com/arsdigita/cms/contenttypes/Project.xml"};
|
||||
|
||||
public String[] getTypes() {
|
||||
return TYPES;
|
||||
}
|
||||
|
||||
public ProjectLoader() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.cms.CMSGlobalized;
|
||||
import com.arsdigita.globalization.ChainedResourceBundle;
|
||||
import java.util.PropertyResourceBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class ProjectResourceBundle extends ChainedResourceBundle implements CMSGlobalized {
|
||||
|
||||
public final static String PROJECT_BUNDLE_NAME =
|
||||
"com.arsdigita.cms.contenttypes.ProjectResources";
|
||||
|
||||
public ProjectResourceBundle() {
|
||||
super();
|
||||
addBundle((PropertyResourceBundle)getBundle(PROJECT_BUNDLE_NAME));
|
||||
addBundle((PropertyResourceBundle)getBundle(BUNDLE_NAME));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
#project.authoring.basic_properties.description = Description
|
||||
#project.authoring.project2orgaunit.description = Description
|
||||
#project.authoring.project2person.description = Description
|
||||
|
||||
project.authoring.project2orgaunit.title = Organizational units involved
|
||||
project.authoring.project2person.title = Persons involved
|
||||
project.authoring.basic_properties.title = Basic properties
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormSection;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.ui.ResettableContainer;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedContainer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2OrgaUnitPropertiesStep extends ResettableContainer {
|
||||
|
||||
private AuthoringKitWizard m_parent;
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private BigDecimalParameter m_p2ouParam =
|
||||
new BigDecimalParameter("project2orgaunit");
|
||||
private Project2OrgaUnitSelectionModel m_p2ouModel =
|
||||
new Project2OrgaUnitSelectionModel(m_p2ouParam);
|
||||
|
||||
public Project2OrgaUnitPropertiesStep(
|
||||
ItemSelectionModel itemModel,
|
||||
AuthoringKitWizard parent) {
|
||||
m_itemModel = itemModel;
|
||||
m_parent = parent;
|
||||
setProject2OrgaUnitSelectionModel();
|
||||
add(getDisplayComponent());
|
||||
|
||||
Form form = new Form("project2OrgaUnitEditForm");
|
||||
form.add(getEditSheet());
|
||||
|
||||
WorkflowLockedContainer edit = new WorkflowLockedContainer(itemModel);
|
||||
edit.add(form);
|
||||
add(edit);
|
||||
}
|
||||
|
||||
protected void setProject2OrgaUnitSelectionModel() {
|
||||
setProject2OrgaUnitSelectionModel(
|
||||
new Project2OrgaUnitSelectionModel(m_p2ouParam));
|
||||
}
|
||||
|
||||
protected void setProject2OrgaUnitSelectionModel(
|
||||
Project2OrgaUnitSelectionModel model) {
|
||||
m_p2ouModel = model;
|
||||
}
|
||||
|
||||
protected Project2OrgaUnitSelectionModel getProject2OrgaUnitSelelectioModel() {
|
||||
return m_p2ouModel;
|
||||
}
|
||||
|
||||
protected BigDecimalParameter getP2OUParameter() {
|
||||
return m_p2ouParam;
|
||||
}
|
||||
|
||||
public Component getDisplayComponent() {
|
||||
SimpleContainer container = new SimpleContainer();
|
||||
container.add(new Project2OrgaUnitTable(m_itemModel, m_p2ouModel));
|
||||
return container;
|
||||
}
|
||||
|
||||
public FormSection getEditSheet() {
|
||||
return new Project2OrgaUnitPropertyForm(m_itemModel, m_p2ouModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(Page p) {
|
||||
super.register(p);
|
||||
p.addComponentStateParam(this, m_p2ouParam);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,189 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.FormSection;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SaveCancelSection;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||
import com.arsdigita.bebop.event.FormValidationListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.cms.ContentType;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.OrganizationalUnit;
|
||||
import com.arsdigita.cms.contenttypes.Project;
|
||||
import com.arsdigita.cms.contenttypes.Project2OrgaUnit;
|
||||
import com.arsdigita.cms.contenttypes.ProjectGlobalizationUtil;
|
||||
import com.arsdigita.cms.ui.ItemSearchWidget;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2OrgaUnitPropertyForm
|
||||
extends FormSection
|
||||
implements FormInitListener,
|
||||
FormProcessListener,
|
||||
FormValidationListener,
|
||||
FormSubmissionListener {
|
||||
|
||||
private final static Logger s_log =
|
||||
Logger.getLogger(Project2OrgaUnitPropertyForm.class);
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private Project2OrgaUnitSelectionModel m_p2ouModel;
|
||||
private ItemSearchWidget m_itemSearch;
|
||||
private SaveCancelSection m_saveCancelSection;
|
||||
private final String ITEM_SEARCH = "project2OrgaUnit";
|
||||
|
||||
public Project2OrgaUnitPropertyForm(
|
||||
ItemSelectionModel itemModel,
|
||||
Project2OrgaUnitSelectionModel p2ouModel) {
|
||||
super(new ColumnPanel(2));
|
||||
m_itemModel = itemModel;
|
||||
m_p2ouModel = p2ouModel;
|
||||
|
||||
addWidgets();
|
||||
addSaveCancelSection();
|
||||
|
||||
addInitListener(this);
|
||||
addValidationListener(this);
|
||||
addProcessListener(this);
|
||||
addSubmissionListener(this);
|
||||
}
|
||||
|
||||
protected void addWidgets() {
|
||||
add(new Label(ProjectGlobalizationUtil.globalize(
|
||||
"cms.contenttypes.ui.project.orgaunit")));
|
||||
m_itemSearch = new ItemSearchWidget(ITEM_SEARCH,
|
||||
ContentType.findByAssociatedObjectType(
|
||||
"com.arsdigita.cms.contenttypes.OrganizationalUnit"));
|
||||
add(m_itemSearch);
|
||||
}
|
||||
|
||||
public void addSaveCancelSection() {
|
||||
m_saveCancelSection = new SaveCancelSection();
|
||||
try {
|
||||
m_saveCancelSection.getCancelButton().addPrintListener(new PrintListener() {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
Submit target = (Submit) e.getTarget();
|
||||
if (m_p2ouModel.isSelected(e.getPageState())) {
|
||||
target.setButtonLabel("Cancel");
|
||||
} else {
|
||||
target.setButtonLabel("Reset");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
m_saveCancelSection.getSaveButton().addPrintListener(new PrintListener() {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
Submit target = (Submit) e.getTarget();
|
||||
if (m_p2ouModel.isSelected(e.getPageState())) {
|
||||
target.setButtonLabel("Save");
|
||||
} else {
|
||||
target.setButtonLabel("Create");
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (Exception ex) {
|
||||
throw new UncheckedWrapperException("this cannot happen", ex);
|
||||
}
|
||||
add(m_saveCancelSection, ColumnPanel.FULL_WIDTH);
|
||||
}
|
||||
|
||||
public SaveCancelSection getSaveCancelSection() {
|
||||
return m_saveCancelSection;
|
||||
}
|
||||
|
||||
protected Project2OrgaUnitSelectionModel getP2OUSelectionModel() {
|
||||
return m_p2ouModel;
|
||||
}
|
||||
|
||||
protected Project getProject(PageState s) {
|
||||
return (Project) m_itemModel.getSelectedItem(s);
|
||||
}
|
||||
|
||||
protected Project2OrgaUnit createProject2OrgaUnit(PageState s) {
|
||||
Project project = getProject(s);
|
||||
Assert.exists(project);
|
||||
Project2OrgaUnit p2ou = new Project2OrgaUnit();
|
||||
p2ou.setProject(project);
|
||||
return p2ou;
|
||||
}
|
||||
|
||||
protected void setProject2OrgaUnitProperties(
|
||||
Project2OrgaUnit p2ou,
|
||||
FormSectionEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
FormData data = e.getFormData();
|
||||
|
||||
p2ou.setTargetItem((OrganizationalUnit) data.get(ITEM_SEARCH));
|
||||
|
||||
p2ou.save();
|
||||
}
|
||||
|
||||
public void init(FormSectionEvent e) throws FormProcessException {
|
||||
FormData data = e.getFormData();
|
||||
PageState state = e.getPageState();
|
||||
|
||||
setVisible(state, true);
|
||||
|
||||
Project2OrgaUnit p2ou;
|
||||
if (m_p2ouModel.isSelected(state)) {
|
||||
p2ou = m_p2ouModel.getSelectedP2OU(state);
|
||||
try {
|
||||
data.put(ITEM_SEARCH, p2ou.getTargetItem());
|
||||
} catch (IllegalStateException ex) {
|
||||
throw ex;
|
||||
}
|
||||
} else {
|
||||
data.put(ITEM_SEARCH, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void process(FormSectionEvent e) throws FormProcessException {
|
||||
PageState state = e.getPageState();
|
||||
Project2OrgaUnit p2ou;
|
||||
|
||||
if (this.getSaveCancelSection().getCancelButton().isSelected(state)) {
|
||||
this.m_p2ouModel.clearSelection(state);
|
||||
} else {
|
||||
if (this.m_p2ouModel.isSelected(state)) {
|
||||
p2ou = m_p2ouModel.getSelectedP2OU(state);
|
||||
} else {
|
||||
p2ou = createProject2OrgaUnit(state);
|
||||
}
|
||||
setProject2OrgaUnitProperties(p2ou, e);
|
||||
}
|
||||
|
||||
m_p2ouModel.clearSelection(state);
|
||||
init(e);
|
||||
}
|
||||
|
||||
public void validate(FormSectionEvent e) throws FormProcessException {
|
||||
if (e.getFormData().get(ITEM_SEARCH) == null) {
|
||||
throw new FormProcessException(
|
||||
"OrganiztionalUnit selection is required");
|
||||
}
|
||||
}
|
||||
|
||||
public void submitted(FormSectionEvent e) throws FormProcessException {
|
||||
if (this.m_saveCancelSection.getCancelButton().isSelected(
|
||||
e.getPageState())) {
|
||||
m_p2ouModel.clearSelection(e.getPageState());
|
||||
init(e);
|
||||
throw new FormProcessException("cancelled");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.cms.contenttypes.Project2OrgaUnit;
|
||||
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2OrgaUnitSelectionModel extends ACSObjectSelectionModel {
|
||||
|
||||
public Project2OrgaUnitSelectionModel(BigDecimalParameter param) {
|
||||
super(Project2OrgaUnit.class.getName(),
|
||||
Project2OrgaUnit.BASE_DATA_OBJECT_TYPE,
|
||||
param);
|
||||
}
|
||||
|
||||
public Project2OrgaUnitSelectionModel(
|
||||
String itemClass,
|
||||
String objectType,
|
||||
BigDecimalParameter param) {
|
||||
super(itemClass, objectType, param);
|
||||
}
|
||||
|
||||
public Project2OrgaUnit getSelectedP2OU(PageState s) {
|
||||
return (Project2OrgaUnit) getSelectedObject(s);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,220 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.ExternalLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.event.TableActionEvent;
|
||||
import com.arsdigita.bebop.event.TableActionListener;
|
||||
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||
import com.arsdigita.bebop.table.TableColumn;
|
||||
import com.arsdigita.bebop.table.TableColumnModel;
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.SecurityManager;
|
||||
import com.arsdigita.cms.contenttypes.Project2OrgaUnit;
|
||||
import com.arsdigita.cms.contenttypes.ProjectGlobalizationUtil;
|
||||
import com.arsdigita.cms.dispatcher.Utilities;
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2OrgaUnitTable extends Table {
|
||||
|
||||
private final static Logger s_log =
|
||||
Logger.getLogger(Project2OrgaUnitTable.class);
|
||||
private Project2OrgaUnitSelectionModel m_p2ouModel;
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private TableColumn m_orgaUnitCol;
|
||||
private TableColumn m_moveUpCol;
|
||||
private TableColumn m_moveDownCol;
|
||||
private TableColumn m_editCol;
|
||||
private TableColumn m_delCol;
|
||||
private RequestLocal m_size;
|
||||
private RequestLocal m_editor;
|
||||
protected final static String EDIT_EVENT = "Edit";
|
||||
protected final static String DELETE_EVENT = "Delete";
|
||||
protected final static String UP_EVENT = "up";
|
||||
protected final static String DOWN_EVENT = "down";
|
||||
|
||||
public Project2OrgaUnitTable(
|
||||
ItemSelectionModel itemModel,
|
||||
Project2OrgaUnitSelectionModel p2ouModel) {
|
||||
super();
|
||||
m_itemModel = itemModel;
|
||||
m_p2ouModel = p2ouModel;
|
||||
addColumns();
|
||||
|
||||
m_size = new RequestLocal();
|
||||
m_editor = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
public Object initialValue(PageState s) {
|
||||
SecurityManager sm = Utilities.getSecurityManager(s);
|
||||
ContentItem item = m_itemModel.getSelectedItem(s);
|
||||
Boolean val = new Boolean(sm.canAccess(s.getRequest(), SecurityManager.EDIT_ITEM, item));
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
Label empty = new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.noOrgaUnitsAssociated"));
|
||||
setEmptyView(empty);
|
||||
addTableActionListener(new Project2OrgaUnitTableActionListener());
|
||||
setRowSelectionModel(p2ouModel);
|
||||
setDefaultCellRenderer(new Project2OrgaUnitTableRenderer());
|
||||
setModelBuilder(new Project2OrgaUnitTableModelBuilder(itemModel));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the columns of the table.
|
||||
*/
|
||||
public void addColumns() {
|
||||
TableColumnModel model = getColumnModel();
|
||||
|
||||
m_orgaUnitCol = new TableColumn(0,
|
||||
ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.orgaunit").localize());
|
||||
m_editCol = new TableColumn(1,
|
||||
ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.edit").localize());
|
||||
m_delCol = new TableColumn(2,
|
||||
ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project_del").localize());
|
||||
m_moveUpCol = new TableColumn(3, "");
|
||||
m_moveDownCol = new TableColumn(4, "");
|
||||
|
||||
model.add(m_orgaUnitCol);
|
||||
model.add(m_editCol);
|
||||
model.add(m_delCol);
|
||||
model.add(m_moveUpCol);
|
||||
model.add(m_moveDownCol);
|
||||
setColumnModel(model);
|
||||
}
|
||||
|
||||
private class Project2OrgaUnitTableRenderer implements TableCellRenderer {
|
||||
|
||||
public Component getComponent(
|
||||
Table table,
|
||||
PageState state,
|
||||
Object value,
|
||||
boolean isSelected,
|
||||
Object key,
|
||||
int row,
|
||||
int column) {
|
||||
Project2OrgaUnit p2ou = (Project2OrgaUnit) value;
|
||||
boolean isFirst = (row == 0);
|
||||
if (m_size.get(state) == null) {
|
||||
m_size.set(state,
|
||||
new Long(((Project2OrgaUnitTableModelBuilder.Project2OrgaUnitTableModel) table.getTableModel(state)).size()));
|
||||
}
|
||||
boolean isLast = (row == ((Long) m_size.get(state)).intValue() - 1);
|
||||
|
||||
String url = p2ou.getURI(state);
|
||||
if (column == m_orgaUnitCol.getModelIndex()) {
|
||||
ExternalLink extLink =
|
||||
new ExternalLink(p2ou.getTargetItem().getOrganizationalUnitName(), url);
|
||||
return extLink;
|
||||
} else if (column == m_editCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
if (isSelected) {
|
||||
return new Label(EDIT_EVENT, Label.BOLD);
|
||||
} else {
|
||||
return new ControlLink(EDIT_EVENT);
|
||||
}
|
||||
} else {
|
||||
return new Label(EDIT_EVENT);
|
||||
}
|
||||
} else if (column == m_delCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
return new ControlLink(DELETE_EVENT);
|
||||
} else {
|
||||
return new Label(DELETE_EVENT);
|
||||
}
|
||||
} else if (column == m_moveUpCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state)) && !isFirst) {
|
||||
Label downLabel = new Label(UP_EVENT);
|
||||
downLabel.setClassAttr("linkSort");
|
||||
return new ControlLink(downLabel);
|
||||
} else {
|
||||
return new Label("");
|
||||
}
|
||||
} else if (column == m_moveDownCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state)) && !isLast) {
|
||||
Label downLabel = new Label(DOWN_EVENT);
|
||||
downLabel.setClassAttr("linkSort");
|
||||
return new ControlLink(downLabel);
|
||||
} else {
|
||||
return new Label("");
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new UncheckedWrapperException("column out of bounds.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class Project2OrgaUnitTableActionListener
|
||||
implements TableActionListener {
|
||||
|
||||
private Project2OrgaUnit getProject2OrgaUnit(TableActionEvent e) {
|
||||
Object o = e.getRowKey();
|
||||
BigDecimal id;
|
||||
if (o instanceof String) {
|
||||
id = new BigDecimal((String) o);
|
||||
} else {
|
||||
id = (BigDecimal) e.getRowKey();
|
||||
}
|
||||
|
||||
Assert.exists(id);
|
||||
Project2OrgaUnit p2ou;
|
||||
try {
|
||||
p2ou = (Project2OrgaUnit) DomainObjectFactory.newInstance(
|
||||
new OID(Project2OrgaUnit.BASE_DATA_OBJECT_TYPE, id));
|
||||
} catch(DataObjectNotFoundException ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
|
||||
return p2ou;
|
||||
}
|
||||
|
||||
public void cellSelected(TableActionEvent e) {
|
||||
int col = e.getColumn().intValue();
|
||||
PageState state = e.getPageState();
|
||||
Project2OrgaUnit p2ou = getProject2OrgaUnit(e);
|
||||
Assert.exists(p2ou);
|
||||
|
||||
if(col == m_editCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
m_p2ouModel.setSelectedObject(state, p2ou);
|
||||
}
|
||||
} else if(col == m_delCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
try {
|
||||
m_p2ouModel.clearSelection(state);
|
||||
p2ou.delete();
|
||||
} catch(Exception ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
}
|
||||
} else if (col == m_moveUpCol.getModelIndex()) {
|
||||
m_p2ouModel.clearSelection(state);
|
||||
p2ou.swapWithPrevious();
|
||||
} else if (col == m_moveDownCol.getModelIndex()) {
|
||||
m_p2ouModel.clearSelection(state);
|
||||
p2ou.swapWithNext();
|
||||
}
|
||||
}
|
||||
|
||||
public void headSelected(TableActionEvent e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.table.TableModel;
|
||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.Project;
|
||||
import com.arsdigita.cms.contenttypes.Project2OrgaUnit;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2OrgaUnitTableModelBuilder
|
||||
extends LockableImpl
|
||||
implements TableModelBuilder {
|
||||
|
||||
private final static Logger s_log =
|
||||
Logger.getLogger(Project2OrgaUnitTableModelBuilder.class);
|
||||
private ItemSelectionModel m_itemModel;
|
||||
|
||||
public Project2OrgaUnitTableModelBuilder(ItemSelectionModel itemModel) {
|
||||
m_itemModel = itemModel;
|
||||
}
|
||||
|
||||
public TableModel makeModel(Table t, PageState s) {
|
||||
DataCollection units = getUnits(s);
|
||||
|
||||
if (units.isEmpty()) {
|
||||
return Table.EMPTY_MODEL;
|
||||
} else {
|
||||
return new Project2OrgaUnitTableModel(units);
|
||||
}
|
||||
}
|
||||
|
||||
public DataCollection getUnits(PageState s) {
|
||||
Assert.isTrue(m_itemModel.isSelected(s), "item selected");
|
||||
Project project = (Project) m_itemModel.getSelectedItem(s);
|
||||
return Project2OrgaUnit.getUnits(project);
|
||||
}
|
||||
|
||||
public static class Project2OrgaUnitTableModel implements TableModel {
|
||||
|
||||
Project2OrgaUnit m_p2ou;
|
||||
DataCollection m_units;
|
||||
|
||||
public Project2OrgaUnitTableModel(DataCollection units) {
|
||||
m_units = units;
|
||||
m_p2ou = null;
|
||||
}
|
||||
|
||||
public int getColumnCount() {
|
||||
return (int) m_units.size();
|
||||
}
|
||||
|
||||
public boolean nextRow() {
|
||||
if (m_units.next()) {
|
||||
DataObject obj = m_units.getDataObject();
|
||||
m_p2ou = (Project2OrgaUnit) DomainObjectFactory.newInstance(obj);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getElementAt(int columnIndex) {
|
||||
return m_p2ou;
|
||||
}
|
||||
|
||||
public Object getKeyAt(int columnIndex) {
|
||||
return m_p2ou.getID();
|
||||
}
|
||||
|
||||
public long size() {
|
||||
return m_units.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormSection;
|
||||
import com.arsdigita.bebop.Page;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.ui.ResettableContainer;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedContainer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2PersonPropertiesStep extends ResettableContainer {
|
||||
|
||||
private AuthoringKitWizard m_parent;
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private BigDecimalParameter m_project2PersonParam =
|
||||
new BigDecimalParameter("project2Person");
|
||||
private Project2PersonSelectionModel m_project2PersonModel =
|
||||
new Project2PersonSelectionModel(m_project2PersonParam);
|
||||
|
||||
public Project2PersonPropertiesStep(
|
||||
ItemSelectionModel itemModel,
|
||||
AuthoringKitWizard parent) {
|
||||
m_itemModel = itemModel;
|
||||
m_parent = parent;
|
||||
setProject2PersonSelectionModel();
|
||||
add(getDisplayComponent());
|
||||
|
||||
Form form = new Form("project2PersonEditForm");
|
||||
form.add(getEditSheet());
|
||||
|
||||
WorkflowLockedContainer edit = new WorkflowLockedContainer(itemModel);
|
||||
edit.add(form);
|
||||
add(edit);
|
||||
}
|
||||
|
||||
protected void setProject2PersonSelectionModel() {
|
||||
setProject2PersonSelectionModel(
|
||||
new Project2PersonSelectionModel(m_project2PersonParam));
|
||||
}
|
||||
|
||||
protected void setProject2PersonSelectionModel(
|
||||
Project2PersonSelectionModel model) {
|
||||
m_project2PersonModel = model;
|
||||
}
|
||||
|
||||
protected Project2PersonSelectionModel getProject2PersonSelectionModel() {
|
||||
return m_project2PersonModel;
|
||||
}
|
||||
|
||||
protected BigDecimalParameter getProject2PersonParameter() {
|
||||
return m_project2PersonParam;
|
||||
}
|
||||
|
||||
public Component getDisplayComponent() {
|
||||
SimpleContainer container = new SimpleContainer();
|
||||
container.add(new Project2PersonTable(m_itemModel,
|
||||
m_project2PersonModel));
|
||||
return container;
|
||||
}
|
||||
|
||||
public FormSection getEditSheet() {
|
||||
return new Project2PersonPropertyForm(m_itemModel,
|
||||
m_project2PersonModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(Page p) {
|
||||
super.register(p);
|
||||
p.addComponentStateParam(this, m_project2PersonParam);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.FormSection;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SaveCancelSection;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||
import com.arsdigita.bebop.event.FormValidationListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.cms.ContentType;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.Person;
|
||||
import com.arsdigita.cms.contenttypes.Project;
|
||||
import com.arsdigita.cms.contenttypes.Project2Person;
|
||||
import com.arsdigita.cms.contenttypes.ProjectGlobalizationUtil;
|
||||
import com.arsdigita.cms.ui.ItemSearchWidget;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2PersonPropertyForm
|
||||
extends FormSection
|
||||
implements FormInitListener,
|
||||
FormProcessListener,
|
||||
FormValidationListener,
|
||||
FormSubmissionListener {
|
||||
|
||||
private final static Logger s_log =
|
||||
Logger.getLogger(Project2PersonPropertyForm.class);
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private Project2PersonSelectionModel m_project2PersonModel;
|
||||
private ItemSearchWidget m_itemSearch;
|
||||
private SaveCancelSection m_saveCancelSection;
|
||||
private final String ITEM_SEARCH = "project2Person";
|
||||
|
||||
public Project2PersonPropertyForm(
|
||||
ItemSelectionModel itemModel,
|
||||
Project2PersonSelectionModel project2PersonModel) {
|
||||
super(new ColumnPanel(2));
|
||||
m_itemModel = itemModel;
|
||||
m_project2PersonModel = project2PersonModel;
|
||||
|
||||
addWidgets();
|
||||
addSaveCancelSection();
|
||||
|
||||
addInitListener(this);
|
||||
addValidationListener(this);
|
||||
addProcessListener(this);
|
||||
addSubmissionListener(this);
|
||||
}
|
||||
|
||||
protected void addWidgets() {
|
||||
add(new Label(ProjectGlobalizationUtil.globalize(
|
||||
"cms.contenttypes.ui.project.person")));
|
||||
m_itemSearch = new ItemSearchWidget(ITEM_SEARCH,
|
||||
ContentType.findByAssociatedObjectType(
|
||||
"com.arsdigita.cms.contenttypes.Person"));
|
||||
add(m_itemSearch);
|
||||
}
|
||||
|
||||
public void addSaveCancelSection() {
|
||||
m_saveCancelSection = new SaveCancelSection();
|
||||
try {
|
||||
m_saveCancelSection.getCancelButton().addPrintListener(new PrintListener() {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
Submit target = (Submit) e.getTarget();
|
||||
if (m_project2PersonModel.isSelected(e.getPageState())) {
|
||||
target.setButtonLabel("Cancel");
|
||||
} else {
|
||||
target.setButtonLabel("Reset");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
m_saveCancelSection.getSaveButton().addPrintListener(new PrintListener() {
|
||||
|
||||
public void prepare(PrintEvent e) {
|
||||
Submit target = (Submit) e.getTarget();
|
||||
if (m_project2PersonModel.isSelected(e.getPageState())) {
|
||||
target.setButtonLabel("Save");
|
||||
} else {
|
||||
target.setButtonLabel("Create");
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (Exception ex) {
|
||||
throw new UncheckedWrapperException("this cannot happen", ex);
|
||||
}
|
||||
add(m_saveCancelSection, ColumnPanel.FULL_WIDTH);
|
||||
}
|
||||
|
||||
public SaveCancelSection getSaveCancelSection() {
|
||||
return m_saveCancelSection;
|
||||
}
|
||||
|
||||
protected Project2PersonSelectionModel getProject2PersonSelectionModel() {
|
||||
return m_project2PersonModel;
|
||||
}
|
||||
|
||||
protected Project getProject(PageState s) {
|
||||
return (Project) m_itemModel.getSelectedItem(s);
|
||||
}
|
||||
|
||||
protected Project2Person createProject2Person(PageState s) {
|
||||
Project project = getProject(s);
|
||||
Assert.exists(project);
|
||||
Project2Person project2Person = new Project2Person();
|
||||
project2Person.setProject(project);
|
||||
return project2Person;
|
||||
}
|
||||
|
||||
protected void setProject2PersonProperties(
|
||||
Project2Person project2Person,
|
||||
FormSectionEvent e) {
|
||||
PageState state = e.getPageState();
|
||||
FormData data = e.getFormData();
|
||||
|
||||
project2Person.setTargetItem((Person) data.get(ITEM_SEARCH));
|
||||
|
||||
project2Person.save();
|
||||
}
|
||||
|
||||
public void init(FormSectionEvent e) throws FormProcessException {
|
||||
FormData data = e.getFormData();
|
||||
PageState state = e.getPageState();
|
||||
|
||||
setVisible(state, true);
|
||||
|
||||
Project2Person project2Person;
|
||||
if (m_project2PersonModel.isSelected(state)) {
|
||||
project2Person = m_project2PersonModel.getSelectedP2P(state);
|
||||
try {
|
||||
data.put(ITEM_SEARCH, project2Person.getTargetItem());
|
||||
} catch(IllegalStateException ex) {
|
||||
throw ex;
|
||||
}
|
||||
} else {
|
||||
data.put(ITEM_SEARCH, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void process(FormSectionEvent e) throws FormProcessException {
|
||||
PageState state = e.getPageState();
|
||||
Project2Person project2Person;
|
||||
|
||||
if (getSaveCancelSection().getCancelButton().isSelected(state)) {
|
||||
m_project2PersonModel.clearSelection(state);
|
||||
} else {
|
||||
if (m_project2PersonModel.isSelected(state)) {
|
||||
project2Person = m_project2PersonModel.getSelectedP2P(state);
|
||||
} else {
|
||||
project2Person = createProject2Person(state);
|
||||
}
|
||||
setProject2PersonProperties(project2Person, e);
|
||||
}
|
||||
|
||||
m_project2PersonModel.clearSelection(state);
|
||||
init(e);
|
||||
}
|
||||
|
||||
public void validate(FormSectionEvent e) throws FormProcessException {
|
||||
if (e.getFormData().get(ITEM_SEARCH) == null) {
|
||||
throw new FormProcessException("Person selection is required");
|
||||
}
|
||||
}
|
||||
|
||||
public void submitted(FormSectionEvent e) throws FormProcessException {
|
||||
if (m_saveCancelSection.getCancelButton().isSelected(
|
||||
e.getPageState())) {
|
||||
m_project2PersonModel.clearSelection(e.getPageState());
|
||||
init(e);
|
||||
throw new FormProcessException("cancelled");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.cms.contenttypes.Project2Person;
|
||||
import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2PersonSelectionModel extends ACSObjectSelectionModel {
|
||||
|
||||
public Project2PersonSelectionModel(BigDecimalParameter param) {
|
||||
super(Project2Person.class.getName(),
|
||||
Project2Person.BASE_DATA_OBJECT_TYPE,
|
||||
param);
|
||||
}
|
||||
|
||||
public Project2PersonSelectionModel(
|
||||
String itemClass,
|
||||
String objectType,
|
||||
BigDecimalParameter param) {
|
||||
super(itemClass, objectType, param);
|
||||
}
|
||||
|
||||
public Project2Person getSelectedP2P(PageState s) {
|
||||
return (Project2Person) getSelectedObject(s);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,243 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.ControlLink;
|
||||
import com.arsdigita.bebop.ExternalLink;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.event.TableActionEvent;
|
||||
import com.arsdigita.bebop.event.TableActionListener;
|
||||
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||
import com.arsdigita.bebop.table.TableColumn;
|
||||
import com.arsdigita.bebop.table.TableColumnModel;
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.SecurityManager;
|
||||
import com.arsdigita.cms.contenttypes.Person;
|
||||
import com.arsdigita.cms.contenttypes.Project2Person;
|
||||
import com.arsdigita.cms.contenttypes.ProjectGlobalizationUtil;
|
||||
import com.arsdigita.cms.dispatcher.Utilities;
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2PersonTable extends Table {
|
||||
|
||||
private final static Logger s_log =
|
||||
Logger.getLogger(Project2PersonTable.class);
|
||||
private Project2PersonSelectionModel m_project2personModel;
|
||||
private ItemSelectionModel m_itemModel;
|
||||
private TableColumn m_personCol;
|
||||
private TableColumn m_editCol;
|
||||
private TableColumn m_delCol;
|
||||
private TableColumn m_moveUpCol;
|
||||
private TableColumn m_moveDownCol;
|
||||
private RequestLocal m_size;
|
||||
private RequestLocal m_editor;
|
||||
protected final static String EDIT_EVENT = "Edit";
|
||||
protected final static String DELETE_EVENT = "Delete";
|
||||
protected final static String UP_EVENT = "up";
|
||||
protected final static String DOWN_EVENT = "down";
|
||||
|
||||
public Project2PersonTable(
|
||||
ItemSelectionModel itemModel,
|
||||
Project2PersonSelectionModel project2PersonModel) {
|
||||
super();
|
||||
m_itemModel = itemModel;
|
||||
m_project2personModel = project2PersonModel;
|
||||
addColumns();
|
||||
|
||||
m_size = new RequestLocal();
|
||||
m_editor = new RequestLocal() {
|
||||
|
||||
@Override
|
||||
public Object initialValue(PageState s) {
|
||||
SecurityManager sm = Utilities.getSecurityManager(s);
|
||||
ContentItem item = m_itemModel.getSelectedItem(s);
|
||||
Boolean val = new Boolean(sm.canAccess(s.getRequest(), SecurityManager.EDIT_ITEM, item));
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
Label empty = new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.noPersonsAssociated"));
|
||||
setEmptyView(empty);
|
||||
addTableActionListener(new Project2PersonTableActionListener());
|
||||
setRowSelectionModel(project2PersonModel);
|
||||
setDefaultCellRenderer(new Project2PersonTableRenderer());
|
||||
setModelBuilder(new Project2PersonTableModelBuilder(itemModel));
|
||||
}
|
||||
|
||||
public void addColumns() {
|
||||
TableColumnModel model = getColumnModel();
|
||||
|
||||
m_personCol = new TableColumn(0,
|
||||
ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.person").localize());
|
||||
m_editCol = new TableColumn(1,
|
||||
ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.edit").localize());
|
||||
m_delCol = new TableColumn(2,
|
||||
ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project_del").localize());
|
||||
m_moveUpCol = new TableColumn(3, "");
|
||||
m_moveDownCol = new TableColumn(4, "");
|
||||
|
||||
model.add(m_personCol);
|
||||
model.add(m_editCol);
|
||||
model.add(m_delCol);
|
||||
model.add(m_moveUpCol);
|
||||
model.add(m_moveDownCol);
|
||||
setColumnModel(model);
|
||||
}
|
||||
|
||||
private class Project2PersonTableRenderer implements TableCellRenderer {
|
||||
|
||||
public Component getComponent(
|
||||
Table table,
|
||||
PageState state,
|
||||
Object value,
|
||||
boolean isSelected,
|
||||
Object key,
|
||||
int row,
|
||||
int column) {
|
||||
Project2Person project2Person = (Project2Person) value;
|
||||
boolean isFirst = (row == 0);
|
||||
if (m_size.get(state) == null) {
|
||||
m_size.set(state,
|
||||
new Long(((Project2PersonTableModelBuilder.Project2PersonTableModel) table.getTableModel(state)).size()));
|
||||
}
|
||||
boolean isLast = (row == ((Long) m_size.get(state)).intValue() - 1);
|
||||
|
||||
String url = project2Person.getURI(state);
|
||||
if (column == m_personCol.getModelIndex()) {
|
||||
Person person = project2Person.getTargetItem();
|
||||
StringBuilder fullNameBuilder = new StringBuilder();
|
||||
|
||||
if (person.getTitlePre() != null) {
|
||||
fullNameBuilder.append(person.getTitlePre());
|
||||
fullNameBuilder.append(" ");
|
||||
}
|
||||
if (person.getGivenName() != null) {
|
||||
fullNameBuilder.append(person.getGivenName());
|
||||
fullNameBuilder.append(" ");
|
||||
}
|
||||
if (person.getSurname() != null) {
|
||||
fullNameBuilder.append(person.getSurname());
|
||||
fullNameBuilder.append(" ");
|
||||
}
|
||||
if (person.getTitlePost() != null) {
|
||||
fullNameBuilder.append(person.getTitlePost());
|
||||
}
|
||||
String fullName = fullNameBuilder.toString();
|
||||
|
||||
ExternalLink extLink = new ExternalLink(fullName, url);
|
||||
return extLink;
|
||||
} else if (column == m_editCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
if (isSelected) {
|
||||
return new Label(EDIT_EVENT, Label.BOLD);
|
||||
} else {
|
||||
return new ControlLink(EDIT_EVENT);
|
||||
}
|
||||
} else {
|
||||
return new Label(EDIT_EVENT);
|
||||
}
|
||||
} else if (column == m_delCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
return new ControlLink(DELETE_EVENT);
|
||||
} else {
|
||||
return new Label(DELETE_EVENT);
|
||||
}
|
||||
} else if (column == m_moveUpCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state)) && !isFirst) {
|
||||
Label downLabel = new Label(UP_EVENT);
|
||||
downLabel.setClassAttr("linkSort");
|
||||
return new ControlLink(downLabel);
|
||||
} else {
|
||||
return new Label("");
|
||||
}
|
||||
} else if (column == m_moveDownCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state)) && !isLast) {
|
||||
Label downLabel = new Label(DOWN_EVENT);
|
||||
downLabel.setClassAttr("linkSort");
|
||||
return new ControlLink(downLabel);
|
||||
} else {
|
||||
return new Label("");
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new UncheckedWrapperException("column out of bounds.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class Project2PersonTableActionListener
|
||||
implements TableActionListener {
|
||||
|
||||
private Project2Person getProject2Person(TableActionEvent e) {
|
||||
Object o = e.getRowKey();
|
||||
BigDecimal id;
|
||||
if (o instanceof String) {
|
||||
id = new BigDecimal((String) o);
|
||||
} else {
|
||||
id = (BigDecimal) e.getRowKey();
|
||||
}
|
||||
|
||||
Assert.exists(id);
|
||||
Project2Person project2Person;
|
||||
try {
|
||||
project2Person = (Project2Person) DomainObjectFactory.newInstance(
|
||||
new OID(Project2Person.BASE_DATA_OBJECT_TYPE, id));
|
||||
} catch (DataObjectNotFoundException ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
|
||||
return project2Person;
|
||||
}
|
||||
|
||||
public void cellSelected(TableActionEvent e) {
|
||||
s_log.debug("this is cellSelected...");
|
||||
int col = e.getColumn().intValue();
|
||||
PageState state = e.getPageState();
|
||||
Project2Person project2Person = getProject2Person(e);
|
||||
Assert.exists(project2Person);
|
||||
|
||||
if (col == m_editCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
m_project2personModel.setSelectedObject(state,
|
||||
project2Person);
|
||||
}
|
||||
} else if (col == m_delCol.getModelIndex()) {
|
||||
if (Boolean.TRUE.equals(m_editor.get(state))) {
|
||||
try {
|
||||
m_project2personModel.clearSelection(state);
|
||||
s_log.debug("trying to delete project2Person...");
|
||||
project2Person.delete();
|
||||
} catch (Exception ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
}
|
||||
} else if (col == m_moveUpCol.getModelIndex()) {
|
||||
m_project2personModel.clearSelection(state);
|
||||
project2Person.swapWithPrevious();
|
||||
} else if (col == m_moveDownCol.getModelIndex()) {
|
||||
m_project2personModel.clearSelection(state);
|
||||
project2Person.swapWithNext();
|
||||
}
|
||||
}
|
||||
|
||||
public void headSelected(TableActionEvent e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Table;
|
||||
import com.arsdigita.bebop.table.TableModel;
|
||||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.Project;
|
||||
import com.arsdigita.cms.contenttypes.Project2Person;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class Project2PersonTableModelBuilder
|
||||
extends LockableImpl
|
||||
implements TableModelBuilder {
|
||||
|
||||
private final static Logger s_log =
|
||||
Logger.getLogger(Project2PersonTableModelBuilder.class);
|
||||
private ItemSelectionModel m_itemModel;
|
||||
|
||||
public Project2PersonTableModelBuilder(ItemSelectionModel itemModel) {
|
||||
m_itemModel = itemModel;
|
||||
}
|
||||
|
||||
public TableModel makeModel(Table t, PageState s) {
|
||||
DataCollection persons = getPersons(s);
|
||||
|
||||
if (persons.isEmpty()) {
|
||||
return Table.EMPTY_MODEL;
|
||||
} else {
|
||||
return new Project2PersonTableModel(persons);
|
||||
}
|
||||
}
|
||||
|
||||
public DataCollection getPersons(PageState s) {
|
||||
Assert.isTrue(m_itemModel.isSelected(s), "item selected");
|
||||
Project project = (Project) m_itemModel.getSelectedItem(s);
|
||||
return Project2Person.getProject2Persons(project);
|
||||
}
|
||||
|
||||
public static class Project2PersonTableModel implements TableModel {
|
||||
|
||||
DataCollection m_persons;
|
||||
Project2Person m_p2p;
|
||||
|
||||
public Project2PersonTableModel(DataCollection persons) {
|
||||
m_persons = persons;
|
||||
m_p2p = null;
|
||||
}
|
||||
|
||||
public int getColumnCount() {
|
||||
return (int) m_persons.size();
|
||||
}
|
||||
|
||||
public boolean nextRow() {
|
||||
if (m_persons.next()) {
|
||||
DataObject obj = m_persons.getDataObject();
|
||||
m_p2p = (Project2Person) DomainObjectFactory.newInstance(obj);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getElementAt(int columnIndex) {
|
||||
return m_p2p;
|
||||
}
|
||||
|
||||
public Object getKeyAt(int columnIndex) {
|
||||
return m_p2p.getID();
|
||||
}
|
||||
|
||||
public long size() {
|
||||
return m_persons.size();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.Component;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.Project;
|
||||
import com.arsdigita.cms.contenttypes.ProjectGlobalizationUtil;
|
||||
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
|
||||
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
|
||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
||||
import com.arsdigita.domain.DomainObject;
|
||||
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
|
||||
import java.text.DateFormat;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ProjectPropertiesStep extends SimpleEditStep {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ProjectPropertiesStep.class);
|
||||
public final static String EDIT_SHEET_NAME = "edit";
|
||||
|
||||
public ProjectPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) {
|
||||
super(itemModel, parent);
|
||||
|
||||
setDefaultEditKey(EDIT_SHEET_NAME);
|
||||
|
||||
BasicPageForm editSheet;
|
||||
editSheet = new ProjectPropertyForm(itemModel, this);
|
||||
add(EDIT_SHEET_NAME, "Edit",
|
||||
new WorkflowLockedComponentAccess(editSheet, itemModel),
|
||||
editSheet.getSaveCancelSection().getCancelButton());
|
||||
|
||||
setDisplayComponent(getProjectPropertySheet(itemModel));
|
||||
}
|
||||
|
||||
public static Component getProjectPropertySheet(ItemSelectionModel itemModel) {
|
||||
DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(itemModel);
|
||||
|
||||
sheet.add(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.projectname"),
|
||||
Project.PROJECTNAME);
|
||||
sheet.add(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.description"),
|
||||
Project.PROJECT_DESCRIPTION);
|
||||
|
||||
if (!ContentSection.getConfig().getHideLaunchDate()) {
|
||||
sheet.add(GlobalizationUtil.globalize("cms.ui.authoring.page_launch_date"),
|
||||
ContentPage.LAUNCH_DATE,
|
||||
new DomainObjectPropertySheet.AttributeFormatter() {
|
||||
|
||||
public String format(DomainObject obj, String attribute, PageState state) {
|
||||
ContentPage page = (ContentPage) obj;
|
||||
if (page.getLaunchDate() != null) {
|
||||
return DateFormat.getDateInstance(DateFormat.LONG).format(page.getLaunchDate());
|
||||
} else {
|
||||
return (String) GlobalizationUtil.globalize("cms.ui.unknown").localize();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return sheet;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
package com.arsdigita.cms.contenttypes.ui.project;
|
||||
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.event.FormInitListener;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
||||
import com.arsdigita.bebop.form.Date;
|
||||
import com.arsdigita.bebop.form.TextArea;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.DateParameter;
|
||||
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
||||
import com.arsdigita.bebop.parameters.ParameterModel;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.Project;
|
||||
import com.arsdigita.cms.contenttypes.ProjectGlobalizationUtil;
|
||||
import com.arsdigita.cms.ui.authoring.BasicPageForm;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||
*/
|
||||
public class ProjectPropertyForm extends BasicPageForm
|
||||
implements FormProcessListener, FormInitListener, FormSubmissionListener {
|
||||
|
||||
private final static Logger s_log = Logger.getLogger(ProjectPropertyForm.class);
|
||||
private ProjectPropertiesStep m_step;
|
||||
public final static String PROJECTNAME = Project.PROJECTNAME;
|
||||
public final static String PROJECT_DESCRIPTION = Project.PROJECT_DESCRIPTION;
|
||||
public final static String FUNDING = Project.FUNDING;
|
||||
public final static String BEGINDATE = Project.BEGINDATE;
|
||||
public final static String ENDDATE = Project.ENDDATE;
|
||||
//public final static String FINISHED = Project.FINISHED;
|
||||
public final static String ID = "Project_edit";
|
||||
|
||||
public ProjectPropertyForm(ItemSelectionModel itemModel) {
|
||||
this(itemModel, null);
|
||||
}
|
||||
|
||||
public ProjectPropertyForm(ItemSelectionModel itemModel,
|
||||
ProjectPropertiesStep step) {
|
||||
super(ID, itemModel);
|
||||
s_log.debug("Creating PropertyForm for project...");
|
||||
m_step = step;
|
||||
addSubmissionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWidgets() {
|
||||
s_log.debug("addWidgets called...");
|
||||
s_log.debug("Adding widgets of super class...");
|
||||
super.addWidgets();
|
||||
|
||||
s_log.debug("Adding own widgets...");
|
||||
add(new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.projectname")));
|
||||
ParameterModel projectNameParam = new StringParameter(PROJECTNAME);
|
||||
TextField projectName = new TextField(projectNameParam);
|
||||
projectName.addValidationListener(new NotNullValidationListener());
|
||||
add(projectName);
|
||||
|
||||
add(new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.description")));
|
||||
TextArea description = new TextArea(PROJECT_DESCRIPTION);
|
||||
description.setRows(5);
|
||||
description.setCols(30);
|
||||
add(description);
|
||||
|
||||
add(new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.funding")));
|
||||
TextArea funding = new TextArea(FUNDING);
|
||||
funding.setRows(5);
|
||||
funding.setCols(30);
|
||||
add(funding);
|
||||
|
||||
add(new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.begin")));
|
||||
ParameterModel beginParam = new DateParameter(BEGINDATE);
|
||||
Date begin = new Date(beginParam);
|
||||
add(begin);
|
||||
|
||||
add(new Label(ProjectGlobalizationUtil.globalize("cms.contenttypes.ui.project.end")));
|
||||
ParameterModel endParam = new DateParameter(ENDDATE);
|
||||
Date end = new Date(endParam);
|
||||
add(end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(FormSectionEvent e) throws FormProcessException {
|
||||
FormData data = e.getFormData();
|
||||
Project project = (Project) super.initBasicWidgets(e);
|
||||
|
||||
data.put(PROJECTNAME, project.getProjectName());
|
||||
data.put(PROJECT_DESCRIPTION, project.getProjectDescription());
|
||||
data.put(FUNDING, project.getFunding());
|
||||
data.put(BEGINDATE, project.getBegin());
|
||||
data.put(ENDDATE, project.getEnd());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(FormSectionEvent e) throws FormProcessException {
|
||||
FormData data = e.getFormData();
|
||||
|
||||
Project project = (Project) super.processBasicWidgets(e);
|
||||
|
||||
if ((project != null) &&
|
||||
(getSaveCancelSection().getSaveButton().isSelected(e.getPageState()))) {
|
||||
project.setProjectName((String) data.get(PROJECTNAME));
|
||||
project.setProjectDescription((String) data.get(PROJECT_DESCRIPTION));
|
||||
project.setFunding((String) data.get(FUNDING));
|
||||
project.setBegin((java.util.Date) data.get(BEGINDATE));
|
||||
project.setEnd((java.util.Date) data.get(ENDDATE));
|
||||
|
||||
project.save();
|
||||
}
|
||||
|
||||
if (m_step != null) {
|
||||
m_step.maybeForwardToNextStep(e.getPageState());
|
||||
}
|
||||
}
|
||||
|
||||
public void submitted(FormSectionEvent e) throws FormProcessException {
|
||||
if ((m_step != null) &&
|
||||
(getSaveCancelSection().getCancelButton().isSelected(e.getPageState()))) {
|
||||
m_step.cancelStreamlinedCreation(e.getPageState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -566,7 +566,7 @@ public class Code {
|
|||
return names(cols(c, type), alias);
|
||||
}
|
||||
|
||||
private static Column[] cols(Constraint c, ObjectType type) {
|
||||
private static Column[] cols(Constraint c, ObjectType type) {
|
||||
Column[] cols = c.getColumns();
|
||||
Root root = type.getRoot();
|
||||
ObjectType basetype = type.getBasetype();
|
||||
|
|
|
|||
Loading…
Reference in New Issue