- 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-94f89814c4df
master
jensp 2011-04-04 17:24:41 +00:00
parent 2279dd49b5
commit 401bb5670c
10 changed files with 694 additions and 482 deletions

View File

@ -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);
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);
if (type == PersonType.AUTHOR) {
personEn.setContentSection(publicationsSection);
personEn.setLifecycle(createLifecycle(publicationsLifecycle));
} else {
personEn.setContentSection(personsSection);
personEn.setLifecycle(createLifecycle(personsLifecycle));
}
personEn.save();
personEn.setLanguage("en");
@ -2856,9 +2870,19 @@ public class DaBInImporter extends Program {
System.out.printf("\tde: %s, %s...", publisherData.getName(), publisherData.
getPlace());
publisherDe = new Publisher();
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();
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) {

View File

@ -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

View File

@ -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

View File

@ -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&nbsp;de&nbsp;
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=

View File

@ -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.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
@ -158,14 +157,17 @@ public class FolderBrowser extends Table {
*/
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,7 +185,6 @@ 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());
@ -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);
}
@ -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) {
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));
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);
itemColl.setOrder("lower(item." + ContentItem.DISPLAY_NAME
+ ") " + direction);
} else if (sortKey.equals(SORT_KEY_NAME)) {
itemColl.setOrder("lower(item." +
ContentItem.NAME + ") " + direction);
itemColl.setOrder("lower(item." + ContentItem.NAME + ") "
+ direction);
} else if (sortKey.equals(SORT_KEY_LAST_MODIFIED_DATE)) {
itemColl.setOrder("item.auditing.lastModifiedDate " +
direction);
itemColl.setOrder("item.auditing.lastModifiedDate "
+ direction);
} else if (sortKey.equals(SORT_KEY_CREATION_DATE)) {
itemColl.setOrder("item.auditing.creationDate " +
direction);
itemColl.setOrder("item.auditing.creationDate " + direction);
}
m_size.set(state, size);
@ -340,7 +383,6 @@ public class FolderBrowser extends Table {
}
}
private class HeaderCellRenderer
extends com.arsdigita.cms.ui.util.DefaultTableCellRenderer {
@ -358,7 +400,8 @@ public class FolderBrowser extends Table {
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)) {
@ -368,12 +411,13 @@ public class FolderBrowser extends Table {
}
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;
@ -405,6 +449,7 @@ public class FolderBrowser extends Table {
* to change into the folder.
*/
private class NameCellRenderer extends DefaultTableCellRenderer {
public NameCellRenderer() {
super(true);
}
@ -427,27 +472,30 @@ 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("&nbsp;", 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.");
}
@ -465,7 +513,9 @@ 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) {
return new Label(GlobalizationUtil.globalize("cms.ui.folder.na"));
@ -484,6 +534,7 @@ public class FolderBrowser extends Table {
// Deletes an item
private class ItemDeleter extends TableActionAdapter {
public void cellSelected(TableActionEvent e) {
int col = e.getColumn().intValue();
@ -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,14 +586,14 @@ 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) {
@ -577,7 +628,8 @@ public class FolderBrowser extends Table {
return FormatStandards.formatDate(creationDate);
}
case LAST_MODIFIED: {
java.util.Date lastModified = m_itemColl.getLastModifiedDate();
java.util.Date lastModified =
m_itemColl.getLastModifiedDate();
if (lastModified == null) {
return "--";
}
@ -587,8 +639,9 @@ 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()) {
return null;
@ -596,12 +649,13 @@ public class FolderBrowser extends Table {
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;
}
@ -649,6 +703,7 @@ public class FolderBrowser extends Table {
}
private class FolderChanger extends TableActionAdapter {
public void cellSelected(TableActionEvent e) {
PageState s = e.getPageState();
int col = e.getColumn().intValue();
@ -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();

View File

@ -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 $

View File

@ -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;
@ -95,28 +101,29 @@ public class FolderManipulator extends SimpleContainer
private static Logger s_log =
Logger.getLogger(FolderManipulator.class);
public static final String RESOURCE_BUNDLE =
"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,8 +140,10 @@ 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) {
@ -171,24 +180,23 @@ public class FolderManipulator extends SimpleContainer
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());
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);
@ -268,7 +276,9 @@ public class FolderManipulator extends SimpleContainer
} 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());
throw new IllegalStateException((String) GlobalizationUtil.
globalize("cms.ui.folder.no_source_items_specified").
localize());
}
Folder target = m_targetSelector.getTarget(s);
if (target == null) {
@ -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());
throw new IllegalStateException((String) globalize(
"cms.ui.folder.no_such_item").localize());
}
}
}
@ -316,7 +332,8 @@ public class FolderManipulator extends SimpleContainer
PageState s = e.getPageState();
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());
}
}
@ -333,9 +350,9 @@ public class FolderManipulator extends SimpleContainer
// The form containing the tree to select the target folder from
private class TargetSelector extends Form
implements Resettable {
private FolderSelectionModel m_targetSel;
private FolderTree m_folderTree;
private Submit m_cancel;
public TargetSelector() {
@ -365,6 +382,7 @@ public class FolderManipulator extends SimpleContainer
"&nbsp;" + msg);
}
}
}
});
l.setOutputEscaping(false);
add(l);
@ -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,8 +614,8 @@ 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);
@ -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++;
@ -567,8 +659,8 @@ public class FolderManipulator extends SimpleContainer
// 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);

View File

@ -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,8 +629,8 @@ 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);
@ -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
@ -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);
@ -1006,11 +985,14 @@ public class Page extends BlockStylable implements Container {
Assert.isUnlocked(this);
if (!stateContains(c)) {
throw new IllegalArgumentException
("Component must be registered in Page");
throw new IllegalArgumentException(
"Component must be registered in Page");
}
if (!m_stateModel.containsFormParam(p)) {
p.setName(parameterName(c, p.getName()));
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);
@ -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.
@ -1196,8 +1176,8 @@ public class Page extends BlockStylable implements Container {
if (stateContains(c)) {
key = String.valueOf(stateIndex(c));
} else {
throw new IllegalArgumentException
("Cannot generate prefix for component: key is null "
throw new IllegalArgumentException(
"Cannot generate prefix for component: key is null "
+ "and component " + c.toString() + "/" + c.getKey()
+ " did not register with page.");
}
@ -1223,9 +1203,7 @@ public class Page extends BlockStylable implements Container {
}
return name;
}
// Procs for debugging output
private static String NAME = "name";
/**
@ -1332,7 +1310,8 @@ public class Page extends BlockStylable implements Container {
String componentId = (String) it.next();
hashString.append(componentId);
}
s_log.debug("Time to create hashCode for page: " + (new Date().getTime() - start.getTime()));
s_log.debug("Time to create hashCode for page: " + (new Date().getTime() - start.
getTime()));
return hashString.toString();

View File

@ -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;
@ -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,17 +225,26 @@ 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;
@ -245,8 +254,7 @@ public class DomainObjectPropertySheet extends PropertySheet {
"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;
@ -280,8 +288,9 @@ public class DomainObjectPropertySheet extends PropertySheet {
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);
}
}
@ -294,8 +303,7 @@ public class DomainObjectPropertySheet extends PropertySheet {
return new DomainObjectPropertiesModel(
s.getObjectSelectionModel().getSelectedObject(state),
s.properties(),
state
);
state);
}
}
@ -333,7 +341,9 @@ 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);
@ -349,7 +359,6 @@ 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 {
@ -362,7 +371,9 @@ 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;
@ -372,16 +383,19 @@ public class DomainObjectPropertySheet extends PropertySheet {
token = tokenizer.nextToken();
// Null check
value = ((DataObject) value).get(token);
if(value == null)
if (value == null) {
return getDefaultString();
}
}
// Extract leaf value
if(token == null || value == null)
if (token == null || value == null) {
return getDefaultString();
}
return value.toString();
}
}
}

View File

@ -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;
/**
@ -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));
}
}
}