CCM NG/ccm-cms:
- CreateForm for Event - Cleanup resources. Some files were accendentily copied to the wrong place. git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4698 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
e2af0a59e1
commit
68ae2e8d44
|
|
@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,8 @@
|
||||||
*/
|
*/
|
||||||
package org.librecms.contenttypes;
|
package org.librecms.contenttypes;
|
||||||
|
|
||||||
import com.arsdigita.cms.ui.authoring.PageCreateForm;
|
import com.arsdigita.cms.ui.contenttypes.EventCreateForm;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
@ -34,12 +35,13 @@ import javax.persistence.Temporal;
|
||||||
import javax.persistence.TemporalType;
|
import javax.persistence.TemporalType;
|
||||||
|
|
||||||
import org.hibernate.envers.Audited;
|
import org.hibernate.envers.Audited;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
|
|
||||||
import org.libreccm.l10n.LocalizedString;
|
import org.libreccm.l10n.LocalizedString;
|
||||||
|
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -51,7 +53,7 @@ import static org.librecms.CmsConstants.*;
|
||||||
@Table(name = "EVENTS", schema = DB_SCHEMA)
|
@Table(name = "EVENTS", schema = DB_SCHEMA)
|
||||||
@ContentTypeDescription(labelBundle = "org.librecms.contenttypes.Event",
|
@ContentTypeDescription(labelBundle = "org.librecms.contenttypes.Event",
|
||||||
descriptionBundle = "org.librecms.contenttypes.Event")
|
descriptionBundle = "org.librecms.contenttypes.Event")
|
||||||
@AuthoringKit(createComponent = PageCreateForm.class,
|
@AuthoringKit(createComponent = EventCreateForm.class,
|
||||||
steps = {})
|
steps = {})
|
||||||
public class Event extends ContentItem implements Serializable {
|
public class Event extends ContentItem implements Serializable {
|
||||||
|
|
||||||
|
|
@ -72,7 +74,7 @@ public class Event extends ContentItem implements Serializable {
|
||||||
|
|
||||||
@Column(name = "START_DATE", nullable = false)
|
@Column(name = "START_DATE", nullable = false)
|
||||||
@Temporal(TemporalType.DATE)
|
@Temporal(TemporalType.DATE)
|
||||||
@NotEmpty
|
@NotNull
|
||||||
private Date startDate;
|
private Date startDate;
|
||||||
|
|
||||||
@Column(name = "END_DATE")
|
@Column(name = "END_DATE")
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ package org.librecms.contenttypes;
|
||||||
import com.arsdigita.cms.ui.contenttypes.NewsCreateForm;
|
import com.arsdigita.cms.ui.contenttypes.NewsCreateForm;
|
||||||
|
|
||||||
import org.hibernate.envers.Audited;
|
import org.hibernate.envers.Audited;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import org.libreccm.l10n.LocalizedString;
|
import org.libreccm.l10n.LocalizedString;
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
|
|
||||||
|
|
@ -154,7 +153,7 @@ public class News extends ContentItem implements Serializable {
|
||||||
public String toString(final String data) {
|
public String toString(final String data) {
|
||||||
return super.toString(String.format(", text = %s, "
|
return super.toString(String.format(", text = %s, "
|
||||||
+ "releaseDate = %tF %<tT, "
|
+ "releaseDate = %tF %<tT, "
|
||||||
+ "homepage = %b%d",
|
+ "homepage = %b%s",
|
||||||
Objects.toString(text),
|
Objects.toString(text),
|
||||||
releaseDate,
|
releaseDate,
|
||||||
homepage,
|
homepage,
|
||||||
|
|
|
||||||
|
|
@ -1,40 +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;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Modules which depend on CMS should implement this interface instead of
|
|
||||||
* com.arsdigita.globalization.Globalized to gain access to CMS globalization
|
|
||||||
* resource file (specifically important for content type packages).
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:yon@arsdigita.com">yon@arsdigita.com</a>
|
|
||||||
* @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";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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<LinkToCheck> linksToCheck = new HashSet<LinkToCheck>();
|
|
||||||
|
|
||||||
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<LinkToCheck> 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<LinkToCheck> 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<LinkToCheck> 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<LinkToCheck> 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<LinkToCheck> 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<LinkToCheck> 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;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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 <a href="mailto:yon@arsdigita.com">yon@arsdigita.com</a>
|
|
||||||
* @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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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.
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* .
|
|
||||||
* Contains methods to simplify globalizing keys
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:yon@arsdigita.com">yon@arsdigita.com</a>
|
|
||||||
* @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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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 <quasi@quasiweb.de>
|
|
||||||
*/
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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:
|
|
||||||
* <pre>
|
|
||||||
* <dispatcher-configuration>
|
|
||||||
* <url-mapping
|
|
||||||
* <url>my-page</url>
|
|
||||||
* OR <page-class>com.arsdigita.Page.class</page-class>
|
|
||||||
* <url-mapping
|
|
||||||
* </dispatcher-configuration>
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>Security class used for checking and granting privileges in
|
|
||||||
* CMS.</p>
|
|
||||||
*
|
|
||||||
* @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";
|
|
||||||
}
|
|
||||||
|
|
@ -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.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -280,3 +280,4 @@ cms.ui.authoring.workflow=Select a workflow
|
||||||
cms.ui.create=Create
|
cms.ui.create=Create
|
||||||
cms.contenttypes.ui.summary=Summary
|
cms.contenttypes.ui.summary=Summary
|
||||||
cms.contenttypes.ui.newsitem.date\ =Release date
|
cms.contenttypes.ui.newsitem.date\ =Release date
|
||||||
|
cms.contenttypes.ui.event.start_date=Start date
|
||||||
|
|
|
||||||
|
|
@ -278,3 +278,4 @@ cms.ui.authoring.workflow=Arbeitsablauf ausw\u00e4hlen
|
||||||
cms.ui.create=Anlegen
|
cms.ui.create=Anlegen
|
||||||
cms.contenttypes.ui.summary=Zusammenfassung
|
cms.contenttypes.ui.summary=Zusammenfassung
|
||||||
cms.contenttypes.ui.newsitem.date\ =Erscheinungsdatum
|
cms.contenttypes.ui.newsitem.date\ =Erscheinungsdatum
|
||||||
|
cms.contenttypes.ui.event.start_date=Anfangsdatum
|
||||||
|
|
|
||||||
|
|
@ -237,3 +237,4 @@ cms.ui.authoring.workflow=Select a workflow
|
||||||
cms.ui.create=Create
|
cms.ui.create=Create
|
||||||
cms.contenttypes.ui.summary=Summary
|
cms.contenttypes.ui.summary=Summary
|
||||||
cms.contenttypes.ui.newsitem.date\ =Release date
|
cms.contenttypes.ui.newsitem.date\ =Release date
|
||||||
|
cms.contenttypes.ui.event.start_date=Start date
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue