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