- 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
|
|
@ -112,16 +112,16 @@ public class DaBInImporter extends Program {
|
||||||
private Folder personsRootFolder;
|
private Folder personsRootFolder;
|
||||||
private Folder projectsRootFolder;
|
private Folder projectsRootFolder;
|
||||||
private Folder publicationsRootFolder;
|
private Folder publicationsRootFolder;
|
||||||
private Folder authors;
|
private Folder authors;
|
||||||
private Folder contacts;
|
private Folder contacts;
|
||||||
private Folder departments;
|
private Folder departments;
|
||||||
private Folder members;
|
private Folder members;
|
||||||
private Folder organization;
|
private Folder organization;
|
||||||
private Folder persons;
|
private Folder persons;
|
||||||
private Folder projects;
|
private Folder projects;
|
||||||
private Folder publications;
|
private Folder publications;
|
||||||
private Folder publishers;
|
private Folder publishers;
|
||||||
private Folder files;
|
private Folder files;
|
||||||
private Map<String, ContentBundle> departmentsMap;
|
private Map<String, ContentBundle> departmentsMap;
|
||||||
private Map<String, ContentBundle> personsMap;
|
private Map<String, ContentBundle> personsMap;
|
||||||
private Map<String, ContentBundle> projectsMap;
|
private Map<String, ContentBundle> projectsMap;
|
||||||
|
|
@ -135,7 +135,7 @@ public class DaBInImporter extends Program {
|
||||||
private Address officeAddress;
|
private Address officeAddress;
|
||||||
private Domain termsDomain;
|
private Domain termsDomain;
|
||||||
private Term publicationsTerm;
|
private Term publicationsTerm;
|
||||||
private Term workingPapersTerm;
|
private Term workingPapersTerm;
|
||||||
private Term currentProjectsTerm;
|
private Term currentProjectsTerm;
|
||||||
private Term finishedProjectsTerm;
|
private Term finishedProjectsTerm;
|
||||||
|
|
||||||
|
|
@ -147,13 +147,13 @@ public class DaBInImporter extends Program {
|
||||||
super("DaBInImporter",
|
super("DaBInImporter",
|
||||||
"0.1.0",
|
"0.1.0",
|
||||||
"configFile",
|
"configFile",
|
||||||
startup);
|
startup);
|
||||||
departmentsMap = new HashMap<String, ContentBundle>();
|
departmentsMap = new HashMap<String, ContentBundle>();
|
||||||
personsMap = new HashMap<String, ContentBundle>();
|
personsMap = new HashMap<String, ContentBundle>();
|
||||||
projectsMap = new HashMap<String, ContentBundle>();
|
projectsMap = new HashMap<String, ContentBundle>();
|
||||||
publishersMap = new HashMap<PublisherData, ContentBundle>();
|
publishersMap = new HashMap<PublisherData, ContentBundle>();
|
||||||
publicationMap = new HashMap<String, ContentBundle>();
|
publicationMap = new HashMap<String, ContentBundle>();
|
||||||
workingPaperMap = new HashMap<String, ContentBundle>();
|
workingPaperMap = new HashMap<String, ContentBundle>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -259,19 +259,19 @@ public class DaBInImporter extends Program {
|
||||||
projectsRootFolder = projectsSection.getRootFolder();
|
projectsRootFolder = projectsSection.getRootFolder();
|
||||||
publicationsRootFolder = publicationsSection.getRootFolder();
|
publicationsRootFolder = publicationsSection.getRootFolder();
|
||||||
|
|
||||||
authors = createFolder(personsRootFolder, "autoren", "Autoren");
|
authors = createFolder(personsRootFolder, "autoren", "Autoren");
|
||||||
|
|
||||||
contacts = createFolder(personsRootFolder, "kontaktdaten",
|
contacts = createFolder(personsRootFolder, "kontaktdaten",
|
||||||
"Kontaktdaten");
|
"Kontaktdaten");
|
||||||
|
|
||||||
departments = createFolder(root, "abteilungen", "Abteilungen");
|
departments = createFolder(root, "abteilungen", "Abteilungen");
|
||||||
|
|
||||||
members = createFolder(personsRootFolder, "mitglieder", "Mitglieder");
|
members = createFolder(personsRootFolder, "mitglieder", "Mitglieder");
|
||||||
|
|
||||||
organization = createFolder(root, "organisationen", "Organisation(en)");
|
organization = createFolder(root, "organisationen", "Organisation(en)");
|
||||||
|
|
||||||
persons = createFolder(personsRootFolder, "personen", "Personen");
|
persons = createFolder(personsRootFolder, "personen", "Personen");
|
||||||
|
|
||||||
projects = createFolder(projectsRootFolder, "projekte", "Projekte");
|
projects = createFolder(projectsRootFolder, "projekte", "Projekte");
|
||||||
|
|
||||||
publishers = createFolder(publicationsRootFolder, "verlage", "Verlage");
|
publishers = createFolder(publicationsRootFolder, "verlage", "Verlage");
|
||||||
|
|
@ -293,13 +293,13 @@ public class DaBInImporter extends Program {
|
||||||
System.out.println("Terms for publications...");
|
System.out.println("Terms for publications...");
|
||||||
String publicationsTermPath = (String) config.get(
|
String publicationsTermPath = (String) config.get(
|
||||||
"terms.publications");
|
"terms.publications");
|
||||||
publicationsTerm = checkTermPath(publicationsTermPath);
|
publicationsTerm = checkTermPath(publicationsTermPath);
|
||||||
|
|
||||||
System.out.println("Terms for working papers...");
|
System.out.println("Terms for working papers...");
|
||||||
String workingPapersTermPath =
|
String workingPapersTermPath =
|
||||||
(String) config.get("terms.workingpapers");
|
(String) config.get("terms.workingpapers");
|
||||||
workingPapersTerm = checkTermPath(workingPapersTermPath);
|
workingPapersTerm = checkTermPath(workingPapersTermPath);
|
||||||
|
|
||||||
System.out.println("Term for current projects...");
|
System.out.println("Term for current projects...");
|
||||||
String currentProjectsTermPath = (String) config.get(
|
String currentProjectsTermPath = (String) config.get(
|
||||||
"terms.projects.current");
|
"terms.projects.current");
|
||||||
|
|
@ -1135,7 +1135,11 @@ public class DaBInImporter extends Program {
|
||||||
System.out.printf("%4d of %4d: %s...\n", counter, number, result.
|
System.out.printf("%4d of %4d: %s...\n", counter, number, result.
|
||||||
getString("name"));
|
getString("name"));
|
||||||
PublicationData data = new PublicationData();
|
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.setPublicationDaBInId(result.getString("Publikation_Id"));
|
||||||
data.setName(result.getString("Name"));
|
data.setName(result.getString("Name"));
|
||||||
data.setVerlag(result.getString("Verlag"));
|
data.setVerlag(result.getString("Verlag"));
|
||||||
|
|
@ -1493,8 +1497,13 @@ public class DaBInImporter extends Program {
|
||||||
personDe.setTitlePre(personData.getTitlePre());
|
personDe.setTitlePre(personData.getTitlePre());
|
||||||
personDe.setDescription(String.format("DaBInId={%s}",
|
personDe.setDescription(String.format("DaBInId={%s}",
|
||||||
personData.getDabinId()));
|
personData.getDabinId()));
|
||||||
personDe.setContentSection(section);
|
if (type == PersonType.AUTHOR) {
|
||||||
personDe.setLifecycle(createLifecycle(personsLifecycle));
|
personDe.setContentSection(publicationsSection);
|
||||||
|
personDe.setLifecycle(createLifecycle(publicationsLifecycle));
|
||||||
|
} else {
|
||||||
|
personDe.setContentSection(personsSection);
|
||||||
|
personDe.setLifecycle(createLifecycle(personsLifecycle));
|
||||||
|
}
|
||||||
personDe.save();
|
personDe.save();
|
||||||
personDe.setLanguage("de");
|
personDe.setLanguage("de");
|
||||||
|
|
||||||
|
|
@ -1503,8 +1512,13 @@ public class DaBInImporter extends Program {
|
||||||
personEn.setGivenName(personData.getGivenname());
|
personEn.setGivenName(personData.getGivenname());
|
||||||
personEn.setDescription(String.format("DaBInId={%s}",
|
personEn.setDescription(String.format("DaBInId={%s}",
|
||||||
personData.getDabinId()));
|
personData.getDabinId()));
|
||||||
personEn.setContentSection(section);
|
if (type == PersonType.AUTHOR) {
|
||||||
personEn.setLifecycle(createLifecycle(personsLifecycle));
|
personEn.setContentSection(publicationsSection);
|
||||||
|
personEn.setLifecycle(createLifecycle(publicationsLifecycle));
|
||||||
|
} else {
|
||||||
|
personEn.setContentSection(personsSection);
|
||||||
|
personEn.setLifecycle(createLifecycle(personsLifecycle));
|
||||||
|
}
|
||||||
personEn.save();
|
personEn.save();
|
||||||
personEn.setLanguage("en");
|
personEn.setLanguage("en");
|
||||||
|
|
||||||
|
|
@ -1518,9 +1532,9 @@ public class DaBInImporter extends Program {
|
||||||
|
|
||||||
personDe.setContentSection(section);
|
personDe.setContentSection(section);
|
||||||
personEn.setContentSection(section);
|
personEn.setContentSection(section);
|
||||||
|
|
||||||
Folder folder = null;
|
Folder folder = null;
|
||||||
switch(type) {
|
switch (type) {
|
||||||
case MEMBER:
|
case MEMBER:
|
||||||
folder = members;
|
folder = members;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1638,7 +1652,7 @@ public class DaBInImporter extends Program {
|
||||||
contactBundle.addInstance(contactEn);
|
contactBundle.addInstance(contactEn);
|
||||||
contactBundle.setContentSection(personsSection);
|
contactBundle.setContentSection(personsSection);
|
||||||
contacts.addItem(contactBundle);
|
contacts.addItem(contactBundle);
|
||||||
|
|
||||||
contactDe.setContentSection(personsSection);
|
contactDe.setContentSection(personsSection);
|
||||||
contactEn.setContentSection(personsSection);
|
contactEn.setContentSection(personsSection);
|
||||||
|
|
||||||
|
|
@ -1682,7 +1696,7 @@ public class DaBInImporter extends Program {
|
||||||
|
|
||||||
System.out.printf("\tde: %s...", departmentData.getNameDe());
|
System.out.printf("\tde: %s...", departmentData.getNameDe());
|
||||||
departmentDe = new SciDepartment();
|
departmentDe = new SciDepartment();
|
||||||
departmentDe.setTitle(departmentData.getNameDe());
|
departmentDe.setTitle(departmentData.getNameDe());
|
||||||
departmentDe.setName(DaBInImporter.normalizeString(departmentData.
|
departmentDe.setName(DaBInImporter.normalizeString(departmentData.
|
||||||
getNameDe()));
|
getNameDe()));
|
||||||
departmentDe.setLanguage("de");
|
departmentDe.setLanguage("de");
|
||||||
|
|
@ -1694,7 +1708,7 @@ public class DaBInImporter extends Program {
|
||||||
System.out.printf("\ten: %s...",
|
System.out.printf("\ten: %s...",
|
||||||
departmentData.getNameEn());
|
departmentData.getNameEn());
|
||||||
departmentEn = new SciDepartment();
|
departmentEn = new SciDepartment();
|
||||||
departmentEn.setTitle(departmentData.getNameEn());
|
departmentEn.setTitle(departmentData.getNameEn());
|
||||||
departmentEn.setName(DaBInImporter.normalizeString(departmentData.
|
departmentEn.setName(DaBInImporter.normalizeString(departmentData.
|
||||||
getNameDe()));
|
getNameDe()));
|
||||||
departmentEn.setLanguage("en");
|
departmentEn.setLanguage("en");
|
||||||
|
|
@ -1793,7 +1807,7 @@ public class DaBInImporter extends Program {
|
||||||
if ((projectData.getNameDe() != null)
|
if ((projectData.getNameDe() != null)
|
||||||
&& (projectData.getNameDe().length() > 0)) {
|
&& (projectData.getNameDe().length() > 0)) {
|
||||||
projectDe = new SciProject();
|
projectDe = new SciProject();
|
||||||
projectDe.setTitle(projectData.getNameDe());
|
projectDe.setTitle(projectData.getNameDe());
|
||||||
String projectName = DaBInImporter.normalizeString(projectData.
|
String projectName = DaBInImporter.normalizeString(projectData.
|
||||||
getNameDe());
|
getNameDe());
|
||||||
if (projectName.length() > 200) {
|
if (projectName.length() > 200) {
|
||||||
|
|
@ -1955,7 +1969,7 @@ public class DaBInImporter extends Program {
|
||||||
System.out.println("OK");
|
System.out.println("OK");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
projects.addItem(project);
|
projects.addItem(project);
|
||||||
|
|
||||||
//Assign to term/category
|
//Assign to term/category
|
||||||
|
|
@ -2514,7 +2528,7 @@ public class DaBInImporter extends Program {
|
||||||
pubLink.save();
|
pubLink.save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
publications.addItem(publication);
|
publications.addItem(publication);
|
||||||
if (publicationData.getVisiblity()
|
if (publicationData.getVisiblity()
|
||||||
== PublicationVisibility.GLOBAL) {
|
== PublicationVisibility.GLOBAL) {
|
||||||
|
|
@ -2631,10 +2645,10 @@ public class DaBInImporter extends Program {
|
||||||
workingPaperEn.setContentSection(publicationsSection);
|
workingPaperEn.setContentSection(publicationsSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
workingPaperMap.put(workingPaperData.getDabinId(), workingPaper);
|
workingPaperMap.put(workingPaperData.getDabinId(), workingPaper);
|
||||||
publications.addItem(workingPaper);
|
publications.addItem(workingPaper);
|
||||||
WorkingPaper primary = (WorkingPaper) workingPaper.
|
WorkingPaper primary = (WorkingPaper) workingPaper.
|
||||||
getPrimaryInstance();
|
getPrimaryInstance();
|
||||||
Term term = workingPapersTerm;//s.get(yearStr);
|
Term term = workingPapersTerm;//s.get(yearStr);
|
||||||
term = termsDomain.getTerm(term.getUniqueID());
|
term = termsDomain.getTerm(term.getUniqueID());
|
||||||
System.out.printf("\tAdding project to term '%s:%s'...\n", term.
|
System.out.printf("\tAdding project to term '%s:%s'...\n", term.
|
||||||
|
|
@ -2729,7 +2743,7 @@ public class DaBInImporter extends Program {
|
||||||
download.setTargetType(Link.INTERNAL_LINK);
|
download.setTargetType(Link.INTERNAL_LINK);
|
||||||
download.setTargetItem(fsi);
|
download.setTargetItem(fsi);
|
||||||
download.setLinkOwner(workingPaperEn);
|
download.setLinkOwner(workingPaperEn);
|
||||||
|
|
||||||
files.addItem(bundle);
|
files.addItem(bundle);
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
|
|
@ -2856,9 +2870,19 @@ public class DaBInImporter extends Program {
|
||||||
System.out.printf("\tde: %s, %s...", publisherData.getName(), publisherData.
|
System.out.printf("\tde: %s, %s...", publisherData.getName(), publisherData.
|
||||||
getPlace());
|
getPlace());
|
||||||
publisherDe = new Publisher();
|
publisherDe = new Publisher();
|
||||||
publisherDe.setTitle(publisherData.getName());
|
if ((publisherData.getPlace() == null) || publisherData.getPlace().
|
||||||
publisherDe.setName(DaBInImporter.normalizeString(publisherData.
|
isEmpty()) {
|
||||||
getName()));
|
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.setPlace(publisherData.getPlace());
|
||||||
publisherDe.setLanguage("de");
|
publisherDe.setLanguage("de");
|
||||||
publisherDe.setLifecycle(createLifecycle(publicationsLifecycle));
|
publisherDe.setLifecycle(createLifecycle(publicationsLifecycle));
|
||||||
|
|
@ -2869,9 +2893,19 @@ public class DaBInImporter extends Program {
|
||||||
System.out.printf("\tEn: %s, %s...", publisherData.getName(), publisherData.
|
System.out.printf("\tEn: %s, %s...", publisherData.getName(), publisherData.
|
||||||
getPlace());
|
getPlace());
|
||||||
publisherEn = new Publisher();
|
publisherEn = new Publisher();
|
||||||
publisherEn.setTitle(publisherData.getName());
|
if ((publisherData.getPlace() == null) || publisherData.getPlace().
|
||||||
publisherEn.setName(DaBInImporter.normalizeString(publisherData.
|
isEmpty()) {
|
||||||
getName()));
|
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.setPlace(publisherData.getPlace());
|
||||||
publisherEn.setLanguage("en");
|
publisherEn.setLanguage("en");
|
||||||
publisherEn.setLifecycle(createLifecycle(publicationsLifecycle));
|
publisherEn.setLifecycle(createLifecycle(publicationsLifecycle));
|
||||||
|
|
@ -2887,8 +2921,11 @@ public class DaBInImporter extends Program {
|
||||||
|
|
||||||
publisherDe.setContentSection(publicationsSection);
|
publisherDe.setContentSection(publicationsSection);
|
||||||
publisherEn.setContentSection(publicationsSection);
|
publisherEn.setContentSection(publicationsSection);
|
||||||
|
|
||||||
publishers.addItem(publisher);
|
publishers.addItem(publisher);
|
||||||
|
System.out.printf(
|
||||||
|
"Putting publisher into publishers map. HashCode: %d",
|
||||||
|
publisherData.hashCode());
|
||||||
publishersMap.put(publisherData, publisher);
|
publishersMap.put(publisherData, publisher);
|
||||||
System.out.println("OK");
|
System.out.println("OK");
|
||||||
}
|
}
|
||||||
|
|
@ -2975,7 +3012,12 @@ public class DaBInImporter extends Program {
|
||||||
|
|
||||||
int colonIndex = normalizedData.indexOf(':');
|
int colonIndex = normalizedData.indexOf(':');
|
||||||
if (colonIndex < 0) {
|
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("/", "").
|
replace("/", "").
|
||||||
replaceAll("\\s\\s+", " ").
|
replaceAll("\\s\\s+", " ").
|
||||||
replace(' ', '-').toLowerCase());*/
|
replace(' ', '-').toLowerCase());*/
|
||||||
|
|
@ -3015,11 +3057,19 @@ public class DaBInImporter extends Program {
|
||||||
System.out.printf("\tprevDelimIndex = %d\n", prevDelimIndex);
|
System.out.printf("\tprevDelimIndex = %d\n", prevDelimIndex);
|
||||||
place = normalizedData.substring(prevDelimIndex, colonIndex);
|
place = normalizedData.substring(prevDelimIndex, colonIndex);
|
||||||
|
|
||||||
publisher.setName(name.trim().
|
while ((name.length() > 1)
|
||||||
replace(",", "").
|
&& !Character.isLetter(name.charAt(0))) {
|
||||||
replace("/", "").
|
name = name.substring(1);
|
||||||
replaceAll("\\s\\s+", " ").
|
}
|
||||||
replace(' ', '-').toLowerCase());
|
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());
|
publisher.setPlace(place.trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3111,7 +3161,7 @@ public class DaBInImporter extends Program {
|
||||||
publicationData.setPagesFrom(pagesFrom);
|
publicationData.setPagesFrom(pagesFrom);
|
||||||
publicationData.setPagesTo(pagesTo);
|
publicationData.setPagesTo(pagesTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Term checkTermPath(final String path) {
|
private Term checkTermPath(final String path) {
|
||||||
StringTokenizer pathTokenizer = new StringTokenizer(path, "/");
|
StringTokenizer pathTokenizer = new StringTokenizer(path, "/");
|
||||||
|
|
||||||
|
|
@ -3147,7 +3197,7 @@ public class DaBInImporter extends Program {
|
||||||
|
|
||||||
return term;
|
return term;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTerm(final String uniqueId,
|
private void createTerm(final String uniqueId,
|
||||||
final String name,
|
final String name,
|
||||||
final Domain domain,
|
final Domain domain,
|
||||||
|
|
@ -3191,7 +3241,7 @@ public class DaBInImporter extends Program {
|
||||||
"Ä", "Ae").replace("Ü", "Ue").replace("Ö", "Oe").replace("ß",
|
"Ä", "Ae").replace("Ü", "Ue").replace("Ö", "Oe").replace("ß",
|
||||||
"ss").
|
"ss").
|
||||||
replace(" ", "-").
|
replace(" ", "-").
|
||||||
replaceAll("[^a-zA-Z0-9\\-]", "").toLowerCase();
|
replaceAll("[^a-zA-Z0-9\\-]", "").toLowerCase().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
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.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_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.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.save=Speichern
|
||||||
cms.ui.folder.cancel=Abbrechen
|
cms.ui.folder.cancel=Abbrechen
|
||||||
cms.ui.folder.edit=Editieren
|
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.move=Verschieben
|
||||||
cms.ui.folder.copy=Kopieren
|
cms.ui.folder.copy=Kopieren
|
||||||
cms.ui.folder.go=Los
|
cms.ui.folder.go=Los
|
||||||
|
|
@ -16,22 +16,22 @@ cms.ui.folder.unlock=Entsperren
|
||||||
cms.ui.folder.external_lock=Externe Sperrung
|
cms.ui.folder.external_lock=Externe Sperrung
|
||||||
cms.ui.folder.left=Links
|
cms.ui.folder.left=Links
|
||||||
cms.ui.folder.right=Rechts
|
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.from=von
|
||||||
cms.ui.folder.to=an
|
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.no_image=Kein Bild
|
||||||
cms.ui.folder.hide_metadata=Metadaten verbergen
|
cms.ui.folder.hide_metadata=Metadaten verbergen
|
||||||
cms.ui.folder.show_metadata=Zeige die Metadaten
|
cms.ui.folder.show_metadata=Zeige die Metadaten
|
||||||
cms.ui.folder.edit_subject_classes=Themenklassen editieren
|
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_applet=In EoPro editieren
|
||||||
cms.ui.folder.edit_in_browser=Im Browser editieren
|
cms.ui.folder.edit_in_browser=Im Browser editieren
|
||||||
|
|
||||||
cms.ui.folder.edit_current_folder=Bearbeiten des aktuellen Verzeichnisses
|
cms.ui.folder.edit_current_folder=Bearbeiten des aktuellen Verzeichnisses
|
||||||
cms.ui.folder.preview_current_folder=Vorschau des aktuellen Verzeichnisses
|
cms.ui.folder.preview_current_folder=Vorschau des aktuellen Verzeichnisses
|
||||||
cms.ui.folder.contents_for=Inhalt für
|
cms.ui.folder.contents_for=Inhalt f\u00fcr
|
||||||
cms.ui.folder.choose_target_folder=Zielverzeichnis auswählen
|
cms.ui.folder.choose_target_folder=Zielverzeichnis ausw\u00e4hlen
|
||||||
cms.ui.foldr.new_wcms_doc=Neue WCMS Documente
|
cms.ui.foldr.new_wcms_doc=Neue WCMS Documente
|
||||||
|
|
||||||
COMMENT.05=INPUTS
|
COMMENT.05=INPUTS
|
||||||
|
|
@ -40,26 +40,27 @@ cms.ui.folder.right=Rechts
|
||||||
|
|
||||||
COMMENT.10=FOLDER METADATA
|
COMMENT.10=FOLDER METADATA
|
||||||
cms.ui.folder.headline=Titelzeile
|
cms.ui.folder.headline=Titelzeile
|
||||||
cms.ui.folder.heading=\u00DCberschrift
|
cms.ui.folder.heading=\u00dcberschrift
|
||||||
cms.ui.folder.body=Hauptbereich
|
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.replace_image=Ersetze dieses Bild
|
||||||
cms.ui.folder.align=Ausrichten
|
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.alt=Alt
|
||||||
cms.ui.folder.caption=\u00DCberschrift
|
cms.ui.folder.caption=\u00dcberschrift
|
||||||
|
|
||||||
COMMENT.20=ERROR MESSAGES
|
COMMENT.20=ERROR MESSAGES
|
||||||
cms.ui.folder.column_index_not_in_table_model=Spaltenindex befindet sich nicht im Datenbankmodell:
|
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.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.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.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.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.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.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_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.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_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.no_such_item=Die verwendete Eintrags-ID pa\u00dft zu keinem Eintrag.
|
||||||
|
|
||||||
cms.ui.folder.remove_asset_link=Entfernen
|
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.cancel=Annuler
|
||||||
cms.ui.folder.edit=Modifier
|
cms.ui.folder.edit=Modifier
|
||||||
cms.ui.folder.delete=Effacer
|
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.copy=Copier
|
||||||
cms.ui.folder.go=Go
|
cms.ui.folder.go=Go
|
||||||
cms.ui.folder.name=Nom
|
cms.ui.folder.name=Nom
|
||||||
|
|
@ -11,26 +11,26 @@ cms.ui.folder.type=Type
|
||||||
cms.ui.folder.action=Action
|
cms.ui.folder.action=Action
|
||||||
cms.ui.folder.title=Titre
|
cms.ui.folder.title=Titre
|
||||||
cms.ui.folder.index=Index
|
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.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.external_lock=Verrou externe
|
||||||
cms.ui.folder.left=Gauche
|
cms.ui.folder.left=Gauche
|
||||||
cms.ui.folder.right=Droite
|
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.from=de
|
||||||
cms.ui.folder.to=à
|
cms.ui.folder.to=\u00e0
|
||||||
cms.ui.folder.no_items=Pas d'éléments
|
cms.ui.folder.no_items=Pas d'\u00e9l\u00e9ments
|
||||||
cms.ui.folder.no_image=Pas d'image
|
cms.ui.folder.no_image=Pas d'image
|
||||||
cms.ui.folder.hide_metadata=Cacher les méta-données
|
cms.ui.folder.hide_metadata=Cacher les m\u00e9ta-donn\u00e9es
|
||||||
cms.ui.folder.show_metadata=Montrer les méta-données
|
cms.ui.folder.show_metadata=Montrer les m\u00e9ta-donn\u00e9es
|
||||||
cms.ui.folder.edit_subject_classes=Modifier les classes objet
|
cms.ui.folder.edit_subject_classes=Modifier les classes objet
|
||||||
cms.ui.folder.add_paragraph=Ajouter un paragraphe
|
cms.ui.folder.add_paragraph=Ajouter un paragraphe
|
||||||
cms.ui.folder.edit_in_applet=Modifier dans EoPro
|
cms.ui.folder.edit_in_applet=Modifier dans EoPro
|
||||||
cms.ui.folder.edit_in_browser=Modifier dans un navigateur
|
cms.ui.folder.edit_in_browser=Modifier dans un navigateur
|
||||||
|
|
||||||
cms.ui.folder.edit_current_folder=Modifier le dossier courant
|
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.contents_for=Contenu de
|
||||||
cms.ui.folder.choose_target_folder=Choisir le dossier de destination
|
cms.ui.folder.choose_target_folder=Choisir le dossier de destination
|
||||||
cms.ui.foldr.new_wcms_doc=Nouveau document WCMS
|
cms.ui.foldr.new_wcms_doc=Nouveau document WCMS
|
||||||
|
|
@ -41,26 +41,27 @@ cms.ui.folder.right=Droite
|
||||||
|
|
||||||
COMMENT.10=DOSSIER DES META DONNEES
|
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.heading=Chapeau
|
||||||
cms.ui.folder.body=Corps
|
cms.ui.folder.body=Corps
|
||||||
cms.ui.folder.add_image=Ajouter une image
|
cms.ui.folder.add_image=Ajouter une image
|
||||||
cms.ui.folder.replace_image=Remplacer cette image
|
cms.ui.folder.replace_image=Remplacer cette image
|
||||||
cms.ui.folder.align=Aligner
|
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.alt=Alt
|
||||||
cms.ui.folder.caption=Légende
|
cms.ui.folder.caption=L\u00e9gende
|
||||||
cms.ui.folder.remove_asset_link=Retirer
|
cms.ui.folder.remove_asset_link=Retirer
|
||||||
|
|
||||||
COMMENT.20=MESSAGES D'ERREURS
|
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.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.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'élément source spécifié.
|
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électionner un dossier dans lequel les éléments seront déplacés ou copiés.
|
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éplacer ou de copier des éléments à l'intérieur d'un même dossier.
|
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éer, de copier, ou de déplacer des éléments.
|
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éjà un élément dans le dossier destination appelé:
|
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é-publier avant de le déplacer.
|
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éplacer
|
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'élément ne correspond pas à un contenu existant.
|
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=
|
||||||
|
|
|
||||||
|
|
@ -79,51 +79,50 @@ import javax.servlet.ServletException;
|
||||||
* @version $Id: FolderBrowser.java 2017 2009-10-04 09:03:45Z pboy $
|
* @version $Id: FolderBrowser.java 2017 2009-10-04 09:03:45Z pboy $
|
||||||
*/
|
*/
|
||||||
public class FolderBrowser extends Table {
|
public class FolderBrowser extends Table {
|
||||||
|
|
||||||
private static final Logger s_log = Logger.getLogger(FolderBrowser.class);
|
private static final Logger s_log = Logger.getLogger(FolderBrowser.class);
|
||||||
|
|
||||||
private static GlobalizedMessage[] s_headers = {
|
private static GlobalizedMessage[] s_headers = {
|
||||||
globalize("cms.ui.folder.name"), globalize("cms.ui.folder.title"),
|
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.type"),
|
||||||
globalize("cms.ui.folder.last_modified"), globalize("cms.ui.folder.action"),
|
globalize("cms.ui.folder.creation_date"),
|
||||||
globalize("cms.ui.folder.index") };
|
globalize("cms.ui.folder.last_modified"), globalize(
|
||||||
|
"cms.ui.folder.action"),
|
||||||
|
globalize("cms.ui.folder.index")};
|
||||||
private static GlobalizedMessage[] s_noIndexHeaders = {
|
private static GlobalizedMessage[] s_noIndexHeaders = {
|
||||||
globalize("cms.ui.folder.name"), globalize("cms.ui.folder.title"),
|
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.type"),
|
||||||
globalize("cms.ui.folder.last_modified"), globalize("cms.ui.folder.action") };
|
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_UP = "sortActionUp";
|
||||||
private static final String SORT_ACTION_DOWN = "sortActionDown";
|
private static final String SORT_ACTION_DOWN = "sortActionDown";
|
||||||
|
|
||||||
private FolderSelectionModel m_currentFolder;
|
private FolderSelectionModel m_currentFolder;
|
||||||
|
|
||||||
private TableActionListener m_folderChanger;
|
private TableActionListener m_folderChanger;
|
||||||
|
|
||||||
private TableActionListener m_deleter;
|
private TableActionListener m_deleter;
|
||||||
|
|
||||||
private TableActionListener m_indexChanger;
|
private TableActionListener m_indexChanger;
|
||||||
|
|
||||||
private TableColumn m_nameColumn;
|
private TableColumn m_nameColumn;
|
||||||
private TableColumn m_deleteColumn;
|
private TableColumn m_deleteColumn;
|
||||||
private TableColumn m_indexColumn;
|
private TableColumn m_indexColumn;
|
||||||
|
|
||||||
private final static String SORT_KEY_NAME = "name";
|
private final static String SORT_KEY_NAME = "name";
|
||||||
private final static String SORT_KEY_TITLE = "title";
|
private final static String SORT_KEY_TITLE = "title";
|
||||||
private final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
|
private final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
|
||||||
private final static String SORT_KEY_CREATION_DATE = "creationDate";
|
private final static String SORT_KEY_CREATION_DATE = "creationDate";
|
||||||
|
|
||||||
private StringParameter m_sortType = new StringParameter("sortType");
|
private StringParameter m_sortType = new StringParameter("sortType");
|
||||||
private StringParameter m_sortDirection = new StringParameter("sortDirn");
|
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) {
|
public FolderBrowser(FolderSelectionModel currentFolder) {
|
||||||
//super(new FolderTableModelBuilder(), s_headers);
|
//super(new FolderTableModelBuilder(), s_headers);
|
||||||
super();
|
super();
|
||||||
m_sortType.setDefaultValue(SORT_KEY_NAME);
|
m_sortType.setDefaultValue(SORT_KEY_NAME);
|
||||||
m_sortDirection.setDefaultValue(SORT_ACTION_UP);
|
m_sortDirection.setDefaultValue(SORT_ACTION_UP);
|
||||||
|
|
||||||
setModelBuilder(new FolderTableModelBuilder(currentFolder));
|
setModelBuilder(new FolderTableModelBuilder(currentFolder));
|
||||||
setColumnModel(new DefaultTableColumnModel(hideIndexColumn() ? s_noIndexHeaders : s_headers));
|
setColumnModel(new DefaultTableColumnModel(hideIndexColumn()
|
||||||
|
? s_noIndexHeaders
|
||||||
|
: s_headers));
|
||||||
setHeader(new TableHeader(getColumnModel()));
|
setHeader(new TableHeader(getColumnModel()));
|
||||||
// DEE 1/18/02: the folder table model builder needs to know about
|
// DEE 1/18/02: the folder table model builder needs to know about
|
||||||
// 'this' in order to set visibility, but 'this' isn't available
|
// 'this' in order to set visibility, but 'this' isn't available
|
||||||
|
|
@ -134,38 +133,41 @@ public class FolderBrowser extends Table {
|
||||||
// so we break the model builder construction up into two parts,
|
// so we break the model builder construction up into two parts,
|
||||||
// and pull the foldertablemodelbuilder back with the super class'
|
// and pull the foldertablemodelbuilder back with the super class'
|
||||||
// accessor.
|
// accessor.
|
||||||
((FolderTableModelBuilder)getModelBuilder()).setFolderBrowser(this);
|
((FolderTableModelBuilder) getModelBuilder()).setFolderBrowser(this);
|
||||||
|
|
||||||
m_currentFolder = currentFolder;
|
m_currentFolder = currentFolder;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
This code should be uncommented if the desired behaviour is for a change
|
This code should be uncommented if the desired behaviour is for a change
|
||||||
of folder to cause reversion to default ordering of contained items
|
of folder to cause reversion to default ordering of contained items
|
||||||
(by name ascending). Our feeling is that the user selected ordering
|
(by name ascending). Our feeling is that the user selected ordering
|
||||||
should be retained for the duration of the folder browsing session. If
|
should be retained for the duration of the folder browsing session. If
|
||||||
anyone wants this alternative behaviour it should be brought in under
|
anyone wants this alternative behaviour it should be brought in under
|
||||||
the control of a config parameter.
|
the control of a config parameter.
|
||||||
|
|
||||||
m_currentFolder.addChangeListener(new ChangeListener() {
|
m_currentFolder.addChangeListener(new ChangeListener() {
|
||||||
|
|
||||||
public void stateChanged(ChangeEvent e) {
|
public void stateChanged(ChangeEvent e) {
|
||||||
PageState state = e.getPageState();
|
PageState state = e.getPageState();
|
||||||
state.setValue(m_sortType, m_sortType.getDefaultValue());
|
state.setValue(m_sortType, m_sortType.getDefaultValue());
|
||||||
state.setValue(m_sortDirection, m_sortDirection.getDefaultValue());
|
state.setValue(m_sortDirection, m_sortDirection.getDefaultValue());
|
||||||
|
|
||||||
}});
|
}});
|
||||||
*/
|
*/
|
||||||
setClassAttr("dataTable");
|
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 = getColumn(0);
|
||||||
m_nameColumn.setCellRenderer(new NameCellRenderer());
|
m_nameColumn.setCellRenderer(new NameCellRenderer());
|
||||||
m_nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
|
m_nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
|
||||||
getColumn(1).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_TITLE));
|
getColumn(1).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_TITLE));
|
||||||
getColumn(3).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
|
getColumn(3).setHeaderRenderer(new HeaderCellRenderer(
|
||||||
getColumn(4).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_LAST_MODIFIED_DATE));
|
SORT_KEY_CREATION_DATE));
|
||||||
|
getColumn(4).setHeaderRenderer(new HeaderCellRenderer(
|
||||||
|
SORT_KEY_LAST_MODIFIED_DATE));
|
||||||
m_deleteColumn = getColumn(5);
|
m_deleteColumn = getColumn(5);
|
||||||
m_deleteColumn.setCellRenderer(new ActionCellRenderer());
|
m_deleteColumn.setCellRenderer(new ActionCellRenderer());
|
||||||
m_deleteColumn.setAlign("center");
|
m_deleteColumn.setAlign("center");
|
||||||
|
|
@ -173,59 +175,60 @@ public class FolderBrowser extends Table {
|
||||||
m_indexColumn = getColumn(6);
|
m_indexColumn = getColumn(6);
|
||||||
m_indexColumn.setCellRenderer(new IndexToggleRenderer());
|
m_indexColumn.setCellRenderer(new IndexToggleRenderer());
|
||||||
m_indexColumn.setAlign("center");
|
m_indexColumn.setAlign("center");
|
||||||
|
|
||||||
m_indexChanger = new IndexChanger(m_currentFolder);
|
m_indexChanger = new IndexChanger(m_currentFolder);
|
||||||
addTableActionListener(m_indexChanger);
|
addTableActionListener(m_indexChanger);
|
||||||
}
|
}
|
||||||
m_folderChanger = new FolderChanger();
|
m_folderChanger = new FolderChanger();
|
||||||
addTableActionListener(m_folderChanger);
|
addTableActionListener(m_folderChanger);
|
||||||
|
|
||||||
m_deleter = new ItemDeleter();
|
m_deleter = new ItemDeleter();
|
||||||
addTableActionListener(m_deleter);
|
addTableActionListener(m_deleter);
|
||||||
|
|
||||||
|
|
||||||
setEmptyView(new Label(globalize("cms.ui.folder.no_items")));
|
setEmptyView(new Label(globalize("cms.ui.folder.no_items")));
|
||||||
|
|
||||||
Assert.exists( m_currentFolder.getStateParameter() );
|
Assert.exists(m_currentFolder.getStateParameter());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(Page p) {
|
public void register(Page p) {
|
||||||
super.register(p);
|
super.register(p);
|
||||||
|
|
||||||
p.addComponentStateParam(this, m_currentFolder.getStateParameter());
|
p.addComponentStateParam(this, m_currentFolder.getStateParameter());
|
||||||
p.addComponentStateParam(this, m_sortType);
|
p.addComponentStateParam(this, m_sortType);
|
||||||
p.addComponentStateParam(this, m_sortDirection);
|
p.addComponentStateParam(this, m_sortDirection);
|
||||||
p.addActionListener(new ActionListener() {
|
p.addActionListener(new ActionListener() {
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
final PageState state = e.getPageState();
|
final PageState state = e.getPageState();
|
||||||
|
|
||||||
if (state.isVisibleOnPage(FolderBrowser.this)) {
|
if (state.isVisibleOnPage(FolderBrowser.this)) {
|
||||||
showHideFolderActions(state);
|
showHideFolderActions(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showHideFolderActions(PageState state) {
|
private void showHideFolderActions(PageState state) {
|
||||||
SecurityManager sm = Utilities.getSecurityManager(state);
|
SecurityManager sm = Utilities.getSecurityManager(state);
|
||||||
Folder folder = (Folder) m_currentFolder.getSelectedObject(state);
|
Folder folder = (Folder) m_currentFolder.getSelectedObject(state);
|
||||||
Assert.exists(folder);
|
Assert.exists(folder);
|
||||||
|
|
||||||
boolean canDelete =
|
boolean canDelete =
|
||||||
sm.canAccess(state.getRequest(), SecurityManager.DELETE_ITEM, folder);
|
sm.canAccess(state.getRequest(), SecurityManager.DELETE_ITEM,
|
||||||
|
folder);
|
||||||
|
|
||||||
m_deleteColumn.setVisible(state, canDelete);
|
m_deleteColumn.setVisible(state, canDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void respond(PageState state) throws ServletException {
|
public void respond(PageState state) throws ServletException {
|
||||||
String key = state.getControlEventName();
|
String key = state.getControlEventName();
|
||||||
String value = state.getControlEventValue();
|
String value = state.getControlEventValue();
|
||||||
if ( SORT_ACTION_UP.equals(key) ) {
|
if (SORT_ACTION_UP.equals(key)) {
|
||||||
state.setValue(m_sortType, value);
|
state.setValue(m_sortType, value);
|
||||||
state.setValue(m_sortDirection, SORT_ACTION_UP);
|
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_sortType, value);
|
||||||
state.setValue(m_sortDirection, SORT_ACTION_DOWN);
|
state.setValue(m_sortDirection, SORT_ACTION_DOWN);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -233,101 +236,141 @@ public class FolderBrowser extends Table {
|
||||||
//throw new ServletException("Unknown control event: " + key);
|
//throw new ServletException("Unknown control event: " + key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public FolderSelectionModel getFolderSelectionModel() {
|
public FolderSelectionModel getFolderSelectionModel() {
|
||||||
return m_currentFolder;
|
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
|
private class FolderTableModelBuilder
|
||||||
extends AbstractTableModelBuilder implements PaginationModelBuilder {
|
extends AbstractTableModelBuilder implements PaginationModelBuilder {
|
||||||
|
|
||||||
private FolderSelectionModel m_folder;
|
private FolderSelectionModel m_folder;
|
||||||
private RequestLocal m_size;
|
private RequestLocal m_size;
|
||||||
private RequestLocal m_itemColl;
|
private RequestLocal m_itemColl;
|
||||||
private FolderBrowser m_fb;
|
private FolderBrowser m_fb;
|
||||||
|
|
||||||
public FolderTableModelBuilder(FolderSelectionModel sel) {
|
public FolderTableModelBuilder(FolderSelectionModel sel) {
|
||||||
this(sel, null);
|
this(sel, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FolderTableModelBuilder(FolderSelectionModel sel, FolderBrowser fb) {
|
public FolderTableModelBuilder(FolderSelectionModel sel,
|
||||||
|
FolderBrowser fb) {
|
||||||
super();
|
super();
|
||||||
m_folder = sel;
|
m_folder = sel;
|
||||||
m_size = new RequestLocal();
|
m_size = new RequestLocal();
|
||||||
m_itemColl = new RequestLocal();
|
m_itemColl = new RequestLocal();
|
||||||
m_fb = fb;
|
m_fb = fb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TableModel makeModel(Table t, PageState s) {
|
public TableModel makeModel(Table t, PageState s) {
|
||||||
FolderSelectionModel sel = ((FolderBrowser) t).getFolderSelectionModel();
|
FolderSelectionModel sel = ((FolderBrowser) t).
|
||||||
|
getFolderSelectionModel();
|
||||||
Folder f = (Folder) sel.getSelectedObject(s);
|
Folder f = (Folder) sel.getSelectedObject(s);
|
||||||
if ( f == null ) {
|
if (f == null) {
|
||||||
return Table.EMPTY_MODEL;
|
return Table.EMPTY_MODEL;
|
||||||
} else {
|
} else {
|
||||||
t.getRowSelectionModel().clearSelection(s);
|
t.getRowSelectionModel().clearSelection(s);
|
||||||
return new FolderTableModel
|
s_log.debug(String.format("filter = '%s'", s.getValue(m_filter)));
|
||||||
((FolderBrowser) t, s, (Folder.ItemCollection) m_itemColl.get(s));
|
Folder.ItemCollection itemColl = (Folder.ItemCollection) m_itemColl.
|
||||||
|
get(s);
|
||||||
|
s_log.debug(String.format("itemColl.size = %d", itemColl.size()));
|
||||||
|
/*if (itemColl.size() < 20) {
|
||||||
|
s_log.debug("Setting filter invisible.");
|
||||||
|
m_filterForm.setVisible(s, false);
|
||||||
|
} else {
|
||||||
|
s_log.debug("Setting filter visible.");
|
||||||
|
m_filterForm.setVisible(s, true);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
m_folderSize = itemColl.size();
|
||||||
|
if (s.getValue(m_filter) != null) {
|
||||||
|
itemColl.addFilter(String.format(
|
||||||
|
"lower(name) like lower('%s%%') or lower(displayName) like lower('%s%%')",
|
||||||
|
s.getValue(m_filter),
|
||||||
|
s.getValue(m_filter)));
|
||||||
|
}
|
||||||
|
return new FolderTableModel((FolderBrowser) t, s, itemColl);
|
||||||
|
//((FolderBrowser) t, s, (Folder.ItemCollection) m_itemColl.get(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTotalSize(Paginator paginator, PageState state) {
|
public int getTotalSize(Paginator paginator, PageState state) {
|
||||||
|
|
||||||
Integer size = (Integer) m_size.get(state);
|
Integer size = (Integer) m_size.get(state);
|
||||||
|
|
||||||
if (size == null) {
|
if (size == null) {
|
||||||
|
|
||||||
Folder f = (Folder) m_folder.getSelectedObject(state);
|
Folder f = (Folder) m_folder.getSelectedObject(state);
|
||||||
|
|
||||||
Folder.ItemCollection itemColl = f.getPrimaryInstances();
|
Folder.ItemCollection itemColl = f.getPrimaryInstances();
|
||||||
|
|
||||||
if (itemColl == null) {
|
if (itemColl == null) {
|
||||||
return 0;
|
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(
|
PermissionService.filterQuery(
|
||||||
itemColl,
|
itemColl,
|
||||||
"id",
|
"id",
|
||||||
PrivilegeDescriptor.READ,
|
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)),
|
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";
|
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";
|
direction = "desc";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( sortKey.equals(SORT_KEY_TITLE) ) {
|
if (sortKey.equals(SORT_KEY_TITLE)) {
|
||||||
itemColl.setOrder("lower(item." +
|
itemColl.setOrder("lower(item." + ContentItem.DISPLAY_NAME
|
||||||
ContentItem.DISPLAY_NAME + ") " +
|
+ ") " + direction);
|
||||||
direction);
|
} else if (sortKey.equals(SORT_KEY_NAME)) {
|
||||||
} else if ( sortKey.equals(SORT_KEY_NAME) ) {
|
itemColl.setOrder("lower(item." + ContentItem.NAME + ") "
|
||||||
itemColl.setOrder("lower(item." +
|
+ direction);
|
||||||
ContentItem.NAME + ") " + direction);
|
} else if (sortKey.equals(SORT_KEY_LAST_MODIFIED_DATE)) {
|
||||||
} else if ( sortKey.equals(SORT_KEY_LAST_MODIFIED_DATE)) {
|
itemColl.setOrder("item.auditing.lastModifiedDate "
|
||||||
itemColl.setOrder("item.auditing.lastModifiedDate " +
|
+ direction);
|
||||||
direction);
|
} else if (sortKey.equals(SORT_KEY_CREATION_DATE)) {
|
||||||
} 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);
|
m_size.set(state, size);
|
||||||
m_itemColl.set(state, itemColl);
|
m_itemColl.set(state, itemColl);
|
||||||
}
|
}
|
||||||
|
|
||||||
return size.intValue();
|
return size.intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFolderBrowser(FolderBrowser fb) {
|
public void setFolderBrowser(FolderBrowser fb) {
|
||||||
m_fb = fb;
|
m_fb = fb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether the paginator should be visible,
|
* Indicates whether the paginator should be visible,
|
||||||
* based on the visibility of the folder browser itself.
|
* based on the visibility of the folder browser itself.
|
||||||
|
|
@ -336,61 +379,62 @@ public class FolderBrowser extends Table {
|
||||||
* associated folder browser is unknown.
|
* associated folder browser is unknown.
|
||||||
*/
|
*/
|
||||||
public boolean isVisible(PageState state) {
|
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
|
private class HeaderCellRenderer
|
||||||
extends com.arsdigita.cms.ui.util.DefaultTableCellRenderer {
|
extends com.arsdigita.cms.ui.util.DefaultTableCellRenderer {
|
||||||
|
|
||||||
private String m_key;
|
private String m_key;
|
||||||
|
|
||||||
public HeaderCellRenderer(String key) {
|
public HeaderCellRenderer(String key) {
|
||||||
super(true);
|
super(true);
|
||||||
m_key = key;
|
m_key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component getComponent(final Table table, final PageState state,
|
public Component getComponent(final Table table, final PageState state,
|
||||||
Object value,
|
Object value,
|
||||||
boolean isSelected, Object key,
|
boolean isSelected, Object key,
|
||||||
int row, int column) {
|
int row, int column) {
|
||||||
String headerName = (String)((GlobalizedMessage)value).localize();
|
String headerName = (String) ((GlobalizedMessage) value).localize();
|
||||||
String sortKey = (String)state.getValue(m_sortType);
|
String sortKey = (String) state.getValue(m_sortType);
|
||||||
final boolean isCurrentKey = sortKey.equals(m_key);
|
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;
|
String imageURLStub = null;
|
||||||
|
|
||||||
if (SORT_ACTION_UP.equals(currentSortDirection)) {
|
if (SORT_ACTION_UP.equals(currentSortDirection)) {
|
||||||
imageURLStub = "gray-triangle-up.gif";
|
imageURLStub = "gray-triangle-up.gif";
|
||||||
} else {
|
} else {
|
||||||
imageURLStub = "gray-triangle-down.gif";
|
imageURLStub = "gray-triangle-down.gif";
|
||||||
}
|
}
|
||||||
|
|
||||||
ControlLink cl = new ControlLink(headerName) {
|
ControlLink cl = new ControlLink(headerName) {
|
||||||
|
|
||||||
public void setControlEvent(PageState ps) {
|
public void setControlEvent(PageState ps) {
|
||||||
String sortDirectionAction = null;
|
String sortDirectionAction = null;
|
||||||
// by default, everything sorts "up" unless it
|
// by default, everything sorts "up" unless it
|
||||||
// is the current key and it is already pointing up
|
// is the current key and it is already pointing up
|
||||||
if (SORT_ACTION_UP.equals(currentSortDirection) &&
|
if (SORT_ACTION_UP.equals(currentSortDirection)
|
||||||
isCurrentKey) {
|
&& isCurrentKey) {
|
||||||
sortDirectionAction = SORT_ACTION_DOWN;
|
sortDirectionAction = SORT_ACTION_DOWN;
|
||||||
} else {
|
} else {
|
||||||
sortDirectionAction = SORT_ACTION_UP;
|
sortDirectionAction = SORT_ACTION_UP;
|
||||||
}
|
}
|
||||||
ps.setControlEvent(table,
|
ps.setControlEvent(table,
|
||||||
sortDirectionAction,
|
sortDirectionAction,
|
||||||
m_key);
|
m_key);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Label l = new Label();
|
Label l = new Label();
|
||||||
l.setLabel("<font color=\"blue\">" + headerName + "</font>");
|
l.setLabel("<font color=\"blue\">" + headerName + "</font>");
|
||||||
l.setOutputEscaping(false);
|
l.setOutputEscaping(false);
|
||||||
l.setFontWeight(Label.BOLD);
|
l.setFontWeight(Label.BOLD);
|
||||||
|
|
||||||
SimpleContainer container = new SimpleContainer();
|
SimpleContainer container = new SimpleContainer();
|
||||||
container.add(l);
|
container.add(l);
|
||||||
if ( isCurrentKey ) {
|
if (isCurrentKey) {
|
||||||
Image image = new Image("/assets/" + imageURLStub);
|
Image image = new Image("/assets/" + imageURLStub);
|
||||||
image.setBorder("0");
|
image.setBorder("0");
|
||||||
container.add(image);
|
container.add(image);
|
||||||
|
|
@ -399,105 +443,112 @@ public class FolderBrowser extends Table {
|
||||||
return cl;
|
return cl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Produce links to view an item or control links for folders
|
* Produce links to view an item or control links for folders
|
||||||
* to change into the folder.
|
* to change into the folder.
|
||||||
*/
|
*/
|
||||||
private class NameCellRenderer extends DefaultTableCellRenderer {
|
private class NameCellRenderer extends DefaultTableCellRenderer {
|
||||||
|
|
||||||
public NameCellRenderer() {
|
public NameCellRenderer() {
|
||||||
super(true);
|
super(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getComponent(Table table, PageState state, Object value,
|
public Component getComponent(Table table, PageState state, Object value,
|
||||||
boolean isSelected, Object key,
|
boolean isSelected, Object key,
|
||||||
int row, int column) {
|
int row, int column) {
|
||||||
|
|
||||||
Folder.ItemCollection coll = (Folder.ItemCollection) value;
|
Folder.ItemCollection coll = (Folder.ItemCollection) value;
|
||||||
String name = coll.getName();
|
String name = coll.getName();
|
||||||
if ( coll.isFolder() ) {
|
if (coll.isFolder()) {
|
||||||
return super.getComponent(table, state, name,
|
return super.getComponent(table, state, name,
|
||||||
isSelected, key, row, column);
|
isSelected, key, row, column);
|
||||||
} else {
|
} else {
|
||||||
ContentSection section = CMS.getContext().getContentSection();
|
ContentSection section = CMS.getContext().getContentSection();
|
||||||
BigDecimal id = coll.getID();
|
BigDecimal id = coll.getID();
|
||||||
|
|
||||||
if (section == null) {
|
if (section == null) {
|
||||||
return new Label(name);
|
return new Label(name);
|
||||||
} else {
|
} else {
|
||||||
ItemResolver resolver = section.getItemResolver();
|
ItemResolver resolver = section.getItemResolver();
|
||||||
return new Link(name, resolver.generateItemURL
|
return new Link(name, resolver.generateItemURL(state, id,
|
||||||
(state, id, name, section, coll.getVersion()));
|
name, section, coll.
|
||||||
|
getVersion()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Produce delete links for items and non-empty folders.
|
* Produce delete links for items and non-empty folders.
|
||||||
*/
|
*/
|
||||||
private static class ActionCellRenderer implements TableCellRenderer {
|
private static class ActionCellRenderer implements TableCellRenderer {
|
||||||
|
|
||||||
private static Label s_noAction;
|
private static Label s_noAction;
|
||||||
private static ControlLink s_link;
|
private static ControlLink s_link;
|
||||||
private static final Logger logger = Logger.getLogger(ActionCellRenderer.class);
|
private static final Logger logger = Logger.getLogger(
|
||||||
|
ActionCellRenderer.class);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
logger.debug("Static initializer is starting...");
|
logger.debug("Static initializer is starting...");
|
||||||
s_noAction = new Label(" ", false);
|
s_noAction = new Label(" ", false);
|
||||||
s_noAction.lock();
|
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 ?
|
s_link.setConfirmation("Permanently delete this item?"); // XXX G11N ?
|
||||||
logger.debug("Static initializer finished.");
|
logger.debug("Static initializer finished.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component getComponent(Table table, PageState state, Object value,
|
public Component getComponent(Table table, PageState state, Object value,
|
||||||
boolean isSelected, Object key,
|
boolean isSelected, Object key,
|
||||||
int row, int column) {
|
int row, int column) {
|
||||||
if ( ((Boolean) value).booleanValue() ) {
|
if (((Boolean) value).booleanValue()) {
|
||||||
return s_link;
|
return s_link;
|
||||||
} else {
|
} else {
|
||||||
return s_noAction;
|
return s_noAction;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class IndexToggleRenderer implements TableCellRenderer {
|
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,
|
||||||
if ( value == null ) {
|
int column) {
|
||||||
|
|
||||||
|
if (value == null) {
|
||||||
return new Label(GlobalizationUtil.globalize("cms.ui.folder.na"));
|
return new Label(GlobalizationUtil.globalize("cms.ui.folder.na"));
|
||||||
}
|
}
|
||||||
ControlLink link = new ControlLink("");
|
ControlLink link = new ControlLink("");
|
||||||
|
|
||||||
if (((Boolean) value).booleanValue()) {
|
if (((Boolean) value).booleanValue()) {
|
||||||
link.setClassAttr("checkBoxChecked");
|
link.setClassAttr("checkBoxChecked");
|
||||||
} else {
|
} else {
|
||||||
link.setClassAttr("checkBoxUnchecked");
|
link.setClassAttr("checkBoxUnchecked");
|
||||||
}
|
}
|
||||||
|
|
||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deletes an item
|
// Deletes an item
|
||||||
private class ItemDeleter extends TableActionAdapter {
|
private class ItemDeleter extends TableActionAdapter {
|
||||||
|
|
||||||
public void cellSelected(TableActionEvent e) {
|
public void cellSelected(TableActionEvent e) {
|
||||||
int col = e.getColumn().intValue();
|
int col = e.getColumn().intValue();
|
||||||
|
|
||||||
if ( m_deleteColumn != getColumn(col) ) {
|
if (m_deleteColumn != getColumn(col)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PageState s = e.getPageState();
|
PageState s = e.getPageState();
|
||||||
BigDecimal id = new BigDecimal(e.getRowKey().toString());
|
BigDecimal id = new BigDecimal(e.getRowKey().toString());
|
||||||
|
|
||||||
OID oid = new OID(ContentItem.BASE_DATA_OBJECT_TYPE, id.abs());
|
OID oid = new OID(ContentItem.BASE_DATA_OBJECT_TYPE, id.abs());
|
||||||
|
|
||||||
final DomainObject item = DomainObjectFactory.newInstance(oid);
|
final DomainObject item = DomainObjectFactory.newInstance(oid);
|
||||||
|
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
if (item instanceof ContentBundle) {
|
if (item instanceof ContentBundle) {
|
||||||
ContentBundle bundle = (ContentBundle) item;
|
ContentBundle bundle = (ContentBundle) item;
|
||||||
|
|
@ -508,15 +559,16 @@ public class FolderBrowser extends Table {
|
||||||
}
|
}
|
||||||
item.delete();
|
item.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
((Table) e.getSource()).clearSelection(s);
|
((Table) e.getSource()).clearSelection(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Table model around ItemCollection
|
* Table model around ItemCollection
|
||||||
*/
|
*/
|
||||||
private static class FolderTableModel implements TableModel {
|
private static class FolderTableModel implements TableModel {
|
||||||
|
|
||||||
private static final int NAME = 0;
|
private static final int NAME = 0;
|
||||||
private static final int TITLE = 1;
|
private static final int TITLE = 1;
|
||||||
private static final int TYPE = 2;
|
private static final int TYPE = 2;
|
||||||
|
|
@ -524,43 +576,42 @@ public class FolderBrowser extends Table {
|
||||||
private static final int LAST_MODIFIED = 4;
|
private static final int LAST_MODIFIED = 4;
|
||||||
private static final int DELETABLE = 5;
|
private static final int DELETABLE = 5;
|
||||||
private static final int IS_INDEX = 6;
|
private static final int IS_INDEX = 6;
|
||||||
|
|
||||||
private PageState m_state;
|
private PageState m_state;
|
||||||
private FolderBrowser m_table;
|
private FolderBrowser m_table;
|
||||||
private Folder.ItemCollection m_itemColl;
|
private Folder.ItemCollection m_itemColl;
|
||||||
private Folder m_fol;
|
private Folder m_fol;
|
||||||
private BigDecimal m_folIndexID;
|
private BigDecimal m_folIndexID;
|
||||||
|
|
||||||
//old constructor before using paginator
|
//old constructor before using paginator
|
||||||
//public FolderTableModel(Folder folder) {
|
//public FolderTableModel(Folder folder) {
|
||||||
//m_itemColl = folder.getItems();
|
//m_itemColl = folder.getItems();
|
||||||
//}
|
//}
|
||||||
|
public FolderTableModel(FolderBrowser table, PageState state,
|
||||||
public FolderTableModel
|
Folder.ItemCollection itemColl) {
|
||||||
(FolderBrowser table, PageState state, Folder.ItemCollection itemColl) {
|
|
||||||
m_state = state;
|
m_state = state;
|
||||||
m_table = table;
|
m_table = table;
|
||||||
m_itemColl = itemColl;
|
m_itemColl = itemColl;
|
||||||
|
|
||||||
m_fol = (Folder) table.getFolderSelectionModel().getSelectedObject(state);
|
m_fol = (Folder) table.getFolderSelectionModel().getSelectedObject(
|
||||||
|
state);
|
||||||
if (!hideIndexColumn()) {
|
if (!hideIndexColumn()) {
|
||||||
ContentBundle indexItem = m_fol.getIndexItem();
|
ContentBundle indexItem = m_fol.getIndexItem();
|
||||||
if ( indexItem == null ) {
|
if (indexItem == null) {
|
||||||
m_folIndexID = null;
|
m_folIndexID = null;
|
||||||
} else {
|
} else {
|
||||||
m_folIndexID = indexItem.getID();
|
m_folIndexID = indexItem.getID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getColumnCount() {
|
public int getColumnCount() {
|
||||||
return hideIndexColumn() ? 6 : 7;
|
return hideIndexColumn() ? 6 : 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean nextRow() {
|
public boolean nextRow() {
|
||||||
return m_itemColl.next();
|
return m_itemColl.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getElementAt(int columnIndex) {
|
public Object getElementAt(int columnIndex) {
|
||||||
switch (columnIndex) {
|
switch (columnIndex) {
|
||||||
case NAME:
|
case NAME:
|
||||||
|
|
@ -571,14 +622,15 @@ public class FolderBrowser extends Table {
|
||||||
return m_itemColl.getTypeLabel();
|
return m_itemColl.getTypeLabel();
|
||||||
case CREATION_DATE: {
|
case CREATION_DATE: {
|
||||||
java.util.Date creationDate = m_itemColl.getCreationDate();
|
java.util.Date creationDate = m_itemColl.getCreationDate();
|
||||||
if ( creationDate == null ) {
|
if (creationDate == null) {
|
||||||
return "--";
|
return "--";
|
||||||
}
|
}
|
||||||
return FormatStandards.formatDate(creationDate);
|
return FormatStandards.formatDate(creationDate);
|
||||||
}
|
}
|
||||||
case LAST_MODIFIED: {
|
case LAST_MODIFIED: {
|
||||||
java.util.Date lastModified = m_itemColl.getLastModifiedDate();
|
java.util.Date lastModified =
|
||||||
if ( lastModified == null ) {
|
m_itemColl.getLastModifiedDate();
|
||||||
|
if (lastModified == null) {
|
||||||
return "--";
|
return "--";
|
||||||
}
|
}
|
||||||
return FormatStandards.formatDate(lastModified);
|
return FormatStandards.formatDate(lastModified);
|
||||||
|
|
@ -587,48 +639,50 @@ public class FolderBrowser extends Table {
|
||||||
return new Boolean(isDeletable());
|
return new Boolean(isDeletable());
|
||||||
case IS_INDEX: {
|
case IS_INDEX: {
|
||||||
if (hideIndexColumn()) {
|
if (hideIndexColumn()) {
|
||||||
throw new IndexOutOfBoundsException("Column index " + columnIndex +
|
throw new IndexOutOfBoundsException(
|
||||||
" not in table model.");
|
"Column index " + columnIndex
|
||||||
|
+ " not in table model.");
|
||||||
}
|
}
|
||||||
if ( m_itemColl.isFolder() ) {
|
if (m_itemColl.isFolder()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if ( m_folIndexID == null ) {
|
if (m_folIndexID == null) {
|
||||||
return new Boolean(false);
|
return new Boolean(false);
|
||||||
}
|
}
|
||||||
return new Boolean(m_folIndexID
|
return new Boolean(m_folIndexID.compareTo(m_itemColl.
|
||||||
.compareTo(m_itemColl.getBundleID()) == 0);
|
getBundleID()) == 0);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw new IndexOutOfBoundsException("Column index " + columnIndex +
|
throw new IndexOutOfBoundsException("Column index "
|
||||||
" not in table model.");
|
+ columnIndex
|
||||||
|
+ " not in table model.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDeletable() {
|
public boolean isDeletable() {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Checking to see if " + this + " is deletable");
|
s_log.debug("Checking to see if " + this + " is deletable");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_itemColl.isLive()) {
|
if (m_itemColl.isLive()) {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("The item is live; it cannot be deleted");
|
s_log.debug("The item is live; it cannot be deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_itemColl.isFolder()) {
|
if (m_itemColl.isFolder()) {
|
||||||
if (!m_itemColl.hasChildren()) {
|
if (!m_itemColl.hasChildren()) {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("The item is an empty folder; it may be " +
|
s_log.debug("The item is an empty folder; it may be "
|
||||||
"deleted");
|
+ "deleted");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("The folder is not empty; it cannot be " +
|
s_log.debug("The folder is not empty; it cannot be "
|
||||||
"deleted");
|
+ "deleted");
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -636,58 +690,62 @@ public class FolderBrowser extends Table {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("The item is not a folder; it may be deleted");
|
s_log.debug("The item is not a folder; it may be deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getKeyAt(int columnIndex) {
|
public Object getKeyAt(int columnIndex) {
|
||||||
// Mark folders by using their negative ID (dirty, dirty)
|
// Mark folders by using their negative ID (dirty, dirty)
|
||||||
return ( m_itemColl.isFolder() ) ? m_itemColl.getID().negate()
|
return (m_itemColl.isFolder()) ? m_itemColl.getID().negate()
|
||||||
: m_itemColl.getBundleID();
|
: m_itemColl.getBundleID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FolderChanger extends TableActionAdapter {
|
private class FolderChanger extends TableActionAdapter {
|
||||||
|
|
||||||
public void cellSelected(TableActionEvent e) {
|
public void cellSelected(TableActionEvent e) {
|
||||||
PageState s = e.getPageState();
|
PageState s = e.getPageState();
|
||||||
int col = e.getColumn().intValue();
|
int col = e.getColumn().intValue();
|
||||||
|
|
||||||
if ( m_nameColumn != getColumn(col) ) {
|
if (m_nameColumn != getColumn(col)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String key = (String) e.getRowKey();
|
String key = (String) e.getRowKey();
|
||||||
if ( key.startsWith("-") ) { // XXX dirty dirty
|
if (key.startsWith("-")) { // XXX dirty dirty
|
||||||
clearSelection(s);
|
clearSelection(s);
|
||||||
getFolderSelectionModel().setSelectedKey(s, key.substring(1));
|
getFolderSelectionModel().setSelectedKey(s, key.substring(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class IndexChanger extends TableActionAdapter {
|
private class IndexChanger extends TableActionAdapter {
|
||||||
|
|
||||||
private FolderSelectionModel m_fol;
|
private FolderSelectionModel m_fol;
|
||||||
|
|
||||||
public IndexChanger(FolderSelectionModel fol) {
|
public IndexChanger(FolderSelectionModel fol) {
|
||||||
super();
|
super();
|
||||||
m_fol = fol;
|
m_fol = fol;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cellSelected(TableActionEvent e) {
|
public void cellSelected(TableActionEvent e) {
|
||||||
PageState state = e.getPageState();
|
PageState state = e.getPageState();
|
||||||
|
|
||||||
BigDecimal rowkey = new BigDecimal((String)e.getRowKey());
|
BigDecimal rowkey = new BigDecimal((String) e.getRowKey());
|
||||||
if (rowkey == null){
|
if (rowkey == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ContentBundle contentItem = new ContentBundle(rowkey);
|
ContentBundle contentItem = new ContentBundle(rowkey);
|
||||||
|
|
||||||
Folder folder = (Folder) m_fol.getSelectedObject(state);
|
Folder folder = (Folder) m_fol.getSelectedObject(state);
|
||||||
|
|
||||||
ContentBundle currentIndexItem = (ContentBundle) folder.getIndexItem();
|
ContentBundle currentIndexItem = (ContentBundle) folder.
|
||||||
if ( currentIndexItem == null || (currentIndexItem.getID().compareTo(contentItem.getID()) != 0)) {
|
getIndexItem();
|
||||||
|
if (currentIndexItem == null || (currentIndexItem.getID().
|
||||||
|
compareTo(contentItem.getID())
|
||||||
|
!= 0)) {
|
||||||
folder.setIndexItem(contentItem);
|
folder.setIndexItem(contentItem);
|
||||||
} else {
|
} else {
|
||||||
folder.removeIndexItem();
|
folder.removeIndexItem();
|
||||||
|
|
@ -698,7 +756,7 @@ public class FolderBrowser extends Table {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getting the GlobalizedMessage using a CMS Class targetBundle.
|
* Getting the GlobalizedMessage using a CMS Class targetBundle.
|
||||||
*
|
*
|
||||||
|
|
@ -708,7 +766,7 @@ public class FolderBrowser extends Table {
|
||||||
private static GlobalizedMessage globalize(String key) {
|
private static GlobalizedMessage globalize(String key) {
|
||||||
return FolderManipulator.globalize(key);
|
return FolderManipulator.globalize(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hideIndexColumn() {
|
private static boolean hideIndexColumn() {
|
||||||
return ContentSection.getConfig().getHideFolderIndexCheckbox();
|
return ContentSection.getConfig().getHideFolderIndexCheckbox();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ import java.util.Map;
|
||||||
/**
|
/**
|
||||||
* Encapsulates a {@link FolderManipulator} in order to create a flat
|
* Encapsulates a {@link FolderManipulator} in order to create a flat
|
||||||
* item listing. Also contains a new item form.
|
* item listing. Also contains a new item form.
|
||||||
2 *
|
*
|
||||||
* @author <a href="mailto:sfreidin@arsdigita.com">Stanislav Freidin</a>
|
* @author <a href="mailto:sfreidin@arsdigita.com">Stanislav Freidin</a>
|
||||||
* @version $Revision: #6 $ $DateTime: 2004/08/17 23:15:09 $
|
* @version $Revision: #6 $ $DateTime: 2004/08/17 23:15:09 $
|
||||||
* @version Id: FolderItemPane.java 287 2005-02-22 00:29:02Z sskracic $
|
* @version Id: FolderItemPane.java 287 2005-02-22 00:29:02Z sskracic $
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.ui.folder;
|
package com.arsdigita.cms.ui.folder;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.ActionLink;
|
||||||
import com.arsdigita.bebop.BoxPanel;
|
import com.arsdigita.bebop.BoxPanel;
|
||||||
import com.arsdigita.bebop.Component;
|
import com.arsdigita.bebop.Component;
|
||||||
import com.arsdigita.bebop.Container;
|
import com.arsdigita.bebop.Container;
|
||||||
|
|
@ -37,6 +38,9 @@ import com.arsdigita.bebop.SaveCancelSection;
|
||||||
import com.arsdigita.bebop.SimpleContainer;
|
import com.arsdigita.bebop.SimpleContainer;
|
||||||
import com.arsdigita.bebop.Table;
|
import com.arsdigita.bebop.Table;
|
||||||
import com.arsdigita.bebop.Tree;
|
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.FormProcessListener;
|
||||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
import com.arsdigita.bebop.event.FormSubmissionListener;
|
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.OptionGroup;
|
||||||
import com.arsdigita.bebop.form.SingleSelect;
|
import com.arsdigita.bebop.form.SingleSelect;
|
||||||
import com.arsdigita.bebop.form.Submit;
|
import com.arsdigita.bebop.form.Submit;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
import com.arsdigita.bebop.parameters.ArrayParameter;
|
import com.arsdigita.bebop.parameters.ArrayParameter;
|
||||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||||
import com.arsdigita.bebop.parameters.StringParameter;
|
import com.arsdigita.bebop.parameters.StringParameter;
|
||||||
import com.arsdigita.bebop.table.TableCellRenderer;
|
import com.arsdigita.bebop.table.TableCellRenderer;
|
||||||
import com.arsdigita.bebop.table.TableColumn;
|
import com.arsdigita.bebop.table.TableColumn;
|
||||||
import com.arsdigita.bebop.tree.TreeCellRenderer;
|
import com.arsdigita.bebop.tree.TreeCellRenderer;
|
||||||
|
import com.arsdigita.cms.CMSGlobalized;
|
||||||
import com.arsdigita.cms.ContentBundle;
|
import com.arsdigita.cms.ContentBundle;
|
||||||
import com.arsdigita.cms.ContentItem;
|
import com.arsdigita.cms.ContentItem;
|
||||||
import com.arsdigita.cms.ContentSection;
|
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 $
|
* @version $Id: FolderManipulator.java 1940 2009-05-29 07:15:05Z terry $
|
||||||
*/
|
*/
|
||||||
public class FolderManipulator extends SimpleContainer
|
public class FolderManipulator extends SimpleContainer
|
||||||
implements FormProcessListener, FormValidationListener,
|
implements FormProcessListener, FormValidationListener,
|
||||||
FormSubmissionListener, Resettable {
|
FormSubmissionListener, Resettable {
|
||||||
|
|
||||||
private static Logger s_log =
|
private static Logger s_log =
|
||||||
Logger.getLogger(FolderManipulator.class);
|
Logger.getLogger(FolderManipulator.class);
|
||||||
|
|
||||||
public static final String RESOURCE_BUNDLE =
|
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 MOVE = "Move";
|
||||||
private static final String COPY = "Copy";
|
private static final String COPY = "Copy";
|
||||||
|
|
||||||
private static final BigDecimal[] EMPTY_ARRAY = new BigDecimal[0];
|
private static final BigDecimal[] EMPTY_ARRAY = new BigDecimal[0];
|
||||||
|
|
||||||
private ArrayParameter m_sources;
|
private ArrayParameter m_sources;
|
||||||
private StringParameter m_action;
|
private StringParameter m_action;
|
||||||
|
|
||||||
// The folder in which the source items live
|
// The folder in which the source items live
|
||||||
private FolderSelectionModel m_srcFolderSel;
|
private FolderSelectionModel m_srcFolderSel;
|
||||||
private ItemView m_itemView;
|
private ItemView m_itemView;
|
||||||
private TargetSelector m_targetSelector;
|
private TargetSelector m_targetSelector;
|
||||||
|
private FilterForm m_filterForm;
|
||||||
|
private StringParameter m_filter = new StringParameter("filter");
|
||||||
|
|
||||||
public FolderManipulator(FolderSelectionModel folderSel) {
|
public FolderManipulator(FolderSelectionModel folderSel) {
|
||||||
m_sources = new ArrayParameter(new BigDecimalParameter("srcs"));
|
m_sources = new ArrayParameter(new BigDecimalParameter("srcs"));
|
||||||
m_action = new StringParameter("act");
|
m_action = new StringParameter("act");
|
||||||
m_srcFolderSel = folderSel;
|
m_srcFolderSel = folderSel;
|
||||||
|
|
||||||
|
s_log.debug("Adding filter form...");
|
||||||
|
m_filterForm = new FilterForm();
|
||||||
|
add(m_filterForm);
|
||||||
|
|
||||||
m_itemView = new ItemView();
|
m_itemView = new ItemView();
|
||||||
m_itemView.addProcessListener(this);
|
m_itemView.addProcessListener(this);
|
||||||
m_itemView.addValidationListener(this);
|
m_itemView.addValidationListener(this);
|
||||||
|
|
@ -133,16 +140,18 @@ public class FolderManipulator extends SimpleContainer
|
||||||
public void register(Page p) {
|
public void register(Page p) {
|
||||||
super.register(p);
|
super.register(p);
|
||||||
p.setVisibleDefault(m_targetSelector, false);
|
p.setVisibleDefault(m_targetSelector, false);
|
||||||
|
p.setVisibleDefault(m_filterForm, true);
|
||||||
p.addComponentStateParam(this, m_sources);
|
p.addComponentStateParam(this, m_sources);
|
||||||
p.addComponentStateParam(this, m_action);
|
p.addComponentStateParam(this, m_action);
|
||||||
|
p.addComponentStateParam(this, m_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final BigDecimal[] getSources(PageState s) {
|
public final BigDecimal[] getSources(PageState s) {
|
||||||
BigDecimal[] result = (BigDecimal[]) s.getValue(m_sources);
|
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;
|
return m_srcFolderSel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,32 +172,31 @@ public class FolderManipulator extends SimpleContainer
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void moveItems(Folder target, BigDecimal[] items) {
|
protected void moveItems(Folder target, BigDecimal[] items) {
|
||||||
s_log.debug ("moving to folder: " + target + " items: " + items);
|
s_log.debug("moving to folder: " + target + " items: " + items);
|
||||||
for (int i=0; i<items.length; i++ ) {
|
for (int i = 0; i < items.length; i++) {
|
||||||
try {
|
try {
|
||||||
ContentItem item = new ContentItem(items[i]);
|
ContentItem item = new ContentItem(items[i]);
|
||||||
item.setParent(target);
|
item.setParent(target);
|
||||||
item.save();
|
item.save();
|
||||||
} catch(DataObjectNotFoundException e) {
|
} catch (DataObjectNotFoundException e) {
|
||||||
s_log.warn ("object not found in content move", e);
|
s_log.warn("object not found in content move", e);
|
||||||
throw new IllegalStateException
|
throw new IllegalStateException((String) globalize(
|
||||||
((String) globalize("cms.ui.folder.no_such_item").localize());
|
"cms.ui.folder.no_such_item").localize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected void copyItems(final Folder target,
|
protected void copyItems(final Folder target,
|
||||||
final BigDecimal[] items) {
|
final BigDecimal[] items) {
|
||||||
if (s_log.isDebugEnabled()) {
|
if (s_log.isDebugEnabled()) {
|
||||||
s_log.debug("Copying items " + Arrays.asList(items) + " to " +
|
s_log.debug("Copying items " + Arrays.asList(items) + " to "
|
||||||
target);
|
+ target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < items.length; i++) {
|
for (int i = 0; i < items.length; i++) {
|
||||||
ContentItem item = (ContentItem) DomainObjectFactory.newInstance
|
ContentItem item = (ContentItem) DomainObjectFactory.newInstance(new OID(
|
||||||
(new OID(ContentItem.BASE_DATA_OBJECT_TYPE, items[i]));
|
ContentItem.BASE_DATA_OBJECT_TYPE, items[i]));
|
||||||
|
|
||||||
Assert.exists(item, ContentItem.class);
|
Assert.exists(item, ContentItem.class);
|
||||||
|
|
||||||
|
|
@ -232,18 +240,18 @@ public class FolderManipulator extends SimpleContainer
|
||||||
@Override
|
@Override
|
||||||
public void process(FormSectionEvent e) {
|
public void process(FormSectionEvent e) {
|
||||||
PageState s = e.getPageState();
|
PageState s = e.getPageState();
|
||||||
if ( e.getSource() == m_itemView ) {
|
if (e.getSource() == m_itemView) {
|
||||||
m_itemView.setVisible(s, false);
|
m_itemView.setVisible(s, false);
|
||||||
m_targetSelector.setVisible(s, true);
|
m_targetSelector.setVisible(s, true);
|
||||||
m_targetSelector.expose(s);
|
m_targetSelector.expose(s);
|
||||||
} else if ( e.getSource() == m_targetSelector ) {
|
} else if (e.getSource() == m_targetSelector) {
|
||||||
m_itemView.setVisible(s, true);
|
m_itemView.setVisible(s, true);
|
||||||
m_targetSelector.setVisible(s, false);
|
m_targetSelector.setVisible(s, false);
|
||||||
Folder f = m_targetSelector.getTarget(s);
|
Folder f = m_targetSelector.getTarget(s);
|
||||||
BigDecimal[] items = getSources(s);
|
BigDecimal[] items = getSources(s);
|
||||||
if ( isCopy(s) ) {
|
if (isCopy(s)) {
|
||||||
copyItems(f, items);
|
copyItems(f, items);
|
||||||
} else if ( isMove(s) ) {
|
} else if (isMove(s)) {
|
||||||
moveItems(f, items);
|
moveItems(f, items);
|
||||||
}
|
}
|
||||||
reset(s);
|
reset(s);
|
||||||
|
|
@ -261,29 +269,31 @@ public class FolderManipulator extends SimpleContainer
|
||||||
boolean hasSources = sources.length > 0;
|
boolean hasSources = sources.length > 0;
|
||||||
SecurityManager sm = Utilities.getSecurityManager(s);
|
SecurityManager sm = Utilities.getSecurityManager(s);
|
||||||
|
|
||||||
if ( e.getSource() == m_itemView ) {
|
if (e.getSource() == m_itemView) {
|
||||||
if ( ! hasSources ) {
|
if (!hasSources) {
|
||||||
d.addError(globalize("cms.ui.folder.must_select_item"));
|
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
|
// The source items must have gotten lost somehow
|
||||||
if ( ! hasSources ) {
|
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);
|
Folder target = m_targetSelector.getTarget(s);
|
||||||
if ( target == null ) {
|
if (target == null) {
|
||||||
d.addError(globalize("cms.ui.folder.need_select_target_folder"));
|
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"));
|
d.addError(globalize("cms.ui.folder.not_within_same_folder"));
|
||||||
}
|
}
|
||||||
// check create item permission
|
// check create item permission
|
||||||
User user = Web.getContext().getUser();
|
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"));
|
d.addError(globalize("cms.ui.folder.no_permission_for_item"));
|
||||||
}
|
}
|
||||||
// Per-item checks
|
// Per-item checks
|
||||||
for (int i=0; i<sources.length; i++ ) {
|
for (int i = 0; i < sources.length; i++) {
|
||||||
try {
|
try {
|
||||||
item = new ContentItem(sources[i]);
|
item = new ContentItem(sources[i]);
|
||||||
name = item.getName();
|
name = item.getName();
|
||||||
|
|
@ -291,20 +301,26 @@ public class FolderManipulator extends SimpleContainer
|
||||||
items.addNameFilter(name);
|
items.addNameFilter(name);
|
||||||
if (items.next()) {
|
if (items.next()) {
|
||||||
// there is an item in the target folder that already has this name
|
// 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();
|
items.close();
|
||||||
|
|
||||||
if (item.isLive() && isMove(s)) {
|
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) ) {
|
if ((!sm.canAccess(user, SecurityManager.DELETE_ITEM, item)) && isMove(
|
||||||
d.addError((String) globalize("cms.ui.folder.no_permission_for_item").localize() + name + ".");
|
s)) {
|
||||||
|
d.addError((String) globalize(
|
||||||
|
"cms.ui.folder.no_permission_for_item").localize()
|
||||||
|
+ name + ".");
|
||||||
}
|
}
|
||||||
} catch(DataObjectNotFoundException exc) {
|
} catch (DataObjectNotFoundException exc) {
|
||||||
s_log.warn ("object not found in validation", exc);
|
s_log.warn("object not found in validation", exc);
|
||||||
throw new IllegalStateException
|
throw new IllegalStateException((String) globalize(
|
||||||
((String) globalize("cms.ui.folder.no_such_item").localize());
|
"cms.ui.folder.no_such_item").localize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -312,11 +328,12 @@ public class FolderManipulator extends SimpleContainer
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitted(FormSectionEvent e)
|
public void submitted(FormSectionEvent e)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
PageState s = e.getPageState();
|
PageState s = e.getPageState();
|
||||||
if ( m_targetSelector.isCancelled(s) ) {
|
if (m_targetSelector.isCancelled(s)) {
|
||||||
reset(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
|
// The form containing the tree to select the target folder from
|
||||||
private class TargetSelector extends Form
|
private class TargetSelector extends Form
|
||||||
implements Resettable {
|
implements Resettable {
|
||||||
|
|
||||||
private FolderSelectionModel m_targetSel;
|
private FolderSelectionModel m_targetSel;
|
||||||
private FolderTree m_folderTree;
|
private FolderTree m_folderTree;
|
||||||
|
|
||||||
private Submit m_cancel;
|
private Submit m_cancel;
|
||||||
|
|
||||||
public TargetSelector() {
|
public TargetSelector() {
|
||||||
|
|
@ -343,7 +360,7 @@ public class FolderManipulator extends SimpleContainer
|
||||||
setMethod(GET);
|
setMethod(GET);
|
||||||
m_targetSel = new FolderSelectionModel("target");
|
m_targetSel = new FolderSelectionModel("target");
|
||||||
m_folderTree = new FolderTree(m_targetSel);
|
m_folderTree = new FolderTree(m_targetSel);
|
||||||
m_folderTree.setCellRenderer (new FolderTreeCellRenderer());
|
m_folderTree.setCellRenderer(new FolderTreeCellRenderer());
|
||||||
|
|
||||||
Label l = new Label(new PrintListener() {
|
Label l = new Label(new PrintListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -365,7 +382,8 @@ public class FolderManipulator extends SimpleContainer
|
||||||
" " + msg);
|
" " + msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
l.setOutputEscaping(false);
|
l.setOutputEscaping(false);
|
||||||
add(l);
|
add(l);
|
||||||
add(m_folderTree);
|
add(m_folderTree);
|
||||||
|
|
@ -384,8 +402,8 @@ public class FolderManipulator extends SimpleContainer
|
||||||
// Set things up the first time the selector gets visible
|
// Set things up the first time the selector gets visible
|
||||||
public void expose(PageState s) {
|
public void expose(PageState s) {
|
||||||
Folder f = (Folder) m_srcFolderSel.getSelectedObject(s);
|
Folder f = (Folder) m_srcFolderSel.getSelectedObject(s);
|
||||||
m_targetSel.clearSelection (s);
|
m_targetSel.clearSelection(s);
|
||||||
if ( f != null ) {
|
if (f != null) {
|
||||||
ItemCollection i = f.getPathInfo(true);
|
ItemCollection i = f.getPathInfo(true);
|
||||||
while (i.next()) {
|
while (i.next()) {
|
||||||
m_folderTree.expand(i.getID().toString(), s);
|
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
|
// The form containing the browser and the drop down for selecting an
|
||||||
// action
|
// action
|
||||||
private class ItemView extends Form
|
private class ItemView extends Form implements Resettable {
|
||||||
implements Resettable {
|
|
||||||
private FolderBrowser m_browser;
|
private FolderBrowser m_browser;
|
||||||
private Paginator m_paginator;
|
private Paginator m_paginator;
|
||||||
|
|
||||||
private OptionGroup m_checkboxGroup;
|
private OptionGroup m_checkboxGroup;
|
||||||
private SingleSelect m_actionSel;
|
private SingleSelect m_actionSel;
|
||||||
|
|
||||||
private Submit m_submit;
|
private Submit m_submit;
|
||||||
|
|
||||||
public ItemView() {
|
public ItemView() {
|
||||||
|
|
@ -435,9 +451,12 @@ public class FolderManipulator extends SimpleContainer
|
||||||
group.setSubject(panel);
|
group.setSubject(panel);
|
||||||
|
|
||||||
m_browser = new FolderBrowser(m_srcFolderSel);
|
m_browser = new FolderBrowser(m_srcFolderSel);
|
||||||
m_paginator = new Paginator
|
m_browser.setFilterParameter(m_filter);
|
||||||
((PaginationModelBuilder)m_browser.getModelBuilder(),
|
m_browser.setFilterForm(m_filterForm);
|
||||||
ContentSection.getConfig().getFolderBrowseListSize());
|
m_paginator = new Paginator((PaginationModelBuilder) m_browser.
|
||||||
|
getModelBuilder(),
|
||||||
|
ContentSection.getConfig().
|
||||||
|
getFolderBrowseListSize());
|
||||||
panel.add(m_paginator);
|
panel.add(m_paginator);
|
||||||
panel.add(m_browser);
|
panel.add(m_browser);
|
||||||
|
|
||||||
|
|
@ -451,8 +470,10 @@ public class FolderManipulator extends SimpleContainer
|
||||||
|
|
||||||
c.add(new Label(globalize("cms.ui.folder.edit_selection")));
|
c.add(new Label(globalize("cms.ui.folder.edit_selection")));
|
||||||
m_actionSel = new SingleSelect(m_action);
|
m_actionSel = new SingleSelect(m_action);
|
||||||
m_actionSel.addOption(new Option(COPY, new Label(globalize("cms.ui.folder.copy"))));
|
m_actionSel.addOption(new Option(COPY, new Label(globalize(
|
||||||
m_actionSel.addOption(new Option(MOVE, new Label(globalize("cms.ui.folder.move"))));
|
"cms.ui.folder.copy"))));
|
||||||
|
m_actionSel.addOption(new Option(MOVE, new Label(globalize(
|
||||||
|
"cms.ui.folder.move"))));
|
||||||
c.add(m_actionSel);
|
c.add(m_actionSel);
|
||||||
m_submit = new Submit("Go", globalize("cms.ui.folder.go"));
|
m_submit = new Submit("Go", globalize("cms.ui.folder.go"));
|
||||||
c.add(m_submit);
|
c.add(m_submit);
|
||||||
|
|
@ -472,6 +493,7 @@ public class FolderManipulator extends SimpleContainer
|
||||||
m_checkboxGroup.setValue(s, null);
|
m_checkboxGroup.setValue(s, null);
|
||||||
m_actionSel.setValue(s, null);
|
m_actionSel.setValue(s, null);
|
||||||
m_paginator.reset(s);
|
m_paginator.reset(s);
|
||||||
|
s.setValue(m_filter, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The renderer for the first column in the itemView table
|
// The renderer for the first column in the itemView table
|
||||||
|
|
@ -481,13 +503,83 @@ public class FolderManipulator extends SimpleContainer
|
||||||
boolean isSelected, Object key,
|
boolean isSelected, Object key,
|
||||||
int row, int column) {
|
int row, int column) {
|
||||||
BigDecimal n = (BigDecimal) key;
|
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);
|
result.setGroup(m_checkboxGroup);
|
||||||
return result;
|
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.
|
* Getting the GlobalizedMessage using a CMS Class targetBundle.
|
||||||
*
|
*
|
||||||
|
|
@ -498,7 +590,6 @@ public class FolderManipulator extends SimpleContainer
|
||||||
return new GlobalizedMessage(key, RESOURCE_BUNDLE);
|
return new GlobalizedMessage(key, RESOURCE_BUNDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
private class FolderTreeCellRenderer implements TreeCellRenderer {
|
||||||
|
|
||||||
private RequestLocal m_invalidFolders = new RequestLocal();
|
private RequestLocal m_invalidFolders = new RequestLocal();
|
||||||
|
|
@ -523,13 +614,13 @@ public class FolderManipulator extends SimpleContainer
|
||||||
invalidFolders = new ArrayList();
|
invalidFolders = new ArrayList();
|
||||||
|
|
||||||
DataCollection collection =
|
DataCollection collection =
|
||||||
SessionManager.getSession().retrieve
|
SessionManager.getSession().retrieve(
|
||||||
(ContentItem.BASE_DATA_OBJECT_TYPE);
|
ContentItem.BASE_DATA_OBJECT_TYPE);
|
||||||
CompoundFilter filter = collection.getFilterFactory().or();
|
CompoundFilter filter = collection.getFilterFactory().or();
|
||||||
// The sources themselves are not valid.
|
// The sources themselves are not valid.
|
||||||
BigDecimal[] sources = getSources(state);
|
BigDecimal[] sources = getSources(state);
|
||||||
for (int i = 0; i < sources.length; i++) {
|
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);
|
Filter temp = filter.addFilter("id = :id" + i);
|
||||||
temp.set("id" + i, sources[i]);
|
temp.set("id" + i, sources[i]);
|
||||||
|
|
@ -537,14 +628,15 @@ public class FolderManipulator extends SimpleContainer
|
||||||
collection.addFilter(filter);
|
collection.addFilter(filter);
|
||||||
|
|
||||||
DataCollection folders =
|
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);
|
folders.addEqualsFilter(Folder.IS_DELETED, Boolean.FALSE);
|
||||||
|
|
||||||
filter = collection.getFilterFactory().or();
|
filter = collection.getFilterFactory().or();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while (collection.next()) {
|
while (collection.next()) {
|
||||||
filter.addFilter(Folder.ANCESTORS + " like :ancestors" +
|
filter.addFilter(Folder.ANCESTORS + " like :ancestors"
|
||||||
count + " || '%'");
|
+ count + " || '%'");
|
||||||
filter.set("ancestors" + count,
|
filter.set("ancestors" + count,
|
||||||
collection.get(ContentItem.ANCESTORS));
|
collection.get(ContentItem.ANCESTORS));
|
||||||
count++;
|
count++;
|
||||||
|
|
@ -552,7 +644,7 @@ public class FolderManipulator extends SimpleContainer
|
||||||
folders.addFilter(filter);
|
folders.addFilter(filter);
|
||||||
|
|
||||||
while (folders.next()) {
|
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.
|
// 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);
|
dq.setParameter("item_list", invalidFolders);
|
||||||
|
|
||||||
while (dq.next()) {
|
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
|
// The folder from which the sources are being moved/copied is
|
||||||
// not allowed.
|
// not allowed.
|
||||||
invalidFolders
|
invalidFolders.add(
|
||||||
.add(m_srcFolderSel.getSelectedKey(state).toString());
|
m_srcFolderSel.getSelectedKey(state).toString());
|
||||||
|
|
||||||
// Save the invalid folder list
|
// Save the invalid folder list
|
||||||
m_invalidFolders.set (state, invalidFolders);
|
m_invalidFolders.set(state, invalidFolders);
|
||||||
}
|
}
|
||||||
|
|
||||||
Label l = new Label(value.toString());
|
Label l = new Label(value.toString());
|
||||||
|
|
||||||
if (invalidFolders.contains (key.toString())) {
|
if (invalidFolders.contains(key.toString())) {
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,14 +81,11 @@ import org.apache.log4j.Logger;
|
||||||
* @version $Id: Page.java 1270 2006-07-18 13:34:55Z cgyg9330 $
|
* @version $Id: Page.java 1270 2006-07-18 13:34:55Z cgyg9330 $
|
||||||
*/
|
*/
|
||||||
public class Page extends BlockStylable implements Container {
|
public class Page extends BlockStylable implements Container {
|
||||||
|
|
||||||
|
|
||||||
/** Class specific logger instance. */
|
/** Class specific logger instance. */
|
||||||
private static final Logger s_log = Logger.getLogger(Page.class);
|
private static final Logger s_log = Logger.getLogger(Page.class);
|
||||||
|
|
||||||
/** The delimiter character for components naming */
|
/** The delimiter character for components naming */
|
||||||
private static final String DELIMITER = ".";
|
private static final String DELIMITER = ".";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The prefix that gets prepended to all state variables. Components must
|
* The prefix that gets prepended to all state variables. Components must
|
||||||
* not use variables starting with this prefix. This guarantees that the
|
* 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.
|
* interfere with each other.
|
||||||
*/
|
*/
|
||||||
private static final String COMPONENT_PREFIX = "bbp" + DELIMITER;
|
private static final String COMPONENT_PREFIX = "bbp" + DELIMITER;
|
||||||
|
|
||||||
private static final String INTERNAL = COMPONENT_PREFIX;
|
private static final String INTERNAL = COMPONENT_PREFIX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the special parameter that indicates which component has
|
* The name of the special parameter that indicates which component has
|
||||||
* been selected.
|
* been selected.
|
||||||
|
|
@ -116,13 +111,11 @@ public class Page extends BlockStylable implements Container {
|
||||||
CONTROL_EVENT_KEYS.add(CONTROL_VALUE);
|
CONTROL_EVENT_KEYS.add(CONTROL_VALUE);
|
||||||
s_log.debug("Static initalizer finished.");
|
s_log.debug("Static initalizer finished.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the request parameter used for the visibility state of
|
* The name of the request parameter used for the visibility state of
|
||||||
* components stored in m_invisible.
|
* components stored in m_invisible.
|
||||||
*/
|
*/
|
||||||
static final String INVISIBLE = INTERNAL + "i";
|
static final String INVISIBLE = INTERNAL + "i";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map of stateful components (id --> Component)
|
* Map of stateful components (id --> Component)
|
||||||
* SortedMap used because component based hash for page is based on concatenation of
|
* 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 SortedMap m_componentMap;
|
||||||
private List m_components;
|
private List m_components;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map of component -> owned parameter collection
|
* Map of component -> owned parameter collection
|
||||||
*/
|
*/
|
||||||
private Map m_componentParameterMap = new HashMap();
|
private Map m_componentParameterMap = new HashMap();
|
||||||
|
|
||||||
private FormModel m_stateModel;
|
private FormModel m_stateModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>Container</code> that renders this <code>Page</code>.
|
* <code>Container</code> that renders this <code>Page</code>.
|
||||||
*/
|
*/
|
||||||
protected Container m_panel;
|
protected Container m_panel;
|
||||||
|
|
||||||
private List m_actionListeners;
|
private List m_actionListeners;
|
||||||
|
|
||||||
private List m_requestListeners;
|
private List m_requestListeners;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The title of the page to be added in the head of HTML output. The
|
* 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
|
* title is wrapped in a Label to allow developers to add
|
||||||
* PrintListeners to dynamically change the value of the title.
|
* PrintListeners to dynamically change the value of the title.
|
||||||
*/
|
*/
|
||||||
private Label m_title;
|
private Label m_title;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores the actual title for the current request. The title may be
|
* Stores the actual title for the current request. The title may be
|
||||||
* generated with a PrintListener of the m_title Label.
|
* generated with a PrintListener of the m_title Label.
|
||||||
*/
|
*/
|
||||||
private RequestLocal m_currentTitle;
|
private RequestLocal m_currentTitle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of all the client-side stylesheets. The elements of the list
|
* 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.
|
* are of type Page.Stylesheet, defined at the end of this file.
|
||||||
*/
|
*/
|
||||||
private List m_clientStylesheets;
|
private List m_clientStylesheets;
|
||||||
|
|
||||||
private StringParameter m_selected;
|
private StringParameter m_selected;
|
||||||
|
|
||||||
private StringParameter m_controlEvent;
|
private StringParameter m_controlEvent;
|
||||||
|
|
||||||
private StringParameter m_controlValue;
|
private StringParameter m_controlValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default (initial) visibility of components. The encoding is
|
* The default (initial) visibility of components. The encoding is
|
||||||
* identical to that for PageState.m_invisible.
|
* identical to that for PageState.m_invisible.
|
||||||
|
|
@ -181,18 +162,15 @@ public class Page extends BlockStylable implements Container {
|
||||||
* PageState.
|
* PageState.
|
||||||
*/
|
*/
|
||||||
protected BitSet m_invisible;
|
protected BitSet m_invisible;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The PageErrorDisplay component that will display page state validation
|
* The PageErrorDisplay component that will display page state validation
|
||||||
* errors on this page
|
* errors on this page
|
||||||
*/
|
*/
|
||||||
private Component m_errorDisplay;
|
private Component m_errorDisplay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether finish() has been called on this Page.
|
* Indicates whether finish() has been called on this Page.
|
||||||
*/
|
*/
|
||||||
private boolean m_finished = false;
|
private boolean m_finished = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* indicates whether pageState.stateAsURL() should export the
|
* indicates whether pageState.stateAsURL() should export the
|
||||||
* entire state for this page, or whether it should only export
|
* 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
|
// Initialize the RequestLocal where the title for the current
|
||||||
// request will be kept
|
// request will be kept
|
||||||
m_currentTitle = new RequestLocal() {
|
m_currentTitle = new RequestLocal() {
|
||||||
|
|
||||||
protected Object initialValue(PageState state) {
|
protected Object initialValue(PageState state) {
|
||||||
return m_title.firePrintEvent(state);
|
return m_title.firePrintEvent(state);
|
||||||
}
|
}
|
||||||
|
|
@ -289,7 +268,7 @@ public class Page extends BlockStylable implements Container {
|
||||||
|
|
||||||
// Set up the visibility tracking parameters
|
// Set up the visibility tracking parameters
|
||||||
m_invisible = new BitSet(32);
|
m_invisible = new BitSet(32);
|
||||||
BitSetParameter p = new BitSetParameter(INVISIBLE,
|
BitSetParameter p = new BitSetParameter(INVISIBLE,
|
||||||
BitSetParameter.ENCODE_DGAP);
|
BitSetParameter.ENCODE_DGAP);
|
||||||
m_stateModel.addFormParam(p);
|
m_stateModel.addFormParam(p);
|
||||||
}
|
}
|
||||||
|
|
@ -542,7 +521,6 @@ public class Page extends BlockStylable implements Container {
|
||||||
// Assert.isUnlocked(this);
|
// Assert.isUnlocked(this);
|
||||||
// addClientStylesheet(styleSheetURI, styleSheetType);
|
// addClientStylesheet(styleSheetURI, styleSheetType);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a client-side stylesheet that should be used in HTML
|
* Adds a client-side stylesheet that should be used in HTML
|
||||||
* output. Arbitrarily many client-side stylesheets can be added with
|
* 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);
|
m_panel.generateXML(state, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Kernel.getConfig().isDebugEnabled() &&
|
if (Kernel.getConfig().isDebugEnabled() && debugStructure(state.
|
||||||
debugStructure(state.getRequest()) ) {
|
getRequest())) {
|
||||||
|
|
||||||
Element structure =
|
Element structure =
|
||||||
page.newChildElement("bebop:structure", BEBOP_XML_NS);
|
page.newChildElement("bebop:structure", BEBOP_XML_NS);
|
||||||
|
|
||||||
showStructure(state, structure);
|
showStructure(state, structure);
|
||||||
}
|
}
|
||||||
|
|
@ -687,7 +665,7 @@ public class Page extends BlockStylable implements Container {
|
||||||
*/
|
*/
|
||||||
public PageState process(HttpServletRequest request,
|
public PageState process(HttpServletRequest request,
|
||||||
HttpServletResponse response)
|
HttpServletResponse response)
|
||||||
throws ServletException {
|
throws ServletException {
|
||||||
|
|
||||||
PageState result = new PageState(this, request, response);
|
PageState result = new PageState(this, request, response);
|
||||||
try {
|
try {
|
||||||
|
|
@ -746,7 +724,6 @@ public class Page extends BlockStylable implements Container {
|
||||||
// PageState state = process(req, res);
|
// PageState state = process(req, res);
|
||||||
// return state;
|
// return state;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds a DOM Document from the current request state by
|
* Builds a DOM Document from the current request state by
|
||||||
* doing a depth-first tree walk on the current set of components
|
* 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,
|
public Document buildDocument(HttpServletRequest req,
|
||||||
HttpServletResponse res)
|
HttpServletResponse res)
|
||||||
throws ServletException {
|
throws ServletException {
|
||||||
try {
|
try {
|
||||||
Document doc = new Document();
|
Document doc = new Document();
|
||||||
PageState state = process(req, res);
|
PageState state = process(req, res);
|
||||||
|
|
@ -797,6 +774,7 @@ public class Page extends BlockStylable implements Container {
|
||||||
Assert.isUnlocked(this);
|
Assert.isUnlocked(this);
|
||||||
|
|
||||||
Traversal componentRegistrar = new Traversal() {
|
Traversal componentRegistrar = new Traversal() {
|
||||||
|
|
||||||
protected void act(Component c) {
|
protected void act(Component c) {
|
||||||
addComponent(c);
|
addComponent(c);
|
||||||
c.register(Page.this);
|
c.register(Page.this);
|
||||||
|
|
@ -949,7 +927,8 @@ public class Page extends BlockStylable implements Container {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateXML(Element parent) {
|
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);
|
style.addAttribute("href", m_URI);
|
||||||
if (m_type != null) {
|
if (m_type != null) {
|
||||||
style.addAttribute("type", m_type);
|
style.addAttribute("type", m_type);
|
||||||
|
|
@ -977,8 +956,8 @@ public class Page extends BlockStylable implements Container {
|
||||||
}
|
}
|
||||||
if (m_componentMap.get(key) != null) {
|
if (m_componentMap.get(key) != null) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Component key must not be duplicated. The key " +
|
"Component key must not be duplicated. The key " + key
|
||||||
key + " is shared by more than one component.");
|
+ " is shared by more than one component.");
|
||||||
}
|
}
|
||||||
m_componentMap.put(key, c);
|
m_componentMap.put(key, c);
|
||||||
m_components.add(c);
|
m_components.add(c);
|
||||||
|
|
@ -1005,15 +984,18 @@ public class Page extends BlockStylable implements Container {
|
||||||
public void addComponentStateParam(Component c, ParameterModel p) {
|
public void addComponentStateParam(Component c, ParameterModel p) {
|
||||||
Assert.isUnlocked(this);
|
Assert.isUnlocked(this);
|
||||||
|
|
||||||
if ( ! stateContains(c)) {
|
if (!stateContains(c)) {
|
||||||
throw new IllegalArgumentException
|
throw new IllegalArgumentException(
|
||||||
("Component must be registered in Page");
|
"Component must be registered in Page");
|
||||||
}
|
}
|
||||||
if ( ! m_stateModel.containsFormParam(p) ) {
|
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);
|
m_stateModel.addFormParam(p);
|
||||||
|
|
||||||
Collection params = (Collection)m_componentParameterMap.get(c);
|
Collection params = (Collection) m_componentParameterMap.get(c);
|
||||||
if (params == null) {
|
if (params == null) {
|
||||||
params = new ArrayList();
|
params = new ArrayList();
|
||||||
m_componentParameterMap.put(c, params);
|
m_componentParameterMap.put(c, params);
|
||||||
|
|
@ -1029,7 +1011,6 @@ public class Page extends BlockStylable implements Container {
|
||||||
return (Collection) m_componentParameterMap.get(c);
|
return (Collection) m_componentParameterMap.get(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the state index of a component. This is the number assigned
|
* Gets the state index of a component. This is the number assigned
|
||||||
* to the component in the register traveral
|
* to the component in the register traveral
|
||||||
|
|
@ -1181,7 +1162,6 @@ public class Page extends BlockStylable implements Container {
|
||||||
resetter.preorder(cmpnt);
|
resetter.preorder(cmpnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the prefix that is prepended to each component's state
|
* Return the prefix that is prepended to each component's state
|
||||||
* parameters to keep them unique.
|
* parameters to keep them unique.
|
||||||
|
|
@ -1193,13 +1173,13 @@ public class Page extends BlockStylable implements Container {
|
||||||
// WRS: preferentially use key if it exists
|
// WRS: preferentially use key if it exists
|
||||||
String key = c.getKey();
|
String key = c.getKey();
|
||||||
if (key == null) {
|
if (key == null) {
|
||||||
if ( stateContains(c) ) {
|
if (stateContains(c)) {
|
||||||
key = String.valueOf(stateIndex(c));
|
key = String.valueOf(stateIndex(c));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException
|
throw new IllegalArgumentException(
|
||||||
("Cannot generate prefix for component: key is null "
|
"Cannot generate prefix for component: key is null "
|
||||||
+ "and component " + c.toString() + "/" + c.getKey()
|
+ "and component " + c.toString() + "/" + c.getKey()
|
||||||
+ " did not register with page.");
|
+ " did not register with page.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return COMPONENT_PREFIX + key + DELIMITER;
|
return COMPONENT_PREFIX + key + DELIMITER;
|
||||||
|
|
@ -1213,7 +1193,7 @@ public class Page extends BlockStylable implements Container {
|
||||||
* @return the unmangled name.
|
* @return the unmangled name.
|
||||||
*/
|
*/
|
||||||
private static final String unmangle(String name) {
|
private static final String unmangle(String name) {
|
||||||
if ( ! name.startsWith(COMPONENT_PREFIX) ) {
|
if (!name.startsWith(COMPONENT_PREFIX)) {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
// Find the second occurence of delimiter
|
// Find the second occurence of delimiter
|
||||||
|
|
@ -1223,9 +1203,7 @@ public class Page extends BlockStylable implements Container {
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Procs for debugging output
|
// Procs for debugging output
|
||||||
|
|
||||||
private static String NAME = "name";
|
private static String NAME = "name";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1316,25 +1294,26 @@ public class Page extends BlockStylable implements Container {
|
||||||
* by implementations of hashCode & equals
|
* by implementations of hashCode & equals
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String getComponentString () {
|
public String getComponentString() {
|
||||||
Iterator it = m_componentMap.keySet().iterator();
|
Iterator it = m_componentMap.keySet().iterator();
|
||||||
/*int hash = 0;
|
/*int hash = 0;
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
String componentId = (String)it.next();
|
String componentId = (String)it.next();
|
||||||
s_log.debug("component id = " + componentId);
|
s_log.debug("component id = " + componentId);
|
||||||
hash = hash | componentId.hashCode();
|
hash = hash | componentId.hashCode();
|
||||||
s_log.debug("hash so far = " + hash);
|
s_log.debug("hash so far = " + hash);
|
||||||
}*/
|
}*/
|
||||||
Date start = new Date();
|
Date start = new Date();
|
||||||
|
|
||||||
StringBuffer hashString = new StringBuffer();
|
StringBuffer hashString = new StringBuffer();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
String componentId = (String)it.next();
|
String componentId = (String) it.next();
|
||||||
hashString.append(componentId);
|
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.
|
||||||
return hashString.toString();
|
getTime()));
|
||||||
|
return hashString.toString();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,8 @@ import com.arsdigita.toolbox.util.GlobalizationUtil;
|
||||||
*/
|
*/
|
||||||
public class DomainObjectPropertySheet extends PropertySheet {
|
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 List m_props;
|
||||||
private DomainObjectSelectionModel m_objModel;
|
private DomainObjectSelectionModel m_objModel;
|
||||||
private AttributeFormatter m_toStringFormatter;
|
private AttributeFormatter m_toStringFormatter;
|
||||||
|
|
@ -102,8 +102,7 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public DomainObjectPropertySheet(
|
public DomainObjectPropertySheet(
|
||||||
DomainObjectSelectionModel objModel, boolean valueOutputEscape
|
DomainObjectSelectionModel objModel, boolean valueOutputEscape) {
|
||||||
) {
|
|
||||||
super(new DomainObjectModelBuilder(), valueOutputEscape);
|
super(new DomainObjectModelBuilder(), valueOutputEscape);
|
||||||
|
|
||||||
m_objModel = objModel;
|
m_objModel = objModel;
|
||||||
|
|
@ -142,7 +141,7 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
public void add(GlobalizedMessage label, String attribute) {
|
public void add(GlobalizedMessage label, String attribute) {
|
||||||
// Determine if we are dealing with a simple string or a complex
|
// Determine if we are dealing with a simple string or a complex
|
||||||
// path
|
// path
|
||||||
if(attribute.indexOf('.') == -1) {
|
if (attribute.indexOf('.') == -1) {
|
||||||
add(label, attribute, m_toStringFormatter);
|
add(label, attribute, m_toStringFormatter);
|
||||||
} else {
|
} else {
|
||||||
add(label, attribute, m_recursiveFormatter);
|
add(label, attribute, m_recursiveFormatter);
|
||||||
|
|
@ -172,7 +171,8 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
* @param attribute The name for the attribute
|
* @param attribute The name for the attribute
|
||||||
* @param formatter An instance of AttributeFormatter
|
* @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));
|
m_props.add(new Property(label, attribute, f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,28 +225,36 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
/**
|
/**
|
||||||
* @deprecated use getGlobalizedLabel instead
|
* @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
|
// 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 DomainObject m_obj;
|
||||||
private PageState m_state;
|
private PageState m_state;
|
||||||
private Iterator m_props;
|
private Iterator m_props;
|
||||||
private Property m_current;
|
private Property m_current;
|
||||||
private static String ERROR =
|
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(
|
public DomainObjectPropertiesModel(
|
||||||
DomainObject obj, Iterator props, PageState state
|
DomainObject obj, Iterator props, PageState state) {
|
||||||
) {
|
|
||||||
m_obj = obj;
|
m_obj = obj;
|
||||||
m_props = props;
|
m_props = props;
|
||||||
m_state = state;
|
m_state = state;
|
||||||
|
|
@ -254,11 +262,11 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean nextRow() {
|
public boolean nextRow() {
|
||||||
if(!m_props.hasNext()) {
|
if (!m_props.hasNext()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_current = (Property)m_props.next();
|
m_current = (Property) m_props.next();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -270,39 +278,39 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public GlobalizedMessage getGlobalizedLabel() {
|
public GlobalizedMessage getGlobalizedLabel() {
|
||||||
if(m_current == null) {
|
if (m_current == null) {
|
||||||
throw new IllegalStateException(ERROR);
|
throw new IllegalStateException(ERROR);
|
||||||
}
|
}
|
||||||
return m_current.getGlobalizedLabel();
|
return m_current.getGlobalizedLabel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
if(m_current == null) {
|
if (m_current == null) {
|
||||||
throw new IllegalStateException(ERROR);
|
throw new IllegalStateException(ERROR);
|
||||||
}
|
}
|
||||||
return m_current.getFormatter()
|
return m_current.getFormatter().format(m_obj,
|
||||||
.format(m_obj, m_current.getAttribute(), m_state);
|
m_current.getAttribute(),
|
||||||
|
m_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Builds an DomainObjectPropertiesModel
|
// Builds an DomainObjectPropertiesModel
|
||||||
private static class DomainObjectModelBuilder extends LockableImpl
|
private static class DomainObjectModelBuilder extends LockableImpl
|
||||||
implements PropertySheetModelBuilder {
|
implements PropertySheetModelBuilder {
|
||||||
|
|
||||||
public PropertySheetModel makeModel(PropertySheet sheet, PageState state) {
|
public PropertySheetModel makeModel(PropertySheet sheet, PageState state) {
|
||||||
DomainObjectPropertySheet s = (DomainObjectPropertySheet)sheet;
|
DomainObjectPropertySheet s = (DomainObjectPropertySheet) sheet;
|
||||||
return new DomainObjectPropertiesModel (
|
return new DomainObjectPropertiesModel(
|
||||||
s.getObjectSelectionModel().getSelectedObject(state),
|
s.getObjectSelectionModel().getSelectedObject(state),
|
||||||
s.properties(),
|
s.properties(),
|
||||||
state
|
state);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Abstract formatter which maintains a "default" string
|
// Abstract formatter which maintains a "default" string
|
||||||
private static abstract class DefaultAttributeFormatter
|
private static abstract class DefaultAttributeFormatter
|
||||||
extends DomainService
|
extends DomainService
|
||||||
implements AttributeFormatter {
|
implements AttributeFormatter {
|
||||||
|
|
||||||
private String m_default;
|
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
|
// A simple attribute formatter that calls get on the object with the
|
||||||
// specified attribute
|
// specified attribute
|
||||||
private static class SimpleAttributeFormatter
|
private static class SimpleAttributeFormatter
|
||||||
extends DefaultAttributeFormatter {
|
extends DefaultAttributeFormatter {
|
||||||
|
|
||||||
public SimpleAttributeFormatter() {
|
public SimpleAttributeFormatter() {
|
||||||
super();
|
super();
|
||||||
|
|
@ -333,11 +341,13 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String format(DomainObject obj, String attribute, PageState state) {
|
public String format(DomainObject obj, String attribute, PageState state) {
|
||||||
if(obj == null) return getDefaultString();
|
if (obj == null) {
|
||||||
|
return getDefaultString();
|
||||||
|
}
|
||||||
|
|
||||||
Object value = get(obj, attribute);
|
Object value = get(obj, attribute);
|
||||||
|
|
||||||
if(value == null) {
|
if (value == null) {
|
||||||
return getDefaultString();
|
return getDefaultString();
|
||||||
} else {
|
} else {
|
||||||
return value.toString();
|
return value.toString();
|
||||||
|
|
@ -349,9 +359,8 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
// by following the names in the attribute string. For example, if
|
// by following the names in the attribute string. For example, if
|
||||||
// the string says "foo.bar.baz", the formatter will attempt to call
|
// the string says "foo.bar.baz", the formatter will attempt to call
|
||||||
// obj.get("foo").get("bar").get("baz");
|
// obj.get("foo").get("bar").get("baz");
|
||||||
|
|
||||||
private static class RecursiveAttributeFormatter
|
private static class RecursiveAttributeFormatter
|
||||||
extends DefaultAttributeFormatter {
|
extends DefaultAttributeFormatter {
|
||||||
|
|
||||||
public RecursiveAttributeFormatter() {
|
public RecursiveAttributeFormatter() {
|
||||||
super();
|
super();
|
||||||
|
|
@ -362,26 +371,31 @@ public class DomainObjectPropertySheet extends PropertySheet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String format(DomainObject obj, String attribute, PageState state) {
|
public String format(DomainObject obj, String attribute, PageState state) {
|
||||||
if(obj == null) return getDefaultString();
|
if (obj == null) {
|
||||||
|
return getDefaultString();
|
||||||
|
}
|
||||||
|
|
||||||
StringTokenizer tokenizer = new StringTokenizer(attribute, ".");
|
StringTokenizer tokenizer = new StringTokenizer(attribute, ".");
|
||||||
String token = null;
|
String token = null;
|
||||||
Object value = getDataObject(obj);
|
Object value = getDataObject(obj);
|
||||||
|
|
||||||
while(tokenizer.hasMoreTokens()) {
|
while (tokenizer.hasMoreTokens()) {
|
||||||
token = tokenizer.nextToken();
|
token = tokenizer.nextToken();
|
||||||
// Null check
|
// Null check
|
||||||
value = ((DataObject)value).get(token);
|
value = ((DataObject) value).get(token);
|
||||||
if(value == null)
|
if (value == null) {
|
||||||
return getDefaultString();
|
return getDefaultString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract leaf value
|
// Extract leaf value
|
||||||
if(token == null || value == null)
|
if (token == null || value == null) {
|
||||||
return getDefaultString();
|
return getDefaultString();
|
||||||
|
}
|
||||||
|
|
||||||
return value.toString();
|
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.authoring.BasicPageForm;
|
||||||
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
|
||||||
import com.arsdigita.domain.DomainObject;
|
import com.arsdigita.domain.DomainObject;
|
||||||
|
import com.arsdigita.domain.DomainService;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -65,7 +66,7 @@ public class PublicationPropertiesStep extends SimpleEditStep {
|
||||||
|
|
||||||
sheet.add(PublicationGlobalizationUtil.globalize(
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.name"),
|
"publications.ui.publication.name"),
|
||||||
Publication.NAME);
|
Publication.NAME);
|
||||||
sheet.add(PublicationGlobalizationUtil.globalize(
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.title"),
|
"publications.ui.publication.title"),
|
||||||
Publication.TITLE);
|
Publication.TITLE);
|
||||||
|
|
@ -74,7 +75,8 @@ public class PublicationPropertiesStep extends SimpleEditStep {
|
||||||
Publication.YEAR_OF_PUBLICATION);
|
Publication.YEAR_OF_PUBLICATION);
|
||||||
sheet.add(PublicationGlobalizationUtil.globalize(
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.abstract"),
|
"publications.ui.publication.abstract"),
|
||||||
Publication.ABSTRACT);
|
Publication.ABSTRACT,
|
||||||
|
new PreFormattedTextFormatter());
|
||||||
sheet.add(PublicationGlobalizationUtil.globalize(
|
sheet.add(PublicationGlobalizationUtil.globalize(
|
||||||
"publications.ui.publication.misc"),
|
"publications.ui.publication.misc"),
|
||||||
Publication.MISC);
|
Publication.MISC);
|
||||||
|
|
@ -132,7 +134,7 @@ public class PublicationPropertiesStep extends SimpleEditStep {
|
||||||
protected void addSteps(ItemSelectionModel itemModel,
|
protected void addSteps(ItemSelectionModel itemModel,
|
||||||
AuthoringKitWizard parent) {
|
AuthoringKitWizard parent) {
|
||||||
addStep(new PublicationAuthorsPropertyStep(itemModel, parent),
|
addStep(new PublicationAuthorsPropertyStep(itemModel, parent),
|
||||||
"publications.ui.publication.authors");
|
"publications.ui.publication.authors");
|
||||||
addStep(new PublicationSeriesPropertyStep(itemModel, parent),
|
addStep(new PublicationSeriesPropertyStep(itemModel, parent),
|
||||||
"publications.ui.publication.series");
|
"publications.ui.publication.series");
|
||||||
}
|
}
|
||||||
|
|
@ -143,4 +145,18 @@ public class PublicationPropertiesStep extends SimpleEditStep {
|
||||||
labelKey).localize()),
|
labelKey).localize()),
|
||||||
step);
|
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