diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/EventCreateForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/EventCreateForm.java new file mode 100644 index 000000000..a9100888d --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/EventCreateForm.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2017 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.contenttypes; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Date; +import com.arsdigita.bebop.parameters.NotEmptyValidationListener; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.CreationSelector; +import com.arsdigita.cms.ui.authoring.PageCreateForm; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.librecms.CmsConstants; +import org.librecms.contentsection.ContentItemInitializer; +import org.librecms.contenttypes.Event; + +/** + * + * @author Jens Pelzetter + */ +public class EventCreateForm extends PageCreateForm { + + private static final String START_DATE = "startDate"; + + private Date startDate; + + public EventCreateForm(final ItemSelectionModel itemSelectionModel, + final CreationSelector creationSelector) { + super(itemSelectionModel, creationSelector); + } + + @Override + protected void addWidgets() { + + super.addWidgets(); + + add(new Label(new GlobalizedMessage( + "cms.contenttypes.ui.event.start_date", + CmsConstants.CMS_BUNDLE))); + startDate = new Date(START_DATE); + startDate.addValidationListener(new NotEmptyValidationListener()); + add(startDate); + } + + @Override + protected ContentItemInitializer getItemInitializer( + final FormData data, final PageState state) { + + return item -> ((Event) item) + .setStartDate((java.util.Date) startDate.getValue(state)); + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/NewsCreateForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/NewsCreateForm.java new file mode 100644 index 000000000..2210c48be --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contenttypes/NewsCreateForm.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2017 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.contenttypes; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.event.FormInitListener; +import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.form.Date; +import com.arsdigita.bebop.parameters.NotEmptyValidationListener; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.CreationSelector; +import com.arsdigita.cms.ui.authoring.PageCreateForm; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.librecms.CmsConstants; +import org.librecms.contentsection.ContentItemInitializer; +import org.librecms.contenttypes.News; + +/** + * + * @author Jens Pelzetter + */ +public class NewsCreateForm extends PageCreateForm { + + private static final String NEWS_DATE = "newsDate"; + + private Date newsDate; + + public NewsCreateForm(final ItemSelectionModel itemSelectionModel, + final CreationSelector creationSelector) { + + super(itemSelectionModel, creationSelector); + } + + @Override + protected void addWidgets() { + + super.addWidgets(); + + add(new Label(new GlobalizedMessage("cms.contenttypes.ui.newsitem.date", + CmsConstants.CMS_BUNDLE))); + newsDate = new Date(NEWS_DATE); + newsDate.addValidationListener(new NotEmptyValidationListener()); + add(newsDate); + } + + @Override + protected ContentItemInitializer getItemInitializer( + final FormData data, final PageState state) { + + return item -> ((News) item) + .setReleaseDate((java.util.Date) newsDate.getValue(state)); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/Event.java b/ccm-cms/src/main/java/org/librecms/contenttypes/Event.java index 9f4cebea9..820d114f0 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/Event.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/Event.java @@ -18,7 +18,8 @@ */ package org.librecms.contenttypes; -import com.arsdigita.cms.ui.authoring.PageCreateForm; +import com.arsdigita.cms.ui.contenttypes.EventCreateForm; + import java.io.Serializable; import java.util.Date; import java.util.Objects; @@ -34,12 +35,13 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.envers.Audited; -import org.hibernate.validator.constraints.NotEmpty; import org.libreccm.l10n.LocalizedString; import org.librecms.contentsection.ContentItem; +import javax.validation.constraints.NotNull; + import static org.librecms.CmsConstants.*; /** @@ -51,7 +53,7 @@ import static org.librecms.CmsConstants.*; @Table(name = "EVENTS", schema = DB_SCHEMA) @ContentTypeDescription(labelBundle = "org.librecms.contenttypes.Event", descriptionBundle = "org.librecms.contenttypes.Event") -@AuthoringKit(createComponent = PageCreateForm.class, +@AuthoringKit(createComponent = EventCreateForm.class, steps = {}) public class Event extends ContentItem implements Serializable { @@ -72,7 +74,7 @@ public class Event extends ContentItem implements Serializable { @Column(name = "START_DATE", nullable = false) @Temporal(TemporalType.DATE) - @NotEmpty + @NotNull private Date startDate; @Column(name = "END_DATE") diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/News.java b/ccm-cms/src/main/java/org/librecms/contenttypes/News.java index 94e748c25..d5a6f836d 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/News.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/News.java @@ -21,7 +21,6 @@ package org.librecms.contenttypes; import com.arsdigita.cms.ui.contenttypes.NewsCreateForm; import org.hibernate.envers.Audited; -import org.hibernate.validator.constraints.NotEmpty; import org.libreccm.l10n.LocalizedString; import org.librecms.contentsection.ContentItem; @@ -154,7 +153,7 @@ public class News extends ContentItem implements Serializable { public String toString(final String data) { return super.toString(String.format(", text = %s, " + "releaseDate = %tF %yon@arsdigita.com - * @version $Revision: #5 $ $Date: 2004/08/17 $ - */ -public interface CMSGlobalized extends Globalized { - - /* - * The central CMS resource file (per language) which may be used by - * all of CMS specific modules. - * It overwrites the file provided by globalization package as a generic - * default/fall back! - */ - public static final String BUNDLE_NAME = "com.arsdigita.cms.CMSResources"; - -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/CMSResourceBundle.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/CMSResourceBundle.java deleted file mode 100755 index 3d434d6be..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/CMSResourceBundle.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - -import com.arsdigita.globalization.ChainedResourceBundle; - -import java.util.PropertyResourceBundle; -import java.util.ResourceBundle; - - -// Developers Note (2013-04): -// No longer used because we found no way to make localization work properly. -// Back to use plain property files as of 2013-04 (version 6.6.8) -// Retained for easy reference to further develop localization infrastructure. - - -/** - * Main ResourceBundle for CMS UI. - * Can be extended using: - * - addBundle - to add new keys - * - putBundle - to override keys already in CMSResources e.g. to customize - * notification email text - */ -public class CMSResourceBundle extends ChainedResourceBundle implements CMSGlobalized { - - public CMSResourceBundle() { - super(); - // addBundle((PropertyResourceBundle) getBundle(BUNDLE_NAME)); - - // try to make proper localisation work, no success, ne regression either - addBundle((PropertyResourceBundle) getBundle(BUNDLE_NAME, - ResourceBundle.Control.getNoFallbackControl( - ResourceBundle.Control.FORMAT_DEFAULT))); - } - -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/ContentItemNameFix.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/ContentItemNameFix.java deleted file mode 100644 index b5f33b721..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/ContentItemNameFix.java +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Copyright (C) 2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - -import com.arsdigita.cms.ContentBundle; -import com.arsdigita.cms.ContentItem; -import com.arsdigita.cms.ItemCollection; -import com.arsdigita.cms.Folder; -import com.arsdigita.cms.TextAsset; -import com.arsdigita.cms.contenttypes.GenericArticle; -import com.arsdigita.kernel.Kernel; -import com.arsdigita.kernel.KernelExcursion; -import com.arsdigita.persistence.DataCollection; -import com.arsdigita.persistence.DataObject; -import com.arsdigita.persistence.Session; -import com.arsdigita.persistence.SessionManager; -import com.arsdigita.persistence.TransactionContext; -import com.arsdigita.util.cmd.Program; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.OptionBuilder; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.util.HashSet; -import java.util.Set; - -/** - * - * @author Jens Pelzetter - */ -@SuppressWarnings("PMD.SystemPrintln") -public class ContentItemNameFix extends Program { - - private boolean pretend = false; - - public ContentItemNameFix() { - super("ContentItemNameFix", "1.0.0", ""); - - getOptions().addOption( - OptionBuilder - .hasArg(false) - .withLongOpt("pretend") - .withDescription("Only show what would be done") - .create("p")); - } - - public static final void main(final String[] args) { - new ContentItemNameFix().run(args); - } - - @Override - protected void doRun(final CommandLine cmdLine) { - - System.out.printf("Running ContentItemNameFix...\n"); - - pretend = cmdLine.hasOption("p"); - - if (pretend) { - System.out.printf("Pretend option is on, only showing what would be done...\n\n"); - } else { - System.out.print("\n"); - } - - new KernelExcursion() { - - @Override - protected void excurse() { - setEffectiveParty(Kernel.getSystemParty()); - - final Set linksToCheck = new HashSet(); - - final Session session = SessionManager.getSession(); - final TransactionContext transactionContext = session.getTransactionContext(); - - transactionContext.beginTxn(); - - final DataCollection draftFolders = session.retrieve(Folder.BASE_DATA_OBJECT_TYPE); - draftFolders.addEqualsFilter(ContentItem.VERSION, "draft"); - - while (draftFolders.next()) { - checkFolder(draftFolders.getDataObject(), linksToCheck); - } - - final DataCollection draftBundles = session.retrieve( - ContentBundle.BASE_DATA_OBJECT_TYPE); - draftBundles.addEqualsFilter(ContentItem.VERSION, "draft"); - - while (draftBundles.next()) { - checkBundle(draftBundles.getDataObject(), linksToCheck); - - } - - transactionContext.commitTxn(); - - System.out.println("-------------------------------------------------------------"); - - System.out.println("Checking for potentially brocken links..."); - System.out.println("GenericArticle (ccm-cms-types-article, ccm-cms-types-news, ..."); - System.out.println(""); - - final DataCollection articles = session.retrieve( - GenericArticle.BASE_DATA_OBJECT_TYPE); - articles.addEqualsFilter(ContentItem.VERSION, "draft"); - while (articles.next()) { - checkArticle(articles.getDataObject(), linksToCheck); - } - - System.out.println(""); - System.out.println("MultiPartArticles..."); - System.out.println(""); - - final DataCollection mpArticles = session.retrieve( - "com.arsdigita.cms.contenttypes.MultiPartArticle"); - mpArticles.addEqualsFilter(ContentItem.VERSION, "draft"); - while (mpArticles.next()) { - checkMpArticle(mpArticles.getDataObject(), linksToCheck); - } - - } - - }.run(); - - } - - private void checkFolder(final DataObject folderObj, final Set linksToCheck) { - - final Folder draftFolder = new Folder(folderObj); - final Folder liveFolder = (Folder) draftFolder.getLiveVersion(); - - if (liveFolder != null && !draftFolder.getName().equals(liveFolder.getName())) { - System.out.printf("Problems with folder %s:/%s (id: %s):\n", - draftFolder.getContentSection().getName(), - draftFolder.getPath(), - draftFolder.getID().toString()); - System.out.printf("\t Live Folder has wrong name: Is '%s' but should be '%s'.", - liveFolder.getName(), - draftFolder.getName()); - - linksToCheck.add(new LinkToCheck(liveFolder.getName(), - draftFolder.getName(), - String.format("%s:/%s", - liveFolder.getContentSection().getName(), - liveFolder.getPath()), - String.format("%s:/%s", - draftFolder.getContentSection().getName(), - draftFolder.getPath()))); - - if (pretend) { - System.out.print("\n\n"); - } else { - - liveFolder.setName(draftFolder.getName()); - System.out.print(" Corrected.\n\n"); - } - - } - } - - private void checkBundle(final DataObject bundleObj, final Set linksToCheck) { - - final ContentBundle draftBundle = new ContentBundle(bundleObj); - final ContentItem primaryDraftItem = draftBundle.getPrimaryInstance(); - - final String itemId = primaryDraftItem.getID().toString(); - final String itemPath = String.format("%s:/%s", - primaryDraftItem.getContentSection().getName(), - primaryDraftItem.getPath()); - - final HeaderStatus headerStatus = new HeaderStatus(); - - //This is our reference, all bundles, instances etc belonging to the item sould have this - //name - final String itemName = primaryDraftItem.getName(); - - if (!draftBundle.getName().equals(itemName)) { - printItemHeaderLine(itemId, itemPath, headerStatus); - - System.out.printf( - "\t Draft ContentBundle has wrong name: Is '%s' but should be '%s'.", - itemName, - draftBundle.getName()); - - linksToCheck.add(new LinkToCheck(draftBundle.getName(), - itemName, - String.format("%s:/%s", - draftBundle.getContentSection().getName(), - draftBundle.getPath()), - itemPath)); - - if (pretend) { - System.out.print("\n"); - } else { - draftBundle.setName(itemName); - System.out.printf(" Corrected.\n"); - } - } - - checkInstances(draftBundle, itemName, itemId, itemPath, headerStatus, linksToCheck); - - final ContentBundle liveBundle = (ContentBundle) draftBundle.getLiveVersion(); - if (liveBundle != null) { - if (!liveBundle.getName().equals(itemName)) { - printItemHeaderLine(itemId, itemPath, headerStatus); - - System.out.printf( - "\tLive ContentBundle has wrong name. Should be '%s' but is '%s'", - itemName, - liveBundle.getName()); - - linksToCheck.add(new LinkToCheck(liveBundle.getName(), - itemName, - String.format("%s:/%s", - liveBundle.getContentSection() - .getName(), - liveBundle.getPath()), - itemPath)); - - if (pretend) { - System.out.print("\n"); - } else { - liveBundle.setName(itemName); - System.out.printf(" Corrected.\n"); - } - } - - checkInstances(liveBundle, itemName, itemId, itemPath, headerStatus, linksToCheck); - } - - if (headerStatus.isHeaderPrinted()) { - System.out.print("\n"); - } - - } - - private void checkInstances(final ContentBundle draftBundle, - final String itemName, - final String itemId, - final String itemPath, - final HeaderStatus headerStatus, - final Set linksToCheck) { - final ItemCollection instances = draftBundle.getInstances(); - ContentItem current; - while (instances.next()) { - current = instances.getContentItem(); - - if (!itemName.equals(current.getName())) { - printItemHeaderLine(itemId, itemPath, headerStatus); - System.out.printf( - "\t%s instance %s (language: %s has wrong name. Should be '%s', but is '%s'.", - current.getVersion(), - current.getID().toString(), - current.getLanguage(), - itemName, - current.getName()); - - linksToCheck.add(new LinkToCheck(current.getName(), - itemName, - String.format("%s:/%s", - current.getContentSection().getName(), - current.getPath()), - itemPath)); - - if (pretend) { - System.out.print("\n"); - } else { - current.setName(itemName); - System.out.printf(" Corrected.\n"); - } - } - } - - } - - private class HeaderStatus { - - private boolean headerPrinted = false; - - public HeaderStatus() { - //Nothing - } - - public boolean isHeaderPrinted() { - return headerPrinted; - } - - public void setHeaderPrinted(final boolean headerPrinted) { - this.headerPrinted = headerPrinted; - } - - } - - private void printItemHeaderLine(final String itemId, - final String itemPath, - final HeaderStatus headerStatus) { - if (!headerStatus.isHeaderPrinted()) { - System.out.printf("Problems with item %s (id: %s):\n", itemPath, itemId); - headerStatus.setHeaderPrinted(true); - } - } - - private class LinkToCheck { - - private String wrongName; - private String correctName; - private String wrongPath; - private String correctPath; - - public LinkToCheck() { - //Nothing - } - - public LinkToCheck(final String wrongName, - final String correctName, - final String wrongPath, - final String correctPath) { - this.wrongName = wrongName; - this.correctName = correctName; - this.wrongPath = wrongPath; - this.correctPath = correctPath; - } - - public String getWrongName() { - return wrongName; - } - - public void setWrongName(final String wrongName) { - this.wrongName = wrongName; - } - - public String getCorrectName() { - return correctName; - } - - public void setCorrectName(final String correctName) { - this.correctName = correctName; - } - - public String getWrongPath() { - return wrongPath; - } - - public void setWrongPath(final String wrongPath) { - this.wrongPath = wrongPath; - } - - public String getCorrectPath() { - return correctPath; - } - - public void setCorrectPath(final String correctPath) { - this.correctPath = correctPath; - } - - @Override - public int hashCode() { - int hash = 7; - if (wrongName == null) { - hash = 47 * hash; - } else { - hash = 47 * hash + wrongName.hashCode(); - } - - if (correctName == null) { - hash = 47 * hash; - } else { - hash = 47 * hash + correctName.hashCode(); - } - - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final LinkToCheck other = (LinkToCheck) obj; - if (wrongName == null && other.getWrongName() != null) { - return false; - } - - if (wrongName != null && other.getWrongName() == null) { - return false; - } - - if (correctName == null && other.getCorrectName() != null) { - return false; - } - - if (correctName != null && other.getCorrectName() == null) { - return false; - } - - return ((correctName.equals(other.getCorrectName())) - && (wrongName.equals(other.getWrongName()))); - } - - } - - private void checkArticle(final DataObject articleObj, - final Set linksToCheck) { - final GenericArticle article = new GenericArticle(articleObj); - - final TextAsset textAsset = article.getTextAsset(); - - if (textAsset == null) { - return; - } - - final String text = textAsset.getText(); - - if (text == null) { - return; - } - - for (LinkToCheck linkToCheck : linksToCheck) { - //if (text.contains(linkToCheck.getWrongName())) { - - /*if (text.matches(String.format("^(.*)href=\"(.*)%s(.*)\"(.*)$" - linkToCheck.getWrongName()))) {*/ - if (checkForPotentialBrockenLink(text, linkToCheck.getWrongName())) { - System.out.printf("Found a potenially brocken link in article item %s:/%s:\n", - article.getContentSection().getName(), - article.getPath()); - System.out.printf("\tLook for a link containing to path '%s' and replace it with " - + "the stable link to the target item %s.\n\n", - linkToCheck.getWrongPath(), - linkToCheck.getCorrectPath()); - } - } - } - - private void checkMpArticle(final DataObject mpArticleObj, - final Set linksToCheck) { - final ContentItem mpItem = new ContentItem(mpArticleObj); - final DataCollection sections = (DataCollection) mpArticleObj.get("sections"); - - while (sections.next()) { - checkMpSection(mpItem, sections.getDataObject(), linksToCheck); - } - } - - private void checkMpSection(final ContentItem mpItem, - final DataObject sectionObj, - final Set linksToCheck) { - final DataObject textAssetObj = (DataObject) sectionObj.get("text"); - - if (textAssetObj == null) { - return; - } - - final String text = (String) textAssetObj.get(TextAsset.CONTENT); - - if (text == null) { - return; - } - - for (LinkToCheck linkToCheck : linksToCheck) { - //if (text.contains(linkToCheck.getWrongName())) { - /*if (text.matches(String.format("^(.*)href=\"(.*)%s(.*)\"(.*)$", - linkToCheck.getWrongName()))) {*/ - if(checkForPotentialBrockenLink(text, linkToCheck.getWrongName())) { - System.out.printf("Found a potenially brocken link in section '%s' of " - + "MultiPartArticle %s:/%s.\n", - (String) sectionObj.get("title"), - mpItem.getContentSection().getName(), - mpItem.getPath()); - System.out.printf("\tLook for a link containing to path '%s' and replace it with " - + "the stable link to the target item %s.\n\n", - linkToCheck.getWrongPath(), - linkToCheck.getCorrectPath()); - } - } - } - - /** - * Returns {@code true} if a match for {@code checkFor} is found in the links of {@code text}. - * @param text - * @param checkFor - * @return - */ - private boolean checkForPotentialBrockenLink(final String text, final String checkFor) { - final Document document = Jsoup.parseBodyFragment(text); - - final Elements links = document.select("a"); - boolean result = false; - for(Element link : links) { - result = (link.attr("href").contains(checkFor)); - } - - return result; - - } -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/GlobalizationUtil.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/GlobalizationUtil.java deleted file mode 100755 index 02e5b58e7..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/GlobalizationUtil.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -package com.arsdigita.cms.util; - -import com.arsdigita.globalization.Globalized; -import com.arsdigita.globalization.GlobalizedMessage; - -/** - * Compilation of methods to simplify the handling of globalizing keys. - * Basically it adds the name of package's resource bundle files to the - * globalize methods and forwards to GlobalizedMessage, shortening the - * method invocation in the various application classes. - * - * @author yon@arsdigita.com - * @version $Revision: #7 $ $Date: 2004/08/17 $ - */ -public class GlobalizationUtil implements Globalized { - - /** Name of Java resource files to handle CMS's globalisation. */ - private static final String BUNDLE_NAME = "com.arsdigita.cms.CMSResources"; - - /** - * Returns a globalized message using the package specific bundle, - * provided by BUNDLE_NAME. - * @param key - * @return - */ - public static GlobalizedMessage globalize(String key) { - return new GlobalizedMessage(key, BUNDLE_NAME); - } - - /** - * Returns a globalized message object, using the package specific bundle, - * as specified by BUNDLE_NAME. Also takes in an Object[] of arguments to - * interpolate into the retrieved message using the MessageFormat class. - * @param key - * @param args - * @return - */ - public static GlobalizedMessage globalize(String key, Object[] args) { - return new GlobalizedMessage(key, BUNDLE_NAME, args); - } - - /** - * Returns the name of the package specific resource bundle. - * - * Used e.g. by com.arsdigita.cms.ui.item.ItemLanguageTable to get the - * bundle tp pass to DataTable. - * - * @return Name of resource bundle as String - */ - public static String getBundleName() { - return BUNDLE_NAME; - } - -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/GlobalizationUtilOld.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/GlobalizationUtilOld.java deleted file mode 100755 index 09ca063fc..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/GlobalizationUtilOld.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - -import com.arsdigita.globalization.GlobalizedMessage; - - -// Developers Note: -// Counterpart to CMSResourceBundle java class. -// No longer used because we couldn't find a way to make proper localization -// work. -// Retained for easy reference to further develop localization infrastructure. - - -/** - *

- * . - * Contains methods to simplify globalizing keys - *

- * - * @author yon@arsdigita.com - * @version $Revision: #7 $ $Date: 2004/08/17 $ - */ -public class GlobalizationUtilOld { - - /** Name of the Java class to handle CMS's globalisation. */ - //public static String s_bundleName = "com.arsdigita.cms.util.CMSResourceBundle"; - public static String s_bundleName = "com.arsdigita.cms.CMSResources"; - - /** - * This returns a globalized message using the package specific bundle, - * provided by method getBundleName() - */ - public static GlobalizedMessage globalize(String key) { - return new GlobalizedMessage(key, getBundleName()); - } - - /** - * Returns a globalized message object, using the package specific bundle, - * provided by method getBundleName(). Also takes in an Object[] of - * arguments to interpolate into the retrieved message using the - * MessageFormat class. - */ - public static GlobalizedMessage globalize(String key, Object[] args) { - return new GlobalizedMessage(key, getBundleName(), args); - } - - /** - * Returns the name of the package specific resource bundle. - * @return - */ - public static String getBundleName() { - return s_bundleName; - } - - /* - * Not a part of API. Otherwise it would need to be properly synchronized. - * Only meant be used to override resource keys in CMSResources - * by a custom application, in Initializer. - */ - public static void internalSetBundleName(String bundleName) { - s_bundleName = bundleName; - } - -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/LanguageUtil.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/LanguageUtil.java deleted file mode 100755 index b5b3632a5..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/LanguageUtil.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - -import com.arsdigita.cms.ContentBundle; -import com.arsdigita.cms.ContentPage; -import com.arsdigita.globalization.GlobalizationHelper; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.kernel.Kernel; -import com.arsdigita.util.Assert; -import com.arsdigita.util.Pair; - -import java.util.Collection; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; -import java.util.StringTokenizer; - -/** - * Utility methods for dealing with the multilingual items. - * - * @author Shashin Shinde (sshinde@redhat.com) - * @author Sören Bernstein - */ -public class LanguageUtil { - - private static org.apache.log4j.Logger s_log = org.apache.log4j.Logger.getLogger( - LanguageUtil.class); - private static String s_languages = null; - private static String[] s_languagesArray = null; - /** - * Mapping from the ISO639-1 2-letter codes to the ISO639-2 3-letter codes - */ - private static final String ISO639_2LA_3LA = "com.arsdigita.cms.util.iso639rev"; - private static ResourceBundle s_lang3LA = ResourceBundle.getBundle(ISO639_2LA_3LA); - /** - * Mapping from the ISO639-1 2-letter codes to the full descriptive name - */ - private static final String ISO639_2LA_FULL = "com.arsdigita.cms.util.iso639full"; - private static ResourceBundle s_langFull = ResourceBundle.getBundle(ISO639_2LA_FULL); - - public static GlobalizedMessage globalize(String key) { - return new LanguageGlobalizedMessage(key); - } - - /** - * Sets the supported languages, eliminates all spaces and trims - * - * @param comma separated list of langages initialized from initializer at the server startup - */ - public static void setSupportedLanguages(String languages) { - s_languages = languages.replace(" ", "").trim(); - } - - /** - * Get the comma separated list of all supported languages - */ - public static String getSupportedLanguages() { - Assert.exists(s_languages, "supported languages not set"); - return s_languages; - } - - /** - * Returns the collection of all supported languages. - * - * @return all supported languages - */ - public static Collection getSupportedLanguages2LA() { - String allLanguages = getSupportedLanguages(); - StringTokenizer tokenizer = new StringTokenizer(allLanguages, ","); - Collection langList = new LinkedList(); - while (tokenizer.hasMoreElements()) { - String language = tokenizer.nextToken(); - langList.add(language); - } - return langList; - } - - /** - * Returns the collection of all supported languages. Each entry is a pair of 2 letter code as - * key and three letter code as value. - * - * @return all supported languages - */ - public static Collection getSupportedLanguages3LA() { - String allLanguages = getSupportedLanguages(); - StringTokenizer tokenizer = new StringTokenizer(allLanguages, ","); - Collection langList = new LinkedList(); - while (tokenizer.hasMoreElements()) { - String language = tokenizer.nextToken(); - langList.add(new Pair(language, getLang3LA(language))); - } - return langList; - } - - /** - * Returns the collection of all supported languages. Each entry is a pair of 2 letter code as - * key and full language name as a value. - * - * @return all supported languages - */ - public static Collection getSupportedLanguagesFull() { - String allLanguages = getSupportedLanguages(); - StringTokenizer tokenizer = new StringTokenizer(allLanguages, ","); - Collection langList = new LinkedList(); - while (tokenizer.hasMoreElements()) { - String language = tokenizer.nextToken(); - langList.add(new Pair(language, getLangFull(language))); - } - return langList; - } - - /** - * Get the List of languages in which this item can be created. Usefull on UI where we need to - * display the list of languages in which this Item can be created. - */ - public static Collection getCreatableLanguages(ContentPage item) { - ContentBundle bundle = item.getContentBundle(); - Collection allList = getSupportedLanguages2LA(); - allList.removeAll(bundle.getLanguages()); - return allList; - } - - /** - * Returns three letter acronym for language code mapped from two letter code. - * - * @return three letter code for the two letter code. If the resource is not found then the key - * itself is returned. - */ - public static String getLang3LA(String lang) { - String threeLA; - try { - // Lookup 3-letter language code via java.util.Locale - threeLA = (new Locale(lang)).getISO3Language(); - } catch (MissingResourceException mre) { - // If there is none - try { - // Lookup 3-letter code via ressource bundle - threeLA = s_lang3LA.getString(lang); - } catch (MissingResourceException mexc) { - // if there is still no match, log a warning and return the 2-letter code - s_log.warn("Three letter language code for key '" + lang + "' not found: " + mexc); - threeLA = lang; - } - } - return threeLA; - } - - /** - * Returns the full language name mapped from the two letter acronym. - * - * @param lang 2 letter language code - * - * @return full language name for the given two letter code If the resource is not found then - * the key itself is returned. - */ - public static String getLangFull(String lang) { - // Lookup language name via java.util.Locale - String fullName = (new Locale(lang)).getDisplayLanguage(GlobalizationHelper. - getNegotiatedLocale()); - - if (lang.equals(fullName)) { - // If that fails - try { - // Lookup language name vie ressource bundle - fullName = s_langFull.getString(lang); - } catch (MissingResourceException mexc) { - // If there is still nomatch, log a warning and return 2-letter code - s_log.warn("Full language name for key '" + lang + "' not found " + mexc); - fullName = lang; - } - } - return fullName; - } - - /** - * Takes in a list of 2 letter codes and converts into 3 letter codes. Each entry is pair of 2 - * letter code as key and 3 letter code as value. - */ - public static Collection convertTo3LA(Collection list) { - Collection conList = new LinkedList(); - for (Iterator iter = list.iterator(); iter.hasNext();) { - String lang2Code = (String) iter.next(); - conList.add(new Pair(lang2Code, getLang3LA(lang2Code))); - } - return conList; - } - - public static Collection convertToFull(Collection list) { - Collection conList = new LinkedList(); - for (Iterator iter = list.iterator(); iter.hasNext();) { - String lang2Code = (String) iter.next(); - conList.add(new Pair(lang2Code, getLangFull(lang2Code))); - } - return conList; - } - - public static Collection convertToG11N(Collection list) { - Collection conList = new LinkedList(); - for (Iterator iter = list.iterator(); iter.hasNext();) { - String lang2Code = (String) iter.next(); - conList.add(new Pair(lang2Code, globalize(lang2Code))); - } - return conList; - } - - // Special GlobalizedMessage for use with the LanguageUtil#globalize method - private static class LanguageGlobalizedMessage extends GlobalizedMessage { - - public LanguageGlobalizedMessage(String key) { - super(key); - } - - @Override - public Object localize(Locale locale) { - return LanguageUtil.getLangFull(this.getKey()); - } - - } -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/PageClassConfigHandler.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/PageClassConfigHandler.java deleted file mode 100755 index 118c10bd6..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/PageClassConfigHandler.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - - -import org.xml.sax.helpers.DefaultHandler; - -import java.util.Map; - -/** - * - * SAX event handler class for parsing configuration file. - * - * Parse URL-to-Page/Dispatcher/Servlet mappings from a file. - * - * Format of the file is XML: - *
- * <dispatcher-configuration>
- *   <url-mapping
- *     <url>my-page</url>
- *     OR <page-class>com.arsdigita.Page.class</page-class>
- *   <url-mapping
- * </dispatcher-configuration>
- * 
- */ -public class PageClassConfigHandler extends DefaultHandler { - - private Map m_map; - private Map m_rmap; - private StringBuffer m_buffer; - private String m_url; - private String m_className; - - /** - * @param map A map to configure (pages-> classes) - * @param rmap A map to configure (classes-> pages) - * - * @pre md.m_map != null - */ - public PageClassConfigHandler(Map map, Map rmap) { - m_map = map; - // reverse map - m_rmap = rmap; - m_buffer = new StringBuffer(); - } - - @Override - public void characters(char[] ch, int start, int len) { - for (int i = 0; i < len; i++) { - m_buffer.append(ch[start + i]); - } - } - - @Override - public void endElement(String uri, String localName, String qn) { - if ( qn.equals("url") ) { - m_url = m_buffer.toString().trim(); - } else if ( qn.equals("page-class") ) { - m_className = m_buffer.toString().trim(); - } else if ( qn.equals("url-mapping") ) { - m_map.put(m_url, m_className); - m_rmap.put(m_className, m_url); - } - m_buffer = new StringBuffer(); - } -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/SecurityConstants.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/SecurityConstants.java deleted file mode 100755 index dde69fd2c..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/SecurityConstants.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - - - -/** - *

Security class used for checking and granting privileges in - * CMS.

- * - * @author Michael Pih - * @version $Revision: #7 $ $DateTime: 2004/08/17 23:15:09 $ - * @version $Id: SecurityConstants.java 2090 2010-04-17 08:04:14Z pboy $ - */ -public interface SecurityConstants { - - // CMS Actions - public final static String STAFF_ADMIN = "staff_admin"; - public final static String WORKFLOW_ADMIN = "workflow_admin"; - public final static String CATEGORY_ADMIN = "category_admin"; - public final static String LIFECYCLE_ADMIN = "lifecycle_admin"; - public final static String CONTENT_TYPE_ADMIN = "content_type_admin"; - public final static String PUBLISH = "publish"; - public final static String NEW_ITEM = "new_item"; - public final static String PUBLIC_PAGES = "public_pages"; - public final static String PREVIEW_PAGES = "preview_pages"; - public final static String ADMIN_PAGES = "admin_pages"; - public final static String EDIT_ITEM = "edit_item"; - public final static String SCHEDULE_PUBLICATION = "schedule_publication"; - public final static String DELETE_ITEM = "delete_item"; - public final static String APPLY_WORKFLOW = "apply_workflow"; - public final static String CATEGORIZE_ITEMS = "categorize_items"; - public final static String DELETE_IMAGES = "delete_images"; - public final static String APPLY_ALTERNATE_WORKFLOWS = "apply_alternate_workflows"; - - // CMS Privileges - public final static String CMS_APPLY_ALTERNATE_WORKFLOWS = "cms_apply_alternate_workflows"; - public final static String CMS_CATEGORIZE_ITEMS = "cms_categorize_items"; - public final static String CMS_CATEGORY_ADMIN = "cms_category_admin"; - public final static String CMS_CONTENT_TYPE_ADMIN = "cms_content_type_admin"; - public final static String CMS_DELETE_ITEM = "cms_delete_item"; - public final static String CMS_EDIT_ITEM = "cms_edit_item"; - public final static String CMS_ITEM_ADMIN = "cms_item_admin"; - public final static String CMS_LIFECYCLE_ADMIN = "cms_lifecycle_admin"; - public final static String CMS_NEW_ITEM = "cms_new_item"; - public final static String CMS_PREVIEW_ITEM = "cms_preview_item"; - public final static String CMS_PUBLISH = "cms_publish"; - public final static String CMS_APPROVE_ITEM = "cms_approve_item"; - public final static String CMS_READ_ITEM = "cms_read_item"; - public final static String CMS_STAFF_ADMIN = "cms_staff_admin"; - public final static String CMS_WORKFLOW_ADMIN = "cms_workflow_admin"; -} diff --git a/ccm-cms/src/main/resources/com/arsdigita/cms/util/Util.java b/ccm-cms/src/main/resources/com/arsdigita/cms/util/Util.java deleted file mode 100755 index fd90026ce..000000000 --- a/ccm-cms/src/main/resources/com/arsdigita/cms/util/Util.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.util; - -import com.arsdigita.runtime.ConfigError; -import org.apache.oro.text.perl.Perl5Util; - -/** - * Utility functions for use by installer classes. - * - * @author Jon Orris (jorris@redhat.com) - * @version $Revision: #6 $ $DateTime: 2004/08/17 23:15:09 $ - */ - -public class Util { - public static void validateURLParameter(String name, String value) - throws ConfigError { - - final String pattern = "/[^A-Za-z_0-9\\-]+/"; - Perl5Util util = new Perl5Util(); - if ( util.match(pattern, value) ) { - throw new ConfigError - ("The \"" + name + "\" parameter must contain only " + - " alpha-numeric characters, underscores, and/or hyphens."); - } - } - -} diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties index 1aacc9a4b..c4843e013 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties @@ -280,3 +280,4 @@ cms.ui.authoring.workflow=Select a workflow cms.ui.create=Create cms.contenttypes.ui.summary=Summary cms.contenttypes.ui.newsitem.date\ =Release date +cms.contenttypes.ui.event.start_date=Start date diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties index fec8f7c7b..441c22b01 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties @@ -278,3 +278,4 @@ cms.ui.authoring.workflow=Arbeitsablauf ausw\u00e4hlen cms.ui.create=Anlegen cms.contenttypes.ui.summary=Zusammenfassung cms.contenttypes.ui.newsitem.date\ =Erscheinungsdatum +cms.contenttypes.ui.event.start_date=Anfangsdatum diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties index 0af3b51f4..faefa8ff6 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties @@ -237,3 +237,4 @@ cms.ui.authoring.workflow=Select a workflow cms.ui.create=Create cms.contenttypes.ui.summary=Summary cms.contenttypes.ui.newsitem.date\ =Release date +cms.contenttypes.ui.event.start_date=Start date