diff --git a/ccm-cms/src/com/arsdigita/cms/ui/authoring/BasicPageForm.java b/ccm-cms/src/com/arsdigita/cms/ui/authoring/BasicPageForm.java
index 37949aeea..5afe05267 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/authoring/BasicPageForm.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/authoring/BasicPageForm.java
@@ -18,7 +18,6 @@
*/
package com.arsdigita.cms.ui.authoring;
-
import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
diff --git a/ccm-sci-types-department/application.xml b/ccm-sci-types-department/application.xml
new file mode 100644
index 000000000..257d91b3b
--- /dev/null
+++ b/ccm-sci-types-department/application.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+
+ Content type for a departments of scientific organizations.
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-department/pdl/com/arsdigita/content-types/SciDepartment.pdl b/ccm-sci-types-department/pdl/com/arsdigita/content-types/SciDepartment.pdl
new file mode 100644
index 000000000..dc4047c30
--- /dev/null
+++ b/ccm-sci-types-department/pdl/com/arsdigita/content-types/SciDepartment.pdl
@@ -0,0 +1,87 @@
+model com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.kernel.ACSObject;
+import com.arsdigita.cms.*;
+
+object type SciDepartment extends GenericOrganizationalUnit {
+ String[0..1] departmentShortDescription = ct_sci_departments.shortdescription VARCHAR(5000);
+ String[0..1] departmentDescription = ct_sci_departments.description CLOB;
+
+ reference key ( ct_sci_departments.department_id );
+}
+
+query getIdsOfContactsOfSciDepartment {
+ BigDecimal contactId;
+
+ do {
+ select cms_organizationalunits_contact_map.contact_id
+ from cms_organizationalunits_contact_map
+ where cms_organizationalunits_contact_map.organizationalunit_id = :department
+ } map {
+ contactId = cms_organizationalunits_contact_map.contact_id;
+ }
+}
+
+query getIdsOfSubDepartmentsOfSciDepartment {
+ BigDecimal departmentId;
+
+ do {
+ select cms_organizationalunit_hierarchy_map.subordinate_orgaunit_id
+ from cms_organizationalunit_hierarchy_map
+ where cms_organizationalunit_hierarchy_map.superior_orgaunit_id = :department
+ and cms_organizationalunit_hierarchy_map.assoc_type = 'subDepartment'
+ } map {
+ departmentId = ct_sciorga_Departments_subDepartments_map.Department_id;
+ }
+}
+
+query getIdsOfMembersOfSciDepartment {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :department
+ } map {
+ memberId = cms_organizationalunits_person_map.person_id;
+ }
+}
+
+query getIdsOfActiveMembersOfSciDepartment {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :department
+ and cms_organizationalunits_person_map.status = 'active'
+ } map {
+ memberId = cms_organizationalunits_person_map.person_id;
+ }
+}
+
+query getIdsOfAssociatedMembersOfSciDepartment {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :department
+ and cms_organizationalunits_person_map.status = 'associated'
+ } map {
+ memberId = cms_organizationalunits_person_map.personId;
+ }
+}
+
+query getIdsOfFormerMembersOfSciDepartment {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.cms_persons.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :department
+ and (cms_organizationalunits_person_map.status = 'former' or cms_organizationalunits_person_map.status = 'associatedFormer')
+ } map {
+ memberId = cms_organizationalunits_person_map.personId;
+ }
+}
\ No newline at end of file
diff --git a/ccm-sci-types-department/sql/ccm-sci-types-department/postgres-create.sql b/ccm-sci-types-department/sql/ccm-sci-types-department/postgres-create.sql
new file mode 100644
index 000000000..38716a0ca
--- /dev/null
+++ b/ccm-sci-types-department/sql/ccm-sci-types-department/postgres-create.sql
@@ -0,0 +1,4 @@
+begin;
+\i ddl/postgres/create.sql
+\i ddl/postgres/deferred.sql
+end;
\ No newline at end of file
diff --git a/ccm-sci-types-department/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xml b/ccm-sci-types-department/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xml
new file mode 100644
index 000000000..cdafaa5bb
--- /dev/null
+++ b/ccm-sci-types-department/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-department/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciDepartment.xml b/ccm-sci-types-department/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciDepartment.xml
new file mode 100644
index 000000000..9b71ef4a1
--- /dev/null
+++ b/ccm-sci-types-department/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciDepartment.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-department/src/ccm-sci-types-department.config b/ccm-sci-types-department/src/ccm-sci-types-department.config
new file mode 100644
index 000000000..c201916a3
--- /dev/null
+++ b/ccm-sci-types-department/src/ccm-sci-types-department.config
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ccm-sci-types-department/src/ccm-sci-types-department.load b/ccm-sci-types-department/src/ccm-sci-types-department.load
new file mode 100644
index 000000000..535904f2b
--- /dev/null
+++ b/ccm-sci-types-department/src/ccm-sci-types-department.load
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartment.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartment.java
new file mode 100644
index 000000000..24af3f93f
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartment.java
@@ -0,0 +1,233 @@
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.cms.ExtraXMLGenerator;
+import com.arsdigita.cms.contenttypes.ui.SciDepartmentExtraXmlGenerator;
+import com.arsdigita.domain.DataObjectNotFoundException;
+import com.arsdigita.persistence.DataObject;
+import com.arsdigita.persistence.DataQuery;
+import com.arsdigita.persistence.OID;
+import com.arsdigita.persistence.SessionManager;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartment extends GenericOrganizationalUnit {
+
+ public static final String DEPARTMENT_SHORT_DESCRIPTION =
+ "departmentShortDescription";
+ public static final String DEPARTMENT_DESCRIPTION = "departmentDescription";
+ public static final String ROLE_ENUM_NAME = "SciDepartmentRole";
+ public static final String BASE_DATA_OBJECT_TYPE =
+ "com.arsdigita.cms.contenttypes.SciDepartment";
+ private static final SciDepartmentConfig config = new SciDepartmentConfig();
+
+ static {
+ config.load();
+ }
+
+ public SciDepartment() {
+ this(BASE_DATA_OBJECT_TYPE);
+ }
+
+ public SciDepartment(final BigDecimal id) throws DataObjectNotFoundException {
+ this(new OID(BASE_DATA_OBJECT_TYPE, id));
+ }
+
+ public SciDepartment(final OID oid) throws DataObjectNotFoundException {
+ super(oid);
+ }
+
+ public SciDepartment(final DataObject dataObject) {
+ super(dataObject);
+ }
+
+ public SciDepartment(final String type) {
+ super(type);
+ }
+
+ public static SciDepartmentConfig getConfig() {
+ return config;
+ }
+
+ public String getDepartmentShortDescription() {
+ return (String) get(DEPARTMENT_SHORT_DESCRIPTION);
+ }
+
+ public void setDepartmentShortDescription(final String shortDesc) {
+ set(DEPARTMENT_SHORT_DESCRIPTION, shortDesc);
+ }
+
+ public String getDepartmentDescription() {
+ return (String) get(DEPARTMENT_DESCRIPTION);
+ }
+
+ public void setDepartmentDescription(final String description) {
+ set(DEPARTMENT_DESCRIPTION, description);
+ }
+
+ @Override
+ public boolean hasContacts() {
+ boolean result = false;
+
+ final DataQuery query =
+ SessionManager.getSession().retrieveQuery(
+ "com.arsdigita.cms.contenttypes.getIdsOfContactsOfSciDepartment");
+ query.setParameter("project", getID());
+
+ if (query.size() > 0) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ query.close();
+
+ return result;
+ }
+
+ public boolean hasMembers(final boolean merge,
+ final SciDepartmentMemberStatus status) {
+ String queryName;
+
+ switch (status) {
+ case ALL:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfMembersOfSciDepartment";
+ break;
+ case ACTIVE:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfActiveMembersOfSciDepartment";
+ break;
+ case ASSOCIATED:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfAssociatedMembersOfSciDepartment";
+ break;
+ case FORMER:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfFormerMembersOfSciDepartment";
+ break;
+ default:
+ queryName = "";
+ break;
+ }
+
+ final DataQuery query = SessionManager.getSession().retrieveQuery(
+ queryName);
+ query.setParameter("department", getID());
+
+ if (query.size() > 0) {
+ query.close();
+ return true;
+ } else {
+ if (merge) {
+ query.close();
+ DataQuery departmentsQuery =
+ SessionManager.getSession().retrieveQuery(
+ "com.arsdigita.cms.contenttypes.getIdsOfSubDepartmentsOfSciDepartment");
+ departmentsQuery.setParameter("department", getID());
+
+ if (query.size() > 0) {
+ BigDecimal departmentId;
+ boolean result = false;
+ while (departmentsQuery.next()) {
+ departmentId = (BigDecimal) departmentsQuery.get(
+ "departmentId");
+ result = hasMembers(departmentId, merge, status);
+
+ if (result) {
+ break;
+ }
+ }
+
+ departmentsQuery.close();
+ return result;
+ } else {
+ departmentsQuery.close();
+ return false;
+ }
+ } else {
+ query.close();
+ return false;
+ }
+ }
+ }
+
+ private boolean hasMembers(final BigDecimal departmentId,
+ final boolean merge,
+ final SciDepartmentMemberStatus status) {
+ String queryName;
+
+ switch (status) {
+ case ALL:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfMembersOfSciDepartment";
+ break;
+ case ACTIVE:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfActiveMembersOfSciDepartment";
+ break;
+ case ASSOCIATED:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfAssociatedMembersOfDepartment";
+ break;
+ case FORMER:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfFormerMembersOfSciDepartment";
+ break;
+ default:
+ queryName = "";
+ break;
+ }
+
+ final DataQuery query = SessionManager.getSession().retrieveQuery(
+ queryName);
+ query.setParameter("department", departmentId);
+
+ if (query.size() > 0) {
+ query.close();
+ return true;
+ } else {
+ if (merge) {
+ query.close();
+ DataQuery subDepartmentsQuery =
+ SessionManager.getSession().retrieveQuery(
+ "com.arsdigita.cms.contenttypes.getIdsOfSubDepartmentsOfSciDepartment");
+ subDepartmentsQuery.setParameter("department", departmentId);
+
+ if (query.size() > 0) {
+ BigDecimal subdepartmentId;
+ boolean result = false;
+ while (subDepartmentsQuery.next()) {
+ subdepartmentId = (BigDecimal) subDepartmentsQuery.get(
+ "departmentId");
+ result = hasMembers(subdepartmentId, merge, status);
+
+ if (result) {
+ break;
+ }
+ }
+
+ subDepartmentsQuery.close();
+ return result;
+ } else {
+ subDepartmentsQuery.close();
+ return false;
+ }
+ } else {
+ query.close();
+ return false;
+ }
+ }
+ }
+
+ @Override
+ public List getExtraXMLGenerators() {
+ final List generators = super.getExtraXMLGenerators();
+ generators.add(new SciDepartmentExtraXmlGenerator());
+ return generators;
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentConfig.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentConfig.java
new file mode 100644
index 000000000..5bb9ef2ae
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentConfig.java
@@ -0,0 +1,118 @@
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.runtime.AbstractConfig;
+import com.arsdigita.util.parameter.BooleanParameter;
+import com.arsdigita.util.parameter.IntegerParameter;
+import com.arsdigita.util.parameter.Parameter;
+import com.arsdigita.util.parameter.StringParameter;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentConfig extends AbstractConfig {
+
+ private final Parameter enableSubDepartmentsStep;
+ private final Parameter enableSuperDepartmentsStep;
+ private final Parameter enableProjectsStep;
+ private final Parameter enableProjectDepartmentsStep;
+ private final Parameter shortDescMaxLength;
+ private final Parameter enableDescriptionDhtml;
+ private final Parameter permittedPersonType;
+ private final Parameter tabs;
+
+ public SciDepartmentConfig() {
+
+ enableSubDepartmentsStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.scidepartment.enable.subdepartments_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ enableSuperDepartmentsStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.scidepartment.enable.super_departments_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ enableProjectsStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.scidepartment.enable.projects_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ enableProjectDepartmentsStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.scidepartment.enable.project_departments_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ shortDescMaxLength =
+ new IntegerParameter(
+ "com.arsdigita.cms.contenttypes.scidepartment.short_desc.max_length",
+ Parameter.REQUIRED,
+ 500);
+
+ enableDescriptionDhtml =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.scidepartment.description.dhtml_enable",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ permittedPersonType =
+ new StringParameter(
+ "com.arsdigita.cms.contenttypes.sciproject.permitted_person_type",
+ Parameter.REQUIRED,
+ "com.arsdigita.cms.contenttypes.GenericPerson");
+
+ tabs =
+ new StringParameter(
+ "com.arsdigita.cms.contenttypes.sciproject.tabs",
+ Parameter.REQUIRED,
+ "summary:com.arsdigita.cms.contenttypes.ui.SciDepartmentSummaryTab");
+
+ register(enableSubDepartmentsStep);
+ register(enableSuperDepartmentsStep);
+ register(enableProjectsStep);
+ register(enableProjectDepartmentsStep);
+ register(shortDescMaxLength);
+ register(enableDescriptionDhtml);
+ register(permittedPersonType);
+ register(tabs);
+
+ loadInfo();
+ }
+
+ public final Boolean getEnableSubDepartmentsStep() {
+ return (Boolean) get(enableSubDepartmentsStep);
+ }
+
+ public final Boolean getEnableSuperDepartmentsStep() {
+ return (Boolean) get(enableSuperDepartmentsStep);
+ }
+
+ public final Boolean getEnableProjectsStep() {
+ return (Boolean) get(enableProjectsStep);
+ }
+
+ public final Boolean getEnableProjectDepartmentsStep() {
+ return (Boolean) get(enableProjectDepartmentsStep);
+ }
+
+ public Integer getShortDescMaxLength() {
+ return (Integer) get(shortDescMaxLength);
+ }
+
+ public Boolean getEnableDescriptionDhtml() {
+ return (Boolean) get(enableDescriptionDhtml);
+ }
+
+ public final String getPermittedPersonType() {
+ return (String) get(permittedPersonType);
+ }
+
+ public final String getTabs() {
+ return (String) get(tabs);
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentConfig_parameter.properties b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentConfig_parameter.properties
new file mode 100644
index 000000000..5705a5ad1
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentConfig_parameter.properties
@@ -0,0 +1,39 @@
+com.arsdigita.cms.contenttypes.scidepartment.enable.subdepartments_step.title = Show authoring step for subordinate departments?
+com.arsdigita.cms.contenttypes.scidepartment.enable.subdepartments_step.purpose = Enables authoring step for adding subordinate departments to a department
+com.arsdigita.cms.contenttypes.scidepartment.enable.subdepartments_step.example = false
+com.arsdigita.cms.contenttypes.scidepartment.enable.subdepartments_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.scidepartment.enable.super_departments_step.title = Show authoring step for superior departments?
+com.arsdigita.cms.contenttypes.scidepartment.enable.super_departments_step.purpose = Enables authoring step for adding superior departments to a department
+com.arsdigita.cms.contenttypes.scidepartment.enable.super_departments_step.example = false
+com.arsdigita.cms.contenttypes.scidepartment.enable.super_departments_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.scidepartment.enable.projects_step.title = Show authoring step for adding projects (if ccm-sci-types-project is installed?)
+com.arsdigita.cms.contenttypes.scidepartment.enable.projects_step.purpose = Enables authoring step for adding projects to a department. Only useful if ccm-sci-types-project is installed.
+com.arsdigita.cms.contenttypes.scidepartment.enable.projects_step.example = false
+com.arsdigita.cms.contenttypes.scidepartment.enable.projects_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.scidepartment.enable.project_departments_step.title = Add a departments step to ccm-sci-types-project
+com.arsdigita.cms.contenttypes.scidepartment.enable.project_departments_step.purpose = If ccm-sci-types-project is installed an authoring step for associating a department with a project can be attached to the authoring steps of SciProject
+com.arsdigita.cms.contenttypes.scidepartment.enable.project_departments_step.example = false
+com.arsdigita.cms.contenttypes.scidepartment.enable.project_departments_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.scidepartment.short_desc.max_length.title = Short description maximum length
+com.arsdigita.cms.contenttypes.scidepartment.short_desc.max_length.purpose = Restricts the max length of the short description of a department. Maximum possible value: 5000
+com.arsdigita.cms.contenttypes.scidepartment.short_desc.max_length.example = 500
+com.arsdigita.cms.contenttypes.scidepartment.short_desc.max_length.format = [Integer]
+
+com.arsdigita.cms.contenttypes.scidepartment.description.dhtml_enable.title = Enables the DHTML editor for the description
+com.arsdigita.cms.contenttypes.scidepartment.description.dhtml_enable.purpose = Enables the DHTML editor for the description
+com.arsdigita.cms.contenttypes.scidepartment.description.dhtml_enable.example = true
+com.arsdigita.cms.contenttypes.scidepartment.description.dhtml_enable.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.sciproject.permitted_person_type.title = Permitted person type for members of the department
+com.arsdigita.cms.contenttypes.sciproject.permitted_person_type.purpose = Restrict the selectable persons for adding as member to a subtype of GenericPerson
+com.arsdigita.cms.contenttypes.sciproject.permitted_person_type.example = com.arsdigita.cms.contenttypes.GenericPerson
+com.arsdigita.cms.contenttypes.sciproject.permitted_person_type.format = [String]
+
+com.arsdigita.cms.contenttypes.sciproject.tabs.title = Tabs for SciDepartment detail view
+com.arsdigita.cms.contenttypes.sciproject.tabs.purpose = Defines which tabs are shown in the detail view of a SciDepartment
+com.arsdigita.cms.contenttypes.sciproject.tabs.example = summary:coma.arsdigita.cms.contenttypes.ui.SciDepartmentSummaryTab;members:SciDepartmentMembersTab
+com.arsdigita.cms.contenttypes.sciproject.tabs.format = [String]
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentInitializer.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentInitializer.java
new file mode 100644
index 000000000..8e93557a7
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentInitializer.java
@@ -0,0 +1,95 @@
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.cms.ContentType;
+import com.arsdigita.cms.ContentTypeCollection;
+import com.arsdigita.cms.contenttypes.ui.SciDepartmentGlobalizationUtil;
+import com.arsdigita.cms.contenttypes.ui.SciDepartmentProjectsStep;
+import com.arsdigita.cms.contenttypes.ui.SciDepartmentSubDepartmentsStep;
+import com.arsdigita.cms.contenttypes.ui.SciDepartmentSuperDepartmentsStep;
+import com.arsdigita.cms.contenttypes.ui.SciProjectDepartmentsStep;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.runtime.DomainInitEvent;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentInitializer extends ContentTypeInitializer {
+
+ public SciDepartmentInitializer() {
+ super("ccm-sci-types-department.pdl.mf",
+ SciDepartment.BASE_DATA_OBJECT_TYPE);
+ }
+
+ @Override
+ public void init(final DomainInitEvent event) {
+ super.init(event);
+
+ final SciDepartmentConfig config = SciDepartment.getConfig();
+
+ if (config.getEnableSubDepartmentsStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ SciDepartment.BASE_DATA_OBJECT_TYPE,
+ SciDepartmentSubDepartmentsStep.class,
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.title"),
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.description"),
+ 10);
+ }
+
+ if (config.getEnableSuperDepartmentsStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ SciDepartment.BASE_DATA_OBJECT_TYPE,
+ SciDepartmentSuperDepartmentsStep.class,
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.title"),
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.description"),
+ 20);
+ }
+
+ final ContentTypeCollection contentTypes = ContentType.
+ getAllContentTypes();
+ contentTypes.addFilter(
+ "associatedObjectType = 'com.arsdigita.cms.contenttypes.SciProject'");
+
+ if (contentTypes.size() > 0) {
+ if (config.getEnableProjectsStep()) {
+
+ AuthoringKitWizard.registerAssetStep(
+ SciDepartment.BASE_DATA_OBJECT_TYPE,
+ SciDepartmentProjectsStep.class,
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.title"),
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.description"),
+ 30);
+ }
+
+ if (config.getEnableProjectDepartmentsStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ "com.arsdigita.cms.contenttypes.SciProject",
+ SciProjectDepartmentsStep.class,
+ SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.title"),
+ SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.description"),
+ 40);
+ }
+ }
+ }
+
+ @Override
+ public String[] getStylesheets() {
+ return new String[]{
+ "/static/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xsl"
+ };
+ }
+
+ @Override
+ public String getTraversalXML() {
+ return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciDepartment.xml";
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentLoader.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentLoader.java
new file mode 100644
index 000000000..ef357eb01
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentLoader.java
@@ -0,0 +1,19 @@
+package com.arsdigita.cms.contenttypes;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentLoader extends AbstractContentTypeLoader {
+
+ public SciDepartmentLoader() {
+ super();
+ }
+
+ @Override
+ public String[] getTypes() {
+ return new String[]{
+ "/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xml"};
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentMemberStatus.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentMemberStatus.java
new file mode 100644
index 000000000..c6bbab73a
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/SciDepartmentMemberStatus.java
@@ -0,0 +1,14 @@
+package com.arsdigita.cms.contenttypes;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public enum SciDepartmentMemberStatus {
+
+ ALL,
+ ACTIVE,
+ ASSOCIATED,
+ FORMER
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionEditForm.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionEditForm.java
new file mode 100644
index 000000000..7d236a129
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionEditForm.java
@@ -0,0 +1,82 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.bebop.form.TextArea;
+import com.arsdigita.bebop.parameters.ParameterModel;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.cms.contenttypes.SciDepartmentConfig;
+import com.arsdigita.cms.ui.CMSDHTMLEditor;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentDescriptionEditForm
+ extends BasicItemForm
+ implements FormProcessListener,
+ FormInitListener {
+
+ private final static SciDepartmentConfig config = SciDepartment.getConfig();
+
+ public SciDepartmentDescriptionEditForm(final ItemSelectionModel itemModel) {
+ super("SciDepartmentDescriptionEditForm", itemModel);
+ }
+
+ @Override
+ public void addWidgets() {
+ add(new Label(SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.description")));
+ final ParameterModel descParam = new StringParameter(
+ SciDepartment.DEPARTMENT_DESCRIPTION);
+ final TextArea desc;
+ if (config.getEnableDescriptionDhtml()) {
+ desc = new CMSDHTMLEditor(descParam);
+ } else {
+ desc = new TextArea(descParam);
+ }
+ desc.setCols(75);
+ desc.setRows(25);
+ add(desc);
+ }
+
+ @Override
+ public void init(final FormSectionEvent fse) throws FormProcessException {
+ final PageState state = fse.getPageState();
+ final FormData data = fse.getFormData();
+ final SciDepartment department = (SciDepartment) getItemSelectionModel().
+ getSelectedObject(state);
+
+ data.put(SciDepartment.DEPARTMENT_DESCRIPTION, department.
+ getDepartmentDescription());
+
+ setVisible(state, true);
+ }
+
+ @Override
+ public void process(final FormSectionEvent fse) throws FormProcessException {
+ final PageState state = fse.getPageState();
+ final FormData data = fse.getFormData();
+ final SciDepartment department = (SciDepartment) getItemSelectionModel().
+ getSelectedObject(state);
+
+ if ((department != null)
+ && getSaveCancelSection().getSaveButton().isSelected(state)) {
+ department.setDepartmentDescription((String) data.get(
+ SciDepartment.DEPARTMENT_DESCRIPTION));
+
+ department.save();
+ }
+
+ init(fse);
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionStep.java
new file mode 100644
index 000000000..6be944564
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionStep.java
@@ -0,0 +1,62 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentDescriptionStep extends SimpleEditStep {
+
+ private String EDIT_DEPARTMENT_DESC_SHEET_NAME = "editDepartmentDesc";
+ private String UPDATE_DEPARTMENT_DESC_SHEET_NAME = "updateDepartmentDesc";
+
+ public SciDepartmentDescriptionStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciDepartmentDescriptionStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm editDescFrom = new SciDepartmentDescriptionEditForm(
+ itemModel);
+ add(EDIT_DEPARTMENT_DESC_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.desc.edit").localize(),
+ new WorkflowLockedComponentAccess(editDescFrom, itemModel),
+ editDescFrom.getSaveCancelSection().getCancelButton());
+
+ final SciDepartmentDescriptionUploadForm updateDescForm =
+ new SciDepartmentDescriptionUploadForm(
+ itemModel);
+ add(UPDATE_DEPARTMENT_DESC_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.desc.upload").localize(),
+ new WorkflowLockedComponentAccess(updateDescForm, itemModel),
+ updateDescForm.getSaveCancelSection().getCancelButton());
+
+ setDisplayComponent(getSciDepartmentEditDescSheet(itemModel));
+ }
+
+ public static Component getSciDepartmentEditDescSheet(
+ final ItemSelectionModel itemModel) {
+ final DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(
+ itemModel);
+
+ sheet.add(SciDepartmentGlobalizationUtil.globalize("scidepartment.ui.desc"),
+ SciDepartment.DEPARTMENT_DESCRIPTION);
+
+ return sheet;
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionUploadForm.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionUploadForm.java
new file mode 100644
index 000000000..19676a496
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentDescriptionUploadForm.java
@@ -0,0 +1,41 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentDescriptionUploadForm extends AbstractTextUploadForm {
+
+ public SciDepartmentDescriptionUploadForm(
+ final ItemSelectionModel itemModel) {
+ super(itemModel);
+ }
+
+ @Override
+ public GlobalizedMessage getLabelText() {
+ return SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.description.upload");
+ }
+
+ @Override
+ public GlobalizedMessage getMimeTypeLabel() {
+ return SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.description.upload.mimetype");
+ }
+
+ @Override
+ public void setText(final ItemSelectionModel itemModel,
+ final PageState state,
+ final String text) {
+ final SciDepartment department = (SciDepartment) itemModel.
+ getSelectedObject(state);
+ department.setDepartmentShortDescription(text);
+ department.save();
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentExtraXmlGenerator.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentExtraXmlGenerator.java
new file mode 100644
index 000000000..354f9a026
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentExtraXmlGenerator.java
@@ -0,0 +1,24 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Page;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.ContentItem;
+import com.arsdigita.cms.ExtraXMLGenerator;
+import com.arsdigita.xml.Element;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentExtraXmlGenerator implements ExtraXMLGenerator {
+
+ public void generateXML(ContentItem item, Element element, PageState state) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void addGlobalStateParams(Page p) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentGlobalizationUtil.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentGlobalizationUtil.java
new file mode 100644
index 000000000..919820f00
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentGlobalizationUtil.java
@@ -0,0 +1,23 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.globalization.GlobalizedMessage;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentGlobalizationUtil {
+
+ public static final String BUNDLE_NAME =
+ "com.arsdigita.cms.contenttypes.ui.SciDepartmentResources";
+
+ public static GlobalizedMessage globalize(final String key) {
+ return new GlobalizedMessage(key, BUNDLE_NAME);
+ }
+
+ public static GlobalizedMessage globalize(final String key,
+ final Object[] args) {
+ return new GlobalizedMessage(key, BUNDLE_NAME, args);
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberAddForm.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberAddForm.java
new file mode 100644
index 000000000..ab6ea7064
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberAddForm.java
@@ -0,0 +1,49 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ContentType;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.GenericPerson;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.domain.DataObjectNotFoundException;
+import org.apache.log4j.Logger;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentMemberAddForm
+ extends GenericOrganizationalUnitPersonAddForm {
+
+ private final Logger logger = Logger.getLogger(
+ SciDepartmentMemberAddForm.class);
+
+ public SciDepartmentMemberAddForm(
+ final ItemSelectionModel itemModel,
+ final GenericOrganizationalUnitPersonSelector personSelector) {
+ super(itemModel, personSelector);
+ }
+
+ @Override
+ protected String getPersonType() {
+ String personType = SciDepartment.getConfig().getPermittedPersonType();
+
+ try {
+ ContentType.findByAssociatedObjectType(personType);
+ } catch (DataObjectNotFoundException ex) {
+ logger.error(String.format("No content type for object type '%s'. "
+ + "Falling back to '%s'.",
+ personType,
+ GenericPerson.class.getName()),
+ ex);
+ personType = GenericPerson.class.getName();
+ }
+
+ return personType;
+ }
+
+ @Override
+ protected String getRoleAttributeName() {
+ return SciDepartment.ROLE_ENUM_NAME;
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberTable.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberTable.java
new file mode 100644
index 000000000..00aa421b6
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberTable.java
@@ -0,0 +1,24 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentMemberTable
+extends GenericOrganizationalUnitPersonsTable {
+
+ public SciDepartmentMemberTable(final ItemSelectionModel itemModel,
+ final GenericOrganizationalUnitPersonSelector personSelector) {
+ super(itemModel, personSelector);
+ }
+
+ @Override
+ public String getRoleAttributeName() {
+ return SciDepartment.ROLE_ENUM_NAME;
+ }
+
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersStep.java
new file mode 100644
index 000000000..c71599462
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersStep.java
@@ -0,0 +1,77 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.GenericPerson;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentMembersStep
+ extends SimpleEditStep
+ implements GenericOrganizationalUnitPersonSelector {
+
+ private static final String ADD_DEPARTMENT_MEMBER_SHEET_NAME =
+ "SciDepartmentAddMember";
+ private GenericPerson selectedPerson;
+ private String selectedPersonRole;
+ private String selectedPersonStatus;
+
+ public SciDepartmentMembersStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciDepartmentMembersStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addMemberSheet = new SciDepartmentMemberAddForm(
+ itemModel, this);
+ add(ADD_DEPARTMENT_MEMBER_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.members.add").localize(),
+ new WorkflowLockedComponentAccess(addMemberSheet, itemModel),
+ addMemberSheet.getSaveCancelSection().getCancelButton());
+
+ final SciDepartmentMemberTable memberTable =
+ new SciDepartmentMemberTable(
+ itemModel, this);
+ setDisplayComponent(memberTable);
+ }
+
+ public GenericPerson getSelectedPerson() {
+ return selectedPerson;
+ }
+
+ public void setSelectedPerson(final GenericPerson selectedPerson) {
+ this.selectedPerson = selectedPerson;
+ }
+
+ public String getSelectedPersonRole() {
+ return selectedPersonRole;
+ }
+
+ public void setSelectedPersonRole(final String selectedPersonRole) {
+ this.selectedPersonRole = selectedPersonRole;
+ }
+
+ public String getSelectedPersonStatus() {
+ return selectedPersonStatus;
+ }
+
+ public void setSelectedPersonStatus(final String selectedPersonStatus) {
+ this.selectedPersonStatus = selectedPersonStatus;
+ }
+
+ public void showEditComponent(final PageState state) {
+ showComponent(state, ADD_DEPARTMENT_MEMBER_SHEET_NAME);
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsStep.java
new file mode 100644
index 000000000..db5e2e633
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsStep.java
@@ -0,0 +1,138 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentProjectsStep extends SimpleEditStep {
+
+ private String ADD_PROJECT_SHEET_NAME = "SciDepartmentAddProject";
+ public final static String ASSOC_TYPE = "ProjectOf";
+
+ public SciDepartmentProjectsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciDepartmentProjectsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addProjectSheet =
+ new GenericOrganizationalUnitSubordinateOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSubordinateOrgaUnitLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.select").localize();
+ }
+
+ public String getSubordinateOrgaUnitType() {
+ return "com.arsdigita.cms.contenttypes.SciProject";
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.no_suitable_language_variant").
+ localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.already_added").
+ localize();
+ }
+ });
+ add(ADD_PROJECT_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.add").localize(),
+ new WorkflowLockedComponentAccess(addProjectSheet, itemModel),
+ addProjectSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSubordinateOrgaUnitsTable projectsTable =
+ new GenericOrganizationalUnitSubordinateOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.empty_view").localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.columns.name").
+ localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.columns.delete").
+ localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.columns.up").localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.columns.down").
+ localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.delete").localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.projects.delete.confirm").
+ localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(projectsTable);
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPropertiesStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPropertiesStep.java
new file mode 100644
index 000000000..37afb050d
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPropertiesStep.java
@@ -0,0 +1,77 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+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.toolbox.ui.DomainObjectPropertySheet;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentPropertiesStep
+ extends GenericOrganizationalUnitPropertiesStep {
+
+ public SciDepartmentPropertiesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ super(itemModel, parent);
+ }
+
+ public static Component getSciDepartmentPropertySheet(
+ final ItemSelectionModel itemModel) {
+
+ final DomainObjectPropertySheet sheet =
+ (DomainObjectPropertySheet) GenericOrganizationalUnitPropertiesStep.
+ getGenericOrganizationalUnitPropertySheet(itemModel);
+
+ sheet.add(SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.shortdesc"),
+ SciDepartment.DEPARTMENT_SHORT_DESCRIPTION);
+
+ return sheet;
+ }
+
+ @Override
+ public void addBasicProperties(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+
+ final SimpleEditStep basicProperties =
+ new SimpleEditStep(itemModel,
+ parent,
+ EDIT_SHEET_NAME);
+
+ final BasicPageForm editBasicSheet = new SciDepartmentPropertyForm(
+ itemModel, this);
+
+ basicProperties.add(EDIT_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.edit_basic_sheet").localize(),
+ new WorkflowLockedComponentAccess(editBasicSheet,
+ itemModel),
+ editBasicSheet.getSaveCancelSection().
+ getCancelButton());
+
+ basicProperties.setDisplayComponent(getSciDepartmentPropertySheet(
+ itemModel));
+
+ getSegmentedPanel().addSegment(
+ new Label((String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.edit_basic_properties").localize()),
+ basicProperties);
+ }
+
+ @Override
+ protected void addSteps(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ addStep(new GenericOrganizationalUnitContactPropertiesStep(itemModel,
+ parent),
+ SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.contacts"));
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPropertyForm.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPropertyForm.java
new file mode 100644
index 000000000..7d0adfb6a
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPropertyForm.java
@@ -0,0 +1,97 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.bebop.event.FormSubmissionListener;
+import com.arsdigita.bebop.form.TextArea;
+import com.arsdigita.bebop.parameters.ParameterModel;
+import com.arsdigita.bebop.parameters.StringInRangeValidationListener;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.cms.contenttypes.SciDepartmentConfig;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentPropertyForm
+ extends GenericOrganizationalUnitPropertyForm
+ implements FormProcessListener,
+ FormInitListener,
+ FormSubmissionListener {
+
+ public final static String ID = "SciDepartmentEdit";
+ private final static SciDepartmentConfig config = SciDepartment.getConfig();
+
+ public SciDepartmentPropertyForm(final ItemSelectionModel itemModel) {
+ this(itemModel, null);
+ }
+
+ public SciDepartmentPropertyForm(final ItemSelectionModel itemModel,
+ final SciDepartmentPropertiesStep step) {
+ super(itemModel, step);
+ addSubmissionListener(this);
+ }
+
+ @Override
+ public void addWidgets() {
+ super.addWidgets();
+
+ add(new Label(SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.shortdesc")));
+ ParameterModel shortDescParam = new StringParameter(
+ SciDepartment.DEPARTMENT_SHORT_DESCRIPTION);
+ TextArea shortDesc = new TextArea(shortDescParam);
+ shortDesc.addValidationListener(
+ new StringInRangeValidationListener(0,
+ config.getShortDescMaxLength()));
+ shortDesc.setCols(75);
+ shortDesc.setRows(5);
+ add(shortDesc);
+ }
+
+ @Override
+ public void init(final FormSectionEvent fse) throws FormProcessException {
+ super.init(fse);
+
+ final FormData data = fse.getFormData();
+ final SciDepartment department = (SciDepartment) super.initBasicWidgets(
+ fse);
+
+ data.put(SciDepartment.DEPARTMENT_SHORT_DESCRIPTION,
+ department.getDepartmentShortDescription());
+ }
+
+ @Override
+ public void process(final FormSectionEvent fse) throws FormProcessException {
+ super.process(fse);
+
+ final FormData data = fse.getFormData();
+ final PageState state = fse.getPageState();
+ final SciDepartment department = (SciDepartment) super.
+ processBasicWidgets(fse);
+
+ if ((department != null)
+ && getSaveCancelSection().getSaveButton().isSelected(state)) {
+ department.setDepartmentShortDescription((String) data.get(
+ SciDepartment.DEPARTMENT_SHORT_DESCRIPTION));
+
+ department.save();
+ }
+
+ init(fse);
+ }
+
+ @Override
+ public String getTitleLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.title").localize();
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentResources.properties b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentResources.properties
new file mode 100644
index 000000000..e7a3c3af8
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentResources.properties
@@ -0,0 +1,86 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+sciorganization.ui.department_properties.title=Basic Properties
+sciorganization.ui.department.members=Members
+sciorganization.ui.department.members.description=Manages the members of the department
+sciorganization.ui.department_description.title=Description
+scidepartment.ui.shortdesc=Short description
+scidepartment.ui.title=Title of department
+scidepartment.ui.edit_basic_sheet=Edit basic properties
+scidepartment.ui.edit_basic_properties=Edit basic properties
+scidepartment.ui.contacts=Kontakte
+scidepartment.ui.description.upload=Upload description
+scidepartment.ui.description.upload.mimetype=File type
+scidepartment.ui.description=Description
+scidepartment.ui.desc.edit=Edit description
+scidepartment.ui.desc.upload=Upload description
+scidepartment.ui.desc=Description
+scidepartment.ui.subdepartment.select=Select subordinate department
+scidepartment.ui.subdepartment.select.nothing=No department to add selected.
+scidepartment.ui.subdepartment.no_suitable_languge_variant=The department item selected has no suitable language variant.
+scidepartment.ui.subdepartment.adding_to_itself=It is not possible to add a department to itself as as subordinate department.
+scidepartment.ui.subdepartment.already_added=The selected department has already been added to this department as a subdepartment.
+scidepartment.ui.subdepartment.add=Add a subordinate department
+scidepartment.ui.subdepartments.empty_view=No subordinate departments
+scidepartment.ui.subdepartments.columns.name=Name of the subordinate department
+scidepartment.ui.subdepartments.columns.delete=Remove
+scidepartment.ui.subdepartments.columns.up=Up
+scidepartment.ui.subdepartments.columns.down=Down
+scidepartment.ui.subdepartments.delete=Remove
+scidepartment.ui.subdepartments.up=Up
+scidepartment.ui.subdepartments.down=Down
+scidepartment.ui.subdepartments.delete.confirm=Are you sure to remove the selected subordinate department?
+scidepartment.ui.superdepartment.select=Select superior department
+scidepartment.ui.superdepartment.select.nothing=No department selected.
+scidepartment.ui.superdepartment.no_suitable_language_variant=The selected department has no suitable language variant.
+scidepartment.ui.superdepartment.adding_to_itself=It is not possible to add a department to itself as superior department.
+scidepartment.ui.superdepartment.already_added=The selected department is already a superior department of this department.
+scidepartment.ui.superdepartments.empty_view=No superior departments
+scidepartment.ui.superdepartments.columns.name=Name of superior department
+scidepartment.ui.superdepartments.columns.delete=Remove
+scidepartment.ui.superdepartments.columns.up=Up
+scidepartment.ui.superdepartments.columns.down=Down
+scidepartment.ui.superdepartments.delete=Remove
+scidepartment.ui.superdepartments.up=Up
+scidepartment.ui.superdepartments.down=Down
+scidepartment.ui.superdepartments.delete.confirm=Are sure to remove the selected superior department?
+scidepartment.ui.superdepartments.title=Superior departments
+scidepartment.ui.subdepartments.title=Subordinate departments
+scidepartment.ui.subdepartments.description=Manage the subordinate departments of this department
+scidepartment.ui.superdepartments.description=Superior departments
+scidepartment.ui.projects.select=Select project to add
+scidepartment.ui.projects.select.nothing=No project selected.
+scidepartment.ui.projects.no_suitable_language_variant=The selected project has no suitable language variant.
+scidepartment.ui.projects.adding_to_itself=Strange error. Contact the system administrator.
+scidepartment.ui.projects.already_added=The selected project has already been added to the projects of this department.
+scidepartment.ui.projects.add=Add project
+scidepartment.ui.projects.empty_view=No projects
+scidepartment.ui.projects.columns.name=Title of the project
+scidepartment.ui.projects.columns.delete=Remove
+scidepartment.ui.projects.columns.up=Up
+scidepartment.ui.projects.columns.down=Down
+scidepartment.ui.projects.delete=Remove
+scidepartment.ui.projects.up=Up
+scidepartment.ui.projects.down=Runter
+scidepartment.ui.projects.delete.confirm=Are you sure to remove the selected project from the list of projects of this department?
+scidepartment.ui.projects.title=Projects
+scidepartment.ui.projects.description=Manage the projects of this department
+sciproject.ui.department.select=Select department
+sciproject.ui.department.select.nothing=No department selected
+sciproject.ui.department.no_suitable_language_variant=The selected department has no suitable language variant.
+sciproject.ui.department.adding_to_itself=Strange error. Please contact your system administrator.
+sciproject.ui.department.already_added=This project has already been added to the projects of the selected department.
+sciproject.ui.department.add=Add department
+sciproject.ui.departments.empty_view=No departments
+sciproject.ui.departments.columns.name=Name of the department
+sciproject.ui.departments.columns.delete=Remove
+sciproject.ui.departments.columns.up=Up
+sciproject.ui.departments.columns.down=Down
+sciproject.ui.departments.delete=Remove
+sciproject.ui.departments.up=Up
+sciproject.ui.departments.down=Down
+sciproject.ui.departments.delete.confirm=Are you that you want to remove this project from the list of projects of the selected department.
+sciproject.ui.departments.title=Involved departments
+sciproject.ui.departments.description=Add this project to the projects of a department
+scidepartment.ui.members.add=Add member
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentResources_de.properties b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentResources_de.properties
new file mode 100644
index 000000000..c0478d982
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentResources_de.properties
@@ -0,0 +1,86 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+sciorganization.ui.department_properties.title=Basiseigenschaften
+sciorganization.ui.department.members=Mitglieder
+sciorganization.ui.department.members.description=Mitglieder verwalten
+sciorganization.ui.department_description.title=Beschreibung
+scidepartment.ui.shortdesc=Kurzbeschreibung
+scidepartment.ui.title=Name (Titel) der Abteilung
+scidepartment.ui.edit_basic_sheet=Basiseigenschaften bearbeiten
+scidepartment.ui.edit_basic_properties=Basiseigenschaften bearbeiten
+scidepartment.ui.contacts=Contacts
+scidepartment.ui.description.upload=Beschreibung hochladen
+scidepartment.ui.description.upload.mimetype=Dateityp
+scidepartment.ui.description=Beschreibung
+scidepartment.ui.desc.edit=Beschreibung bearbeiten
+scidepartment.ui.desc.upload=Beschreibung hochladen
+scidepartment.ui.desc=Beschreibung
+scidepartment.ui.subdepartment.select=Unterabteilung ausw\u00e4hlen
+scidepartment.ui.subdepartment.select.nothing=Keine Abteilung zu hinzuf\u00fcgen ausgew\u00e4hlt.
+scidepartment.ui.subdepartment.no_suitable_languge_variant=Die ausgew\u00e4hlte Abteilung hat keine passende Sprachvariante.
+scidepartment.ui.subdepartment.adding_to_itself=Eine Abteilung kann nicht sich selbst als Unterabteilung zugeordnet werden
+scidepartment.ui.subdepartment.already_added=Die ausgew\u00e4hlte Abteilung wurde der aktuellen Abteilung bereits als Unterabteilung hinzugef\u00fcgt.
+scidepartment.ui.subdepartment.add=Unterabteilung hinzuf\u00fcgen
+scidepartment.ui.subdepartments.empty_view=Keine Unterabteilungen
+scidepartment.ui.subdepartments.columns.name=Name der Unterabteilung
+scidepartment.ui.subdepartments.columns.delete=Entfernen
+scidepartment.ui.subdepartments.columns.up=Hoch
+scidepartment.ui.subdepartments.columns.down=Runter
+scidepartment.ui.subdepartments.delete=Entfernen
+scidepartment.ui.subdepartments.up=Hoch
+scidepartment.ui.subdepartments.down=Runter
+scidepartment.ui.subdepartments.delete.confirm=Sind Sie sicher, dass Sie die ausgew\u00e4hlte Unterabteilung entfernen wollen?
+scidepartment.ui.superdepartment.select=\u00dcbergeordnete Abteilung w\u00e4hlen
+scidepartment.ui.superdepartment.select.nothing=Keine Abteilung ausgew\u00e4hlt.
+scidepartment.ui.superdepartment.no_suitable_language_variant=Die ausgew\u00e4hlte Abteilung hat keine passende Sprachvariante.
+scidepartment.ui.superdepartment.adding_to_itself=Eine Abteilung kann nich sich selbst als \u00fcbergeordnete Abteilung zugewiesen werden.
+scidepartment.ui.superdepartment.already_added=Die ausgew\u00e4hlte Abteilung ist bereits eine \u00fcbergeordnete Abteilung dieser Abteilung.
+scidepartment.ui.superdepartments.empty_view=Keine \u00fcbergeordneten Abteilungen
+scidepartment.ui.superdepartments.columns.name=Name der \u00fcbergeordneten Abteilung
+scidepartment.ui.superdepartments.columns.delete=Entfernen
+scidepartment.ui.superdepartments.columns.up=Hoch
+scidepartment.ui.superdepartments.columns.down=Runter
+scidepartment.ui.superdepartments.delete=Entfernen
+scidepartment.ui.superdepartments.up=Hoch
+scidepartment.ui.superdepartments.down=Runter
+scidepartment.ui.superdepartments.delete.confirm=Sind Sie sicher, dass Sie die ausgew\u00e4hlte \u00fcbergeordnete Abteilung entfernen wollen?
+scidepartment.ui.superdepartments.title=\u00dcbergeordnete Abteilungen
+scidepartment.ui.subdepartments.title=Unterabteilungen
+scidepartment.ui.subdepartments.description=Verwalten der Unterabteilungen dieser Abteilung
+scidepartment.ui.superdepartments.description=\u00dcbergeordnete Abteilungen
+scidepartment.ui.projects.select=Projekt ausw\u00e4hlen
+scidepartment.ui.projects.select.nothing=Kein Projekt ausgew\u00e4hlt.
+scidepartment.ui.projects.no_suitable_language_variant=Das ausgew\u00e4hlte Projekt hat keine passende Sprachvariante.
+scidepartment.ui.projects.adding_to_itself=Fehler. Bitte den Systemadminstrator kontaktieren.
+scidepartment.ui.projects.already_added=Das ausgew\u00e4hlte Projekt wurde den Projekten dieser Abteilung bereits hinzugef\u00fcgt.
+scidepartment.ui.projects.add=Projekt hinzuf\u00fcgen
+scidepartment.ui.projects.empty_view=Keine Projekte
+scidepartment.ui.projects.columns.name=Titel des Projektes
+scidepartment.ui.projects.columns.delete=Entfernen
+scidepartment.ui.projects.columns.up=Hoch
+scidepartment.ui.projects.columns.down=Runter
+scidepartment.ui.projects.delete=Entfernen
+scidepartment.ui.projects.up=Hoch
+scidepartment.ui.projects.down=Down
+scidepartment.ui.projects.delete.confirm=Wollen Sie das ausgew\u00e4hlte Projekt wirklich aus der Liste der Projekte dieser Abteilung entfernen?
+scidepartment.ui.projects.title=Projekte
+scidepartment.ui.projects.description=Projekte der Abteilung verwalten
+sciproject.ui.department.select=Abteilung ausw\u00e4hlen
+sciproject.ui.department.select.nothing=Keine Abteilung ausgew\u00e4hlt
+sciproject.ui.department.no_suitable_language_variant=Die ausgew\u00e4hlte Abteilung hat keine passende Sprachvariante.
+sciproject.ui.department.adding_to_itself=Fehler. Bitte kontaktieren Sie Ihren System-Administrator
+sciproject.ui.department.already_added=Dieses Projekt wurde bereits den Projekten der ausgew\u00e4hlen Abteilung hinzugef\u00fcgt.
+sciproject.ui.department.add=Abteilung hinzuf\u00fcgen
+sciproject.ui.departments.empty_view=Keine Abteilungen
+sciproject.ui.departments.columns.name=Name der Abteilung
+sciproject.ui.departments.columns.delete=Entfernen
+sciproject.ui.departments.columns.up=Hoch
+sciproject.ui.departments.columns.down=Runter
+sciproject.ui.departments.delete=Entfernen
+sciproject.ui.departments.up=Hoch
+sciproject.ui.departments.down=Runter
+sciproject.ui.departments.delete.confirm=Sind Sie sicher, dass Sie dieses Projekt aus der Liste der Projekte der ausgew\u00e4hlten Abteilung entfernen wollen?
+sciproject.ui.departments.title=Beteiligte Abteilungen
+sciproject.ui.departments.description=Dieses Projekt den Projektes einer Abteilung hinzuf\u00fcgen
+scidepartment.ui.members.add=Mitglied hinzuf\u00fcgen
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentSubDepartmentsStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentSubDepartmentsStep.java
new file mode 100644
index 000000000..163e1febc
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentSubDepartmentsStep.java
@@ -0,0 +1,145 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentSubDepartmentsStep extends SimpleEditStep {
+
+ private final String ADD_SUBDEPARTMENT_SHEET_NAME =
+ "SciDepartmentAddSubDepartment";
+ public final static String ASSOC_TYPE = "DepartmentOf";
+
+ public SciDepartmentSubDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciDepartmentSubDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addSubDepartmentSheet =
+ new GenericOrganizationalUnitSubordinateOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSubordinateOrgaUnitLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartment.select").
+ localize();
+ }
+
+ public String getSubordinateOrgaUnitType() {
+ return SciDepartment.class.getName();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartment.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartment.no_suitable_languge_variant").
+ localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartment.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartment.already_added").
+ localize();
+ }
+ });
+ add(ADD_SUBDEPARTMENT_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartment.add").localize(),
+ new WorkflowLockedComponentAccess(addSubDepartmentSheet, itemModel),
+ addSubDepartmentSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSubordinateOrgaUnitsTable subDepartmentTable =
+ new GenericOrganizationalUnitSubordinateOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.empty_view").
+ localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.columns.name").
+ localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.columns.delete").
+ localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.columns.up").
+ localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.columns.down").
+ localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.delete").
+ localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.subdepartments.delete.confirm").
+ localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(subDepartmentTable);
+
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentSuperDepartmentsStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentSuperDepartmentsStep.java
new file mode 100644
index 000000000..5d321b056
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentSuperDepartmentsStep.java
@@ -0,0 +1,146 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentSuperDepartmentsStep extends SimpleEditStep {
+
+ private final static String ADD_SUPER_DEPARTMENT_SHEET_NAME =
+ "SciDepartmentAddSuperDepartment";
+ public final static String ASSOC_TYPE = "DepartmentOf";
+
+ public SciDepartmentSuperDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciDepartmentSuperDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addSuperDepartmentSheet =
+ new GenericOrganizationalUnitSuperiorOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSuperiorOrgaUnitLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartment.select").
+ localize();
+ }
+
+ public String getSuperiorOrgaUnitType() {
+ return SciDepartment.BASE_DATA_OBJECT_TYPE;
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartment.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartment.no_suitable_language_variant").
+ localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartment.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartment.already_added").
+ localize();
+ }
+ });
+ add(ADD_SUPER_DEPARTMENT_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartment.add").localize(),
+ new WorkflowLockedComponentAccess(addSuperDepartmentSheet, itemModel),
+ addSuperDepartmentSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSuperiorOrgaUnitsTable superDeparmentsTable =
+ new GenericOrganizationalUnitSuperiorOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.empty_view").
+ localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.columns.name").
+ localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.columns.delete").
+ localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.columns.up").
+ localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.columns.down").
+ localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.delete").
+ localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.up").
+ localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.down").
+ localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "scidepartment.ui.superdepartments.delete.confirm").
+ localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(superDeparmentsTable);
+ }
+}
diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsStep.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsStep.java
new file mode 100644
index 000000000..e4367bbf9
--- /dev/null
+++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsStep.java
@@ -0,0 +1,133 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciDepartment;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciProjectDepartmentsStep extends SimpleEditStep {
+
+ private final static String ADD_DEPARTMENT_SHEET_NAME =
+ "SciProjectAddDepartment";
+ public final static String ASSOC_TYPE = "ProjectOf";
+
+ public SciProjectDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciProjectDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addDepartmentSheet =
+ new GenericOrganizationalUnitSuperiorOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSuperiorOrgaUnitLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.department.select").localize();
+ }
+
+ public String getSuperiorOrgaUnitType() {
+ return SciDepartment.BASE_DATA_OBJECT_TYPE;
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.department.select.nothing").localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.department.no_suitable_language_variant").localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.department.adding_to_itself").localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.department.already_added").localize();
+ }
+ });
+
+ add(ADD_DEPARTMENT_SHEET_NAME,
+ (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.department.add").localize(),
+ new WorkflowLockedComponentAccess(addDepartmentSheet, itemModel),
+ addDepartmentSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSuperiorOrgaUnitsTable departmentsTable =
+ new GenericOrganizationalUnitSuperiorOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.empty_view").localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.columns.name").localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.columns.delete").localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.columns.up").localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.columns.down").localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.delete").localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciDepartmentGlobalizationUtil.globalize(
+ "sciproject.ui.departments.delete.confirm").localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(departmentsTable);
+ }
+}
diff --git a/ccm-sci-types-department/web/static/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xsl b/ccm-sci-types-department/web/static/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xsl
new file mode 100644
index 000000000..9af8f5179
--- /dev/null
+++ b/ccm-sci-types-department/web/static/content-types/com/arsdigita/cms/contenttypes/SciDepartment.xsl
@@ -0,0 +1,19 @@
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-institute/application.xml b/ccm-sci-types-institute/application.xml
new file mode 100644
index 000000000..eadd1b55d
--- /dev/null
+++ b/ccm-sci-types-institute/application.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+
+ Content type for a scientific institute.
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-institute/pdl/com/arsdigita/content-types/SciInstitute.pdl b/ccm-sci-types-institute/pdl/com/arsdigita/content-types/SciInstitute.pdl
new file mode 100644
index 000000000..4b8d36c26
--- /dev/null
+++ b/ccm-sci-types-institute/pdl/com/arsdigita/content-types/SciInstitute.pdl
@@ -0,0 +1,87 @@
+model com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.kernel.ACSObject;
+import com.arsdigita.cms.*;
+
+object type SciInstitute extends GenericOrganizationalUnit {
+ String[0..1] instituteShortDescription = ct_sci_instituts.shortdescription VARCHAR(5000);
+ String[0..1] instituteDescription = ct_sci_instituts.description CLOB;
+
+ reference key ( ct_sci_instituts.institute_id );
+}
+
+query getIdsOfContactsOfSciInstitute {
+ BigDecimal contactId;
+
+ do {
+ select cms_organizationalunits_contact_map.contact_id
+ from cms_organizationalunits_contact_map
+ where cms_organizationalunits_contact_map.organizationalunit_id = :institute
+ } map {
+ contactId = cms_organizationalunits_contact_map.contact_id;
+ }
+}
+
+query getIdsOfSubInstitutesOfSciInstitute {
+ BigDecimal instituteId;
+
+ do {
+ select cms_organizationalunit_hierarchy_map.subordinate_orgaunit_id
+ from cms_organizationalunit_hierarchy_map
+ where cms_organizationalunit_hierarchy_map.superior_orgaunit_id = :institute
+ and cms_organizationalunit_hierarchy_map.assoc_type = 'subInstitute'
+ } map {
+ instituteId = ct_sciorga_Institutes_subInstitutes_map.Institute_id;
+ }
+}
+
+query getIdsOfMembersOfSciInstitute {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :institute
+ } map {
+ memberId = cms_organizationalunits_person_map.person_id;
+ }
+}
+
+query getIdsOfActiveMembersOfSciInstitute {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :institute
+ and cms_organizationalunits_person_map.status = 'active'
+ } map {
+ memberId = cms_organizationalunits_person_map.person_id;
+ }
+}
+
+query getIdsOfAssociatedMembersOfSciInstitute {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :institute
+ and cms_organizationalunits_person_map.status = 'associated'
+ } map {
+ memberId = cms_organizationalunits_person_map.personId;
+ }
+}
+
+query getIdsOfFormerMembersOfSciInstitute {
+ BigDecimal memberId;
+
+ do {
+ select cms_organizationalunits_person_map.cms_persons.person_id
+ from cms_organizationalunits_person_map
+ where cms_organizationalunits_person_map.organizationalunit_id = :institute
+ and (cms_organizationalunits_person_map.status = 'former' or cms_organizationalunits_person_map.status = 'associatedFormer')
+ } map {
+ memberId = cms_organizationalunits_person_map.personId;
+ }
+}
\ No newline at end of file
diff --git a/ccm-sci-types-institute/sql/ccm-sci-types-institute/postgres-create.sql b/ccm-sci-types-institute/sql/ccm-sci-types-institute/postgres-create.sql
new file mode 100644
index 000000000..38716a0ca
--- /dev/null
+++ b/ccm-sci-types-institute/sql/ccm-sci-types-institute/postgres-create.sql
@@ -0,0 +1,4 @@
+begin;
+\i ddl/postgres/create.sql
+\i ddl/postgres/deferred.sql
+end;
\ No newline at end of file
diff --git a/ccm-sci-types-institute/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciInstitute.xml b/ccm-sci-types-institute/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciInstitute.xml
new file mode 100644
index 000000000..0cecfe186
--- /dev/null
+++ b/ccm-sci-types-institute/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciInstitute.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-institute/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciInstitute.xml b/ccm-sci-types-institute/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciInstitute.xml
new file mode 100644
index 000000000..85affa5ec
--- /dev/null
+++ b/ccm-sci-types-institute/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciInstitute.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-institute/src/ccm-sci-types-institute.config b/ccm-sci-types-institute/src/ccm-sci-types-institute.config
new file mode 100644
index 000000000..85a552267
--- /dev/null
+++ b/ccm-sci-types-institute/src/ccm-sci-types-institute.config
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ccm-sci-types-institute/src/ccm-sci-types-institute.load b/ccm-sci-types-institute/src/ccm-sci-types-institute.load
new file mode 100644
index 000000000..341370b96
--- /dev/null
+++ b/ccm-sci-types-institute/src/ccm-sci-types-institute.load
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstitute.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstitute.java
new file mode 100644
index 000000000..49e6dd9ac
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstitute.java
@@ -0,0 +1,234 @@
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.cms.ExtraXMLGenerator;
+import com.arsdigita.cms.contenttypes.ui.SciInstituteExtraXmlGenerator;
+import com.arsdigita.domain.DataObjectNotFoundException;
+import com.arsdigita.persistence.DataObject;
+import com.arsdigita.persistence.DataQuery;
+import com.arsdigita.persistence.OID;
+import com.arsdigita.persistence.SessionManager;
+import java.math.BigDecimal;
+import java.util.List;
+import org.omg.PortableInterceptor.ACTIVE;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstitute extends GenericOrganizationalUnit {
+
+ public static final String INSTITUTE_SHORT_DESCRIPTION =
+ "instituteShortDescription";
+ public static final String INSTITUTE_DESCRIPTION = "instituteDescription";
+ public static final String ROLE_ENUM_NAME = "SciInstituteRole";
+ public static final String BASE_DATA_OBJECT_TYPE =
+ "com.arsdigita.cms.contenttypes.SciInstitute";
+ private static final SciInstituteConfig config = new SciInstituteConfig();
+
+ static {
+ config.load();
+ }
+
+ public SciInstitute() {
+ this(BASE_DATA_OBJECT_TYPE);
+ }
+
+ public SciInstitute(final BigDecimal id) throws DataObjectNotFoundException {
+ this(new OID(BASE_DATA_OBJECT_TYPE, id));
+ }
+
+ public SciInstitute(final OID oid) throws DataObjectNotFoundException {
+ super(oid);
+ }
+
+ public SciInstitute(final DataObject dataObject) {
+ super(dataObject);
+ }
+
+ public SciInstitute(final String type) {
+ super(type);
+ }
+
+ public static SciInstituteConfig getConfig() {
+ return config;
+ }
+
+ public String getInstituteShortDescription() {
+ return (String) get(INSTITUTE_SHORT_DESCRIPTION);
+ }
+
+ public void setInstituteShortDescription(final String shortDesc) {
+ set(INSTITUTE_SHORT_DESCRIPTION, shortDesc);
+ }
+
+ public String getInstituteDescription() {
+ return (String) get(INSTITUTE_DESCRIPTION);
+ }
+
+ public void setInstituteDescription(final String description) {
+ set(INSTITUTE_DESCRIPTION, description);
+ }
+
+ @Override
+ public boolean hasContacts() {
+ boolean result = false;
+
+ final DataQuery query =
+ SessionManager.getSession().retrieveQuery(
+ "com.arsdigita.cms.contenttypes.getIdsOfContactsOfSciInstitute");
+ query.setParameter("project", getID());
+
+ if (query.size() > 0) {
+ result = true;
+ } else {
+ result = false;
+ }
+
+ query.close();
+
+ return result;
+ }
+
+ public boolean hasMembers(final boolean merge,
+ final SciInstituteMemberStatus status) {
+ String queryName;
+
+ switch (status) {
+ case ALL:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfMembersOfSciInstitute";
+ break;
+ case ACTIVE:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfActiveMembersOfSciInstitute";
+ break;
+ case ASSOCIATED:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfAssociatedMembersOfSciInstitute";
+ break;
+ case FORMER:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfFormerMembersOfSciInstitute";
+ break;
+ default:
+ queryName = "";
+ break;
+ }
+
+ final DataQuery query = SessionManager.getSession().retrieveQuery(
+ queryName);
+ query.setParameter("institute", getID());
+
+ if (query.size() > 0) {
+ query.close();
+ return true;
+ } else {
+ if (merge) {
+ query.close();
+ DataQuery institutesQuery =
+ SessionManager.getSession().retrieveQuery(
+ "com.arsdigita.cms.contenttypes.getIdsOfSubInstitutesOfSciInstitute");
+ institutesQuery.setParameter("institute", getID());
+
+ if (query.size() > 0) {
+ BigDecimal instituteId;
+ boolean result = false;
+ while (institutesQuery.next()) {
+ instituteId = (BigDecimal) institutesQuery.get(
+ "instituteId");
+ result = hasMembers(instituteId, merge, status);
+
+ if (result) {
+ break;
+ }
+ }
+
+ institutesQuery.close();
+ return result;
+ } else {
+ institutesQuery.close();
+ return false;
+ }
+ } else {
+ query.close();
+ return false;
+ }
+ }
+ }
+
+ private boolean hasMembers(final BigDecimal instituteId,
+ final boolean merge,
+ final SciInstituteMemberStatus status) {
+ String queryName;
+
+ switch (status) {
+ case ALL:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfMembersOfSciDepartment";
+ break;
+ case ACTIVE:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfActiveMembersOfSciDepartment";
+ break;
+ case ASSOCIATED:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfAssociatedMembersOfDepartment";
+ break;
+ case FORMER:
+ queryName =
+ "com.arsdigita.cms.contenttypes.getIdsOfFormerMembersOfSciDepartment";
+ break;
+ default:
+ queryName = "";
+ break;
+ }
+
+ final DataQuery query = SessionManager.getSession().retrieveQuery(
+ queryName);
+ query.setParameter("institute", instituteId);
+
+ if (query.size() > 0) {
+ query.close();
+ return true;
+ } else {
+ if (merge) {
+ query.close();
+ DataQuery subDepartmentsQuery =
+ SessionManager.getSession().retrieveQuery(
+ "com.arsdigita.cms.contenttypes.getIdsOfSubDepartmentsOfSciDepartment");
+ subDepartmentsQuery.setParameter("institute", instituteId);
+
+ if (query.size() > 0) {
+ BigDecimal subinstituteId;
+ boolean result = false;
+ while (subDepartmentsQuery.next()) {
+ subinstituteId = (BigDecimal) subDepartmentsQuery.get(
+ "instituteId");
+ result = hasMembers(subinstituteId, merge, status);
+
+ if (result) {
+ break;
+ }
+ }
+
+ subDepartmentsQuery.close();
+ return result;
+ } else {
+ subDepartmentsQuery.close();
+ return false;
+ }
+ } else {
+ query.close();
+ return false;
+ }
+ }
+ }
+
+ @Override
+ public List getExtraXMLGenerators() {
+ final List generators = super.getExtraXMLGenerators();
+ generators.add(new SciInstituteExtraXmlGenerator());
+ return generators;
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteConfig.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteConfig.java
new file mode 100644
index 000000000..d81383bd4
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteConfig.java
@@ -0,0 +1,114 @@
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.runtime.AbstractConfig;
+import com.arsdigita.util.parameter.BooleanParameter;
+import com.arsdigita.util.parameter.IntegerParameter;
+import com.arsdigita.util.parameter.Parameter;
+import com.arsdigita.util.parameter.StringParameter;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteConfig extends AbstractConfig {
+
+ private final Parameter enableDepartmentsStep;
+ private final Parameter enableDepartmentInstitutesStep;
+ private final Parameter enableProjectsStep;
+ private final Parameter enableProjectInstitutesStep;
+ private final Parameter shortDescMaxLength;
+ private final Parameter enableDescriptionDhtml;
+ private final Parameter permittedPersonType;
+ private final Parameter tabs;
+
+ public SciInstituteConfig() {
+ enableDepartmentsStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.enable.departments_step",
+ Parameter.REQUIRED, Boolean.TRUE);
+
+ enableDepartmentInstitutesStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.enable.department_institutes_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ enableProjectsStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.enable.projects_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ enableProjectInstitutesStep =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.enable.project_institutes_step",
+ Parameter.REQUIRED,
+ Boolean.TRUE);
+
+ shortDescMaxLength =
+ new IntegerParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.short_desc.max_length",
+ Parameter.REQUIRED, 500);
+
+ enableDescriptionDhtml =
+ new BooleanParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.description.dhtml_enable",
+ Parameter.REQUIRED, Boolean.TRUE);
+
+ permittedPersonType =
+ new StringParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.permitted_person_type",
+ Parameter.REQUIRED,
+ "com.arsdigita.cms.contenttypes.GenericPerson");
+
+ tabs =
+ new StringParameter(
+ "com.arsdigita.cms.contenttypes.sciinstitute.tabs",
+ Parameter.REQUIRED,
+ "summary:com.arsdigita.cms.contenttypes.ui.SciInstituteSummaryTab");
+
+ register(enableDepartmentsStep);
+ register(enableDepartmentInstitutesStep);
+ register(enableProjectsStep);
+ register(enableProjectInstitutesStep);
+ register(shortDescMaxLength);
+ register(enableDescriptionDhtml);
+ register(permittedPersonType);
+ register(tabs);
+
+ loadInfo();
+ }
+
+ public final Boolean getEnableDepartmentsStep() {
+ return (Boolean) get(enableDepartmentsStep);
+ }
+
+ public final Boolean getEnableDepartmentInstitutesStep() {
+ return (Boolean) get(enableDepartmentInstitutesStep);
+ }
+
+ public final Boolean getEnableProjectsStep() {
+ return (Boolean) get(enableProjectsStep);
+ }
+
+ public final Boolean getEnableProjectInstitutesStep() {
+ return (Boolean) get(enableProjectInstitutesStep);
+ }
+
+ public Integer getShortDescMaxLength() {
+ return (Integer) get(shortDescMaxLength);
+ }
+
+ public Boolean getEnableDescriptionDhtml() {
+ return (Boolean) get(enableDescriptionDhtml);
+ }
+
+ public final String getPermittedPersonType() {
+ return (String) get(permittedPersonType);
+ }
+
+ public final String getTabs() {
+ return (String) get(tabs);
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteConfig_parameter.properties b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteConfig_parameter.properties
new file mode 100644
index 000000000..cc3e51af3
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteConfig_parameter.properties
@@ -0,0 +1,39 @@
+com.arsdigita.cms.contenttypes.sciinstitute.enable.departments_step.title = Enable departments step?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.departments_step.purpose = Enable departments step?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.departments_step.example = true
+com.arsdigita.cms.contenttypes.sciinstitute.enable.departments_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.sciinstitute.enable.department_institutes_step.title = Enable institutes step for departments?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.department_institutes_step.purpose = Enable institutes step for departments?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.department_institutes_step.example = true
+com.arsdigita.cms.contenttypes.sciinstitute.enable.department_institutes_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.sciinstitute.enable.projects_step.title = Enable projects step?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.projects_step.purpose = Enable projects step?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.projects_step.example = false
+com.arsdigita.cms.contenttypes.sciinstitute.enable.projects_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.sciinstitute.enable.project_institutes_step.title = Enable institutes step for projects?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.project_institutes_step.purpose = Enable institutes step for projects?
+com.arsdigita.cms.contenttypes.sciinstitute.enable.project_institutes_step.example = false
+com.arsdigita.cms.contenttypes.sciinstitute.enable.project_institutes_step.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.sciinstitute.short_desc.max_length.title = Maximum length for the short description of an institute
+com.arsdigita.cms.contenttypes.sciinstitute.short_desc.max_length.purpose = Maximum length for the short description of an institute
+com.arsdigita.cms.contenttypes.sciinstitute.short_desc.max_length.example = 500
+com.arsdigita.cms.contenttypes.sciinstitute.short_desc.max_length.format = [Integer]
+
+com.arsdigita.cms.contenttypes.sciinstitute.description.dhtml_enable.title = Enable the DHTML editor for the description of an institute?
+com.arsdigita.cms.contenttypes.sciinstitute.description.dhtml_enable.purpose = Enable the DHTML editor for the description of an institute?
+com.arsdigita.cms.contenttypes.sciinstitute.description.dhtml_enable.example = true
+com.arsdigita.cms.contenttypes.sciinstitute.description.dhtml_enable.format = [Boolean]
+
+com.arsdigita.cms.contenttypes.sciinstitute.permitted_person_type.title = Permitted person type for members of the institute
+com.arsdigita.cms.contenttypes.sciinstitute.permitted_person_type.purpose = Permitted person type for members of the institute
+com.arsdigita.cms.contenttypes.sciinstitute.permitted_person_type.example = com.arsdigita.cms.contenttypes.GenericPerson
+com.arsdigita.cms.contenttypes.sciinstitute.permitted_person_type.format = [String]
+
+com.arsdigita.cms.contenttypes.sciinstitute.tabs.title = Tabs for SciInstitute detail view
+com.arsdigita.cms.contenttypes.sciinstitute.tabs.purpose = Defines which tabs are shown in the detail view of a SciInstitute
+com.arsdigita.cms.contenttypes.sciinstitute.tabs.example = summary:coma.arsdigita.cms.contenttypes.ui.SciInstituteSummaryTab;members:SciInstituteMembersTab
+com.arsdigita.cms.contenttypes.sciinstitute.tabs.format = [String]
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteInitializer.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteInitializer.java
new file mode 100644
index 000000000..379c374c7
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteInitializer.java
@@ -0,0 +1,102 @@
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.cms.ContentType;
+import com.arsdigita.cms.ContentTypeCollection;
+import com.arsdigita.cms.contenttypes.ui.SciDepartmentInstitutesStep;
+import com.arsdigita.cms.contenttypes.ui.SciInstituteDepartmentsStep;
+import com.arsdigita.cms.contenttypes.ui.SciInstituteGlobalizationUtil;
+import com.arsdigita.cms.contenttypes.ui.SciInstituteProjectsStep;
+import com.arsdigita.cms.contenttypes.ui.SciProjectInstitutesStep;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.runtime.DomainInitEvent;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteInitializer extends ContentTypeInitializer {
+
+ public SciInstituteInitializer() {
+ super("ccm-sci-types-institute.pdl.mf",
+ SciInstitute.BASE_DATA_OBJECT_TYPE);
+ }
+
+ @Override
+ public void init(final DomainInitEvent event) {
+ super.init(event);
+
+ final SciInstituteConfig config = SciInstitute.getConfig();
+
+ final ContentTypeCollection contentTypes = ContentType.
+ getAllContentTypes();
+ contentTypes.addFilter(
+ "associatedObjectType = 'com.arsdigita.cms.contenttypes.SciDepartment'");
+
+ if (contentTypes.size() > 0) {
+ if (config.getEnableDepartmentsStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ SciInstitute.BASE_DATA_OBJECT_TYPE,
+ SciInstituteDepartmentsStep.class,
+ SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.title"),
+ SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.description"),
+ 10);
+ }
+
+ if (config.getEnableDepartmentInstitutesStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ "com.arsdigita.cms.contenttypes.SciDepartment",
+ SciDepartmentInstitutesStep.class,
+ SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.title"),
+ SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.description"),
+ 20);
+ }
+ }
+
+ contentTypes.reset();
+ contentTypes.addFilter(
+ "associatedObjectType = 'com.arsdigita.cms.contenttypes.SciProject'");
+
+ if (contentTypes.size() > 0) {
+ if (config.getEnableProjectsStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ SciInstitute.BASE_DATA_OBJECT_TYPE,
+ SciInstituteProjectsStep.class,
+ SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.title"),
+ SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.description"),
+ 30);
+ }
+
+ if (config.getEnableProjectInstitutesStep()) {
+ if (config.getEnableDepartmentInstitutesStep()) {
+ AuthoringKitWizard.registerAssetStep(
+ "com.arsdigita.cms.contenttypes.SciProject",
+ SciProjectInstitutesStep.class,
+ SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institutes.title"),
+ SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institutes.description"),
+ 40);
+ }
+ }
+ }
+ }
+
+ @Override
+ public String[] getStylesheets() {
+ return new String[]{
+ "/static/content-types/com/arsdigita/cms/contenttypes/SciInstitute.xsl"
+ };
+ }
+
+ @Override
+ public String getTraversalXML() {
+ return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciInstitute.xml";
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteLoader.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteLoader.java
new file mode 100644
index 000000000..2b2521b39
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteLoader.java
@@ -0,0 +1,19 @@
+package com.arsdigita.cms.contenttypes;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteLoader extends AbstractContentTypeLoader {
+
+ public SciInstituteLoader() {
+ super();
+ }
+
+ @Override
+ public String[] getTypes() {
+ return new String[]{
+ "/WEB-INF/content-types/com/arsdigita/cms/contenttypes/SciInstitute.xml"};
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteMemberStatus.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteMemberStatus.java
new file mode 100644
index 000000000..9dd767533
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/SciInstituteMemberStatus.java
@@ -0,0 +1,17 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public enum SciInstituteMemberStatus {
+ ALL,
+ ACTIVE,
+ ASSOCIATED,
+ FORMER
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentInstitutesStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentInstitutesStep.java
new file mode 100644
index 000000000..cf424d072
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentInstitutesStep.java
@@ -0,0 +1,143 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciDepartmentInstitutesStep extends SimpleEditStep {
+
+ private final static String ADD_INSTITUTE_SHEET_NAME =
+ "SciDepartmentAddInstitute";
+ public static final String ASSOC_TYPE = "DepartmentOf";
+
+ public SciDepartmentInstitutesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciDepartmentInstitutesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addInstituteSheet =
+ new GenericOrganizationalUnitSuperiorOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSuperiorOrgaUnitLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institute.select").localize();
+ }
+
+ public String getSuperiorOrgaUnitType() {
+ return SciInstitute.BASE_DATA_OBJECT_TYPE;
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institute.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institute.no_suitable_language_variant").
+ localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institute.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institute.already_added").
+ localize();
+ }
+ });
+
+ add(ADD_INSTITUTE_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institute.add").localize(),
+ new WorkflowLockedComponentAccess(addInstituteSheet, itemModel),
+ addInstituteSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSuperiorOrgaUnitsTable institutesTable =
+ new GenericOrganizationalUnitSuperiorOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.empty_view").
+ localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.columns.name").
+ localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.columns.delete").
+ localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.columns.up").
+ localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.columns.down").
+ localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.delete").localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "scidepartment.ui.institutes.delete.confirm").
+ localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(institutesTable);
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDepartmentsStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDepartmentsStep.java
new file mode 100644
index 000000000..6b0b97960
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDepartmentsStep.java
@@ -0,0 +1,142 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteDepartmentsStep extends SimpleEditStep {
+
+ private String ADD_DEPARTMENT_SHEET_NAME = "SciInstituteAddDepartment";
+ public final static String ASSOC_TYPE = "DepartmentOf";
+
+ public SciInstituteDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciInstituteDepartmentsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addDepartmentSheet =
+ new GenericOrganizationalUnitSubordinateOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSubordinateOrgaUnitLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.select").localize();
+ }
+
+ public String getSubordinateOrgaUnitType() {
+ return "com.arsdigita.cms.contenttypes.SciDepartment";
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.no_suitable_language_variant").
+ localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.already_added").
+ localize();
+ }
+ });
+
+ add(ADD_DEPARTMENT_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.add").localize(),
+ new WorkflowLockedComponentAccess(addDepartmentSheet, itemModel),
+ addDepartmentSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSubordinateOrgaUnitsTable departmentsTable =
+ new GenericOrganizationalUnitSubordinateOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.empty_view").
+ localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.columns.name").
+ localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.columns.delete").
+ localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.columns.up").
+ localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.columns.down").
+ localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.delete").localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.departments.delete.confirm").
+ localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(departmentsTable);
+
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionEditForm.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionEditForm.java
new file mode 100644
index 000000000..fadf2dce6
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionEditForm.java
@@ -0,0 +1,82 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.bebop.form.TextArea;
+import com.arsdigita.bebop.parameters.ParameterModel;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.cms.contenttypes.SciInstituteConfig;
+import com.arsdigita.cms.ui.CMSDHTMLEditor;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteDescriptionEditForm
+ extends BasicItemForm
+ implements FormProcessListener,
+ FormInitListener {
+
+ private final static SciInstituteConfig config = SciInstitute.getConfig();
+
+ public SciInstituteDescriptionEditForm(final ItemSelectionModel itemModel) {
+ super("SciInstituteDescriptionEditForm", itemModel);
+ }
+
+ @Override
+ public void addWidgets() {
+ add(new Label(SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.description")));
+ final ParameterModel descParam = new StringParameter(
+ SciInstitute.INSTITUTE_DESCRIPTION);
+ final TextArea desc;
+ if (config.getEnableDescriptionDhtml()) {
+ desc = new CMSDHTMLEditor(descParam);
+ } else {
+ desc = new TextArea(descParam);
+ }
+ desc.setCols(75);
+ desc.setRows(25);
+ add(desc);
+ }
+
+ @Override
+ public void init(final FormSectionEvent fse) throws FormProcessException {
+ final PageState state = fse.getPageState();
+ final FormData data = fse.getFormData();
+ final SciInstitute institute = (SciInstitute) getItemSelectionModel().
+ getSelectedObject(state);
+
+ data.put(SciInstitute.INSTITUTE_DESCRIPTION, institute.
+ getInstituteDescription());
+
+ setVisible(state, true);
+ }
+
+ @Override
+ public void process(final FormSectionEvent fse) throws FormProcessException {
+ final PageState state = fse.getPageState();
+ final FormData data = fse.getFormData();
+ final SciInstitute institute = (SciInstitute) getItemSelectionModel().
+ getSelectedObject(state);
+
+ if ((institute != null)
+ && getSaveCancelSection().getSaveButton().isSelected(state)) {
+ institute.setInstituteDescription((String) data.get(
+ SciInstitute.INSTITUTE_DESCRIPTION));
+
+ institute.save();
+ }
+
+ init(fse);
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionStep.java
new file mode 100644
index 000000000..7adafe760
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionStep.java
@@ -0,0 +1,64 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteDescriptionStep extends SimpleEditStep {
+
+ private String EDIT_INSTITUTE_DESC_SHEET_NAME = "editDepartmentDesc";
+ private String UPDATE_INSTITUTE_DESC_SHEET_NAME = "updateDepartmentDesc";
+
+ public SciInstituteDescriptionStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciInstituteDescriptionStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm editDescFrom = new SciInstituteDescriptionEditForm(
+ itemModel);
+ add(EDIT_INSTITUTE_DESC_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.desc.edit").localize(),
+ new WorkflowLockedComponentAccess(editDescFrom, itemModel),
+ editDescFrom.getSaveCancelSection().getCancelButton());
+
+ final SciInstituteDescriptionUploadForm updateDescForm =
+ new SciInstituteDescriptionUploadForm(
+ itemModel);
+ add(UPDATE_INSTITUTE_DESC_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.desc.upload").localize(),
+ new WorkflowLockedComponentAccess(updateDescForm, itemModel),
+ updateDescForm.getSaveCancelSection().getCancelButton());
+
+ setDisplayComponent(getSciInstituteEditDescSheet(itemModel));
+ }
+
+ public static Component getSciInstituteEditDescSheet(
+ final ItemSelectionModel itemModel) {
+ final DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(
+ itemModel);
+
+ sheet.add(
+ SciInstituteGlobalizationUtil.globalize("sciinstitute.ui.desc"),
+ SciInstitute.INSTITUTE_DESCRIPTION);
+
+ return sheet;
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionUploadForm.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionUploadForm.java
new file mode 100644
index 000000000..3a8cedbba
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteDescriptionUploadForm.java
@@ -0,0 +1,42 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteDescriptionUploadForm extends AbstractTextUploadForm {
+
+ public SciInstituteDescriptionUploadForm(
+ final ItemSelectionModel itemModel) {
+ super(itemModel);
+ }
+
+ @Override
+ public GlobalizedMessage getLabelText() {
+ return SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.description.upload");
+ }
+
+ @Override
+ public GlobalizedMessage getMimeTypeLabel() {
+ return SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.description.upload.mimetype");
+ }
+
+ @Override
+ public void setText(final ItemSelectionModel itemModel,
+ final PageState state,
+ final String text) {
+ final SciInstitute institute = (SciInstitute) itemModel.
+ getSelectedObject(state);
+ institute.setInstituteShortDescription(text);
+ institute.save();
+ }
+
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteExtraXmlGenerator.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteExtraXmlGenerator.java
new file mode 100644
index 000000000..ee2b3cc3f
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteExtraXmlGenerator.java
@@ -0,0 +1,24 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Page;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.ContentItem;
+import com.arsdigita.cms.ExtraXMLGenerator;
+import com.arsdigita.xml.Element;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteExtraXmlGenerator implements ExtraXMLGenerator {
+
+ public void generateXML(ContentItem item, Element element, PageState state) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void addGlobalStateParams(Page p) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteGlobalizationUtil.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteGlobalizationUtil.java
new file mode 100644
index 000000000..af60a3cba
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteGlobalizationUtil.java
@@ -0,0 +1,24 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.globalization.GlobalizedMessage;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteGlobalizationUtil {
+
+ public static final String BUNDLE_NAME =
+ "com.arsdigita.cms.contenttypes.ui.SciInstituteResources";
+
+ public static GlobalizedMessage globalize(final String key) {
+ return new GlobalizedMessage(key, BUNDLE_NAME);
+ }
+
+ public static GlobalizedMessage globalize(final String key,
+ final Object[] args) {
+ return new GlobalizedMessage(key, BUNDLE_NAME, args);
+ }
+
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMemberAddForm.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMemberAddForm.java
new file mode 100644
index 000000000..b506c3c68
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMemberAddForm.java
@@ -0,0 +1,49 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ContentType;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.GenericPerson;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.domain.DataObjectNotFoundException;
+import org.apache.log4j.Logger;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteMemberAddForm
+ extends GenericOrganizationalUnitPersonAddForm {
+
+ private final Logger logger = Logger.getLogger(
+ SciInstituteMemberAddForm.class);
+
+ public SciInstituteMemberAddForm(
+ final ItemSelectionModel itemModel,
+ final GenericOrganizationalUnitPersonSelector personSelector) {
+ super(itemModel, personSelector);
+ }
+
+ @Override
+ protected String getPersonType() {
+ String personType = SciInstitute.getConfig().getPermittedPersonType();
+
+ try {
+ ContentType.findByAssociatedObjectType(personType);
+ } catch (DataObjectNotFoundException ex) {
+ logger.error(String.format("No content type for object type '%s'. "
+ + "Falling back to '%s'.",
+ personType,
+ GenericPerson.class.getName()),
+ ex);
+ personType = GenericPerson.class.getName();
+ }
+
+ return personType;
+ }
+
+ @Override
+ protected String getRoleAttributeName() {
+ return SciInstitute.ROLE_ENUM_NAME;
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMembersStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMembersStep.java
new file mode 100644
index 000000000..39400b54a
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMembersStep.java
@@ -0,0 +1,76 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.GenericPerson;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteMembersStep
+ extends SimpleEditStep
+ implements GenericOrganizationalUnitPersonSelector {
+
+ private String ADD_INSTITUTE_MEMBER_STEP = "SciInstituteAddMember";
+ private GenericPerson selectedPerson;
+ private String selectedPersonRole;
+ private String selectedPersonStatus;
+
+ public SciInstituteMembersStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciInstituteMembersStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addMemberSheet = new SciInstituteMemberAddForm(
+ itemModel, this);
+ add(ADD_INSTITUTE_MEMBER_STEP,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.members.add").localize(),
+ new WorkflowLockedComponentAccess(addMemberSheet, itemModel),
+ addMemberSheet.getSaveCancelSection().getCancelButton());
+
+ final SciInstituteMembersTable memberTable =
+ new SciInstituteMembersTable(itemModel,
+ this);
+ setDisplayComponent(memberTable);
+ }
+
+ public GenericPerson getSelectedPerson() {
+ return selectedPerson;
+ }
+
+ public void setSelectedPerson(final GenericPerson selectedPerson) {
+ this.selectedPerson = selectedPerson;
+ }
+
+ public String getSelectedPersonRole() {
+ return selectedPersonRole;
+ }
+
+ public void setSelectedPersonRole(final String selectedPersonRole) {
+ this.selectedPersonRole = selectedPersonRole;
+ }
+
+ public String getSelectedPersonStatus() {
+ return selectedPersonStatus;
+ }
+
+ public void setSelectedPersonStatus(final String selectedPersonStatus) {
+ this.selectedPersonStatus = selectedPersonStatus;
+ }
+
+ public void showEditComponent(final PageState state) {
+ showComponent(state, ADD_INSTITUTE_MEMBER_STEP);
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMembersTable.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMembersTable.java
new file mode 100644
index 000000000..6bcc6d726
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteMembersTable.java
@@ -0,0 +1,24 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteMembersTable
+ extends GenericOrganizationalUnitPersonsTable {
+
+ public SciInstituteMembersTable(final ItemSelectionModel itemModel,
+ final GenericOrganizationalUnitPersonSelector personSelector) {
+ super(itemModel, personSelector);
+ }
+
+ @Override
+ public String getRoleAttributeName() {
+ return SciInstitute.ROLE_ENUM_NAME;
+ }
+
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteProjectsStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteProjectsStep.java
new file mode 100644
index 000000000..4d1dba33b
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteProjectsStep.java
@@ -0,0 +1,138 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstituteProjectsStep extends SimpleEditStep {
+
+ private String ADD_INSTITUTE_SHEET_NAME = "SciInstituteAddProject";
+ public final static String ASSOC_TYPE = "ProjectOf";
+
+ public SciInstituteProjectsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciInstituteProjectsStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addProjectSheet =
+ new GenericOrganizationalUnitSubordinateOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSubordinateOrgaUnitLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.select").localize();
+ }
+
+ public String getSubordinateOrgaUnitType() {
+ return "com.arsdigita.cms.contenttypes.SciProject";
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.no_suitable_language_variant").
+ localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.already_added").
+ localize();
+ }
+ });
+ add(ADD_INSTITUTE_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.add").localize(),
+ new WorkflowLockedComponentAccess(addProjectSheet, itemModel),
+ addProjectSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSubordinateOrgaUnitsTable projectsTable =
+ new GenericOrganizationalUnitSubordinateOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSubordinateOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.empty_view").localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.columns.name").
+ localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.columns.delete").
+ localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.columns.up").localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.columns.down").
+ localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.delete").localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.projects.delete.confirm").
+ localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+
+ setDisplayComponent(projectsTable);
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstitutePropertiesStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstitutePropertiesStep.java
new file mode 100644
index 000000000..ef4427d9b
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstitutePropertiesStep.java
@@ -0,0 +1,77 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+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.toolbox.ui.DomainObjectPropertySheet;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstitutePropertiesStep
+ extends GenericOrganizationalUnitPropertiesStep {
+
+ public SciInstitutePropertiesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ super(itemModel, parent);
+ }
+
+ public static Component getSciInstitutePropertySheet(
+ final ItemSelectionModel itemModel) {
+
+ final DomainObjectPropertySheet sheet =
+ (DomainObjectPropertySheet) GenericOrganizationalUnitPropertiesStep.
+ getGenericOrganizationalUnitPropertySheet(itemModel);
+
+ sheet.add(SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.shortdesc"),
+ SciInstitute.INSTITUTE_SHORT_DESCRIPTION);
+
+ return sheet;
+ }
+
+ @Override
+ public void addBasicProperties(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+
+ final SimpleEditStep basicProperties =
+ new SimpleEditStep(itemModel,
+ parent,
+ EDIT_SHEET_NAME);
+
+ final BasicPageForm editBasicSheet = new SciInstitutePropertyForm(
+ itemModel, this);
+
+ basicProperties.add(EDIT_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.edit_basic_sheet").localize(),
+ new WorkflowLockedComponentAccess(editBasicSheet,
+ itemModel),
+ editBasicSheet.getSaveCancelSection().
+ getCancelButton());
+
+ basicProperties.setDisplayComponent(getSciInstitutePropertySheet(
+ itemModel));
+
+ getSegmentedPanel().addSegment(
+ new Label((String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.edit_basic_properties").localize()),
+ basicProperties);
+ }
+
+ @Override
+ protected void addSteps(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ addStep(new GenericOrganizationalUnitContactPropertiesStep(itemModel,
+ parent),
+ SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.contacts"));
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstitutePropertyForm.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstitutePropertyForm.java
new file mode 100644
index 000000000..080d2d36c
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstitutePropertyForm.java
@@ -0,0 +1,97 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.bebop.event.FormSubmissionListener;
+import com.arsdigita.bebop.form.TextArea;
+import com.arsdigita.bebop.parameters.ParameterModel;
+import com.arsdigita.bebop.parameters.StringInRangeValidationListener;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.cms.contenttypes.SciInstituteConfig;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciInstitutePropertyForm
+ extends GenericOrganizationalUnitPropertyForm
+ implements FormProcessListener,
+ FormInitListener,
+ FormSubmissionListener {
+
+ public final static String ID = "SciInstituteEdit";
+ private final static SciInstituteConfig config = SciInstitute.getConfig();
+
+ public SciInstitutePropertyForm(final ItemSelectionModel itemModel) {
+ this(itemModel, null);
+ }
+
+ public SciInstitutePropertyForm(final ItemSelectionModel itemModel,
+ final SciInstitutePropertiesStep step) {
+ super(itemModel, step);
+ addSubmissionListener(this);
+ }
+
+ @Override
+ public void addWidgets() {
+ super.addWidgets();
+
+ add(new Label(SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.shortdesc")));
+ ParameterModel shortDescParam = new StringParameter(
+ SciInstitute.INSTITUTE_SHORT_DESCRIPTION);
+ TextArea shortDesc = new TextArea(shortDescParam);
+ shortDesc.addValidationListener(
+ new StringInRangeValidationListener(0,
+ config.getShortDescMaxLength()));
+ shortDesc.setCols(75);
+ shortDesc.setRows(5);
+ add(shortDesc);
+ }
+
+ @Override
+ public void init(final FormSectionEvent fse) throws FormProcessException {
+ super.init(fse);
+
+ final FormData data = fse.getFormData();
+ final SciInstitute institute = (SciInstitute) super.initBasicWidgets(
+ fse);
+
+ data.put(SciInstitute.INSTITUTE_SHORT_DESCRIPTION,
+ institute.getInstituteShortDescription());
+ }
+
+ @Override
+ public void process(final FormSectionEvent fse) throws FormProcessException {
+ super.process(fse);
+
+ final FormData data = fse.getFormData();
+ final PageState state = fse.getPageState();
+ final SciInstitute institute = (SciInstitute) super.
+ processBasicWidgets(fse);
+
+ if ((institute != null)
+ && getSaveCancelSection().getSaveButton().isSelected(state)) {
+ institute.setInstituteShortDescription((String) data.get(
+ SciInstitute.INSTITUTE_SHORT_DESCRIPTION));
+
+ institute.save();
+ }
+
+ init(fse);
+ }
+
+ @Override
+ public String getTitleLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciinstitute.ui.title").localize();
+ }
+}
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteResources.properties b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteResources.properties
new file mode 100644
index 000000000..f1db0db2b
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteResources.properties
@@ -0,0 +1,83 @@
+sciorganization.ui.institute_properties.title=Basic propertites
+sciorganization.ui.institute.members=Members
+sciorganization.ui.institute_description.title=Description
+sciinstitute.ui.shortdesc=Short description
+sciinstitute.ui.edit_basic_sheet=Basic properties
+sciinstitute.ui.edit_basic_properties=Edit basic properties
+sciinstitute.ui.contacts=Contacts
+sciinstitute.ui.description=Description
+sciinstitute.ui.title=Name of the institute
+sciinstitute.ui.desc.edit=Edit description
+sciinstitute.ui.desc.upload=Upload description
+sciinstitute.ui.desc=Beschreibung
+sciinstitute.ui.description.upload=Upload description
+sciinstitute.ui.description.upload.mimetype=File type
+sciinstitute.ui.members.add=Add member
+sciinstitute.ui.departments.select=Select department
+sciinstitute.ui.departments.select.nothing=No department selected.
+sciinstitute.ui.departments.no_suitable_language_variant=The selected department has no suitable language variant.
+sciinstitute.ui.departments.adding_to_itself=Strange error. Please contact your system administrator.
+sciinstitute.ui.departments.already_added=The selected department has already been added to this institute.
+sciinstitute.ui.departments.add=Add department
+sciinstitute.ui.departments.empty_view=No departments
+sciinstitute.ui.departments.columns.name=Name of the department
+sciinstitute.ui.departments.columns.delete=Remove
+sciinstitute.ui.departments.columns.up=Up
+sciinstitute.ui.departments.columns.down=Runter
+sciinstitute.ui.departments.delete=Remove
+sciinstitute.ui.departments.up=Up
+sciinstitute.ui.departments.down=Down
+sciinstitute.ui.departments.delete.confirm=Are you sure to remove the selected department from this institute?
+sciinstitute.ui.projects.select=Select project
+sciinstitute.ui.projects.select.nothing=No project selected.
+sciinstitute.ui.projects.no_suitable_language_variant=The selected project has no suitable language variant.
+sciinstitute.ui.projects.adding_to_itself=Strange error. Please contact your system administrator.
+sciinstitute.ui.projects.already_added=The selected project has already been added to the projects of this institute.
+sciinstitute.ui.projects.add=Add project
+sciinstitute.ui.projects.empty_view=No projects
+sciinstitute.ui.projects.columns.name=Title of the project
+sciinstitute.ui.projects.columns.delete=Remove
+sciinstitute.ui.projects.columns.up=Up
+sciinstitute.ui.projects.columns.down=Down
+sciinstitute.ui.projects.delete=Remove
+sciinstitute.ui.projects.up=Up
+sciinstitute.ui.projects.down=Down
+sciinstitute.ui.projects.delete.confirm=Are you sure to remove the selected projects from the projects of this institute?
+scidepartment.ui.institute.select=Select institute
+scidepartment.ui.institute.select.nothing=No institute selected.
+scidepartment.ui.institute.no_suitable_language_variant=The selected institute has no suitable language variant.
+scidepartment.ui.institute.adding_to_itself=Strange error. Please contact your system administrator.
+scidepartment.ui.institute.already_added=This department has already been added to the departments of the selected institute.
+scidepartment.ui.institute.add=Add institute
+scidepartment.ui.institutes.empty_view=No institutes
+scidepartment.ui.institutes.columns.name=Name of the institute
+scidepartment.ui.institutes.columns.delete=Remove
+scidepartment.ui.institutes.columns.up=Up
+scidepartment.ui.institutes.columns.down=Down
+scidepartment.ui.institutes.delete=Remove
+scidepartment.ui.institutes.up=Up
+scidepartment.ui.institutes.down=Down
+scidepartment.ui.institutes.delete.confirm=Are you sure to remove this department from the departments of the selected institute?
+sciproject.ui.institute.select=Select institute
+sciproject.ui.institute.select.nothing=No institute selected.
+sciproject.ui.institute.no_suitable_languge_variant=The selected institute has no suitable language variant.
+sciproject.ui.institute.adding_to_itself=Error. Please contact the system administrator.
+sciproject.ui.institute.already_added=This project has already been added to the projects of the selected institute.
+sciproject.ui.institut.add=Add institute
+sciproject.ui.instituts.empty_view=No institutes
+sciproject.ui.instituts.columns.name=Name of the institute
+sciproject.ui.instituts.columns.delete=Remove
+sciproject.ui.instituts.columns.up=Up
+sciproject.ui.instituts.columns.down=Down
+sciproject.ui.instituts.delete=Remove
+sciproject.ui.instituts.up=Up
+sciproject.ui.instituts.down=Down
+sciproject.ui.instituts.delete.confirm=Are you sure to remove this project from the list of projects of the selected institute?
+sciinstitute.ui.departments.title=Departments
+sciinstitute.ui.departments.description=Manage the departments of this institute
+scidepartment.ui.institutes.title=Institut(s)
+scidepartment.ui.institutes.description=Add this department to a institute
+sciinstitute.ui.projects.title=Projects
+sciinstitute.ui.projects.description=Manage the projects of this institute
+sciproject.ui.institutes.title=Participating institutes
+sciproject.ui.institutes.description=Participating institutes
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteResources_de.properties b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteResources_de.properties
new file mode 100644
index 000000000..e2537dbf6
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciInstituteResources_de.properties
@@ -0,0 +1,83 @@
+sciorganization.ui.institute_properties.title=Basiseigenschaften
+sciorganization.ui.institute.members=Mitglieder
+sciorganization.ui.institute_description.title=Beschreibung
+sciinstitute.ui.shortdesc=Kurzbeschreibung
+sciinstitute.ui.edit_basic_sheet=Basiseigenschaften
+sciinstitute.ui.edit_basic_properties=Basiseigenschaften bearbeiten
+sciinstitute.ui.contacts=Kontakte
+sciinstitute.ui.description=Beschreibung
+sciinstitute.ui.title=Name des Instituts
+sciinstitute.ui.desc.edit=Beschreibung bearbeiten
+sciinstitute.ui.desc.upload=Beschreibung hochladen
+sciinstitute.ui.desc=Description
+sciinstitute.ui.description.upload=Beschriebung hochladen
+sciinstitute.ui.description.upload.mimetype=Dateityp
+sciinstitute.ui.members.add=Mitglieder hinzuf\u00fcgen
+sciinstitute.ui.departments.select=Abteilung ausw\u00e4hlen
+sciinstitute.ui.departments.select.nothing=Keine Abteilung ausgew\u00e4hlt.
+sciinstitute.ui.departments.no_suitable_language_variant=Die ausgew\u00e4hlte Abteilung hat keine passende Sprachvariante.
+sciinstitute.ui.departments.adding_to_itself=Fehler. Bitte kontaktieren Sie Ihren System-Administrator.
+sciinstitute.ui.departments.already_added=Die ausgew\u00e4hlte Abteilung wurde dem Institut bereits hinzugef\u00fcgt.
+sciinstitute.ui.departments.add=Abteilung hinzuf\u00fcgen
+sciinstitute.ui.departments.empty_view=Keine Abteilungen
+sciinstitute.ui.departments.columns.name=Name der Abteilung
+sciinstitute.ui.departments.columns.delete=Entfernen
+sciinstitute.ui.departments.columns.up=Hoch
+sciinstitute.ui.departments.columns.down=Down
+sciinstitute.ui.departments.delete=Entfernen
+sciinstitute.ui.departments.up=Hoch
+sciinstitute.ui.departments.down=Runter
+sciinstitute.ui.departments.delete.confirm=Wollen Sie die ausgew\u00e4hlte Abteilung wirklich aus diesem Institut entfernen?
+sciinstitute.ui.projects.select=Projekt ausw\u00e4hlen
+sciinstitute.ui.projects.select.nothing=Kein Projekt ausgew\u00e4hlt.
+sciinstitute.ui.projects.no_suitable_language_variant=Das ausgew\u00e4hlte Projekt hat keine passende Sprachvariante.
+sciinstitute.ui.projects.adding_to_itself=Fehler. Bitte kontaktieren Sie Ihren System-Administrator.
+sciinstitute.ui.projects.already_added=Das ausgew\u00e4hlte Projekt wurde bereits den Projekten dieses Instituts hinzugef\u00fcgt.
+sciinstitute.ui.projects.add=Projekt hinzuf\u00fcgen
+sciinstitute.ui.projects.empty_view=Keine Projekte
+sciinstitute.ui.projects.columns.name=Titel des Projektes
+sciinstitute.ui.projects.columns.delete=Entfernen
+sciinstitute.ui.projects.columns.up=Hoch
+sciinstitute.ui.projects.columns.down=Runter
+sciinstitute.ui.projects.delete=Entfernen
+sciinstitute.ui.projects.up=Hoch
+sciinstitute.ui.projects.down=Runter
+sciinstitute.ui.projects.delete.confirm=Wollen Sie das ausgew\u00e4hlte Projekt wirklich aus der Liste der Projekte dieses Instituts entfernen?
+scidepartment.ui.institute.select=Institut ausw\u00e4hlen
+scidepartment.ui.institute.select.nothing=Kein Institut ausgew\u00e4hlt.
+scidepartment.ui.institute.no_suitable_language_variant=Das ausgew\u00e4hlte Institut hat keine passende Sprachvariante.
+scidepartment.ui.institute.adding_to_itself=Fehler. Bitte kontaktieren Sie Ihren System-Administrator.
+scidepartment.ui.institute.already_added=Diese Abteilung wurde bereits den Abteilungen des ausgew\u00e4hlten Instituts hinzugef\u00fcgt.
+scidepartment.ui.institute.add=Institut hinzuf\u00fcgen
+scidepartment.ui.institutes.empty_view=Keine Institute
+scidepartment.ui.institutes.columns.name=Name des Institutes
+scidepartment.ui.institutes.columns.delete=Entfernen
+scidepartment.ui.institutes.columns.up=Hoch
+scidepartment.ui.institutes.columns.down=Runter
+scidepartment.ui.institutes.delete=Entfernen
+scidepartment.ui.institutes.up=Hoch
+scidepartment.ui.institutes.down=Runter
+scidepartment.ui.institutes.delete.confirm=Wollen Sie diese Abteilung wirklich aus der Liste der Abteilung des ausgew\u00e4hlten Instituts entfernen?
+sciproject.ui.institute.select=Institut ausw\u00e4hlen
+sciproject.ui.institute.select.nothing=Kein Institut ausgew\u00e4hlt.
+sciproject.ui.institute.no_suitable_languge_variant=Das ausgew\u00e4hlte Institut hat keine passende Sprachvariante.
+sciproject.ui.institute.adding_to_itself=Fehler. Bitte kontaktieren Sie Ihren System-Administrator.
+sciproject.ui.institute.already_added=Dieses Projekt wurde bereits den Projekten des ausgew\u00e4hlten Instituts hinzuzgef\u00fcgt.
+sciproject.ui.institut.add=Inititut hinzuf\u00fcgen
+sciproject.ui.instituts.empty_view=Keine Institute
+sciproject.ui.instituts.columns.name=Name des Institutes
+sciproject.ui.instituts.columns.delete=Entfernen
+sciproject.ui.instituts.columns.up=Hoch
+sciproject.ui.instituts.columns.down=Runter
+sciproject.ui.instituts.delete=Entfernen
+sciproject.ui.instituts.up=Hoch
+sciproject.ui.instituts.down=Runter
+sciproject.ui.instituts.delete.confirm=Wollen Sie das ausgew\u00e4hlte Projekt wirklich aus der Liste der Projekte des ausgew\u00e4hlten Instituts entfernen?
+sciinstitute.ui.departments.title=Abteilungen
+sciinstitute.ui.departments.description=Abteilungen des Instituts verwalten
+scidepartment.ui.institutes.title=Institut(e)
+scidepartment.ui.institutes.description=Diese Abteilung einem Institut hinzuf\u00fcgen
+sciinstitute.ui.projects.title=Projekte
+sciinstitute.ui.projects.description=Projekte dieses Instituts verwalten
+sciproject.ui.institutes.title=Beteiligte Institute
+sciproject.ui.institutes.description=An dem Projekt beteiligte Institute verwalten
diff --git a/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciProjectInstitutesStep.java b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciProjectInstitutesStep.java
new file mode 100644
index 000000000..08d4aa5da
--- /dev/null
+++ b/ccm-sci-types-institute/src/com/arsdigita/cms/contenttypes/ui/SciProjectInstitutesStep.java
@@ -0,0 +1,135 @@
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contenttypes.SciInstitute;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciProjectInstitutesStep extends SimpleEditStep {
+
+ private final static String ADD_INSTITUTE_SHEET_NAME =
+ "SciProjectAddInstitute";
+ public final static String ASSOC_TYPE = "ProjectOf";
+
+ public SciProjectInstitutesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciProjectInstitutesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addInstitutesSheet =
+ new GenericOrganizationalUnitSuperiorOrgaUnitAddForm(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitAddFormCustomizer() {
+
+ public String getSelectSuperiorOrgaUnitLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institute.select").localize();
+ }
+
+ public String getSuperiorOrgaUnitType() {
+ return SciInstitute.BASE_DATA_OBJECT_TYPE;
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+
+ public String getNothingSelectedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institute.select.nothing").
+ localize();
+ }
+
+ public String getNoSuitableLanguageVariantMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institute.no_suitable_languge_variant").localize();
+ }
+
+ public String getAddingToItselfMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institute.adding_to_itself").
+ localize();
+ }
+
+ public String getAlreadyAddedMessage() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institute.already_added").
+ localize();
+ }
+ });
+
+ add(ADD_INSTITUTE_SHEET_NAME,
+ (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.institut.add").localize(),
+ new WorkflowLockedComponentAccess(addInstitutesSheet, itemModel),
+ addInstitutesSheet.getSaveCancelSection().getCancelButton());
+
+ final GenericOrganizationalUnitSuperiorOrgaUnitsTable institutesTable =
+ new GenericOrganizationalUnitSuperiorOrgaUnitsTable(
+ itemModel,
+ new GenericOrgaUnitSuperiorOrgaUnitsTableCustomizer() {
+
+ public String getEmptyViewLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.empty_view").localize();
+ }
+
+ public String getNameColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.columns.name").localize();
+ }
+
+ public String getDeleteColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.columns.delete").localize();
+ }
+
+ public String getUpColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.columns.up").localize();
+ }
+
+ public String getDownColumnLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.columns.down").localize();
+ }
+
+ public String getDeleteLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.delete").localize();
+ }
+
+ public String getUpLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.up").localize();
+ }
+
+ public String getDownLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.down").localize();
+ }
+
+ public String getConfirmRemoveLabel() {
+ return (String) SciInstituteGlobalizationUtil.globalize(
+ "sciproject.ui.instituts.delete.confirm").localize();
+ }
+
+ public String getAssocType() {
+ return ASSOC_TYPE;
+ }
+ });
+ setDisplayComponent(institutesTable);
+ }
+}
diff --git a/ccm-sci-types-institute/web/static/com/arsdigita/cms/contenttypes/SciInstitute.xsl b/ccm-sci-types-institute/web/static/com/arsdigita/cms/contenttypes/SciInstitute.xsl
new file mode 100644
index 000000000..f73c86582
--- /dev/null
+++ b/ccm-sci-types-institute/web/static/com/arsdigita/cms/contenttypes/SciInstitute.xsl
@@ -0,0 +1,19 @@
+
+]>
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProject.java b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProject.java
index 4a21d58d0..b5b58c4fc 100644
--- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProject.java
+++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProject.java
@@ -132,8 +132,8 @@ public class SciProject extends GenericOrganizationalUnit {
public boolean hasContacts() {
boolean result = false;
- DataQuery query =
- SessionManager.getSession().retrieveQuery(
+ final DataQuery query =
+ SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfContactsOfSciProject");
query.setParameter("project", getID());
@@ -181,7 +181,8 @@ public class SciProject extends GenericOrganizationalUnit {
break;
}
- DataQuery query = SessionManager.getSession().retrieveQuery(queryName);
+ final DataQuery query = SessionManager.getSession().retrieveQuery(
+ queryName);
query.setParameter("project", getID());
if (query.size() > 0) {
@@ -248,7 +249,8 @@ public class SciProject extends GenericOrganizationalUnit {
break;
}
- DataQuery query = SessionManager.getSession().retrieveQuery(queryName);
+ final DataQuery query = SessionManager.getSession().retrieveQuery(
+ queryName);
query.setParameter("project", projectId);
if (query.size() > 0) {
@@ -287,7 +289,7 @@ public class SciProject extends GenericOrganizationalUnit {
}
}
}
-
+
@Override
public List getExtraXMLGenerators() {
final List generators = super.getExtraXMLGenerators();
diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProjectInitializer.java b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProjectInitializer.java
index 5f4501fbb..e77c66d36 100644
--- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProjectInitializer.java
+++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/SciProjectInitializer.java
@@ -28,34 +28,34 @@ public class SciProjectInitializer extends ContentTypeInitializer {
if (config.getEnableSubProjectsStep()) {
AuthoringKitWizard.registerAssetStep(
SciProject.BASE_DATA_OBJECT_TYPE,
- SciProjectSubProjectsStep.class,
- SciProjectGlobalizationUtil.
- globalize("sciproject.ui.subprojects.title"),
- SciProjectGlobalizationUtil.
- globalize("sciproject.ui.subprojects.description"),
- 10);
+ SciProjectSubProjectsStep.class,
+ SciProjectGlobalizationUtil.globalize(
+ "sciproject.ui.subprojects.title"),
+ SciProjectGlobalizationUtil.globalize(
+ "sciproject.ui.subprojects.description"),
+ 10);
}
if (config.getEnableSuperProjectsStep()) {
AuthoringKitWizard.registerAssetStep(
SciProject.BASE_DATA_OBJECT_TYPE,
- SciProjectSuperProjectsStep.class,
- SciProjectGlobalizationUtil.
- globalize("sciproject.ui.superprojects.title"),
- SciProjectGlobalizationUtil.
- globalize("sciproject.ui.superprojects.description"),
- 20);
+ SciProjectSuperProjectsStep.class,
+ SciProjectGlobalizationUtil.globalize(
+ "sciproject.ui.superprojects.title"),
+ SciProjectGlobalizationUtil.globalize(
+ "sciproject.ui.superprojects.description"),
+ 20);
}
if (config.getEnableInvolvedOrgasStep()) {
AuthoringKitWizard.registerAssetStep(
SciProject.BASE_DATA_OBJECT_TYPE,
- SciProjectInvolvedOrganizationsStep.class,
- SciProjectGlobalizationUtil.
- globalize("sciproject.ui.involved_orgas.title"),
- SciProjectGlobalizationUtil.
- globalize("sciproject.ui.involved_orgas.description"),
- 30);
+ SciProjectInvolvedOrganizationsStep.class,
+ SciProjectGlobalizationUtil.globalize(
+ "sciproject.ui.involved_orgas.title"),
+ SciProjectGlobalizationUtil.globalize(
+ "sciproject.ui.involved_orgas.description"),
+ 30);
}
}
diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertiesStep.java b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertiesStep.java
index 6cb05f5c3..c5c3de3db 100644
--- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertiesStep.java
+++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertiesStep.java
@@ -82,7 +82,7 @@ public class SciProjectPropertiesStep
parent,
EDIT_SHEET_NAME);
- BasicPageForm editBasicSheet = new SciProjectPropertyForm(itemModel,
+ final BasicPageForm editBasicSheet = new SciProjectPropertyForm(itemModel,
this);
basicProperties.add(EDIT_SHEET_NAME,
diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources.properties b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources.properties
index 6724ad605..b87218b24 100644
--- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources.properties
+++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources.properties
@@ -83,3 +83,4 @@ sciproject.ui.involved_orgas.down=Down
sciproject.ui.involved_orgas.delete.confirm=Are you sure to remove the selected organization from the organisations involved with this project?
sciproject.ui.involved_orgas.title=Involved Organizations
sciproject.ui.involved_orgas.description=Managed involved organizations
+scidepartment.ui.superdepartment.add=Add superior department
diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources_de.properties b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources_de.properties
index 4df474dd0..5db843809 100644
--- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources_de.properties
+++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectResources_de.properties
@@ -84,3 +84,4 @@ sciproject.ui.involved_orgas.down=Runter
sciproject.ui.involved_orgas.delete.confirm=Sind Sie sicher, dass die die ausgew\u00e4hlte Organisation aus den an diesem Projekt beteiligten Organisationen l\u00f6schen wollen?
sciproject.ui.involved_orgas.title=Beteiligte Organisationen
sciproject.ui.involved_orgas.description=Verwalten von am Projekt beteiligten Organisationen
+scidepartment.ui.superdepartment.add=\u00dcbergeordnete Abteilung hinzuf\u00fcgen