- Neue Version des DaBIn-Importers:
- Autoren werden jetzt in der für Publikationen vorgesehen Contentsection angelegt - Import der Verlage hoffentlich korrigiert - A to Z Leiste für Folder im Content-Center. Wird derzeit immer angezeigt, Ausblenden bei unterschreiten einer bestimmten Anzahl von Items funktioniert noch nicht und wahrscheinlich auch nicht ohne größere Umbauten an FolderManipulator und FolderBrowser möglich. - Abstract bei den Publikationen wird jetzt im Propertysheet mit Zeilenumbrüchen etc. (wie im TextArea eingegeben) angezeigt. git-svn-id: https://svn.libreccm.org/ccm/trunk@827 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
2279dd49b5
commit
401bb5670c
|
|
@ -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");
|
||||
|
||||
|
|
@ -1520,7 +1534,7 @@ public class DaBInImporter extends Program {
|
|||
personEn.setContentSection(section);
|
||||
|
||||
Folder folder = null;
|
||||
switch(type) {
|
||||
switch (type) {
|
||||
case MEMBER:
|
||||
folder = members;
|
||||
break;
|
||||
|
|
@ -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));
|
||||
|
|
@ -2889,6 +2923,9 @@ public class DaBInImporter extends Program {
|
|||
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());
|
||||
}
|
||||
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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=
|
||||
|
|
|
|||
|
|
@ -81,40 +81,37 @@ import javax.servlet.ServletException;
|
|||
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);
|
||||
|
|
@ -123,7 +120,9 @@ public class FolderBrowser extends Table {
|
|||
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,7 +133,7 @@ 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;
|
||||
|
||||
|
|
@ -149,23 +148,26 @@ public class FolderBrowser extends Table {
|
|||
|
||||
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");
|
||||
|
|
@ -183,10 +185,9 @@ public class FolderBrowser extends Table {
|
|||
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
|
||||
|
|
@ -197,6 +198,7 @@ public class FolderBrowser extends Table {
|
|||
p.addComponentStateParam(this, m_sortType);
|
||||
p.addComponentStateParam(this, m_sortDirection);
|
||||
p.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
final PageState state = e.getPageState();
|
||||
|
||||
|
|
@ -213,7 +215,8 @@ public class FolderBrowser extends Table {
|
|||
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);
|
||||
}
|
||||
|
|
@ -222,10 +225,10 @@ public class FolderBrowser extends Table {
|
|||
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 {
|
||||
|
|
@ -238,6 +241,18 @@ public class FolderBrowser extends Table {
|
|||
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 {
|
||||
|
||||
|
|
@ -250,7 +265,8 @@ public class FolderBrowser extends Table {
|
|||
this(sel, null);
|
||||
}
|
||||
|
||||
public FolderTableModelBuilder(FolderSelectionModel sel, FolderBrowser fb) {
|
||||
public FolderTableModelBuilder(FolderSelectionModel sel,
|
||||
FolderBrowser fb) {
|
||||
super();
|
||||
m_folder = sel;
|
||||
m_size = new RequestLocal();
|
||||
|
|
@ -259,14 +275,35 @@ public class FolderBrowser extends Table {
|
|||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -284,37 +321,43 @@ public class FolderBrowser extends Table {
|
|||
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()
|
||||
);
|
||||
Kernel.getContext().getParty().getOID());
|
||||
|
||||
size = new Integer( (int) f.getPrimaryInstances().size());
|
||||
//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));
|
||||
new Integer(paginator.getLast(state) + 1));
|
||||
|
||||
String sortKey = (String)state.getValue(m_sortType);
|
||||
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);
|
||||
|
|
@ -336,11 +379,10 @@ 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 {
|
||||
|
||||
|
|
@ -352,13 +394,14 @@ public class FolderBrowser extends Table {
|
|||
}
|
||||
|
||||
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)) {
|
||||
|
|
@ -367,20 +410,21 @@ public class FolderBrowser extends Table {
|
|||
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();
|
||||
|
|
@ -390,7 +434,7 @@ public class FolderBrowser extends Table {
|
|||
|
||||
SimpleContainer container = new SimpleContainer();
|
||||
container.add(l);
|
||||
if ( isCurrentKey ) {
|
||||
if (isCurrentKey) {
|
||||
Image image = new Image("/assets/" + imageURLStub);
|
||||
image.setBorder("0");
|
||||
container.add(image);
|
||||
|
|
@ -405,20 +449,21 @@ public class FolderBrowser extends Table {
|
|||
* 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();
|
||||
|
|
@ -427,35 +472,38 @@ public class FolderBrowser extends Table {
|
|||
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;
|
||||
|
|
@ -465,9 +513,11 @@ public class FolderBrowser extends Table {
|
|||
|
||||
private final class IndexToggleRenderer implements TableCellRenderer {
|
||||
|
||||
public Component getComponent(Table table, PageState state, Object value, boolean isSelected, Object key, int row, int column) {
|
||||
public Component getComponent(Table table, PageState state, Object value,
|
||||
boolean isSelected, Object key, int row,
|
||||
int column) {
|
||||
|
||||
if ( value == null ) {
|
||||
if (value == null) {
|
||||
return new Label(GlobalizationUtil.globalize("cms.ui.folder.na"));
|
||||
}
|
||||
ControlLink link = new ControlLink("");
|
||||
|
|
@ -484,10 +534,11 @@ public class FolderBrowser extends Table {
|
|||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
|
@ -517,6 +568,7 @@ public class FolderBrowser extends Table {
|
|||
* 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,7 +576,6 @@ 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;
|
||||
|
|
@ -535,17 +586,17 @@ public class FolderBrowser extends Table {
|
|||
//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();
|
||||
|
|
@ -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,21 +639,23 @@ 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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -621,14 +675,14 @@ public class FolderBrowser extends Table {
|
|||
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;
|
||||
}
|
||||
|
|
@ -643,21 +697,22 @@ public class FolderBrowser extends Table {
|
|||
|
||||
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));
|
||||
}
|
||||
|
|
@ -676,8 +731,8 @@ public class FolderBrowser extends Table {
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -686,8 +741,11 @@ public class FolderBrowser extends Table {
|
|||
|
||||
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();
|
||||
|
|
|
|||
|
|
@ -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 <a href="mailto:sfreidin@arsdigita.com">Stanislav Freidin</a>
|
||||
* @version $Revision: #6 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version Id: FolderItemPane.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
|
|
|
|||
|
|
@ -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<items.length; i++ ) {
|
||||
s_log.debug("moving to folder: " + target + " items: " + items);
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
try {
|
||||
ContentItem item = new ContentItem(items[i]);
|
||||
item.setParent(target);
|
||||
item.save();
|
||||
} catch(DataObjectNotFoundException e) {
|
||||
s_log.warn ("object not found in content move", e);
|
||||
throw new IllegalStateException
|
||||
((String) globalize("cms.ui.folder.no_such_item").localize());
|
||||
} catch (DataObjectNotFoundException e) {
|
||||
s_log.warn("object not found in content move", e);
|
||||
throw new IllegalStateException((String) globalize(
|
||||
"cms.ui.folder.no_such_item").localize());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected void copyItems(final Folder target,
|
||||
final BigDecimal[] items) {
|
||||
if (s_log.isDebugEnabled()) {
|
||||
s_log.debug("Copying items " + Arrays.asList(items) + " to " +
|
||||
target);
|
||||
s_log.debug("Copying items " + Arrays.asList(items) + " to "
|
||||
+ target);
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
ContentItem item = (ContentItem) DomainObjectFactory.newInstance
|
||||
(new OID(ContentItem.BASE_DATA_OBJECT_TYPE, items[i]));
|
||||
ContentItem item = (ContentItem) DomainObjectFactory.newInstance(new OID(
|
||||
ContentItem.BASE_DATA_OBJECT_TYPE, items[i]));
|
||||
|
||||
Assert.exists(item, ContentItem.class);
|
||||
|
||||
|
|
@ -232,18 +240,18 @@ public class FolderManipulator extends SimpleContainer
|
|||
@Override
|
||||
public void process(FormSectionEvent e) {
|
||||
PageState s = e.getPageState();
|
||||
if ( e.getSource() == m_itemView ) {
|
||||
if (e.getSource() == m_itemView) {
|
||||
m_itemView.setVisible(s, false);
|
||||
m_targetSelector.setVisible(s, true);
|
||||
m_targetSelector.expose(s);
|
||||
} else if ( e.getSource() == m_targetSelector ) {
|
||||
} else if (e.getSource() == m_targetSelector) {
|
||||
m_itemView.setVisible(s, true);
|
||||
m_targetSelector.setVisible(s, false);
|
||||
Folder f = m_targetSelector.getTarget(s);
|
||||
BigDecimal[] items = getSources(s);
|
||||
if ( isCopy(s) ) {
|
||||
if (isCopy(s)) {
|
||||
copyItems(f, items);
|
||||
} else if ( isMove(s) ) {
|
||||
} else if (isMove(s)) {
|
||||
moveItems(f, items);
|
||||
}
|
||||
reset(s);
|
||||
|
|
@ -261,29 +269,31 @@ public class FolderManipulator extends SimpleContainer
|
|||
boolean hasSources = sources.length > 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<sources.length; i++ ) {
|
||||
for (int i = 0; i < sources.length; i++) {
|
||||
try {
|
||||
item = new ContentItem(sources[i]);
|
||||
name = item.getName();
|
||||
|
|
@ -291,20 +301,26 @@ public class FolderManipulator extends SimpleContainer
|
|||
items.addNameFilter(name);
|
||||
if (items.next()) {
|
||||
// there is an item in the target folder that already has this name
|
||||
d.addError((String) globalize("cms.ui.folder.item_already_exists").localize() + name);
|
||||
d.addError((String) globalize(
|
||||
"cms.ui.folder.item_already_exists").localize()
|
||||
+ name);
|
||||
}
|
||||
items.close();
|
||||
|
||||
if (item.isLive() && isMove(s)) {
|
||||
d.addError(name + (String) globalize("cms.ui.folder.item_is_live").localize());
|
||||
d.addError(name + (String) globalize(
|
||||
"cms.ui.folder.item_is_live").localize());
|
||||
}
|
||||
if ( (! sm.canAccess(user, SecurityManager.DELETE_ITEM, item)) && isMove(s) ) {
|
||||
d.addError((String) globalize("cms.ui.folder.no_permission_for_item").localize() + name + ".");
|
||||
if ((!sm.canAccess(user, SecurityManager.DELETE_ITEM, item)) && isMove(
|
||||
s)) {
|
||||
d.addError((String) globalize(
|
||||
"cms.ui.folder.no_permission_for_item").localize()
|
||||
+ name + ".");
|
||||
}
|
||||
} catch(DataObjectNotFoundException exc) {
|
||||
s_log.warn ("object not found in validation", exc);
|
||||
throw new IllegalStateException
|
||||
((String) globalize("cms.ui.folder.no_such_item").localize());
|
||||
} catch (DataObjectNotFoundException exc) {
|
||||
s_log.warn("object not found in validation", exc);
|
||||
throw new IllegalStateException((String) globalize(
|
||||
"cms.ui.folder.no_such_item").localize());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -312,11 +328,12 @@ public class FolderManipulator extends SimpleContainer
|
|||
|
||||
@Override
|
||||
public void submitted(FormSectionEvent e)
|
||||
throws FormProcessException {
|
||||
throws FormProcessException {
|
||||
PageState s = e.getPageState();
|
||||
if ( m_targetSelector.isCancelled(s) ) {
|
||||
if (m_targetSelector.isCancelled(s)) {
|
||||
reset(s);
|
||||
throw new FormProcessException( (String) GlobalizationUtil.globalize("cms.ui.folder.cancelled").localize());
|
||||
throw new FormProcessException((String) GlobalizationUtil.globalize(
|
||||
"cms.ui.folder.cancelled").localize());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -332,10 +349,10 @@ public class FolderManipulator extends SimpleContainer
|
|||
|
||||
// The form containing the tree to select the target folder from
|
||||
private class TargetSelector extends Form
|
||||
implements Resettable {
|
||||
implements Resettable {
|
||||
|
||||
private FolderSelectionModel m_targetSel;
|
||||
private FolderTree m_folderTree;
|
||||
|
||||
private Submit m_cancel;
|
||||
|
||||
public TargetSelector() {
|
||||
|
|
@ -343,7 +360,7 @@ public class FolderManipulator extends SimpleContainer
|
|||
setMethod(GET);
|
||||
m_targetSel = new FolderSelectionModel("target");
|
||||
m_folderTree = new FolderTree(m_targetSel);
|
||||
m_folderTree.setCellRenderer (new FolderTreeCellRenderer());
|
||||
m_folderTree.setCellRenderer(new FolderTreeCellRenderer());
|
||||
|
||||
Label l = new Label(new PrintListener() {
|
||||
@Override
|
||||
|
|
@ -365,7 +382,8 @@ public class FolderManipulator extends SimpleContainer
|
|||
" " + msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
l.setOutputEscaping(false);
|
||||
add(l);
|
||||
add(m_folderTree);
|
||||
|
|
@ -384,8 +402,8 @@ public class FolderManipulator extends SimpleContainer
|
|||
// Set things up the first time the selector gets visible
|
||||
public void expose(PageState s) {
|
||||
Folder f = (Folder) m_srcFolderSel.getSelectedObject(s);
|
||||
m_targetSel.clearSelection (s);
|
||||
if ( f != null ) {
|
||||
m_targetSel.clearSelection(s);
|
||||
if (f != null) {
|
||||
ItemCollection i = f.getPathInfo(true);
|
||||
while (i.next()) {
|
||||
m_folderTree.expand(i.getID().toString(), s);
|
||||
|
|
@ -414,14 +432,12 @@ public class FolderManipulator extends SimpleContainer
|
|||
|
||||
// The form containing the browser and the drop down for selecting an
|
||||
// action
|
||||
private class ItemView extends Form
|
||||
implements Resettable {
|
||||
private class ItemView extends Form implements Resettable {
|
||||
|
||||
private FolderBrowser m_browser;
|
||||
private Paginator m_paginator;
|
||||
|
||||
private OptionGroup m_checkboxGroup;
|
||||
private SingleSelect m_actionSel;
|
||||
|
||||
private Submit m_submit;
|
||||
|
||||
public ItemView() {
|
||||
|
|
@ -435,9 +451,12 @@ public class FolderManipulator extends SimpleContainer
|
|||
group.setSubject(panel);
|
||||
|
||||
m_browser = new FolderBrowser(m_srcFolderSel);
|
||||
m_paginator = new Paginator
|
||||
((PaginationModelBuilder)m_browser.getModelBuilder(),
|
||||
ContentSection.getConfig().getFolderBrowseListSize());
|
||||
m_browser.setFilterParameter(m_filter);
|
||||
m_browser.setFilterForm(m_filterForm);
|
||||
m_paginator = new Paginator((PaginationModelBuilder) m_browser.
|
||||
getModelBuilder(),
|
||||
ContentSection.getConfig().
|
||||
getFolderBrowseListSize());
|
||||
panel.add(m_paginator);
|
||||
panel.add(m_browser);
|
||||
|
||||
|
|
@ -451,8 +470,10 @@ public class FolderManipulator extends SimpleContainer
|
|||
|
||||
c.add(new Label(globalize("cms.ui.folder.edit_selection")));
|
||||
m_actionSel = new SingleSelect(m_action);
|
||||
m_actionSel.addOption(new Option(COPY, new Label(globalize("cms.ui.folder.copy"))));
|
||||
m_actionSel.addOption(new Option(MOVE, new Label(globalize("cms.ui.folder.move"))));
|
||||
m_actionSel.addOption(new Option(COPY, new Label(globalize(
|
||||
"cms.ui.folder.copy"))));
|
||||
m_actionSel.addOption(new Option(MOVE, new Label(globalize(
|
||||
"cms.ui.folder.move"))));
|
||||
c.add(m_actionSel);
|
||||
m_submit = new Submit("Go", globalize("cms.ui.folder.go"));
|
||||
c.add(m_submit);
|
||||
|
|
@ -472,6 +493,7 @@ public class FolderManipulator extends SimpleContainer
|
|||
m_checkboxGroup.setValue(s, null);
|
||||
m_actionSel.setValue(s, null);
|
||||
m_paginator.reset(s);
|
||||
s.setValue(m_filter, null);
|
||||
}
|
||||
|
||||
// The renderer for the first column in the itemView table
|
||||
|
|
@ -481,13 +503,83 @@ public class FolderManipulator extends SimpleContainer
|
|||
boolean isSelected, Object key,
|
||||
int row, int column) {
|
||||
BigDecimal n = (BigDecimal) key;
|
||||
Option result = new Option(m_sources.marshalElement(n.abs()), "");
|
||||
Option result =
|
||||
new Option(m_sources.marshalElement(n.abs()), "");
|
||||
result.setGroup(m_checkboxGroup);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected class FilterForm extends Form implements FormProcessListener,
|
||||
FormInitListener,
|
||||
FormSubmissionListener {
|
||||
|
||||
private SimpleContainer panel;
|
||||
|
||||
public FilterForm() {
|
||||
super("folderFilterForm");
|
||||
// m_browser = browser;
|
||||
|
||||
s_log.debug("Creating filter form...");
|
||||
|
||||
addProcessListener(this);
|
||||
addInitListener(this);
|
||||
addSubmissionListener(this);
|
||||
|
||||
panel = new BoxPanel(BoxPanel.HORIZONTAL);
|
||||
|
||||
ActionLink allLink = new ActionLink((String)globalize(
|
||||
"cms.ui.folder.filter.all").localize());
|
||||
allLink.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
event.getPageState().setValue(m_filter, "");
|
||||
}
|
||||
});
|
||||
panel.add(allLink);
|
||||
|
||||
for (char c = 'A';
|
||||
c <= 'Z'; c++) {
|
||||
final char lowerCaseChar = Character.toLowerCase(c);
|
||||
ActionLink link = new ActionLink(Character.toString(c));
|
||||
link.addActionListener(new ActionListener() {
|
||||
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
event.getPageState().setValue(m_filter,
|
||||
Character.toString(
|
||||
lowerCaseChar));
|
||||
}
|
||||
});
|
||||
panel.add(link);
|
||||
}
|
||||
|
||||
/*panel.add(new Label("filter"));
|
||||
panel.add(new TextField(m_filter));
|
||||
panel.add(new Submit("filterFolderSubmit", "filter"));*/
|
||||
|
||||
add(panel);
|
||||
|
||||
}
|
||||
|
||||
public void process(FormSectionEvent fse) throws FormProcessException {
|
||||
}
|
||||
|
||||
public void init(FormSectionEvent fse) throws FormProcessException {
|
||||
}
|
||||
|
||||
public void submitted(FormSectionEvent fse) throws FormProcessException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(PageState state, boolean visible) {
|
||||
s_log.debug("Setting visible to..." + visible);
|
||||
panel.setVisible(state, visible);
|
||||
super.setVisible(state, visible);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Getting the GlobalizedMessage using a CMS Class targetBundle.
|
||||
*
|
||||
|
|
@ -498,7 +590,6 @@ public class FolderManipulator extends SimpleContainer
|
|||
return new GlobalizedMessage(key, RESOURCE_BUNDLE);
|
||||
}
|
||||
|
||||
|
||||
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
||||
|
||||
private RequestLocal m_invalidFolders = new RequestLocal();
|
||||
|
|
@ -523,13 +614,13 @@ public class FolderManipulator extends SimpleContainer
|
|||
invalidFolders = new ArrayList();
|
||||
|
||||
DataCollection collection =
|
||||
SessionManager.getSession().retrieve
|
||||
(ContentItem.BASE_DATA_OBJECT_TYPE);
|
||||
SessionManager.getSession().retrieve(
|
||||
ContentItem.BASE_DATA_OBJECT_TYPE);
|
||||
CompoundFilter filter = collection.getFilterFactory().or();
|
||||
// The sources themselves are not valid.
|
||||
BigDecimal[] sources = getSources(state);
|
||||
for (int i = 0; i < sources.length; i++) {
|
||||
invalidFolders.add (sources[i].toString());
|
||||
invalidFolders.add(sources[i].toString());
|
||||
|
||||
Filter temp = filter.addFilter("id = :id" + i);
|
||||
temp.set("id" + i, sources[i]);
|
||||
|
|
@ -537,14 +628,15 @@ public class FolderManipulator extends SimpleContainer
|
|||
collection.addFilter(filter);
|
||||
|
||||
DataCollection folders =
|
||||
SessionManager.getSession().retrieve(Folder.BASE_DATA_OBJECT_TYPE);
|
||||
SessionManager.getSession().retrieve(
|
||||
Folder.BASE_DATA_OBJECT_TYPE);
|
||||
folders.addEqualsFilter(Folder.IS_DELETED, Boolean.FALSE);
|
||||
|
||||
filter = collection.getFilterFactory().or();
|
||||
int count = 0;
|
||||
while (collection.next()) {
|
||||
filter.addFilter(Folder.ANCESTORS + " like :ancestors" +
|
||||
count + " || '%'");
|
||||
filter.addFilter(Folder.ANCESTORS + " like :ancestors"
|
||||
+ count + " || '%'");
|
||||
filter.set("ancestors" + count,
|
||||
collection.get(ContentItem.ANCESTORS));
|
||||
count++;
|
||||
|
|
@ -552,7 +644,7 @@ public class FolderManipulator extends SimpleContainer
|
|||
folders.addFilter(filter);
|
||||
|
||||
while (folders.next()) {
|
||||
invalidFolders.add (folders.get(Folder.ID).toString());
|
||||
invalidFolders.add(folders.get(Folder.ID).toString());
|
||||
}
|
||||
|
||||
// Get all subfolders of the sources. These are also not valid.
|
||||
|
|
@ -561,22 +653,22 @@ public class FolderManipulator extends SimpleContainer
|
|||
dq.setParameter("item_list", invalidFolders);
|
||||
|
||||
while (dq.next()) {
|
||||
invalidFolders.add (dq.get("folder_id").toString());
|
||||
invalidFolders.add (dq.get("folder_id").toString());
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
||||
// The folder from which the sources are being moved/copied is
|
||||
// not allowed.
|
||||
invalidFolders
|
||||
.add(m_srcFolderSel.getSelectedKey(state).toString());
|
||||
invalidFolders.add(
|
||||
m_srcFolderSel.getSelectedKey(state).toString());
|
||||
|
||||
// Save the invalid folder list
|
||||
m_invalidFolders.set (state, invalidFolders);
|
||||
m_invalidFolders.set(state, invalidFolders);
|
||||
}
|
||||
|
||||
Label l = new Label(value.toString());
|
||||
|
||||
if (invalidFolders.contains (key.toString())) {
|
||||
if (invalidFolders.contains(key.toString())) {
|
||||
return l;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -82,13 +82,10 @@ import org.apache.log4j.Logger;
|
|||
*/
|
||||
public class Page extends BlockStylable implements Container {
|
||||
|
||||
|
||||
/** Class specific logger instance. */
|
||||
private static final Logger s_log = Logger.getLogger(Page.class);
|
||||
|
||||
/** The delimiter character for components naming */
|
||||
private static final String DELIMITER = ".";
|
||||
|
||||
/**
|
||||
* The prefix that gets prepended to all state variables. Components must
|
||||
* not use variables starting with this prefix. This guarantees that the
|
||||
|
|
@ -96,9 +93,7 @@ public class Page extends BlockStylable implements Container {
|
|||
* interfere with each other.
|
||||
*/
|
||||
private static final String COMPONENT_PREFIX = "bbp" + DELIMITER;
|
||||
|
||||
private static final String INTERNAL = COMPONENT_PREFIX;
|
||||
|
||||
/**
|
||||
* The name of the special parameter that indicates which component has
|
||||
* been selected.
|
||||
|
|
@ -116,13 +111,11 @@ public class Page extends BlockStylable implements Container {
|
|||
CONTROL_EVENT_KEYS.add(CONTROL_VALUE);
|
||||
s_log.debug("Static initalizer finished.");
|
||||
}
|
||||
|
||||
/**
|
||||
* The name of the request parameter used for the visibility state of
|
||||
* components stored in m_invisible.
|
||||
*/
|
||||
static final String INVISIBLE = INTERNAL + "i";
|
||||
|
||||
/**
|
||||
* Map of stateful components (id --> 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;
|
||||
|
||||
/**
|
||||
* <code>Container</code> that renders this <code>Page</code>.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
|
@ -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,24 +1294,25 @@ 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();
|
||||
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();
|
||||
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();
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -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("<pre>%s</pre>", get(obj, attribute));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue