From 401bb5670cc833bbba5b83ddda4ccc0b0fe27fa6 Mon Sep 17 00:00:00 2001 From: jensp Date: Mon, 4 Apr 2011 17:24:41 +0000 Subject: [PATCH] =?UTF-8?q?-=20Neue=20Version=20des=20DaBIn-Importers:=20?= =?UTF-8?q?=20=20-=20Autoren=20werden=20jetzt=20in=20der=20f=C3=BCr=20Publ?= =?UTF-8?q?ikationen=20vorgesehen=20Contentsection=20angelegt=20=20=20-=20?= =?UTF-8?q?Import=20der=20Verlage=20hoffentlich=20korrigiert=20-=20A=20to?= =?UTF-8?q?=20Z=20Leiste=20f=C3=BCr=20Folder=20im=20Content-Center.=20Wird?= =?UTF-8?q?=20derzeit=20immer=20angezeigt,=20Ausblenden=20bei=20unterschre?= =?UTF-8?q?iten=20einer=20bestimmten=20Anzahl=20von=20Items=20funktioniert?= =?UTF-8?q?=20noch=20=20=20nicht=20und=20wahrscheinlich=20auch=20nicht=20o?= =?UTF-8?q?hne=20gr=C3=B6=C3=9Fere=20Umbauten=20an=20FolderManipulator=20u?= =?UTF-8?q?nd=20FolderBrowser=20m=C3=B6glich.=20-=20Abstract=20bei=20den?= =?UTF-8?q?=20Publikationen=20wird=20jetzt=20im=20Propertysheet=20mit=20Ze?= =?UTF-8?q?ilenumbr=C3=BCchen=20etc.=20(wie=20im=20TextArea=20eingegeben)?= =?UTF-8?q?=20angezeigt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@827 8810af33-2d31-482b-a856-94f89814c4df --- .../arsdigita/cms/dabin/DaBInImporter.java | 148 ++++-- .../ui/folder/CMSFolderResources.properties | 1 + .../folder/CMSFolderResources_de.properties | 37 +- .../folder/CMSFolderResources_fr.properties | 45 +- .../cms/ui/folder/FolderBrowser.java | 468 ++++++++++-------- .../cms/ui/folder/FolderItemPane.java | 2 +- .../cms/ui/folder/FolderManipulator.java | 244 ++++++--- ccm-core/src/com/arsdigita/bebop/Page.java | 117 ++--- .../toolbox/ui/DomainObjectPropertySheet.java | 92 ++-- .../ui/PublicationPropertiesStep.java | 22 +- 10 files changed, 694 insertions(+), 482 deletions(-) diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java index ce863370f..0bf97804f 100644 --- a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java +++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java @@ -112,16 +112,16 @@ public class DaBInImporter extends Program { private Folder personsRootFolder; private Folder projectsRootFolder; private Folder publicationsRootFolder; - private Folder authors; - private Folder contacts; + private Folder authors; + private Folder contacts; private Folder departments; - private Folder members; + private Folder members; private Folder organization; - private Folder persons; - private Folder projects; - private Folder publications; - private Folder publishers; - private Folder files; + private Folder persons; + private Folder projects; + private Folder publications; + private Folder publishers; + private Folder files; private Map departmentsMap; private Map personsMap; private Map projectsMap; @@ -135,7 +135,7 @@ public class DaBInImporter extends Program { private Address officeAddress; private Domain termsDomain; private Term publicationsTerm; - private Term workingPapersTerm; + private Term workingPapersTerm; private Term currentProjectsTerm; private Term finishedProjectsTerm; @@ -147,13 +147,13 @@ public class DaBInImporter extends Program { super("DaBInImporter", "0.1.0", "configFile", - startup); + startup); departmentsMap = new HashMap(); personsMap = new HashMap(); projectsMap = new HashMap(); publishersMap = new HashMap(); publicationMap = new HashMap(); - workingPaperMap = new HashMap(); + workingPaperMap = new HashMap(); } @Override @@ -259,19 +259,19 @@ public class DaBInImporter extends Program { projectsRootFolder = projectsSection.getRootFolder(); publicationsRootFolder = publicationsSection.getRootFolder(); - authors = createFolder(personsRootFolder, "autoren", "Autoren"); + authors = createFolder(personsRootFolder, "autoren", "Autoren"); contacts = createFolder(personsRootFolder, "kontaktdaten", - "Kontaktdaten"); + "Kontaktdaten"); departments = createFolder(root, "abteilungen", "Abteilungen"); - members = createFolder(personsRootFolder, "mitglieder", "Mitglieder"); + members = createFolder(personsRootFolder, "mitglieder", "Mitglieder"); organization = createFolder(root, "organisationen", "Organisation(en)"); persons = createFolder(personsRootFolder, "personen", "Personen"); - + projects = createFolder(projectsRootFolder, "projekte", "Projekte"); publishers = createFolder(publicationsRootFolder, "verlage", "Verlage"); @@ -293,13 +293,13 @@ public class DaBInImporter extends Program { System.out.println("Terms for publications..."); String publicationsTermPath = (String) config.get( "terms.publications"); - publicationsTerm = checkTermPath(publicationsTermPath); + publicationsTerm = checkTermPath(publicationsTermPath); System.out.println("Terms for working papers..."); String workingPapersTermPath = (String) config.get("terms.workingpapers"); workingPapersTerm = checkTermPath(workingPapersTermPath); - + System.out.println("Term for current projects..."); String currentProjectsTermPath = (String) config.get( "terms.projects.current"); @@ -1135,7 +1135,11 @@ public class DaBInImporter extends Program { System.out.printf("%4d of %4d: %s...\n", counter, number, result. getString("name")); PublicationData data = new PublicationData(); - data.setType(PublicationType.ARTICLE_IN_COLLECTED_VOLUME); + //All publications of the DaBIn type "Artikel/Aufsatz" are now + //imported as ArticleInJournal since ArticleInJournal and ArticleInCollectedVolume + //can't be seperated from the information in DaBIn + //data.setType(PublicationType.ARTICLE_IN_COLLECTED_VOLUME); + data.setType(PublicationType.ARTICLE_IN_JOURNAL); data.setPublicationDaBInId(result.getString("Publikation_Id")); data.setName(result.getString("Name")); data.setVerlag(result.getString("Verlag")); @@ -1493,8 +1497,13 @@ public class DaBInImporter extends Program { personDe.setTitlePre(personData.getTitlePre()); personDe.setDescription(String.format("DaBInId={%s}", personData.getDabinId())); - personDe.setContentSection(section); - personDe.setLifecycle(createLifecycle(personsLifecycle)); + if (type == PersonType.AUTHOR) { + personDe.setContentSection(publicationsSection); + personDe.setLifecycle(createLifecycle(publicationsLifecycle)); + } else { + personDe.setContentSection(personsSection); + personDe.setLifecycle(createLifecycle(personsLifecycle)); + } personDe.save(); personDe.setLanguage("de"); @@ -1503,8 +1512,13 @@ public class DaBInImporter extends Program { personEn.setGivenName(personData.getGivenname()); personEn.setDescription(String.format("DaBInId={%s}", personData.getDabinId())); - personEn.setContentSection(section); - personEn.setLifecycle(createLifecycle(personsLifecycle)); + if (type == PersonType.AUTHOR) { + personEn.setContentSection(publicationsSection); + personEn.setLifecycle(createLifecycle(publicationsLifecycle)); + } else { + personEn.setContentSection(personsSection); + personEn.setLifecycle(createLifecycle(personsLifecycle)); + } personEn.save(); personEn.setLanguage("en"); @@ -1518,9 +1532,9 @@ public class DaBInImporter extends Program { personDe.setContentSection(section); personEn.setContentSection(section); - + Folder folder = null; - switch(type) { + switch (type) { case MEMBER: folder = members; break; @@ -1638,7 +1652,7 @@ public class DaBInImporter extends Program { contactBundle.addInstance(contactEn); contactBundle.setContentSection(personsSection); contacts.addItem(contactBundle); - + contactDe.setContentSection(personsSection); contactEn.setContentSection(personsSection); @@ -1682,7 +1696,7 @@ public class DaBInImporter extends Program { System.out.printf("\tde: %s...", departmentData.getNameDe()); departmentDe = new SciDepartment(); - departmentDe.setTitle(departmentData.getNameDe()); + departmentDe.setTitle(departmentData.getNameDe()); departmentDe.setName(DaBInImporter.normalizeString(departmentData. getNameDe())); departmentDe.setLanguage("de"); @@ -1694,7 +1708,7 @@ public class DaBInImporter extends Program { System.out.printf("\ten: %s...", departmentData.getNameEn()); departmentEn = new SciDepartment(); - departmentEn.setTitle(departmentData.getNameEn()); + departmentEn.setTitle(departmentData.getNameEn()); departmentEn.setName(DaBInImporter.normalizeString(departmentData. getNameDe())); departmentEn.setLanguage("en"); @@ -1793,7 +1807,7 @@ public class DaBInImporter extends Program { if ((projectData.getNameDe() != null) && (projectData.getNameDe().length() > 0)) { projectDe = new SciProject(); - projectDe.setTitle(projectData.getNameDe()); + projectDe.setTitle(projectData.getNameDe()); String projectName = DaBInImporter.normalizeString(projectData. getNameDe()); if (projectName.length() > 200) { @@ -1955,7 +1969,7 @@ public class DaBInImporter extends Program { System.out.println("OK"); i++; } - + projects.addItem(project); //Assign to term/category @@ -2514,7 +2528,7 @@ public class DaBInImporter extends Program { pubLink.save(); } } - + publications.addItem(publication); if (publicationData.getVisiblity() == PublicationVisibility.GLOBAL) { @@ -2631,10 +2645,10 @@ public class DaBInImporter extends Program { workingPaperEn.setContentSection(publicationsSection); } - workingPaperMap.put(workingPaperData.getDabinId(), workingPaper); + workingPaperMap.put(workingPaperData.getDabinId(), workingPaper); publications.addItem(workingPaper); WorkingPaper primary = (WorkingPaper) workingPaper. - getPrimaryInstance(); + getPrimaryInstance(); Term term = workingPapersTerm;//s.get(yearStr); term = termsDomain.getTerm(term.getUniqueID()); System.out.printf("\tAdding project to term '%s:%s'...\n", term. @@ -2729,7 +2743,7 @@ public class DaBInImporter extends Program { download.setTargetType(Link.INTERNAL_LINK); download.setTargetItem(fsi); download.setLinkOwner(workingPaperEn); - + files.addItem(bundle); } } catch (IOException ex) { @@ -2856,9 +2870,19 @@ public class DaBInImporter extends Program { System.out.printf("\tde: %s, %s...", publisherData.getName(), publisherData. getPlace()); publisherDe = new Publisher(); - publisherDe.setTitle(publisherData.getName()); - publisherDe.setName(DaBInImporter.normalizeString(publisherData. - getName())); + if ((publisherData.getPlace() == null) || publisherData.getPlace(). + isEmpty()) { + publisherDe.setTitle(publisherData.getName()); + publisherDe.setName(DaBInImporter.normalizeString(publisherData. + getName())); + } else { + publisherDe.setTitle(String.format("%s, %s", publisherData. + getName(), publisherData.getPlace())); + publisherDe.setName(DaBInImporter.normalizeString(String. + format( + "%s, %s", publisherData.getName(), publisherData. + getPlace()))); + } publisherDe.setPlace(publisherData.getPlace()); publisherDe.setLanguage("de"); publisherDe.setLifecycle(createLifecycle(publicationsLifecycle)); @@ -2869,9 +2893,19 @@ public class DaBInImporter extends Program { System.out.printf("\tEn: %s, %s...", publisherData.getName(), publisherData. getPlace()); publisherEn = new Publisher(); - publisherEn.setTitle(publisherData.getName()); - publisherEn.setName(DaBInImporter.normalizeString(publisherData. - getName())); + if ((publisherData.getPlace() == null) || publisherData.getPlace(). + isEmpty()) { + publisherEn.setTitle(publisherData.getName()); + publisherEn.setName(DaBInImporter.normalizeString(publisherData. + getName())); + } else { + publisherEn.setTitle(String.format("%s, %s", publisherData. + getName(), publisherData.getPlace())); + publisherEn.setName(DaBInImporter.normalizeString(String. + format( + "%s, %s", publisherData.getName(), publisherData. + getPlace()))); + } publisherEn.setPlace(publisherData.getPlace()); publisherEn.setLanguage("en"); publisherEn.setLifecycle(createLifecycle(publicationsLifecycle)); @@ -2887,8 +2921,11 @@ public class DaBInImporter extends Program { publisherDe.setContentSection(publicationsSection); publisherEn.setContentSection(publicationsSection); - + publishers.addItem(publisher); + System.out.printf( + "Putting publisher into publishers map. HashCode: %d", + publisherData.hashCode()); publishersMap.put(publisherData, publisher); System.out.println("OK"); } @@ -2975,7 +3012,12 @@ public class DaBInImporter extends Program { int colonIndex = normalizedData.indexOf(':'); if (colonIndex < 0) { - publisher.setName(normalizedData);/*.replace(",", ""). + while ((normalizedData.length() > 1) + && !Character.isLetter(normalizedData.charAt(0))) { + normalizedData = normalizedData.substring(1); + } + + publisher.setName(normalizedData.trim());/*.replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase());*/ @@ -3015,11 +3057,19 @@ public class DaBInImporter extends Program { System.out.printf("\tprevDelimIndex = %d\n", prevDelimIndex); place = normalizedData.substring(prevDelimIndex, colonIndex); - publisher.setName(name.trim(). - replace(",", ""). - replace("/", ""). - replaceAll("\\s\\s+", " "). - replace(' ', '-').toLowerCase()); + while ((name.length() > 1) + && !Character.isLetter(name.charAt(0))) { + name = name.substring(1); + } + publisher.setName(name.trim());//. + //replace(",", ""). + //replace("/", ""). + //replaceAll("\\s\\s+", " "). + //replace(' ', '-').toLowerCase()); + while ((place.length() > 1) + && !Character.isLetter(place.charAt(0))) { + place = place.substring(1); + } publisher.setPlace(place.trim()); } @@ -3111,7 +3161,7 @@ public class DaBInImporter extends Program { publicationData.setPagesFrom(pagesFrom); publicationData.setPagesTo(pagesTo); } - + private Term checkTermPath(final String path) { StringTokenizer pathTokenizer = new StringTokenizer(path, "/"); @@ -3147,7 +3197,7 @@ public class DaBInImporter extends Program { return term; } - + private void createTerm(final String uniqueId, final String name, final Domain domain, @@ -3191,7 +3241,7 @@ public class DaBInImporter extends Program { "Ä", "Ae").replace("Ü", "Ue").replace("Ö", "Oe").replace("ß", "ss"). replace(" ", "-"). - replaceAll("[^a-zA-Z0-9\\-]", "").toLowerCase(); + replaceAll("[^a-zA-Z0-9\\-]", "").toLowerCase().trim(); } public static void main(String[] args) { diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources.properties b/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources.properties index bb0dd0542..04d61294d 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources.properties @@ -67,3 +67,4 @@ cms.ui.folder.item_already_exists=There is already an item in the target folder cms.ui.folder.item_is_live= is live; you must unpublish it before moving it. cms.ui.folder.no_permission_for_item=You do not have permission to delete or move cms.ui.folder.no_such_item=Item ID supplied does not match an existing Content Item. +cms.ui.folder.filter.all=All diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_de.properties b/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_de.properties index 68dcda539..7b78c8f9e 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_de.properties @@ -2,7 +2,7 @@ COMMENT.00=BUTTONS/LINKS/LABELS cms.ui.folder.save=Speichern cms.ui.folder.cancel=Abbrechen cms.ui.folder.edit=Editieren -cms.ui.folder.delete=L\u00F6schen +cms.ui.folder.delete=L\u00f6schen cms.ui.folder.move=Verschieben cms.ui.folder.copy=Kopieren cms.ui.folder.go=Los @@ -16,22 +16,22 @@ cms.ui.folder.unlock=Entsperren cms.ui.folder.external_lock=Externe Sperrung cms.ui.folder.left=Links cms.ui.folder.right=Rechts -cms.ui.folder.items=Eintrag/Eintr\u00E4ge +cms.ui.folder.items=Eintrag/Eintr\u00e4ge cms.ui.folder.from=von cms.ui.folder.to=an -cms.ui.folder.no_items=Keine Eintr\u00E4ge +cms.ui.folder.no_items=Keine Eintr\u00e4ge cms.ui.folder.no_image=Kein Bild cms.ui.folder.hide_metadata=Metadaten verbergen cms.ui.folder.show_metadata=Zeige die Metadaten cms.ui.folder.edit_subject_classes=Themenklassen editieren -cms.ui.folder.add_paragraph=Abschnitt hinzuf\u00FCgen +cms.ui.folder.add_paragraph=Abschnitt hinzuf\u00fcgen cms.ui.folder.edit_in_applet=In EoPro editieren cms.ui.folder.edit_in_browser=Im Browser editieren cms.ui.folder.edit_current_folder=Bearbeiten des aktuellen Verzeichnisses cms.ui.folder.preview_current_folder=Vorschau des aktuellen Verzeichnisses -cms.ui.folder.contents_for=Inhalt für -cms.ui.folder.choose_target_folder=Zielverzeichnis auswählen +cms.ui.folder.contents_for=Inhalt f\u00fcr +cms.ui.folder.choose_target_folder=Zielverzeichnis ausw\u00e4hlen cms.ui.foldr.new_wcms_doc=Neue WCMS Documente COMMENT.05=INPUTS @@ -40,26 +40,27 @@ cms.ui.folder.right=Rechts COMMENT.10=FOLDER METADATA cms.ui.folder.headline=Titelzeile -cms.ui.folder.heading=\u00DCberschrift +cms.ui.folder.heading=\u00dcberschrift cms.ui.folder.body=Hauptbereich -cms.ui.folder.add_image=Bild hinzuf\u00FCgen +cms.ui.folder.add_image=Bild hinzuf\u00fcgen cms.ui.folder.replace_image=Ersetze dieses Bild cms.ui.folder.align=Ausrichten -cms.ui.folder.add_download=Download hinzuf\u00FCgen +cms.ui.folder.add_download=Download hinzuf\u00fcgen cms.ui.folder.alt=Alt -cms.ui.folder.caption=\u00DCberschrift +cms.ui.folder.caption=\u00dcberschrift COMMENT.20=ERROR MESSAGES cms.ui.folder.column_index_not_in_table_model=Spaltenindex befindet sich nicht im Datenbankmodell: cms.ui.folder.cannot_find_root_folder=Oberster Ordner kann nicht gefunden werden. -cms.ui.folder.must_select_item=Es mu\u00DF mindestens ein Eintrag zum Verschieben/Kopieren ausgew\u00E4hlt werden -cms.ui.folder.no_source_items_specified=Es wurden keine Ursprungseintr\u00E4ge gew\u00E4hlt -cms.ui.folder.need_select_target_folder=Es mu\u00DF ein Ordner ausgew\u00E4hlt werden, in den die Eintr\u00E4ge verschoben oder kopiert werden sollen. -cms.ui.folder.not_within_same_folder=Kopieren/Verschieben im gleichen Ordner nicht m\u00F6glich -cms.ui.folder.no_permission=Sie haben nicht die Berechtigung Eintr\u00E4ge zu erzeugen, zu kopieren oder zu verschieben. +cms.ui.folder.must_select_item=Es mu\u00df mindestens ein Eintrag zum Verschieben/Kopieren ausgew\u00e4hlt werden +cms.ui.folder.no_source_items_specified=Es wurden keine Ursprungseintr\u00e4ge gew\u00e4hlt +cms.ui.folder.need_select_target_folder=Es mu\u00df ein Ordner ausgew\u00e4hlt werden, in den die Eintr\u00e4ge verschoben oder kopiert werden sollen. +cms.ui.folder.not_within_same_folder=Kopieren/Verschieben im gleichen Ordner nicht m\u00f6glich +cms.ui.folder.no_permission=Sie haben nicht die Berechtigung Eintr\u00e4ge zu erzeugen, zu kopieren oder zu verschieben. cms.ui.folder.item_already_exists=Es gibt schon einen Eintrag im Zielordner mit Namen: -cms.ui.folder.item_is_live=ist ver\u00F6ffentlicht. Sie m\u00FCssen ihn zum Verschieben zur\u00FCckholen -cms.ui.folder.no_permission_for_item=Sie haben nicht die Berechtigung zum L\u00F6schen oder Verschieben. -cms.ui.folder.no_such_item=Die verwendete Eintrags-ID pa\u00DFt zu keinem Eintrag. +cms.ui.folder.item_is_live=ist ver\u00f6ffentlicht. Sie m\u00fcssen ihn zum Verschieben zur\u00fcckholen +cms.ui.folder.no_permission_for_item=Sie haben nicht die Berechtigung zum L\u00f6schen oder Verschieben. +cms.ui.folder.no_such_item=Die verwendete Eintrags-ID pa\u00dft zu keinem Eintrag. cms.ui.folder.remove_asset_link=Entfernen +cms.ui.folder.filter.all=Alle diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_fr.properties b/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_fr.properties index 63e29cc64..32027ad8d 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_fr.properties +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/CMSFolderResources_fr.properties @@ -3,7 +3,7 @@ cms.ui.folder.save=Sauver cms.ui.folder.cancel=Annuler cms.ui.folder.edit=Modifier cms.ui.folder.delete=Effacer -cms.ui.folder.move=Déplacer +cms.ui.folder.move=D\u00e9placer cms.ui.folder.copy=Copier cms.ui.folder.go=Go cms.ui.folder.name=Nom @@ -11,26 +11,26 @@ cms.ui.folder.type=Type cms.ui.folder.action=Action cms.ui.folder.title=Titre cms.ui.folder.index=Index -cms.ui.folder.preview=Pré-visualisation +cms.ui.folder.preview=Pr\u00e9-visualisation cms.ui.folder.lock=Verrouiller -cms.ui.folder.unlock=Dé-vérrouiller +cms.ui.folder.unlock=D\u00e9-v\u00e9rrouiller cms.ui.folder.external_lock=Verrou externe cms.ui.folder.left=Gauche cms.ui.folder.right=Droite -cms.ui.folder.items=élément(s) +cms.ui.folder.items=\u00e9l\u00e9ment(s) cms.ui.folder.from=de -cms.ui.folder.to=à -cms.ui.folder.no_items=Pas d'éléments +cms.ui.folder.to=\u00e0 +cms.ui.folder.no_items=Pas d'\u00e9l\u00e9ments cms.ui.folder.no_image=Pas d'image -cms.ui.folder.hide_metadata=Cacher les méta-données -cms.ui.folder.show_metadata=Montrer les méta-données +cms.ui.folder.hide_metadata=Cacher les m\u00e9ta-donn\u00e9es +cms.ui.folder.show_metadata=Montrer les m\u00e9ta-donn\u00e9es cms.ui.folder.edit_subject_classes=Modifier les classes objet cms.ui.folder.add_paragraph=Ajouter un paragraphe cms.ui.folder.edit_in_applet=Modifier dans EoPro cms.ui.folder.edit_in_browser=Modifier dans un navigateur cms.ui.folder.edit_current_folder=Modifier le dossier courant -cms.ui.folder.preview_current_folder=Pré-visualiser le dossier courant +cms.ui.folder.preview_current_folder=Pr\u00e9-visualiser le dossier courant cms.ui.folder.contents_for=Contenu de  cms.ui.folder.choose_target_folder=Choisir le dossier de destination cms.ui.foldr.new_wcms_doc=Nouveau document WCMS @@ -41,26 +41,27 @@ cms.ui.folder.right=Droite COMMENT.10=DOSSIER DES META DONNEES -cms.ui.folder.headline=Entête +cms.ui.folder.headline=Ent\u00eate cms.ui.folder.heading=Chapeau cms.ui.folder.body=Corps cms.ui.folder.add_image=Ajouter une image cms.ui.folder.replace_image=Remplacer cette image cms.ui.folder.align=Aligner -cms.ui.folder.add_download=Ajouter un téléchargement +cms.ui.folder.add_download=Ajouter un t\u00e9l\u00e9chargement cms.ui.folder.alt=Alt -cms.ui.folder.caption=Légende +cms.ui.folder.caption=L\u00e9gende cms.ui.folder.remove_asset_link=Retirer COMMENT.20=MESSAGES D'ERREURS -cms.ui.folder.column_index_not_in_table_model=Index de la colonne absent du modèle de table: +cms.ui.folder.column_index_not_in_table_model=Index de la colonne absent du mod\u00e8le de table: cms.ui.folder.cannot_find_root_folder=Impossible de trouver le dossier racine. -cms.ui.folder.must_select_item=Vous devez sélectionner au moins élément pour le déplacer ou le copier -cms.ui.folder.no_source_items_specified=Pas d'élément source spécifié. -cms.ui.folder.need_select_target_folder=Vous devez sélectionner un dossier dans lequel les éléments seront déplacés ou copiés. -cms.ui.folder.not_within_same_folder=Impossible de déplacer ou de copier des éléments à l'intérieur d'un même dossier. -cms.ui.folder.no_permission=Vous n'avez pas l'autorisation de créer, de copier, ou de déplacer des éléments. -cms.ui.folder.item_already_exists=Il y a déjà un élément dans le dossier destination appelé: -cms.ui.folder.item_is_live=est en ligne ; Vous devez le dé-publier avant de le déplacer. -cms.ui.folder.no_permission_for_item=Vous n'avez pas l'autorisation de supprimer ou de déplacer -cms.ui.folder.no_such_item=L'identifiant fourni pour l'élément ne correspond pas à un contenu existant. +cms.ui.folder.must_select_item=Vous devez s\u00e9lectionner au moins \u00e9l\u00e9ment pour le d\u00e9placer ou le copier +cms.ui.folder.no_source_items_specified=Pas d'\u00e9l\u00e9ment source sp\u00e9cifi\u00e9. +cms.ui.folder.need_select_target_folder=Vous devez s\u00e9lectionner un dossier dans lequel les \u00e9l\u00e9ments seront d\u00e9plac\u00e9s ou copi\u00e9s. +cms.ui.folder.not_within_same_folder=Impossible de d\u00e9placer ou de copier des \u00e9l\u00e9ments \u00e0 l'int\u00e9rieur d'un m\u00eame dossier. +cms.ui.folder.no_permission=Vous n'avez pas l'autorisation de cr\u00e9er, de copier, ou de d\u00e9placer des \u00e9l\u00e9ments. +cms.ui.folder.item_already_exists=Il y a d\u00e9j\u00e0 un \u00e9l\u00e9ment dans le dossier destination appel\u00e9: +cms.ui.folder.item_is_live=est en ligne ; Vous devez le d\u00e9-publier avant de le d\u00e9placer. +cms.ui.folder.no_permission_for_item=Vous n'avez pas l'autorisation de supprimer ou de d\u00e9placer +cms.ui.folder.no_such_item=L'identifiant fourni pour l'\u00e9l\u00e9ment ne correspond pas \u00e0 un contenu existant. +cms.ui.folder.filter.all= diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java index 08814ec13..318d15db4 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java @@ -79,51 +79,50 @@ import javax.servlet.ServletException; * @version $Id: FolderBrowser.java 2017 2009-10-04 09:03:45Z pboy $ */ public class FolderBrowser extends Table { - + private static final Logger s_log = Logger.getLogger(FolderBrowser.class); - private static GlobalizedMessage[] s_headers = { globalize("cms.ui.folder.name"), globalize("cms.ui.folder.title"), - globalize("cms.ui.folder.type"), globalize("cms.ui.folder.creation_date"), - globalize("cms.ui.folder.last_modified"), globalize("cms.ui.folder.action"), - globalize("cms.ui.folder.index") }; - + globalize("cms.ui.folder.type"), + globalize("cms.ui.folder.creation_date"), + globalize("cms.ui.folder.last_modified"), globalize( + "cms.ui.folder.action"), + globalize("cms.ui.folder.index")}; private static GlobalizedMessage[] s_noIndexHeaders = { globalize("cms.ui.folder.name"), globalize("cms.ui.folder.title"), - globalize("cms.ui.folder.type"), globalize("cms.ui.folder.creation_date"), - globalize("cms.ui.folder.last_modified"), globalize("cms.ui.folder.action") }; - + globalize("cms.ui.folder.type"), + globalize("cms.ui.folder.creation_date"), + globalize("cms.ui.folder.last_modified"), globalize( + "cms.ui.folder.action")}; private static final String SORT_ACTION_UP = "sortActionUp"; private static final String SORT_ACTION_DOWN = "sortActionDown"; - private FolderSelectionModel m_currentFolder; - private TableActionListener m_folderChanger; - private TableActionListener m_deleter; - private TableActionListener m_indexChanger; - private TableColumn m_nameColumn; private TableColumn m_deleteColumn; private TableColumn m_indexColumn; - private final static String SORT_KEY_NAME = "name"; private final static String SORT_KEY_TITLE = "title"; private final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified"; private final static String SORT_KEY_CREATION_DATE = "creationDate"; - private StringParameter m_sortType = new StringParameter("sortType"); private StringParameter m_sortDirection = new StringParameter("sortDirn"); - + private StringParameter m_filter = null; + private FolderManipulator.FilterForm m_filterForm; + private long m_folderSize; + public FolderBrowser(FolderSelectionModel currentFolder) { //super(new FolderTableModelBuilder(), s_headers); super(); m_sortType.setDefaultValue(SORT_KEY_NAME); m_sortDirection.setDefaultValue(SORT_ACTION_UP); - + setModelBuilder(new FolderTableModelBuilder(currentFolder)); - setColumnModel(new DefaultTableColumnModel(hideIndexColumn() ? s_noIndexHeaders : s_headers)); + setColumnModel(new DefaultTableColumnModel(hideIndexColumn() + ? s_noIndexHeaders + : s_headers)); setHeader(new TableHeader(getColumnModel())); // DEE 1/18/02: the folder table model builder needs to know about // 'this' in order to set visibility, but 'this' isn't available @@ -134,38 +133,41 @@ public class FolderBrowser extends Table { // so we break the model builder construction up into two parts, // and pull the foldertablemodelbuilder back with the super class' // accessor. - ((FolderTableModelBuilder)getModelBuilder()).setFolderBrowser(this); - + ((FolderTableModelBuilder) getModelBuilder()).setFolderBrowser(this); + m_currentFolder = currentFolder; - + /* - + This code should be uncommented if the desired behaviour is for a change of folder to cause reversion to default ordering of contained items (by name ascending). Our feeling is that the user selected ordering should be retained for the duration of the folder browsing session. If anyone wants this alternative behaviour it should be brought in under the control of a config parameter. - + m_currentFolder.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - PageState state = e.getPageState(); - state.setValue(m_sortType, m_sortType.getDefaultValue()); - state.setValue(m_sortDirection, m_sortDirection.getDefaultValue()); - - }}); + + public void stateChanged(ChangeEvent e) { + PageState state = e.getPageState(); + state.setValue(m_sortType, m_sortType.getDefaultValue()); + state.setValue(m_sortDirection, m_sortDirection.getDefaultValue()); + + }}); */ setClassAttr("dataTable"); - - getHeader().setDefaultRenderer(new com.arsdigita.cms.ui.util.DefaultTableCellRenderer()); - + + getHeader().setDefaultRenderer( + new com.arsdigita.cms.ui.util.DefaultTableCellRenderer()); + m_nameColumn = getColumn(0); m_nameColumn.setCellRenderer(new NameCellRenderer()); m_nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME)); getColumn(1).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_TITLE)); - getColumn(3).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_CREATION_DATE)); - getColumn(4).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_LAST_MODIFIED_DATE)); + getColumn(3).setHeaderRenderer(new HeaderCellRenderer( + SORT_KEY_CREATION_DATE)); + getColumn(4).setHeaderRenderer(new HeaderCellRenderer( + SORT_KEY_LAST_MODIFIED_DATE)); m_deleteColumn = getColumn(5); m_deleteColumn.setCellRenderer(new ActionCellRenderer()); m_deleteColumn.setAlign("center"); @@ -173,59 +175,60 @@ public class FolderBrowser extends Table { m_indexColumn = getColumn(6); m_indexColumn.setCellRenderer(new IndexToggleRenderer()); m_indexColumn.setAlign("center"); - + m_indexChanger = new IndexChanger(m_currentFolder); addTableActionListener(m_indexChanger); } m_folderChanger = new FolderChanger(); addTableActionListener(m_folderChanger); - + m_deleter = new ItemDeleter(); addTableActionListener(m_deleter); - - + setEmptyView(new Label(globalize("cms.ui.folder.no_items"))); - - Assert.exists( m_currentFolder.getStateParameter() ); + + Assert.exists(m_currentFolder.getStateParameter()); } - + @Override public void register(Page p) { super.register(p); - + p.addComponentStateParam(this, m_currentFolder.getStateParameter()); p.addComponentStateParam(this, m_sortType); p.addComponentStateParam(this, m_sortDirection); p.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { final PageState state = e.getPageState(); - + if (state.isVisibleOnPage(FolderBrowser.this)) { showHideFolderActions(state); } } }); } - + private void showHideFolderActions(PageState state) { SecurityManager sm = Utilities.getSecurityManager(state); Folder folder = (Folder) m_currentFolder.getSelectedObject(state); Assert.exists(folder); - + boolean canDelete = - sm.canAccess(state.getRequest(), SecurityManager.DELETE_ITEM, folder); - + sm.canAccess(state.getRequest(), SecurityManager.DELETE_ITEM, + folder); + m_deleteColumn.setVisible(state, canDelete); } - + @Override public void respond(PageState state) throws ServletException { String key = state.getControlEventName(); String value = state.getControlEventValue(); - if ( SORT_ACTION_UP.equals(key) ) { + if (SORT_ACTION_UP.equals(key)) { state.setValue(m_sortType, value); state.setValue(m_sortDirection, SORT_ACTION_UP); - } else if ( SORT_ACTION_DOWN.equals(key) ) { + } else if (SORT_ACTION_DOWN.equals(key)) { state.setValue(m_sortType, value); state.setValue(m_sortDirection, SORT_ACTION_DOWN); } else { @@ -233,101 +236,141 @@ public class FolderBrowser extends Table { //throw new ServletException("Unknown control event: " + key); } } - + public FolderSelectionModel getFolderSelectionModel() { return m_currentFolder; } - + + protected void setFilterForm(FolderManipulator.FilterForm filterForm) { + m_filterForm = filterForm; + } + + protected void setFilterParameter(StringParameter filter) { + m_filter = filter; + } + + protected long getFolderSize() { + return m_folderSize; + } + private class FolderTableModelBuilder extends AbstractTableModelBuilder implements PaginationModelBuilder { - + private FolderSelectionModel m_folder; private RequestLocal m_size; private RequestLocal m_itemColl; private FolderBrowser m_fb; - + public FolderTableModelBuilder(FolderSelectionModel sel) { this(sel, null); } - - public FolderTableModelBuilder(FolderSelectionModel sel, FolderBrowser fb) { + + public FolderTableModelBuilder(FolderSelectionModel sel, + FolderBrowser fb) { super(); m_folder = sel; m_size = new RequestLocal(); m_itemColl = new RequestLocal(); m_fb = fb; } - + public TableModel makeModel(Table t, PageState s) { - FolderSelectionModel sel = ((FolderBrowser) t).getFolderSelectionModel(); + FolderSelectionModel sel = ((FolderBrowser) t). + getFolderSelectionModel(); Folder f = (Folder) sel.getSelectedObject(s); - if ( f == null ) { + if (f == null) { return Table.EMPTY_MODEL; } else { t.getRowSelectionModel().clearSelection(s); - return new FolderTableModel - ((FolderBrowser) t, s, (Folder.ItemCollection) m_itemColl.get(s)); + s_log.debug(String.format("filter = '%s'", s.getValue(m_filter))); + Folder.ItemCollection itemColl = (Folder.ItemCollection) m_itemColl. + get(s); + s_log.debug(String.format("itemColl.size = %d", itemColl.size())); + /*if (itemColl.size() < 20) { + s_log.debug("Setting filter invisible."); + m_filterForm.setVisible(s, false); + } else { + s_log.debug("Setting filter visible."); + m_filterForm.setVisible(s, true); + }*/ + + + m_folderSize = itemColl.size(); + if (s.getValue(m_filter) != null) { + itemColl.addFilter(String.format( + "lower(name) like lower('%s%%') or lower(displayName) like lower('%s%%')", + s.getValue(m_filter), + s.getValue(m_filter))); + } + return new FolderTableModel((FolderBrowser) t, s, itemColl); + //((FolderBrowser) t, s, (Folder.ItemCollection) m_itemColl.get(s)); } } - + public int getTotalSize(Paginator paginator, PageState state) { - + Integer size = (Integer) m_size.get(state); - + if (size == null) { - + Folder f = (Folder) m_folder.getSelectedObject(state); - + Folder.ItemCollection itemColl = f.getPrimaryInstances(); - + if (itemColl == null) { return 0; } - + + if (state.getValue(m_filter) != null) { + itemColl.addFilter(String.format( + "lower(name) like lower('%s%%') or lower(displayName) like lower('%s%%')", + state.getValue(m_filter), + state.getValue(m_filter))); + } + PermissionService.filterQuery( itemColl, "id", PrivilegeDescriptor.READ, - Kernel.getContext().getParty().getOID() - ); - - size = new Integer( (int) f.getPrimaryInstances().size()); - + Kernel.getContext().getParty().getOID()); + + //size = new Integer((int) f.getPrimaryInstances().size()); + size = new Integer((int) itemColl.size()); + itemColl.setRange(new Integer(paginator.getFirst(state)), - new Integer(paginator.getLast(state) + 1)); - - String sortKey = (String)state.getValue(m_sortType); + new Integer(paginator.getLast(state) + 1)); + + String sortKey = (String) state.getValue(m_sortType); String direction = "asc"; - if (SORT_ACTION_DOWN.equals((String)state.getValue(m_sortDirection))) { + if (SORT_ACTION_DOWN.equals((String) state.getValue( + m_sortDirection))) { direction = "desc"; } - - if ( sortKey.equals(SORT_KEY_TITLE) ) { - itemColl.setOrder("lower(item." + - ContentItem.DISPLAY_NAME + ") " + - direction); - } else if ( sortKey.equals(SORT_KEY_NAME) ) { - itemColl.setOrder("lower(item." + - ContentItem.NAME + ") " + direction); - } else if ( sortKey.equals(SORT_KEY_LAST_MODIFIED_DATE)) { - itemColl.setOrder("item.auditing.lastModifiedDate " + - direction); - } else if ( sortKey.equals(SORT_KEY_CREATION_DATE)) { - itemColl.setOrder("item.auditing.creationDate " + - direction); + + if (sortKey.equals(SORT_KEY_TITLE)) { + itemColl.setOrder("lower(item." + ContentItem.DISPLAY_NAME + + ") " + direction); + } else if (sortKey.equals(SORT_KEY_NAME)) { + itemColl.setOrder("lower(item." + ContentItem.NAME + ") " + + direction); + } else if (sortKey.equals(SORT_KEY_LAST_MODIFIED_DATE)) { + itemColl.setOrder("item.auditing.lastModifiedDate " + + direction); + } else if (sortKey.equals(SORT_KEY_CREATION_DATE)) { + itemColl.setOrder("item.auditing.creationDate " + direction); } - + m_size.set(state, size); m_itemColl.set(state, itemColl); } - + return size.intValue(); } - + public void setFolderBrowser(FolderBrowser fb) { m_fb = fb; } - + /** * Indicates whether the paginator should be visible, * based on the visibility of the folder browser itself. @@ -336,61 +379,62 @@ public class FolderBrowser extends Table { * associated folder browser is unknown. */ public boolean isVisible(PageState state) { - return (m_fb != null)?m_fb.isVisible(state):true; + return (m_fb != null) ? m_fb.isVisible(state) : true; } } - - + private class HeaderCellRenderer extends com.arsdigita.cms.ui.util.DefaultTableCellRenderer { - + private String m_key; - + public HeaderCellRenderer(String key) { super(true); m_key = key; } - + public Component getComponent(final Table table, final PageState state, - Object value, - boolean isSelected, Object key, - int row, int column) { - String headerName = (String)((GlobalizedMessage)value).localize(); - String sortKey = (String)state.getValue(m_sortType); + Object value, + boolean isSelected, Object key, + int row, int column) { + String headerName = (String) ((GlobalizedMessage) value).localize(); + String sortKey = (String) state.getValue(m_sortType); final boolean isCurrentKey = sortKey.equals(m_key); - final String currentSortDirection = (String)state.getValue(m_sortDirection); + final String currentSortDirection = (String) state.getValue( + m_sortDirection); String imageURLStub = null; - + if (SORT_ACTION_UP.equals(currentSortDirection)) { imageURLStub = "gray-triangle-up.gif"; } else { imageURLStub = "gray-triangle-down.gif"; } - - ControlLink cl = new ControlLink(headerName) { + + ControlLink cl = new ControlLink(headerName) { + public void setControlEvent(PageState ps) { String sortDirectionAction = null; // by default, everything sorts "up" unless it // is the current key and it is already pointing up - if (SORT_ACTION_UP.equals(currentSortDirection) && - isCurrentKey) { + if (SORT_ACTION_UP.equals(currentSortDirection) + && isCurrentKey) { sortDirectionAction = SORT_ACTION_DOWN; } else { sortDirectionAction = SORT_ACTION_UP; } ps.setControlEvent(table, - sortDirectionAction, - m_key); + sortDirectionAction, + m_key); } }; Label l = new Label(); l.setLabel("" + headerName + ""); l.setOutputEscaping(false); l.setFontWeight(Label.BOLD); - + SimpleContainer container = new SimpleContainer(); container.add(l); - if ( isCurrentKey ) { + if (isCurrentKey) { Image image = new Image("/assets/" + imageURLStub); image.setBorder("0"); container.add(image); @@ -399,105 +443,112 @@ public class FolderBrowser extends Table { return cl; } } - + /** * Produce links to view an item or control links for folders * to change into the folder. */ private class NameCellRenderer extends DefaultTableCellRenderer { + public NameCellRenderer() { super(true); } - + @Override public Component getComponent(Table table, PageState state, Object value, - boolean isSelected, Object key, - int row, int column) { - + boolean isSelected, Object key, + int row, int column) { + Folder.ItemCollection coll = (Folder.ItemCollection) value; String name = coll.getName(); - if ( coll.isFolder() ) { + if (coll.isFolder()) { return super.getComponent(table, state, name, - isSelected, key, row, column); + isSelected, key, row, column); } else { ContentSection section = CMS.getContext().getContentSection(); BigDecimal id = coll.getID(); - + if (section == null) { return new Label(name); } else { ItemResolver resolver = section.getItemResolver(); - return new Link(name, resolver.generateItemURL - (state, id, name, section, coll.getVersion())); + return new Link(name, resolver.generateItemURL(state, id, + name, section, coll. + getVersion())); } } } } - - + /** * Produce delete links for items and non-empty folders. */ private static class ActionCellRenderer implements TableCellRenderer { + private static Label s_noAction; private static ControlLink s_link; - private static final Logger logger = Logger.getLogger(ActionCellRenderer.class); - + private static final Logger logger = Logger.getLogger( + ActionCellRenderer.class); + static { logger.debug("Static initializer is starting..."); s_noAction = new Label(" ", false); s_noAction.lock(); - s_link = new ControlLink(new Label(globalize("cms.ui.folder.delete"))); + s_link = new ControlLink( + new Label(globalize("cms.ui.folder.delete"))); s_link.setConfirmation("Permanently delete this item?"); // XXX G11N ? logger.debug("Static initializer finished."); } - + public Component getComponent(Table table, PageState state, Object value, - boolean isSelected, Object key, - int row, int column) { - if ( ((Boolean) value).booleanValue() ) { + boolean isSelected, Object key, + int row, int column) { + if (((Boolean) value).booleanValue()) { return s_link; } else { return s_noAction; } } } - + private final class IndexToggleRenderer implements TableCellRenderer { - - public Component getComponent(Table table, PageState state, Object value, boolean isSelected, Object key, int row, int column) { - - if ( value == null ) { + + public Component getComponent(Table table, PageState state, Object value, + boolean isSelected, Object key, int row, + int column) { + + if (value == null) { return new Label(GlobalizationUtil.globalize("cms.ui.folder.na")); } ControlLink link = new ControlLink(""); - + if (((Boolean) value).booleanValue()) { link.setClassAttr("checkBoxChecked"); } else { link.setClassAttr("checkBoxUnchecked"); } - + return link; } } - + // Deletes an item private class ItemDeleter extends TableActionAdapter { + public void cellSelected(TableActionEvent e) { int col = e.getColumn().intValue(); - - if ( m_deleteColumn != getColumn(col) ) { + + if (m_deleteColumn != getColumn(col)) { return; } - + PageState s = e.getPageState(); BigDecimal id = new BigDecimal(e.getRowKey().toString()); - + OID oid = new OID(ContentItem.BASE_DATA_OBJECT_TYPE, id.abs()); - + final DomainObject item = DomainObjectFactory.newInstance(oid); - + if (item != null) { if (item instanceof ContentBundle) { ContentBundle bundle = (ContentBundle) item; @@ -508,15 +559,16 @@ public class FolderBrowser extends Table { } item.delete(); } - + ((Table) e.getSource()).clearSelection(s); } } - + /** * Table model around ItemCollection */ private static class FolderTableModel implements TableModel { + private static final int NAME = 0; private static final int TITLE = 1; private static final int TYPE = 2; @@ -524,43 +576,42 @@ public class FolderBrowser extends Table { private static final int LAST_MODIFIED = 4; private static final int DELETABLE = 5; private static final int IS_INDEX = 6; - private PageState m_state; private FolderBrowser m_table; private Folder.ItemCollection m_itemColl; private Folder m_fol; private BigDecimal m_folIndexID; - + //old constructor before using paginator //public FolderTableModel(Folder folder) { //m_itemColl = folder.getItems(); //} - - public FolderTableModel - (FolderBrowser table, PageState state, Folder.ItemCollection itemColl) { + public FolderTableModel(FolderBrowser table, PageState state, + Folder.ItemCollection itemColl) { m_state = state; m_table = table; m_itemColl = itemColl; - - m_fol = (Folder) table.getFolderSelectionModel().getSelectedObject(state); + + m_fol = (Folder) table.getFolderSelectionModel().getSelectedObject( + state); if (!hideIndexColumn()) { ContentBundle indexItem = m_fol.getIndexItem(); - if ( indexItem == null ) { + if (indexItem == null) { m_folIndexID = null; } else { m_folIndexID = indexItem.getID(); } } } - + public int getColumnCount() { return hideIndexColumn() ? 6 : 7; } - + public boolean nextRow() { return m_itemColl.next(); } - + public Object getElementAt(int columnIndex) { switch (columnIndex) { case NAME: @@ -571,14 +622,15 @@ public class FolderBrowser extends Table { return m_itemColl.getTypeLabel(); case CREATION_DATE: { java.util.Date creationDate = m_itemColl.getCreationDate(); - if ( creationDate == null ) { + if (creationDate == null) { return "--"; } return FormatStandards.formatDate(creationDate); } case LAST_MODIFIED: { - java.util.Date lastModified = m_itemColl.getLastModifiedDate(); - if ( lastModified == null ) { + java.util.Date lastModified = + m_itemColl.getLastModifiedDate(); + if (lastModified == null) { return "--"; } return FormatStandards.formatDate(lastModified); @@ -587,48 +639,50 @@ public class FolderBrowser extends Table { return new Boolean(isDeletable()); case IS_INDEX: { if (hideIndexColumn()) { - throw new IndexOutOfBoundsException("Column index " + columnIndex + - " not in table model."); + throw new IndexOutOfBoundsException( + "Column index " + columnIndex + + " not in table model."); } - if ( m_itemColl.isFolder() ) { + if (m_itemColl.isFolder()) { return null; } - if ( m_folIndexID == null ) { + if (m_folIndexID == null) { return new Boolean(false); } - return new Boolean(m_folIndexID - .compareTo(m_itemColl.getBundleID()) == 0); + return new Boolean(m_folIndexID.compareTo(m_itemColl. + getBundleID()) == 0); } default: - throw new IndexOutOfBoundsException("Column index " + columnIndex + - " not in table model."); + throw new IndexOutOfBoundsException("Column index " + + columnIndex + + " not in table model."); } } - + public boolean isDeletable() { if (s_log.isDebugEnabled()) { s_log.debug("Checking to see if " + this + " is deletable"); } - + if (m_itemColl.isLive()) { if (s_log.isDebugEnabled()) { s_log.debug("The item is live; it cannot be deleted"); } - + return false; } - + if (m_itemColl.isFolder()) { if (!m_itemColl.hasChildren()) { if (s_log.isDebugEnabled()) { - s_log.debug("The item is an empty folder; it may be " + - "deleted"); + s_log.debug("The item is an empty folder; it may be " + + "deleted"); } return true; } else { if (s_log.isDebugEnabled()) { - s_log.debug("The folder is not empty; it cannot be " + - "deleted"); + s_log.debug("The folder is not empty; it cannot be " + + "deleted"); } return false; } @@ -636,58 +690,62 @@ public class FolderBrowser extends Table { if (s_log.isDebugEnabled()) { s_log.debug("The item is not a folder; it may be deleted"); } - + return true; } } - + public Object getKeyAt(int columnIndex) { // Mark folders by using their negative ID (dirty, dirty) - return ( m_itemColl.isFolder() ) ? m_itemColl.getID().negate() - : m_itemColl.getBundleID(); + return (m_itemColl.isFolder()) ? m_itemColl.getID().negate() + : m_itemColl.getBundleID(); } } - + private class FolderChanger extends TableActionAdapter { + public void cellSelected(TableActionEvent e) { PageState s = e.getPageState(); int col = e.getColumn().intValue(); - - if ( m_nameColumn != getColumn(col) ) { + + if (m_nameColumn != getColumn(col)) { return; } String key = (String) e.getRowKey(); - if ( key.startsWith("-") ) { // XXX dirty dirty + if (key.startsWith("-")) { // XXX dirty dirty clearSelection(s); getFolderSelectionModel().setSelectedKey(s, key.substring(1)); } } } - + private class IndexChanger extends TableActionAdapter { - + private FolderSelectionModel m_fol; - + public IndexChanger(FolderSelectionModel fol) { super(); m_fol = fol; } - + public void cellSelected(TableActionEvent e) { PageState state = e.getPageState(); - - BigDecimal rowkey = new BigDecimal((String)e.getRowKey()); - if (rowkey == null){ + + BigDecimal rowkey = new BigDecimal((String) e.getRowKey()); + if (rowkey == null) { return; } - + try { ContentBundle contentItem = new ContentBundle(rowkey); - + Folder folder = (Folder) m_fol.getSelectedObject(state); - - ContentBundle currentIndexItem = (ContentBundle) folder.getIndexItem(); - if ( currentIndexItem == null || (currentIndexItem.getID().compareTo(contentItem.getID()) != 0)) { + + ContentBundle currentIndexItem = (ContentBundle) folder. + getIndexItem(); + if (currentIndexItem == null || (currentIndexItem.getID(). + compareTo(contentItem.getID()) + != 0)) { folder.setIndexItem(contentItem); } else { folder.removeIndexItem(); @@ -698,7 +756,7 @@ public class FolderBrowser extends Table { } } } - + /** * Getting the GlobalizedMessage using a CMS Class targetBundle. * @@ -708,7 +766,7 @@ public class FolderBrowser extends Table { private static GlobalizedMessage globalize(String key) { return FolderManipulator.globalize(key); } - + private static boolean hideIndexColumn() { return ContentSection.getConfig().getHideFolderIndexCheckbox(); } diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderItemPane.java b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderItemPane.java index e333ab71a..de43e2b9a 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderItemPane.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderItemPane.java @@ -70,7 +70,7 @@ import java.util.Map; /** * Encapsulates a {@link FolderManipulator} in order to create a flat * item listing. Also contains a new item form. -2 * + * * @author Stanislav Freidin * @version $Revision: #6 $ $DateTime: 2004/08/17 23:15:09 $ * @version Id: FolderItemPane.java 287 2005-02-22 00:29:02Z sskracic $ diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java index 89074c3ee..c0a13efb1 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java @@ -18,6 +18,7 @@ */ package com.arsdigita.cms.ui.folder; +import com.arsdigita.bebop.ActionLink; import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Container; @@ -37,6 +38,9 @@ import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Tree; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; @@ -49,12 +53,14 @@ import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.OptionGroup; import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.Submit; +import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.ArrayParameter; import com.arsdigita.bebop.parameters.BigDecimalParameter; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.tree.TreeCellRenderer; +import com.arsdigita.cms.CMSGlobalized; import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentSection; @@ -90,33 +96,34 @@ import java.util.Arrays; * @version $Id: FolderManipulator.java 1940 2009-05-29 07:15:05Z terry $ */ public class FolderManipulator extends SimpleContainer - implements FormProcessListener, FormValidationListener, - FormSubmissionListener, Resettable { + implements FormProcessListener, FormValidationListener, + FormSubmissionListener, Resettable { private static Logger s_log = - Logger.getLogger(FolderManipulator.class); - + Logger.getLogger(FolderManipulator.class); public static final String RESOURCE_BUNDLE = - "com.arsdigita.cms.ui.folder.CMSFolderResources"; - + "com.arsdigita.cms.ui.folder.CMSFolderResources"; private static final String MOVE = "Move"; private static final String COPY = "Copy"; - private static final BigDecimal[] EMPTY_ARRAY = new BigDecimal[0]; - private ArrayParameter m_sources; private StringParameter m_action; - // The folder in which the source items live private FolderSelectionModel m_srcFolderSel; private ItemView m_itemView; private TargetSelector m_targetSelector; + private FilterForm m_filterForm; + private StringParameter m_filter = new StringParameter("filter"); public FolderManipulator(FolderSelectionModel folderSel) { m_sources = new ArrayParameter(new BigDecimalParameter("srcs")); m_action = new StringParameter("act"); m_srcFolderSel = folderSel; + s_log.debug("Adding filter form..."); + m_filterForm = new FilterForm(); + add(m_filterForm); + m_itemView = new ItemView(); m_itemView.addProcessListener(this); m_itemView.addValidationListener(this); @@ -133,16 +140,18 @@ public class FolderManipulator extends SimpleContainer public void register(Page p) { super.register(p); p.setVisibleDefault(m_targetSelector, false); + p.setVisibleDefault(m_filterForm, true); p.addComponentStateParam(this, m_sources); p.addComponentStateParam(this, m_action); + p.addComponentStateParam(this, m_filter); } public final BigDecimal[] getSources(PageState s) { BigDecimal[] result = (BigDecimal[]) s.getValue(m_sources); - return (result==null) ? EMPTY_ARRAY : result; + return (result == null) ? EMPTY_ARRAY : result; } - public final FolderSelectionModel getSrcFolderSel () { + public final FolderSelectionModel getSrcFolderSel() { return m_srcFolderSel; } @@ -163,32 +172,31 @@ public class FolderManipulator extends SimpleContainer } protected void moveItems(Folder target, BigDecimal[] items) { - s_log.debug ("moving to folder: " + target + " items: " + items); - for (int i=0; i 0; SecurityManager sm = Utilities.getSecurityManager(s); - if ( e.getSource() == m_itemView ) { - if ( ! hasSources ) { + if (e.getSource() == m_itemView) { + if (!hasSources) { d.addError(globalize("cms.ui.folder.must_select_item")); } - } else if ( e.getSource() == m_targetSelector ) { + } else if (e.getSource() == m_targetSelector) { // The source items must have gotten lost somehow - if ( ! hasSources ) { - throw new IllegalStateException( (String) GlobalizationUtil.globalize("cms.ui.folder.no_source_items_specified").localize()); + if (!hasSources) { + throw new IllegalStateException((String) GlobalizationUtil. + globalize("cms.ui.folder.no_source_items_specified"). + localize()); } Folder target = m_targetSelector.getTarget(s); - if ( target == null ) { + if (target == null) { d.addError(globalize("cms.ui.folder.need_select_target_folder")); } - if ( target.equals(m_srcFolderSel.getSelectedObject(s)) ) { + if (target.equals(m_srcFolderSel.getSelectedObject(s))) { d.addError(globalize("cms.ui.folder.not_within_same_folder")); } // check create item permission User user = Web.getContext().getUser(); - if ( ! sm.canAccess(user, SecurityManager.NEW_ITEM, target) ) { + if (!sm.canAccess(user, SecurityManager.NEW_ITEM, target)) { d.addError(globalize("cms.ui.folder.no_permission_for_item")); } // Per-item checks - for (int i=0; i Component) * SortedMap used because component based hash for page is based on concatenation of @@ -131,48 +124,36 @@ public class Page extends BlockStylable implements Container { */ private SortedMap m_componentMap; private List m_components; - /** * Map of component -> owned parameter collection */ private Map m_componentParameterMap = new HashMap(); - private FormModel m_stateModel; - /** * Container that renders this Page. */ protected Container m_panel; - private List m_actionListeners; - private List m_requestListeners; - /** * The title of the page to be added in the head of HTML output. The * title is wrapped in a Label to allow developers to add * PrintListeners to dynamically change the value of the title. */ private Label m_title; - /** * Stores the actual title for the current request. The title may be * generated with a PrintListener of the m_title Label. */ private RequestLocal m_currentTitle; - /** * A list of all the client-side stylesheets. The elements of the list * are of type Page.Stylesheet, defined at the end of this file. */ private List m_clientStylesheets; - private StringParameter m_selected; - private StringParameter m_controlEvent; - private StringParameter m_controlValue; - /** * The default (initial) visibility of components. The encoding is * identical to that for PageState.m_invisible. @@ -181,18 +162,15 @@ public class Page extends BlockStylable implements Container { * PageState. */ protected BitSet m_invisible; - /** * The PageErrorDisplay component that will display page state validation * errors on this page */ private Component m_errorDisplay; - /** * Indicates whether finish() has been called on this Page. */ private boolean m_finished = false; - /** * indicates whether pageState.stateAsURL() should export the * entire state for this page, or whether it should only export @@ -270,6 +248,7 @@ public class Page extends BlockStylable implements Container { // Initialize the RequestLocal where the title for the current // request will be kept m_currentTitle = new RequestLocal() { + protected Object initialValue(PageState state) { return m_title.firePrintEvent(state); } @@ -289,7 +268,7 @@ public class Page extends BlockStylable implements Container { // Set up the visibility tracking parameters m_invisible = new BitSet(32); - BitSetParameter p = new BitSetParameter(INVISIBLE, + BitSetParameter p = new BitSetParameter(INVISIBLE, BitSetParameter.ENCODE_DGAP); m_stateModel.addFormParam(p); } @@ -542,7 +521,6 @@ public class Page extends BlockStylable implements Container { // Assert.isUnlocked(this); // addClientStylesheet(styleSheetURI, styleSheetType); // } - /** * Adds a client-side stylesheet that should be used in HTML * output. Arbitrarily many client-side stylesheets can be added with @@ -651,11 +629,11 @@ public class Page extends BlockStylable implements Container { m_panel.generateXML(state, page); } - if (Kernel.getConfig().isDebugEnabled() && - debugStructure(state.getRequest()) ) { + if (Kernel.getConfig().isDebugEnabled() && debugStructure(state. + getRequest())) { Element structure = - page.newChildElement("bebop:structure", BEBOP_XML_NS); + page.newChildElement("bebop:structure", BEBOP_XML_NS); showStructure(state, structure); } @@ -687,7 +665,7 @@ public class Page extends BlockStylable implements Container { */ public PageState process(HttpServletRequest request, HttpServletResponse response) - throws ServletException { + throws ServletException { PageState result = new PageState(this, request, response); try { @@ -746,7 +724,6 @@ public class Page extends BlockStylable implements Container { // PageState state = process(req, res); // return state; // } - /** * Builds a DOM Document from the current request state by * doing a depth-first tree walk on the current set of components @@ -760,7 +737,7 @@ public class Page extends BlockStylable implements Container { */ public Document buildDocument(HttpServletRequest req, HttpServletResponse res) - throws ServletException { + throws ServletException { try { Document doc = new Document(); PageState state = process(req, res); @@ -797,6 +774,7 @@ public class Page extends BlockStylable implements Container { Assert.isUnlocked(this); Traversal componentRegistrar = new Traversal() { + protected void act(Component c) { addComponent(c); c.register(Page.this); @@ -949,7 +927,8 @@ public class Page extends BlockStylable implements Container { } public void generateXML(Element parent) { - Element style = parent.newChildElement("bebop:stylesheet", BEBOP_XML_NS); + Element style = parent.newChildElement("bebop:stylesheet", + BEBOP_XML_NS); style.addAttribute("href", m_URI); if (m_type != null) { style.addAttribute("type", m_type); @@ -977,8 +956,8 @@ public class Page extends BlockStylable implements Container { } if (m_componentMap.get(key) != null) { throw new IllegalArgumentException( - "Component key must not be duplicated. The key " + - key + " is shared by more than one component."); + "Component key must not be duplicated. The key " + key + + " is shared by more than one component."); } m_componentMap.put(key, c); m_components.add(c); @@ -1005,15 +984,18 @@ public class Page extends BlockStylable implements Container { public void addComponentStateParam(Component c, ParameterModel p) { Assert.isUnlocked(this); - if ( ! stateContains(c)) { - throw new IllegalArgumentException - ("Component must be registered in Page"); + if (!stateContains(c)) { + throw new IllegalArgumentException( + "Component must be registered in Page"); } - if ( ! m_stateModel.containsFormParam(p) ) { - p.setName(parameterName(c, p.getName())); + if (!m_stateModel.containsFormParam(p)) { + String name = parameterName(c, p.getName()); + s_log.debug(String.format("Setting name of parameter to add to '%s'", + name)); + p.setName(name); m_stateModel.addFormParam(p); - Collection params = (Collection)m_componentParameterMap.get(c); + Collection params = (Collection) m_componentParameterMap.get(c); if (params == null) { params = new ArrayList(); m_componentParameterMap.put(c, params); @@ -1029,7 +1011,6 @@ public class Page extends BlockStylable implements Container { return (Collection) m_componentParameterMap.get(c); } - /** * Gets the state index of a component. This is the number assigned * to the component in the register traveral @@ -1181,7 +1162,6 @@ public class Page extends BlockStylable implements Container { resetter.preorder(cmpnt); } - /** * Return the prefix that is prepended to each component's state * parameters to keep them unique. @@ -1193,13 +1173,13 @@ public class Page extends BlockStylable implements Container { // WRS: preferentially use key if it exists String key = c.getKey(); if (key == null) { - if ( stateContains(c) ) { + if (stateContains(c)) { key = String.valueOf(stateIndex(c)); } else { - throw new IllegalArgumentException - ("Cannot generate prefix for component: key is null " - + "and component " + c.toString() + "/" + c.getKey() - + " did not register with page."); + throw new IllegalArgumentException( + "Cannot generate prefix for component: key is null " + + "and component " + c.toString() + "/" + c.getKey() + + " did not register with page."); } } return COMPONENT_PREFIX + key + DELIMITER; @@ -1213,7 +1193,7 @@ public class Page extends BlockStylable implements Container { * @return the unmangled name. */ private static final String unmangle(String name) { - if ( ! name.startsWith(COMPONENT_PREFIX) ) { + if (!name.startsWith(COMPONENT_PREFIX)) { return name; } // Find the second occurence of delimiter @@ -1223,9 +1203,7 @@ public class Page extends BlockStylable implements Container { } return name; } - // Procs for debugging output - private static String NAME = "name"; /** @@ -1316,25 +1294,26 @@ public class Page extends BlockStylable implements Container { * by implementations of hashCode & equals * @return */ - public String getComponentString () { - Iterator it = m_componentMap.keySet().iterator(); - /*int hash = 0; - while (it.hasNext()) { - String componentId = (String)it.next(); - s_log.debug("component id = " + componentId); - hash = hash | componentId.hashCode(); - s_log.debug("hash so far = " + hash); - }*/ - Date start = new Date(); - - StringBuffer hashString = new StringBuffer(); - while (it.hasNext()) { - String componentId = (String)it.next(); - hashString.append(componentId); - } - s_log.debug("Time to create hashCode for page: " + (new Date().getTime() - start.getTime())); - return hashString.toString(); - - + public String getComponentString() { + Iterator it = m_componentMap.keySet().iterator(); + /*int hash = 0; + while (it.hasNext()) { + String componentId = (String)it.next(); + s_log.debug("component id = " + componentId); + hash = hash | componentId.hashCode(); + s_log.debug("hash so far = " + hash); + }*/ + Date start = new Date(); + + StringBuffer hashString = new StringBuffer(); + while (it.hasNext()) { + String componentId = (String) it.next(); + hashString.append(componentId); + } + s_log.debug("Time to create hashCode for page: " + (new Date().getTime() - start. + getTime())); + return hashString.toString(); + + } } diff --git a/ccm-core/src/com/arsdigita/toolbox/ui/DomainObjectPropertySheet.java b/ccm-core/src/com/arsdigita/toolbox/ui/DomainObjectPropertySheet.java index fc0e53aaa..d7b826da2 100755 --- a/ccm-core/src/com/arsdigita/toolbox/ui/DomainObjectPropertySheet.java +++ b/ccm-core/src/com/arsdigita/toolbox/ui/DomainObjectPropertySheet.java @@ -74,8 +74,8 @@ import com.arsdigita.toolbox.util.GlobalizationUtil; */ public class DomainObjectPropertySheet extends PropertySheet { - public static final String versionId = "$Id: DomainObjectPropertySheet.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/16 18:10:38 $"; - + public static final String versionId = + "$Id: DomainObjectPropertySheet.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/16 18:10:38 $"; private List m_props; private DomainObjectSelectionModel m_objModel; private AttributeFormatter m_toStringFormatter; @@ -102,8 +102,7 @@ public class DomainObjectPropertySheet extends PropertySheet { * */ public DomainObjectPropertySheet( - DomainObjectSelectionModel objModel, boolean valueOutputEscape - ) { + DomainObjectSelectionModel objModel, boolean valueOutputEscape) { super(new DomainObjectModelBuilder(), valueOutputEscape); m_objModel = objModel; @@ -142,7 +141,7 @@ public class DomainObjectPropertySheet extends PropertySheet { public void add(GlobalizedMessage label, String attribute) { // Determine if we are dealing with a simple string or a complex // path - if(attribute.indexOf('.') == -1) { + if (attribute.indexOf('.') == -1) { add(label, attribute, m_toStringFormatter); } else { add(label, attribute, m_recursiveFormatter); @@ -172,7 +171,8 @@ public class DomainObjectPropertySheet extends PropertySheet { * @param attribute The name for the attribute * @param formatter An instance of AttributeFormatter */ - public void add(GlobalizedMessage label, String attribute, AttributeFormatter f) { + public void add(GlobalizedMessage label, String attribute, + AttributeFormatter f) { m_props.add(new Property(label, attribute, f)); } @@ -225,28 +225,36 @@ public class DomainObjectPropertySheet extends PropertySheet { /** * @deprecated use getGlobalizedLabel instead */ - public String getLabel() { return m_label.getKey(); } + public String getLabel() { + return m_label.getKey(); + } - public GlobalizedMessage getGlobalizedLabel() { return m_label; } + public GlobalizedMessage getGlobalizedLabel() { + return m_label; + } - public String getAttribute() { return m_attr; } + public String getAttribute() { + return m_attr; + } - public AttributeFormatter getFormatter() { return m_formatter; } + public AttributeFormatter getFormatter() { + return m_formatter; + } } // Build up the object properties model from the iterator over all properties - private static class DomainObjectPropertiesModel implements PropertySheetModel { + private static class DomainObjectPropertiesModel implements + PropertySheetModel { private DomainObject m_obj; private PageState m_state; private Iterator m_props; private Property m_current; private static String ERROR = - "No current property. Make sure that nextRow() was called at least once."; + "No current property. Make sure that nextRow() was called at least once."; public DomainObjectPropertiesModel( - DomainObject obj, Iterator props, PageState state - ) { + DomainObject obj, Iterator props, PageState state) { m_obj = obj; m_props = props; m_state = state; @@ -254,11 +262,11 @@ public class DomainObjectPropertySheet extends PropertySheet { } public boolean nextRow() { - if(!m_props.hasNext()) { + if (!m_props.hasNext()) { return false; } - m_current = (Property)m_props.next(); + m_current = (Property) m_props.next(); return true; } @@ -270,39 +278,39 @@ public class DomainObjectPropertySheet extends PropertySheet { } public GlobalizedMessage getGlobalizedLabel() { - if(m_current == null) { + if (m_current == null) { throw new IllegalStateException(ERROR); } return m_current.getGlobalizedLabel(); } public String getValue() { - if(m_current == null) { + if (m_current == null) { throw new IllegalStateException(ERROR); } - return m_current.getFormatter() - .format(m_obj, m_current.getAttribute(), m_state); + return m_current.getFormatter().format(m_obj, + m_current.getAttribute(), + m_state); } } // Builds an DomainObjectPropertiesModel private static class DomainObjectModelBuilder extends LockableImpl - implements PropertySheetModelBuilder { + implements PropertySheetModelBuilder { public PropertySheetModel makeModel(PropertySheet sheet, PageState state) { - DomainObjectPropertySheet s = (DomainObjectPropertySheet)sheet; - return new DomainObjectPropertiesModel ( - s.getObjectSelectionModel().getSelectedObject(state), - s.properties(), - state - ); + DomainObjectPropertySheet s = (DomainObjectPropertySheet) sheet; + return new DomainObjectPropertiesModel( + s.getObjectSelectionModel().getSelectedObject(state), + s.properties(), + state); } } // Abstract formatter which maintains a "default" string private static abstract class DefaultAttributeFormatter - extends DomainService - implements AttributeFormatter { + extends DomainService + implements AttributeFormatter { private String m_default; @@ -322,7 +330,7 @@ public class DomainObjectPropertySheet extends PropertySheet { // A simple attribute formatter that calls get on the object with the // specified attribute private static class SimpleAttributeFormatter - extends DefaultAttributeFormatter { + extends DefaultAttributeFormatter { public SimpleAttributeFormatter() { super(); @@ -333,11 +341,13 @@ public class DomainObjectPropertySheet extends PropertySheet { } public String format(DomainObject obj, String attribute, PageState state) { - if(obj == null) return getDefaultString(); + if (obj == null) { + return getDefaultString(); + } Object value = get(obj, attribute); - if(value == null) { + if (value == null) { return getDefaultString(); } else { return value.toString(); @@ -349,9 +359,8 @@ public class DomainObjectPropertySheet extends PropertySheet { // by following the names in the attribute string. For example, if // the string says "foo.bar.baz", the formatter will attempt to call // obj.get("foo").get("bar").get("baz"); - private static class RecursiveAttributeFormatter - extends DefaultAttributeFormatter { + extends DefaultAttributeFormatter { public RecursiveAttributeFormatter() { super(); @@ -362,26 +371,31 @@ public class DomainObjectPropertySheet extends PropertySheet { } public String format(DomainObject obj, String attribute, PageState state) { - if(obj == null) return getDefaultString(); + if (obj == null) { + return getDefaultString(); + } StringTokenizer tokenizer = new StringTokenizer(attribute, "."); String token = null; Object value = getDataObject(obj); - while(tokenizer.hasMoreTokens()) { + while (tokenizer.hasMoreTokens()) { token = tokenizer.nextToken(); // Null check - value = ((DataObject)value).get(token); - if(value == null) + value = ((DataObject) value).get(token); + if (value == null) { return getDefaultString(); + } } // Extract leaf value - if(token == null || value == null) + if (token == null || value == null) { return getDefaultString(); + } return value.toString(); } } + } 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 1ffa775ab..5b95788b9 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 @@ -34,6 +34,7 @@ import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil; import com.arsdigita.cms.ui.authoring.BasicPageForm; import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; import com.arsdigita.domain.DomainObject; +import com.arsdigita.domain.DomainService; import java.text.DateFormat; /** @@ -65,7 +66,7 @@ public class PublicationPropertiesStep extends SimpleEditStep { sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.publication.name"), - Publication.NAME); + Publication.NAME); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.publication.title"), Publication.TITLE); @@ -74,7 +75,8 @@ public class PublicationPropertiesStep extends SimpleEditStep { Publication.YEAR_OF_PUBLICATION); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.publication.abstract"), - Publication.ABSTRACT); + Publication.ABSTRACT, + new PreFormattedTextFormatter()); sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.publication.misc"), Publication.MISC); @@ -132,7 +134,7 @@ public class PublicationPropertiesStep extends SimpleEditStep { protected void addSteps(ItemSelectionModel itemModel, AuthoringKitWizard parent) { addStep(new PublicationAuthorsPropertyStep(itemModel, parent), - "publications.ui.publication.authors"); + "publications.ui.publication.authors"); addStep(new PublicationSeriesPropertyStep(itemModel, parent), "publications.ui.publication.series"); } @@ -143,4 +145,18 @@ public class PublicationPropertiesStep extends SimpleEditStep { labelKey).localize()), step); } + + private static class PreFormattedTextFormatter + extends DomainService + implements DomainObjectPropertySheet.AttributeFormatter { + + public PreFormattedTextFormatter() { + super(); + } + + public String format(DomainObject obj, String attribute, PageState state) { + return String.format("
%s
", get(obj, attribute)); + } + } + }