From 6f6e2bcc653490d87cbcb55a6b03dfc855ca889d Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 7 Apr 2011 19:01:42 +0000 Subject: [PATCH] =?UTF-8?q?Kleinere=20Korrekturen=20und=20Erg=C3=A4nzungen?= =?UTF-8?q?:=20-=20Im=20Title=20eines=20Personen=20Items=20wird=20ein=20Zu?= =?UTF-8?q?satz=20zum=20Namen,=20z.B.=20PhD=20jetzt=20mit=20einem=20Komma?= =?UTF-8?q?=20abgetrennt=20-=20Fehlende=20TraversalAdapter=20hinzugef?= =?UTF-8?q?=C3=BCgt=20-=20Kleinere=20Korrekturen=20-=20Erster=20Teil=20f?= =?UTF-8?q?=C3=BCr=20eine=20Erweiterung=20der=20GUI=20von=20SciMember,=20Z?= =?UTF-8?q?iel=20der=20Erweiterung=20ist=20die=20M=C3=B6glichkeit=20ein=20?= =?UTF-8?q?SciMember=20direkt=20bestehenden=20Organisationen=20(SciOrganiz?= =?UTF-8?q?ation),=20Abteilungen=20(SciDepartment)=20und=20=20=20Projekten?= =?UTF-8?q?=20(SciProject)=20zuweisen=20zu=20k=C3=B6nnen.=20Die=20Arbeiten?= =?UTF-8?q?=20hierf=C3=BCr=20sind=20nicht=20*nicht*=20abgeschlossen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@838 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/contenttypes/Member.xml | 25 ++ .../cms/contenttypes/MemberInitializer.java | 5 + .../com/arsdigita/cms/contenttypes/Person.xml | 25 ++ .../cms/contenttypes/PersonInitializer.java | 5 + .../cms/contenttypes/GenericPerson.java | 41 ++- ...enericOrganizationalUnitPersonAddForm.java | 10 +- .../contenttypes/ui/GenericPersonCreate.java | 23 +- .../com/arsdigita/content-types/Journal.pdl | 1 + .../com/arsdigita/content-types/Series.pdl | 2 + .../cms/contenttypes/CollectedVolume.xml | 1 + .../cms/contenttypes/GreyLiterature.xml | 20 ++ .../contenttypes/ExpertiseInitializer.java | 2 +- .../GreyLiteratureInitializer.java | 2 +- .../arsdigita/cms/contenttypes/Journal.java | 9 + .../arsdigita/cms/contenttypes/Series.java | 9 + .../ui/InternetArticlePropertyForm.java | 46 ++- .../ui/JournalPropertiesStep.java | 8 +- .../contenttypes/ui/JournalPropertyForm.java | 48 ++- .../ui/MonographPropertyForm.java | 34 +- .../ui/PublicationPropertiesStep.java | 2 +- .../ui/PublicationResources.properties | 6 +- .../ui/PublicationResources_de.properties | 4 + .../PublicationWithPublisherPropertyForm.java | 41 ++- .../contenttypes/ui/SeriesPropertiesStep.java | 4 + .../contenttypes/ui/SeriesPropertyForm.java | 23 +- .../SciPublicationsServlet.java | 1 + .../arsdigita/cms/contenttypes/SciMember.xml | 17 +- .../arsdigita/cms/contenttypes/SciMember.java | 24 +- .../SciMemberSciOrganizationsCollection.java | 77 ++++ .../ui/SciDepartmentMemberStep.java | 8 +- .../ui/SciMemberPropertiesStep.java | 34 +- .../ui/SciMemberSciOrganizationAddForm.java | 63 ++++ .../ui/SciMemberSciOrganizationsStep.java | 58 +++ .../ui/SciMemberSciOrganizationsTable.java | 331 ++++++++++++++++++ .../ui/SciProjectDepartmentsTable.java | 4 +- 35 files changed, 920 insertions(+), 93 deletions(-) create mode 100644 ccm-cms-types-member/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Member.xml create mode 100644 ccm-cms-types-person/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Person.xml create mode 100644 ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/GreyLiterature.xml create mode 100644 ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMemberSciOrganizationsCollection.java create mode 100644 ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationAddForm.java create mode 100644 ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsStep.java create mode 100644 ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsTable.java diff --git a/ccm-cms-types-member/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Member.xml b/ccm-cms-types-member/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Member.xml new file mode 100644 index 000000000..961f0617c --- /dev/null +++ b/ccm-cms-types-member/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Member.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-cms-types-member/src/com/arsdigita/cms/contenttypes/MemberInitializer.java b/ccm-cms-types-member/src/com/arsdigita/cms/contenttypes/MemberInitializer.java index 7cea40516..9c1cbfba5 100644 --- a/ccm-cms-types-member/src/com/arsdigita/cms/contenttypes/MemberInitializer.java +++ b/ccm-cms-types-member/src/com/arsdigita/cms/contenttypes/MemberInitializer.java @@ -42,4 +42,9 @@ public class MemberInitializer extends ContentTypeInitializer { public String[] getStylesheets() { return new String[]{"/static/content-types/com/arsdigita/cms/contenttypes/Member.xsl"}; } + + @Override + public String getTraversalXML() { + return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Member.xml"; + } } diff --git a/ccm-cms-types-person/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Person.xml b/ccm-cms-types-person/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Person.xml new file mode 100644 index 000000000..a051d31c6 --- /dev/null +++ b/ccm-cms-types-person/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Person.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-cms-types-person/src/com/arsdigita/cms/contenttypes/PersonInitializer.java b/ccm-cms-types-person/src/com/arsdigita/cms/contenttypes/PersonInitializer.java index 6d154a264..8651469da 100644 --- a/ccm-cms-types-person/src/com/arsdigita/cms/contenttypes/PersonInitializer.java +++ b/ccm-cms-types-person/src/com/arsdigita/cms/contenttypes/PersonInitializer.java @@ -43,4 +43,9 @@ public class PersonInitializer extends ContentTypeInitializer { public String[] getStylesheets() { return new String[]{"/static/content-types/com/arsdigita/cms/contenttypes/Person.xsl"}; } + + @Override + public String getTraversalXML() { + return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Person.xml"; + } } diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java index b3031ec16..149816fd1 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java @@ -36,7 +36,8 @@ import java.util.Date; * @author Sören Bernstein * @author Jens Pelzetter */ -public class GenericPerson extends ContentPage implements RelationAttributeInterface { +public class GenericPerson extends ContentPage implements + RelationAttributeInterface { public static final String PERSON = "person"; public static final String SURNAME = "surname"; @@ -48,12 +49,11 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter public static final String CONTACTS = "contacts"; public static final String CONTACTS_KEY = "link_key"; public static final String CONTACTS_ORDER = "link_order"; - - private static final String RELATION_ATTRIBUTES = "contacts.link_key:GenericContactType"; - + private static final String RELATION_ATTRIBUTES = + "contacts.link_key:GenericContactType"; /** Data object type for this domain object */ public static final String BASE_DATA_OBJECT_TYPE = - "com.arsdigita.cms.contenttypes.GenericPerson"; + "com.arsdigita.cms.contenttypes.GenericPerson"; /** * Default constructor. This creates a new (empty) GenericPerson. @@ -163,7 +163,12 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter surname = ""; } - return String.format("%s %s %s %s", titlePre, givenName, surname, titlePost).trim(); + if (titlePost.trim().isEmpty()) { + return String.format("%s %s %s", titlePre, givenName, surname).trim(); + } else { + return String.format("%s %s %s, %s", titlePre, givenName, surname, + titlePost).trim(); + } } private void updateNameAndTitle() { @@ -171,7 +176,8 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter String fullname = getFullName(); if (fullname != null && !fullname.isEmpty()) { setTitle(fullname); - setName(GenericPerson.urlSave(String.format("%s %s", getSurname(), getGivenName()))); + setName(GenericPerson.urlSave(String.format("%s %s", getSurname(), + getGivenName()))); } } @@ -207,7 +213,8 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter if (in != null && !in.isEmpty()) { // Replacement map - String[][] replacements = {{"ä", "ae"}, {"Ä", "Ae"}, {"ö", "oe"}, {"Ö", "Oe"}, {"ü", "ue"}, {"Ü", "Ue"}, {"ß", "ss"}, {".", ""}}; + String[][] replacements = {{"ä", "ae"}, {"Ä", "Ae"}, {"ö", "oe"}, { + "Ö", "Oe"}, {"ü", "ue"}, {"Ü", "Ue"}, {"ß", "ss"}, {".", ""}}; // Replace all spaces with dash String out = in.replace(" ", "-"); @@ -233,9 +240,9 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter @Override public boolean hasRelationAttributeProperty(String propertyName) { StringTokenizer strTok = new StringTokenizer(RELATION_ATTRIBUTES, ";"); - while(strTok.hasMoreTokens()) { + while (strTok.hasMoreTokens()) { String token = strTok.nextToken(); - if(token.startsWith(propertyName + ".")) { + if (token.startsWith(propertyName + ".")) { return true; } } @@ -250,10 +257,11 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter @Override public String getRelationAttributeKeyName(String propertyName) { StringTokenizer strTok = new StringTokenizer(RELATION_ATTRIBUTES, ";"); - while(strTok.hasMoreTokens()) { + while (strTok.hasMoreTokens()) { String token = strTok.nextToken(); - if(token.startsWith(propertyName + ".")) { - return token.substring(token.indexOf(".") + 1, token.indexOf(":")); + if (token.startsWith(propertyName + ".")) { + return token.substring(token.indexOf(".") + 1, + token.indexOf(":")); } } return null; @@ -262,9 +270,9 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter @Override public String getRelationAttributeName(String propertyName) { StringTokenizer strTok = new StringTokenizer(RELATION_ATTRIBUTES, ";"); - while(strTok.hasMoreTokens()) { + while (strTok.hasMoreTokens()) { String token = strTok.nextToken(); - if(token.startsWith(propertyName + ".")) { + if (token.startsWith(propertyName + ".")) { return token.substring(token.indexOf(":") + 1); } } @@ -275,5 +283,4 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter public String getRelationAttributeKey(String propertyName) { return null; } - -} \ No newline at end of file +} diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPersonAddForm.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPersonAddForm.java index d4e087c2e..c8db32841 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPersonAddForm.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPersonAddForm.java @@ -139,8 +139,8 @@ public class GenericOrganizationalUnitPersonAddForm status = selector.getSelectedPersonStatus(); if (person == null) { - //m_itemSearch.setVisible(state, true); - //selectedPersonNameLabel.setVisible(state, false); + m_itemSearch.setVisible(state, true); + selectedPersonNameLabel.setVisible(state, false); } else { data.put(ITEM_SEARCH, person); data.put(GenericOrganizationalUnitPersonCollection.PERSON_ROLE, @@ -148,9 +148,9 @@ public class GenericOrganizationalUnitPersonAddForm data.put(GenericOrganizationalUnitPersonCollection.STATUS, status); - //m_itemSearch.setVisible(state, false); - //selectedPersonNameLabel.setVisible(state, true); - //selectedPersonNameLabel.setLabel(person.getFullName(), state); + m_itemSearch.setVisible(state, false); + selectedPersonNameLabel.setVisible(state, true); + selectedPersonNameLabel.setLabel(person.getFullName(), state); } setVisible(state, true); diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonCreate.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonCreate.java index ab574a557..0be5f6b8b 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonCreate.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonCreate.java @@ -38,7 +38,8 @@ public class GenericPersonCreate extends PageCreate { private static final String TITLEPRE = GenericPerson.TITLEPRE; private static final String TITLEPOST = GenericPerson.TITLEPOST; - public GenericPersonCreate(final ItemSelectionModel itemModel, final CreationSelector parent) { + public GenericPersonCreate(final ItemSelectionModel itemModel, + final CreationSelector parent) { super(itemModel, parent); } @@ -47,7 +48,8 @@ public class GenericPersonCreate extends PageCreate { ContentType type = getItemSelectionModel().getContentType(); m_workflowSection = new ApplyWorkflowFormSection(type); add(m_workflowSection, ColumnPanel.INSERT); - add(new Label(GlobalizationUtil.globalize("cms.ui.authoring.content_type"))); + add(new Label(GlobalizationUtil.globalize( + "cms.ui.authoring.content_type"))); add(new Label(type.getLabel())); add(new Label(GlobalizationUtil.globalize("cms.ui.language.field"))); add(new LanguageWidget(LANGUAGE)); @@ -56,11 +58,14 @@ public class GenericPersonCreate extends PageCreate { GenericPersonPropertyForm.mandatoryFieldWidgets(this); if (!ContentSection.getConfig().getHideLaunchDate()) { - add(new Label(GlobalizationUtil.globalize("cms.ui.authoring.page_launch_date"))); + add(new Label(GlobalizationUtil.globalize( + "cms.ui.authoring.page_launch_date"))); ParameterModel launchDateParam = new DateParameter(LAUNCH_DATE); - com.arsdigita.bebop.form.Date launchDate = new com.arsdigita.bebop.form.Date(launchDateParam); + com.arsdigita.bebop.form.Date launchDate = new com.arsdigita.bebop.form.Date( + launchDateParam); if (ContentSection.getConfig().getRequireLaunchDate()) { - launchDate.addValidationListener(new LaunchDateValidationListener()); + launchDate.addValidationListener( + new LaunchDateValidationListener()); // if launch date is required, help user by suggesting today's date launchDateParam.setDefaultValue(new Date()); } @@ -133,7 +138,11 @@ public class GenericPersonCreate extends PageCreate { surname = ""; } - return String.format("%s %s %s %s", titlePre, givenName, surname, titlePost).trim(); + if (titlePost.trim().isEmpty()) { + return String.format("%s %s %s", titlePre, givenName, surname).trim(); + } else { + return String.format("%s %s %s, %s", titlePre, givenName, surname, + titlePost).trim(); + } } - } diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl index 94c176e70..e16b937ff 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl @@ -25,6 +25,7 @@ import com.arsdigita.cms.ContentPage; //PDL definition for a journal object type Journal extends Publication { + Integer[0..1] lastYear = ct_journal.lastyear INTEGER; String[0..1] issn = ct_journal.issn VARCHAR(9); reference key (ct_journal.journal_id); diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl index cb9ce8a21..62e427f5a 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl @@ -27,6 +27,8 @@ object type Series extends ContentPage { reference key (ct_series.series_id); + String[0..1] abstract = ct_series.abstract VARCHAR(4096); + } //Assoication for the editship of a series diff --git a/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/CollectedVolume.xml b/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/CollectedVolume.xml index 12e202a98..ba60fa874 100644 --- a/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/CollectedVolume.xml +++ b/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/CollectedVolume.xml @@ -11,6 +11,7 @@ + diff --git a/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/GreyLiterature.xml b/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/GreyLiterature.xml new file mode 100644 index 000000000..ba9a2c8bc --- /dev/null +++ b/ccm-sci-publications/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/GreyLiterature.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ExpertiseInitializer.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ExpertiseInitializer.java index 3625a8784..f7c1ec950 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ExpertiseInitializer.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ExpertiseInitializer.java @@ -42,7 +42,7 @@ public class ExpertiseInitializer extends ContentTypeInitializer { @Override public String getTraversalXML() { - return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Publication.xml"; + return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Expertise.xml"; } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GreyLiteratureInitializer.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GreyLiteratureInitializer.java index 2e16d6924..0c13d6080 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GreyLiteratureInitializer.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GreyLiteratureInitializer.java @@ -42,7 +42,7 @@ public class GreyLiteratureInitializer extends ContentTypeInitializer { @Override public String getTraversalXML() { - return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/Publication.xml"; + return "/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/GreyLiterature.xml"; } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java index 7be6a32de..70629847e 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java @@ -33,6 +33,7 @@ import java.math.BigDecimal; public class Journal extends Publication { public static final String ISSN = "issn"; + public static final String LAST_YEAR = "lastYear"; public static final String ARTICLES = "articles"; public static final String ARTICLE_ORDER = "articleOrder"; public static final String BASE_DATA_OBJECT_TYPE = @@ -66,6 +67,14 @@ public class Journal extends Publication { set(ISSN, issn); } + public Integer getLastYear() { + return (Integer) get(LAST_YEAR); + } + + public void setLastYear(Integer lastYear) { + set(LAST_YEAR, lastYear); + } + public ArticleInJournalCollection getArticles() { return new ArticleInJournalCollection((DataCollection) get(ARTICLES)); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java index 54c267808..d04911002 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java @@ -39,6 +39,7 @@ public class Series extends ContentPage { public static final String EDITOR_ORDER = "editor_order"; public static final String PUBLICATIONS = "publications"; public static final String VOLUME_OF_SERIES = "volumeOfSeries"; + public static final String ABSTRACT ="abstract"; public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.Series"; @@ -62,6 +63,14 @@ public class Series extends ContentPage { super(type); } + public String getAbstract() { + return (String) get(ABSTRACT); + } + + public void setAbstract(String abstractStr) { + set(ABSTRACT, abstractStr); + } + public EditshipCollection getEditors() { return new EditshipCollection((DataCollection) get(EDITORS)); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java index 8d373b504..d19386bb8 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/InternetArticlePropertyForm.java @@ -26,16 +26,16 @@ import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.event.ParameterEvent; +import com.arsdigita.bebop.event.ParameterListener; import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.DateParameter; import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.cms.ContentType; import com.arsdigita.cms.ItemSelectionModel; -import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit; import com.arsdigita.cms.contenttypes.InternetArticle; -import com.arsdigita.cms.ui.ItemSearchWidget; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -50,7 +50,7 @@ public class InternetArticlePropertyForm FormProcessListener, FormSubmissionListener { - private InternetArticlePropertiesStep m_step; + private InternetArticlePropertiesStep m_step; public static final String ID = "InternetArticleEdit"; public InternetArticlePropertyForm(ItemSelectionModel itemModel) { @@ -74,7 +74,7 @@ public class InternetArticlePropertyForm new StringParameter(InternetArticle.PLACE); TextField place = new TextField(placeParam); add(place); - + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.internetarticle.number").localize())); ParameterModel numberParam = @@ -102,6 +102,34 @@ public class InternetArticlePropertyForm new StringParameter(InternetArticle.ISSN); TextField issn = new TextField(issnParam); issn.setMaxLength(9); + issn.addValidationListener(new ParameterListener() { + + public void validate(ParameterEvent event) throws + FormProcessException { + ParameterData data = event.getParameterData(); + String value = (String) data.getValue(); + + if(value.isEmpty()) { + return; + } + + value = value.replace("-", ""); + + if (value.length() != 8) { + data.invalidate(); + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.invalid_issn")); + } + + try { + Long num = Long.parseLong(value); + } catch (NumberFormatException ex) { + data.invalidate(); + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.invalid_issn")); + } + } + }); add(issn); Calendar today = new GregorianCalendar(); @@ -124,7 +152,7 @@ public class InternetArticlePropertyForm FormData data = fse.getFormData(); InternetArticle article = (InternetArticle) initBasicWidgets(fse); - data.put(InternetArticle.PLACE, article.getPlace()); + data.put(InternetArticle.PLACE, article.getPlace()); data.put(InternetArticle.NUMBER, article.getNumber()); data.put(InternetArticle.NUMBER_OF_PAGES, article.getNumberOfPages()); data.put(InternetArticle.EDITION, article.getEdition()); @@ -142,12 +170,14 @@ public class InternetArticlePropertyForm if ((article != null) && getSaveCancelSection().getSaveButton(). isSelected(fse.getPageState())) { - article.setPlace((String) data.get(InternetArticle.PLACE)); + article.setPlace((String) data.get(InternetArticle.PLACE)); article.setNumber((String) data.get(InternetArticle.NUMBER)); article.setNumberOfPages( (Integer) data.get(InternetArticle.NUMBER_OF_PAGES)); article.setEdition((String) data.get(InternetArticle.EDITION)); - article.setISSN((String) data.get(InternetArticle.ISSN)); + String issn = (String) data.get(InternetArticle.ISSN); + issn = issn.replace("-", ""); + article.setISSN(issn); article.setLastAccessed( (Date) data.get(InternetArticle.LAST_ACCESSED)); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java index 036468194..b0c4bfa3b 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java @@ -46,9 +46,13 @@ public class JournalPropertiesStep extends PublicationPropertiesStep { DomainObjectPropertySheet sheet = (DomainObjectPropertySheet) PublicationPropertiesStep. getPublicationPropertySheet(itemModel); - sheet.add(PublicationGlobalizationUtil.globalize( + sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.journal.issn"), - Journal.ISSN); + Journal.ISSN); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.journal.lastYearOfPublication"), + Journal.LAST_YEAR); return sheet; } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java index c40f633a7..ea69d219a 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java @@ -26,7 +26,11 @@ import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.event.ParameterEvent; +import com.arsdigita.bebop.event.ParameterListener; import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ItemSelectionModel; @@ -67,7 +71,40 @@ public class JournalPropertyForm "publications.ui.journal.issn").localize())); ParameterModel issnParam = new StringParameter(Journal.ISSN); TextField issn = new TextField(issnParam); + issn.addValidationListener(new ParameterListener() { + + public void validate(ParameterEvent event) throws + FormProcessException { + ParameterData data = event.getParameterData(); + String value = (String) data.getValue(); + + if (value.isEmpty()) { + return; + } + + value = value.replace("-", ""); + + if (value.length() != 8) { + data.invalidate(); + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.invalid_issn")); + } + + try { + Long num = Long.parseLong(value); + } catch (NumberFormatException ex) { + data.invalidate(); + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.invalid_issn")); + } + } + }); add(issn); + + add(new Label((String) PublicationGlobalizationUtil.globalize("publications.ui.journal.lastYearOfPublication").localize())); + ParameterModel lastYearParam = new IntegerParameter(Journal.LAST_YEAR); + TextField lastYear = new TextField(lastYearParam); + add(lastYear); } @Override @@ -78,6 +115,7 @@ public class JournalPropertyForm Journal journal = (Journal) super.initBasicWidgets(fse); data.put(Journal.ISSN, journal.getISSN()); + data.put(Journal.LAST_YEAR, journal.getLastYear()); } @Override @@ -89,9 +127,15 @@ public class JournalPropertyForm if ((journal != null) && getSaveCancelSection().getSaveButton(). isSelected(fse.getPageState())) { - journal.setISSN((String) data.get(Journal.ISSN)); - journal.save();; + String issn = (String) data.get(Journal.ISSN); + issn = issn.replace("-", ""); + journal.setISSN(issn); + + Integer lastYear = (Integer) data.get(Journal.LAST_YEAR); + journal.setLastYear(lastYear); + + journal.save(); } } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/MonographPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/MonographPropertyForm.java index 8e1643f1a..015c17189 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/MonographPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/MonographPropertyForm.java @@ -46,7 +46,6 @@ public class MonographPropertyForm private static final String REVIEWED = "reviewed"; private MonographPropertiesStep m_step; public static final String ID = "MonographEdit"; - private CheckboxGroup reviewed; public MonographPropertyForm(ItemSelectionModel itemModel) { @@ -63,12 +62,12 @@ public class MonographPropertyForm @Override protected void addWidgets() { super.addWidgets(); - -/* add(new Label(PublicationGlobalizationUtil.globalize( - "publications.ui.monograph.reviewed"))); + + /*add(new Label(PublicationGlobalizationUtil.globalize( + "publications.ui.monograph.reviewed"))); reviewed = new CheckboxGroup("reviewedGroup"); reviewed.addOption(new Option(REVIEWED, "")); - add(reviewed);*/ + add(reviewed); */ } @Override @@ -78,10 +77,13 @@ public class MonographPropertyForm FormData data = fse.getFormData(); Monograph monograph = (Monograph) super.initBasicWidgets(fse); - if ((monograph.getReviewed() != null) && (monograph.getReviewed())) { - reviewed.setValue(fse.getPageState(), new String[]{REVIEWED}); - } else { - reviewed.setValue(fse.getPageState(), null); + if (reviewed != null) { + if ((monograph.getReviewed() != null) + && (monograph.getReviewed())) { + reviewed.setValue(fse.getPageState(), new String[]{REVIEWED}); + } else { + reviewed.setValue(fse.getPageState(), null); + } } } @@ -94,15 +96,15 @@ public class MonographPropertyForm if ((monograph != null) && getSaveCancelSection().getSaveButton(). isSelected(fse.getPageState())) { - if (reviewed.getValue(fse.getPageState()) == null) { - monograph.setReviewed(false); - } else { - monograph.setReviewed(true); + if (reviewed != null) { + if (reviewed.getValue(fse.getPageState()) == null) { + monograph.setReviewed(false); + } else { + monograph.setReviewed(true); + } } - + monograph.save(); } } - - } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java index 5b95788b9..7b6a43213 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java @@ -146,7 +146,7 @@ public class PublicationPropertiesStep extends SimpleEditStep { step); } - private static class PreFormattedTextFormatter + protected static class PreFormattedTextFormatter extends DomainService implements DomainObjectPropertySheet.AttributeFormatter { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties index e1d12c7bc..91529e7e4 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties @@ -301,4 +301,8 @@ publication.ui.internetarticle.organization.remove=Remove publications.ui.monograph.reviewed=Reviewed publications.ui.monograph.reviewed.yes=Yes publications.ui.monograph.reviewed.no=No -publications.ui.internetarticle.lastAccessed= +publications.ui.internetarticle.lastAccessed=Date of last access +publications.ui.invalid_isbn=The ISBN entered is invalid +publications.ui.invalid_issn=The ISSN entered is invalid +publications.ui.journal.lastYearOfPublication=Last year of publication +publications.ui.series.abstract=Description diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties index fa8534806..2d8a1ece0 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties @@ -301,3 +301,7 @@ publications.ui.monograph.reviewed=Begutachtet publications.ui.monograph.reviewed.yes=Ja publications.ui.monograph.reviewed.no=Nein publications.ui.internetarticle.lastAccessed=Letztes Zugriffsdatum +publications.ui.invalid_isbn=Die eingegebene ISBN ist fehlerhaft. +publications.ui.invalid_issn=Die eingegebene ISSN ist fehlerhaft. +publications.ui.journal.lastYearOfPublication=Letztes Jahr der Ver\u00f6ffentlichung +publications.ui.series.abstract=Beschreibung diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java index 3dd1a328f..0baa3f5a1 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java @@ -26,8 +26,11 @@ import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.event.ParameterEvent; +import com.arsdigita.bebop.event.ParameterListener; import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ContentType; @@ -70,13 +73,41 @@ public class PublicationWithPublisherPropertyForm @Override protected void addWidgets() { super.addWidgets(); - + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.with_publisher.isbn").localize())); ParameterModel isbnParam = new StringParameter( PublicationWithPublisher.ISBN); TextField isbn = new TextField(isbnParam); isbn.setMaxLength(17); + isbn.addValidationListener(new ParameterListener() { + + public void validate(ParameterEvent event) + throws FormProcessException { + ParameterData data = event.getParameterData(); + String value = (String) data.getValue(); + + if (value.isEmpty()) { + return; + } + + value = value.replace("-", ""); + + if (value.length() != 13) { + data.invalidate(); + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.invalid_isbn")); + } + + try { + Long num = Long.parseLong(value); + } catch (NumberFormatException ex) { + data.invalidate(); + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.invalid_isbn")); + } + } + }); add(isbn); add(new Label((String) PublicationGlobalizationUtil.globalize( @@ -121,7 +152,7 @@ public class PublicationWithPublisherPropertyForm PublicationWithPublisher publication = (PublicationWithPublisher) super. initBasicWidgets(fse); - + data.put(PublicationWithPublisher.ISBN, publication.getISBN()); data.put(PublicationWithPublisher.VOLUME, publication.getVolume()); data.put(PublicationWithPublisher.NUMBER_OF_VOLUMES, @@ -142,8 +173,10 @@ public class PublicationWithPublisherPropertyForm processBasicWidgets(fse); if ((publication != null) && getSaveCancelSection().getSaveButton(). - isSelected(fse.getPageState())) { - publication.setISBN((String) data.get(PublicationWithPublisher.ISBN)); + isSelected(fse.getPageState())) { + String isbn = (String) data.get(PublicationWithPublisher.ISBN); + isbn = isbn.replace("-", ""); + publication.setISBN(isbn); publication.setVolume((Integer) data.get( PublicationWithPublisher.VOLUME)); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java index 09c2b40d6..00f1546d4 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java @@ -69,6 +69,10 @@ public class SeriesPropertiesStep extends SimpleEditStep { sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.series.title"), Series.TITLE); + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.series.abstract"), + Series.ABSTRACT, + new PublicationPropertiesStep.PreFormattedTextFormatter()); if (!ContentSection.getConfig().getHideLaunchDate()) { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java index d74c62d77..6e130b6a5 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java @@ -21,10 +21,15 @@ 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.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.form.TextField; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.contenttypes.Series; import com.arsdigita.cms.ui.authoring.BasicPageForm; @@ -60,11 +65,13 @@ public class SeriesPropertyForm protected void addWidgets() { super.addWidgets(); - /*add(new Label((String) PublicationGlobalizationUtil.globalize( - "publications.ui.series.title").localize())); - ParameterModel titleParam = new StringParameter(Series.NAME); - TextField title = new TextField(titleParam); - add(title);*/ + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.abstract").localize())); + ParameterModel abstractParam = new StringParameter(Series.ABSTRACT); + TextArea abstractArea = new TextArea(abstractParam); + abstractArea.setCols(60); + abstractArea.setRows(18); + add(abstractArea); } @Override @@ -72,7 +79,7 @@ public class SeriesPropertyForm FormData data = fse.getFormData(); Series series = (Series) super.initBasicWidgets(fse); - //data.put(Series.NAME, series.getTitle()); + data.put(Series.ABSTRACT, series.getAbstract()); } @Override @@ -82,9 +89,9 @@ public class SeriesPropertyForm if ((series != null) && getSaveCancelSection().getSaveButton(). isSelected(fse.getPageState())) { - /*series.setTitle((String) data.get(Series.NAME)); + series.setAbstract((String) data.get(Series.ABSTRACT)); - series.save();*/ + series.save(); } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/SciPublicationsServlet.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/SciPublicationsServlet.java index ee48dadcd..5e0fe5d80 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/SciPublicationsServlet.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/SciPublicationsServlet.java @@ -33,6 +33,7 @@ import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.kernel.ACSObject; +import com.arsdigita.persistence.OID; import com.arsdigita.templating.PresentationManager; import com.arsdigita.templating.Templating; import com.arsdigita.web.Application; diff --git a/ccm-sci-types-organization/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciMember.xml b/ccm-sci-types-organization/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciMember.xml index bdf1c9e92..80d604575 100644 --- a/ccm-sci-types-organization/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciMember.xml +++ b/ccm-sci-types-organization/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contenttypes/SciMember.xml @@ -8,12 +8,17 @@ - - - - - - + + + + + + + + + + + diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMember.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMember.java index 35411356b..0ab307cb7 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMember.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMember.java @@ -20,8 +20,10 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.OID; +import com.arsdigita.util.Assert; import java.math.BigDecimal; import org.apache.log4j.Logger; @@ -37,6 +39,9 @@ public class SciMember extends GenericPerson { private static final Logger logger = Logger.getLogger(SciMember.class); public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.SciMember"; + private static final String ORGANIZATIONS = "organizationalunit"; + private static final String DEPARTMENTS = "organizationalunit"; + private static final String PROJECTS = "organizationalunit"; private static final SciOrganizationConfig s_config = new SciOrganizationConfig(); @@ -66,7 +71,24 @@ public class SciMember extends GenericPerson { super(type); } + public SciMemberSciOrganizationsCollection getOrganizations() { + return new SciMemberSciOrganizationsCollection((DataCollection) get( + ORGANIZATIONS)); + } + + public void addOrganization(SciOrganization organization) { + Assert.exists(organization, SciOrganization.class); + + add(ORGANIZATIONS, organization); + } + + public void removeOrganization(SciOrganization organization) { + Assert.exists(organization, SciOrganization.class); + + remove(ORGANIZATIONS, organization); + } + public static SciOrganizationConfig getConfig() { return s_config; - } + } } diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMemberSciOrganizationsCollection.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMemberSciOrganizationsCollection.java new file mode 100644 index 000000000..e3802cade --- /dev/null +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/SciMemberSciOrganizationsCollection.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2010 Jens Pelzetter, + * for the Center of Social Politics of the University of Bremen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.contenttypes; + +import com.arsdigita.cms.ContentType; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class SciMemberSciOrganizationsCollection extends DomainCollection { + + public static final String LINK_MEMBER_ROLE = "link.role_name"; + public static final String LINK_STATUS = "link.status"; + public static final String MEMBER_ROLE = "role_name"; + public static final String STATUS = "status"; + + public SciMemberSciOrganizationsCollection(DataCollection dataCollection) { + super(dataCollection); + + m_dataCollection.addFilter(String.format("type = %s", + ContentType. + findByAssociatedObjectType(SciOrganization.class.getName()). + getID().toString())); + + m_dataCollection.addOrder("title"); + } + + public String getRoleName() { + return (String) m_dataCollection.get(LINK_MEMBER_ROLE); + } + + public void setRoleName(String roleName) { + DataObject link = (DataObject) this.get("link"); + + link.set(MEMBER_ROLE, roleName); + } + + public String getStatus() { + return (String) m_dataCollection.get(LINK_STATUS); + } + + public void setStatus(String status) { + DataObject link = (DataObject) this.get("link"); + + link.set(STATUS, status); + } + + public SciOrganization getOrganization() { + return (SciOrganization) DomainObjectFactory.newInstance(m_dataCollection. + getDataObject()); + } + + +} diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberStep.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberStep.java index a57c2552d..48b3894b4 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberStep.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMemberStep.java @@ -53,7 +53,7 @@ public class SciDepartmentMemberStep BasicItemForm addMemberSheet = new SciDepartmentMemberAddForm(itemModel, - this); + this); add(ADD_MEMBER_SHEET_NAME, (String) SciOrganizationGlobalizationUtil.globalize( "sciorganization.ui.department.add_member").localize(), @@ -71,15 +71,15 @@ public class SciDepartmentMemberStep } public void setSelectedPerson(final GenericPerson selectedPerson) { - this.selectedPerson = selectedPerson; + this.selectedPerson = selectedPerson; } public String getSelectedPersonRole() { - return selectedPersonRole; + return selectedPersonRole; } public void setSelectedPersonRole(final String selectedPersonRole) { - this.selectedPersonRole = selectedPersonRole; + this.selectedPersonRole = selectedPersonRole; } public String getSelectedPersonStatus() { diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberPropertiesStep.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberPropertiesStep.java index b88cfeed9..4348063e8 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberPropertiesStep.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberPropertiesStep.java @@ -20,6 +20,8 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.SegmentedPanel; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.SciMember; @@ -39,21 +41,41 @@ import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; public class SciMemberPropertiesStep extends SimpleEditStep { public static final String EDIT_SHEET_NAME = "edit"; + private SegmentedPanel segmentedPanel; public SciMemberPropertiesStep(ItemSelectionModel itemModel, AuthoringKitWizard parent) { super(itemModel, parent); + segmentedPanel = new SegmentedPanel(); + setDefaultEditKey(EDIT_SHEET_NAME); + + SimpleEditStep basicProperties = new SimpleEditStep(itemModel, + parent, + EDIT_SHEET_NAME); + BasicPageForm editSheet; editSheet = new SciMemberPropertyForm(itemModel, this); - add(EDIT_SHEET_NAME, - (String) SciOrganizationGlobalizationUtil.globalize( + basicProperties.add(EDIT_SHEET_NAME, + (String) SciOrganizationGlobalizationUtil.globalize( "sciorganization.ui.member.edit_basic_properties").localize(), - new WorkflowLockedComponentAccess(editSheet, itemModel), - editSheet.getSaveCancelSection().getCancelButton()); + new WorkflowLockedComponentAccess(editSheet, + itemModel), + editSheet.getSaveCancelSection().getCancelButton()); - setDisplayComponent(getSciMemberPropertySheet(itemModel)); + basicProperties.setDisplayComponent(getSciMemberPropertySheet(itemModel)); + segmentedPanel.addSegment(new Label((String) SciOrganizationGlobalizationUtil. + globalize("scimember.ui.basic_properties").localize()), + basicProperties); + + segmentedPanel.addSegment(new Label((String) SciOrganizationGlobalizationUtil. + globalize("scimember.ui.organizations").localize()), + new SciMemberSciOrganizationsStep(itemModel, + parent)); + + + setDisplayComponent(segmentedPanel); } public static Component getSciMemberPropertySheet( @@ -62,7 +84,7 @@ public class SciMemberPropertiesStep extends SimpleEditStep { sheet = (DomainObjectPropertySheet) GenericPersonPropertiesStep. getGenericPersonPropertySheet(itemModel); - + return sheet; } } diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationAddForm.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationAddForm.java new file mode 100644 index 000000000..9aab858b8 --- /dev/null +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationAddForm.java @@ -0,0 +1,63 @@ +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.cms.ContentType; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.SciMember; +import com.arsdigita.cms.contenttypes.SciOrganization; +import com.arsdigita.cms.ui.ItemSearchWidget; +import com.arsdigita.cms.ui.authoring.BasicItemForm; + +/** + * + * @author Jens Pelzetter + */ +public class SciMemberSciOrganizationAddForm + extends BasicItemForm + implements FormProcessListener, + FormInitListener { + + private ItemSearchWidget itemSearch; + private final String ITEM_SEARCH = "sciMemberOrganization"; + + public SciMemberSciOrganizationAddForm(ItemSelectionModel itemModel) { + super("sciMemberOrganizationAddForm", itemModel); + } + + @Override + protected void addWidgets() { + add(new Label(SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization.select_organization"))); + itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType. + findByAssociatedObjectType(SciOrganization.class.getName())); + add(itemSearch); + } + + @Override + public void init(FormSectionEvent fse) throws FormProcessException { + PageState state = fse.getPageState(); + + setVisible(state, true); + } + + @Override + public void process(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + SciMember member = (SciMember) getItemSelectionModel().getSelectedObject( + state); + + if (this.getSaveCancelSection().getSaveButton().isSelected(state)) { + member.addOrganization((SciOrganization) data.get(ITEM_SEARCH)); + + init(fse); + } + + } +} diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsStep.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsStep.java new file mode 100644 index 000000000..8af43db73 --- /dev/null +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsStep.java @@ -0,0 +1,58 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.SciOrganization; +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 + */ +public class SciMemberSciOrganizationsStep extends SimpleEditStep { + + private String MEMBER_ADD_ORGANIZATION_SHEET_NAME = "memberAddOrganization"; + private SciOrganization selectedOrganization; + private String selectedOrganizationRole; + private String selectedOrganizationStatus; + + public SciMemberSciOrganizationsStep(ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public SciMemberSciOrganizationsStep(ItemSelectionModel itemModel, + AuthoringKitWizard parent, + String prefix) { + super(itemModel, parent, prefix); + + BasicItemForm addOrganizationForm = new SciMemberSciOrganizationAddForm( + itemModel); + add(MEMBER_ADD_ORGANIZATION_SHEET_NAME, + (String) SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization.add").localize(), + new WorkflowLockedComponentAccess(addOrganizationForm, itemModel), + addOrganizationForm.getSaveCancelSection().getCancelButton()); + + setDisplayComponent(new SciMemberSciOrganizationsTable(itemModel, this)); + } + + protected void setSelectedOrganization(SciOrganization organization) { + this.selectedOrganization = organization; + } + + protected void setSelectedOrganizationRole(String role) { + this.selectedOrganizationRole = role; + } + + protected void setSelectedOrganizationStatus(String status) { + this.selectedOrganizationStatus = status; + } + + protected void showEditComponent(PageState state) { + showComponent(state, MEMBER_ADD_ORGANIZATION_SHEET_NAME); + } +} diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsTable.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsTable.java new file mode 100644 index 000000000..a8e11395f --- /dev/null +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciMemberSciOrganizationsTable.java @@ -0,0 +1,331 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Link; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.bebop.table.TableColumn; +import com.arsdigita.bebop.table.TableColumnModel; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.bebop.table.TableModelBuilder; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.RelationAttribute; +import com.arsdigita.cms.RelationAttributeCollection; +import com.arsdigita.cms.contenttypes.SciMember; +import com.arsdigita.cms.contenttypes.SciMemberSciOrganizationsCollection; +import com.arsdigita.cms.contenttypes.SciOrganization; +import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil; +import com.arsdigita.cms.dispatcher.ItemResolver; +import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.domain.DataObjectNotFoundException; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class SciMemberSciOrganizationsTable + extends Table + implements TableActionListener { + + private static final Logger logger = Logger.getLogger( + SciMemberSciOrganizationsTable.class); + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_EDIT_LINK = "table_col_edit_link"; + private final String TABLE_COL_DEL = "table_col_del"; + private final String TABLE_COL_UP = "table_col_up"; + private final String TABLE_COL_DOWN = "table_col_down"; + private ItemSelectionModel itemModel; + private SciMemberSciOrganizationsStep step; + + public SciMemberSciOrganizationsTable(ItemSelectionModel itemModel, + SciMemberSciOrganizationsStep step) { + super(); + this.itemModel = itemModel; + this.step = step; + + setEmptyView(new Label(SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organizations.none"))); + + TableColumnModel columnModel = getColumnModel(); + columnModel.add(new TableColumn( + 0, + SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization").localize(), + TABLE_COL_EDIT)); + columnModel.add(new TableColumn( + 1, + SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization.role").localize())); + columnModel.add(new TableColumn( + 2, + SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization.status").localize())); + columnModel.add(new TableColumn( + 3, + SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization.edit").localize(), + TABLE_COL_EDIT_LINK)); + columnModel.add(new TableColumn( + 4, + SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organization.remove").localize(), + TABLE_COL_DEL)); + + setModelBuilder( + new SciMemberSciOrganizationsTableModelBuilder(itemModel)); + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + columnModel.get(3).setCellRenderer(new EditLinkCellRenderer()); + columnModel.get(4).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(this); + } + + private class SciMemberSciOrganizationsTableModelBuilder + extends LockableImpl + implements TableModelBuilder { + + public SciMemberSciOrganizationsTableModelBuilder( + ItemSelectionModel itemModel) { + SciMemberSciOrganizationsTable.this.itemModel = itemModel; + } + + @Override + public TableModel makeModel(Table table, PageState state) { + table.getRowSelectionModel().clearSelection(state); + SciMember member = (SciMember) itemModel.getSelectedObject(state); + return new SciMemberSciOrganizationsTableModel(table, + state, + member); + } + } + + private class SciMemberSciOrganizationsTableModel implements TableModel { + + private Table table; + private SciMemberSciOrganizationsCollection organizations; + private SciOrganization organization; + + public SciMemberSciOrganizationsTableModel(Table table, + PageState state, + SciMember member) { + this.table = table; + this.organizations = member.getOrganizations(); + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + @Override + public boolean nextRow() { + boolean ret; + + if ((organizations != null) && organizations.next()) { + organization = organizations.getOrganization(); + ret = true; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(int columnIndex) { + switch (columnIndex) { + case 0: + return organization.getTitle(); + case 1: + RelationAttributeCollection role = new RelationAttributeCollection( + "SciOrganizationRole", + organizations.getRoleName()); + if (role.next()) { + String roleName = role.getName(); + role.close(); + return roleName; + } else { + return ContenttypesGlobalizationUtil.globalize( + "cms.ui.unknownRole").localize(); + } + case 2: + RelationAttributeCollection status = new RelationAttributeCollection( + "SciOrganizationStatus", + organizations.getStatus()); + if (status.next()) { + String statusName = status.getName(); + status.close(); + return statusName; + } else { + return ContenttypesGlobalizationUtil.globalize( + "cms.ui.unknownStatus").localize(); + } + case 3: + return SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organizations.edit_assoc").localize(); + case 4: + return SciOrganizationGlobalizationUtil.globalize( + "scimember.ui.organizations.remove").localize(); + default: + return null; + } + } + + @Override + public Object getKeyAt(int columnIndex) { + return organization.getID(); + } + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent(Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int column) { + com.arsdigita.cms.SecurityManager securityManager = Utilities. + getSecurityManager(state); + SciMember member = (SciMember) itemModel.getSelectedObject(state); + + boolean canEdit = securityManager.canAccess(state.getRequest(), + com.arsdigita.cms.SecurityManager.EDIT_ITEM, + member); + + if (canEdit) { + SciOrganization organization; + try { + organization = new SciOrganization((BigDecimal) key); + } catch (DataObjectNotFoundException ex) { + logger.warn(String.format("No object with key '%s' found.", + key), + ex); + return new Label(value.toString()); + } + + ContentSection section = CMS.getContext().getContentSection(); + ItemResolver resolver = section.getItemResolver(); + Link link = new Link(value.toString(), + resolver.generateItemURL(state, + organization, + section, organization. + getVersion())); + return link; + } else { + Label label = new Label(value.toString()); + return label; + } + } + } + + private class EditLinkCellRenderer + extends LockableImpl + implements TableCellRenderer { + + public Component getComponent(Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int column) { + com.arsdigita.cms.SecurityManager securityManager = + Utilities.getSecurityManager(state); + SciMember member = (SciMember) itemModel.getSelectedObject(state); + + boolean canEdit = securityManager.canAccess(state.getRequest(), + com.arsdigita.cms.SecurityManager.EDIT_ITEM, + member); + + if (canEdit) { + ControlLink link = new ControlLink(value.toString()); + return link; + } else { + Label label = new Label(value.toString()); + return label; + } + } + } + + private class DeleteCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent(Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + com.arsdigita.cms.SecurityManager securityManager = Utilities. + getSecurityManager(state); + SciMember member = (SciMember) itemModel.getSelectedObject(state); + + boolean canEdit = securityManager.canAccess(state.getRequest(), + com.arsdigita.cms.SecurityManager.EDIT_ITEM, + member); + + if (canEdit) { + ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String) SciOrganizationGlobalizationUtil. + globalize( + "scimember.ui.organization." + + ".confirm_remove"). + localize()); + return link; + } else { + Label label = new Label(value.toString()); + return label; + } + } + } + + @Override + public void cellSelected(TableActionEvent event) { + PageState state = event.getPageState(); + + SciOrganization organization = new SciOrganization(new BigDecimal(event. + getRowKey().toString())); + + SciMember member = (SciMember) itemModel.getSelectedObject(state); + + SciMemberSciOrganizationsCollection organizations = member. + getOrganizations(); + + TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { + } else if(TABLE_COL_EDIT_LINK.equals(column.getHeaderKey().toString())) { + while(organizations.next()) { + if (organizations.getOrganization().equals(organization)) { + break; + } + } + + } else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { + member.removeOrganization(organization); + } + } + + @Override + public void headSelected(TableActionEvent event) { + //Nothing to do + } +} diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsTable.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsTable.java index c7d22d319..385ff898b 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsTable.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectDepartmentsTable.java @@ -125,8 +125,7 @@ public class SciProjectDepartmentsTable } } - private class SciProjectDepartmentsTableModel - implements TableModel { + private class SciProjectDepartmentsTableModel implements TableModel { private Table m_table; private SciProjectDepartmentsCollection m_departments; @@ -227,7 +226,6 @@ public class SciProjectDepartmentsTable return link; } else { - Label label = new Label(value.toString()); return label; }