cms.publishToFile nutzt nicht mehr das alte Initializer System.
git-svn-id: https://svn.libreccm.org/ccm/trunk@342 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
9b74239a61
commit
9286b5bbe0
|
|
@ -3,7 +3,7 @@
|
|||
name="ccm-cms"
|
||||
prettyName="Red Hat CCM Content Management System"
|
||||
version="6.6.0"
|
||||
release="1"
|
||||
release="2"
|
||||
webapp="ROOT">
|
||||
<ccm:dependencies>
|
||||
<ccm:requires name="ccm-core" version="6.6.0" relation="ge"/>
|
||||
|
|
@ -14,6 +14,6 @@
|
|||
</ccm:contacts>
|
||||
<ccm:description>
|
||||
The CMS applications provides a flexible Content Management
|
||||
System for the CCM platform.
|
||||
System for the CCM platform.
|
||||
</ccm:description>
|
||||
</ccm:application>
|
||||
|
|
|
|||
|
|
@ -4,4 +4,6 @@
|
|||
storage="ccm-cms/cms.properties"/>
|
||||
<config class="com.arsdigita.cms.lifecycle.LifecycleConfig"
|
||||
storage="ccm-cms/lifecycle.properties"/>
|
||||
<config class="com.arsdigita.cms.publishToFile.PublishToFileConfig"
|
||||
storage="ccm-cms/lifecycle.properties"/>
|
||||
</registry>
|
||||
|
|
|
|||
|
|
@ -40,14 +40,12 @@ import java.util.Iterator;
|
|||
* Provides static methods to instantiate proper subclasses of {@link
|
||||
* com.arsdigita.kernel.ACSObject} domain objects, based on the object
|
||||
* type and the Java class name.
|
||||
* @see com.arsdigita.kernel.ACSObject
|
||||
*
|
||||
* @version $Id: ACSObjectFactory.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
* @see com.arsdigita.kernel.ACSObject
|
||||
*/
|
||||
public class ACSObjectFactory extends DomainService {
|
||||
|
||||
public static final String versionId = "$Id: ACSObjectFactory.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
private static Logger s_log =
|
||||
Logger.getLogger(ACSObjectFactory.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ import java.math.BigDecimal;
|
|||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @version $Revision: #28 $ $Date: 2004/08/17 $
|
||||
* @version $Id: Article.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
**/
|
||||
*/
|
||||
public class Article extends TextPage {
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
|
|
|
|||
|
|
@ -23,24 +23,22 @@ import com.arsdigita.persistence.DataCollection;
|
|||
import com.arsdigita.persistence.Filter;
|
||||
|
||||
/**
|
||||
* This class contains contains a collection of
|
||||
* ArticleImageAssociations, each of which points to an image, and
|
||||
* each of which has a caption. Ideally it should be constructed with
|
||||
* a DataCollection of ArticleImageAssociations which has been
|
||||
* filtered on isDeleted=0, or there will be deleted associations in
|
||||
* the collection. It extends ImageAssetCollection because we need to
|
||||
* pass it off as an ImageAssetCollection at various places in the UI
|
||||
* code.
|
||||
*
|
||||
* @author Hugh Brock .
|
||||
* This class contains contains a collection of ArticleImageAssociations, each
|
||||
* of which points to an image, and each of which has a caption. Ideally it
|
||||
* should be constructed with a DataCollection of ArticleImageAssociations
|
||||
* which has been filtered on isDeleted=0, or there will be deleted associations
|
||||
* in the collection. It extends ImageAssetCollection because we need to pass
|
||||
* it off as an ImageAssetCollection at various places in the UI code.
|
||||
*
|
||||
* @see com.arsdigita.domain.DomainCollection
|
||||
* @see com.arsdigita.persistence.DataCollection
|
||||
*
|
||||
*
|
||||
* @author Hugh Brock .
|
||||
* @version $Id: ArticleImageAssnCollection.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class ArticleImageAssnCollection extends ImageAssetCollection {
|
||||
|
||||
public static final String versionId = "$Id: ArticleImageAssnCollection.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* Constructor. Should only be called from Article.getImages()
|
||||
*
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ import java.math.BigDecimal;
|
|||
*
|
||||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @version $Revision: #17 $ $Date: 2004/08/17 $
|
||||
* @version $Id: ArticleImageAssociation.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class ArticleImageAssociation extends ContentItem {
|
||||
|
||||
public static final String versionId = "$Id: ArticleImageAssociation.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.cms.ArticleImageAssociation";
|
||||
|
||||
|
|
@ -58,9 +58,9 @@ public class ArticleImageAssociation extends ContentItem {
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructor. The contained <code>DataObject</code> is retrieved
|
||||
* from the persistent storage mechanism with an <code>OID</code>
|
||||
* specified by <i>oid</i>.
|
||||
* Constructor retrieved the contained <code>DataObject</code> from the
|
||||
* persistent storage mechanism with an <code>OID</code> specified by
|
||||
* <i>oid</i>.
|
||||
*
|
||||
* @param oid The <code>OID</code> for the retrieved
|
||||
* <code>DataObject</code>.
|
||||
|
|
|
|||
|
|
@ -34,11 +34,10 @@ import java.io.IOException;
|
|||
* @author Jack Chung
|
||||
*
|
||||
* @version $Revision: #21 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: Asset.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public abstract class Asset extends ContentItem {
|
||||
|
||||
public static final String versionId = "$Id: Asset.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.cms.Asset";
|
||||
|
||||
|
|
|
|||
|
|
@ -36,11 +36,10 @@ import java.math.BigDecimal;
|
|||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @author Stanislav Freidin (sfreidin@arsdigita.com)
|
||||
* @version $Revision: #17 $ $Date: 2004/08/17 $
|
||||
* @version $Id: AuthoringKit.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class AuthoringKit extends ACSObject {
|
||||
|
||||
public static final String versionId = "$Id: AuthoringKit.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.cms.AuthoringKit";
|
||||
|
||||
|
|
|
|||
|
|
@ -29,12 +29,9 @@ import org.apache.log4j.Logger;
|
|||
*
|
||||
* @author Daniel Berrange
|
||||
* @see com.arsdigita.kernel.Kernel
|
||||
* @version $Id: CMS.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public abstract class CMS {
|
||||
public static final String versionId =
|
||||
"$Id: CMS.java 287 2005-02-22 00:29:02Z sskracic $" +
|
||||
"$Author: sskracic $" +
|
||||
"$DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* The CMS XML namespace.
|
||||
|
|
|
|||
|
|
@ -35,16 +35,14 @@ import org.apache.log4j.Logger;
|
|||
* not null. If the caller wants to handle the case where an item is
|
||||
* null explicitly, then use the hasContentItem and hasContentSection
|
||||
* methods first.
|
||||
*
|
||||
* @author Daniel Berrange
|
||||
*
|
||||
* @see com.arsdigita.kernel.KernelContext
|
||||
* @see com.arsdigita.cms.CMS
|
||||
*
|
||||
* @author Daniel Berrange
|
||||
* @version $Id: CMSContext.java 778 2005-09-12 14:55:36Z fabrice $
|
||||
*/
|
||||
public final class CMSContext {
|
||||
public static final String versionId =
|
||||
"$Id: CMSContext.java 778 2005-09-12 14:55:36Z fabrice $" +
|
||||
"$Author: fabrice $" +
|
||||
"$DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(CMSContext.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import javax.servlet.ServletException;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* A CMS excursion is a way of making your code execute under an
|
||||
* alternative environment (context). Override the excurse method to
|
||||
* create a CMSExcursion. For example:
|
||||
|
|
@ -42,16 +41,13 @@ import org.apache.log4j.Logger;
|
|||
*
|
||||
* excursion.run();
|
||||
* </pre>
|
||||
*
|
||||
* @author Daniel Berrange
|
||||
* @see com.arsdigita.cms.CMS
|
||||
* @see com.arsdigita.kernel.KernelExcursion
|
||||
*
|
||||
* @author Daniel Berrange
|
||||
* @version $Id: CMSExcursion.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public abstract class CMSExcursion {
|
||||
public static final String versionId =
|
||||
"$Id: CMSExcursion.java 287 2005-02-22 00:29:02Z sskracic $" +
|
||||
"$Author: sskracic $" +
|
||||
"$DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(CMSExcursion.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,16 +24,14 @@ import com.arsdigita.persistence.DataCollection;
|
|||
/**
|
||||
* This class contains a collection of {@link CategoryTemplateMapping}s
|
||||
*
|
||||
* @version $Id: CategoryTemplateCollection.java 754 2005-09-02 13:26:17Z sskracic $
|
||||
*
|
||||
* @see DomainCollection
|
||||
* @see DataCollection
|
||||
* @see ItemTemplateCollection
|
||||
*
|
||||
* @version $Id: CategoryTemplateCollection.java 754 2005-09-02 13:26:17Z sskracic $
|
||||
*/
|
||||
public class CategoryTemplateCollection extends TemplateCollection {
|
||||
|
||||
public static final String versionId = "$Id: CategoryTemplateCollection.java 754 2005-09-02 13:26:17Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@ import java.math.BigDecimal;
|
|||
*/
|
||||
public class CategoryTemplateMapping extends TemplateMapping {
|
||||
|
||||
public static final String versionId = "$Id: CategoryTemplateMapping.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.cms.CategoryTemplateMapping";
|
||||
|
||||
|
|
|
|||
|
|
@ -201,10 +201,6 @@ import java.util.Set;
|
|||
* @version $Id: ContentItem.java 1621 2007-09-13 12:43:12Z chrisg23 $
|
||||
*/
|
||||
public class ContentItem extends VersionedACSObject implements CustomCopy {
|
||||
public static final String versionId =
|
||||
"$Id: ContentItem.java 1621 2007-09-13 12:43:12Z chrisg23 $" +
|
||||
"$Author: chrisg23 $" +
|
||||
"$DateTime: $";
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(ContentItem.class);
|
||||
private static final Logger s_logDenorm = Logger.getLogger(ContentItem.class.getName() + ".Denorm");
|
||||
|
|
|
|||
|
|
@ -28,15 +28,13 @@ import com.arsdigita.persistence.DataObject;
|
|||
* class should always instantiate the right subclass of {@link
|
||||
* com.arsdigita.cms.ContentItem} automatically.
|
||||
*
|
||||
* @deprecated Use {@link com.arsdigita.kernel.ACSObjectInstantiator}
|
||||
* instead
|
||||
* @author <a href="mailto:sfreidin@arsdigita.com">Stanislav Freidin</a>
|
||||
* @version $Id: ContentItemInstantiator.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
* @deprecated Use {@link com.arsdigita.kernel.ACSObjectInstantiator}
|
||||
* instead
|
||||
*/
|
||||
public class ContentItemInstantiator extends DomainObjectInstantiator {
|
||||
|
||||
public static final String versionId = "$Id: ContentItemInstantiator.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* Construct a {@link ContentItem} given a data object. Called from
|
||||
* DomainObjectFactory.newInstance() as the last step of
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import com.arsdigita.cms.dispatcher.ResourceMapping;
|
|||
import com.arsdigita.cms.dispatcher.ResourceType;
|
||||
import com.arsdigita.cms.dispatcher.TemplateResolver;
|
||||
import com.arsdigita.cms.dispatcher.XMLGenerator;
|
||||
import com.arsdigita.cms.ContentSectionConfig;
|
||||
// import com.arsdigita.cms.ContentSectionConfig;
|
||||
import com.arsdigita.cms.lifecycle.LifecycleDefinition;
|
||||
import com.arsdigita.cms.lifecycle.LifecycleDefinitionCollection;
|
||||
import com.arsdigita.cms.util.GlobalizationUtil;
|
||||
|
|
@ -89,12 +89,9 @@ import java.math.BigDecimal;
|
|||
* @author <a href="mailto:pihman@arsdigita.com">Michael Pih</a>
|
||||
* @author <a href="mailto:flattop@arsdigita.com">Jack Chung</a>
|
||||
* @version $Revision: #37 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: ContentSection.java 1308 2006-09-01 11:00:05Z sskracic $
|
||||
*/
|
||||
public class ContentSection extends Application {
|
||||
public static final String versionId =
|
||||
"$Id: ContentSection.java 1308 2006-09-01 11:00:05Z sskracic $" +
|
||||
"$Author: sskracic $" +
|
||||
"$DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(ContentSection.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -26,16 +26,14 @@ import com.arsdigita.persistence.DataCollection;
|
|||
* This class contains a collection of {@link
|
||||
* com.arsdigita.cms.ContentSection content sections}.
|
||||
*
|
||||
* @author Stanislav Freidin (sfreidin@arsdigita.com)
|
||||
* @version $Id: ContentSectionCollection.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*
|
||||
* @see com.arsdigita.domain.DomainCollection
|
||||
* @see com.arsdigita.persistence.DataCollection
|
||||
**/
|
||||
*
|
||||
* @author Stanislav Freidin (sfreidin@arsdigita.com)
|
||||
* @version $Id: ContentSectionCollection.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class ContentSectionCollection extends DomainCollection {
|
||||
|
||||
public static final String versionId = "$Id: ContentSectionCollection.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -37,8 +37,9 @@ import com.arsdigita.cms.dispatcher.ItemResolver;
|
|||
import com.arsdigita.cms.dispatcher.MultilingualItemResolver;
|
||||
import com.arsdigita.cms.dispatcher.TemplateResolver;
|
||||
import com.arsdigita.cms.lifecycle.PublishLifecycleListener;
|
||||
import com.arsdigita.cms.publishToFile.PublishToFile;
|
||||
import com.arsdigita.cms.publishToFile.PublishToFileListener;
|
||||
// import com.arsdigita.cms.publishToFile.PublishToFile;
|
||||
import com.arsdigita.cms.publishToFile.PublishToFileConfig;
|
||||
// import com.arsdigita.cms.publishToFile.PublishToFileListener;
|
||||
import com.arsdigita.cms.ui.authoring.ItemCategoryExtension;
|
||||
import com.arsdigita.cms.ui.authoring.ItemCategoryForm;
|
||||
import com.arsdigita.runtime.AbstractConfig;
|
||||
|
|
@ -47,16 +48,17 @@ import com.arsdigita.runtime.AbstractConfig;
|
|||
// import com.arsdigita.util.UncheckedWrapperException;
|
||||
// URL resource: protocol handler removal: END
|
||||
import com.arsdigita.util.parameter.BooleanParameter;
|
||||
import com.arsdigita.util.parameter.ClassParameter;
|
||||
// import com.arsdigita.util.parameter.ClassParameter;
|
||||
import com.arsdigita.util.parameter.EnumerationParameter;
|
||||
import com.arsdigita.util.parameter.ErrorList;
|
||||
import com.arsdigita.util.parameter.IntegerParameter;
|
||||
import com.arsdigita.util.parameter.Parameter;
|
||||
import com.arsdigita.util.parameter.ParameterError;
|
||||
// import com.arsdigita.util.parameter.ParameterError;
|
||||
// URL resource: protocol handler removal: START
|
||||
// new: import:
|
||||
import com.arsdigita.util.parameter.ResourceParameter;
|
||||
// URL resource: protocol handler removal: END
|
||||
import com.arsdigita.util.parameter.SpecificClassParameter;
|
||||
import com.arsdigita.util.parameter.StringArrayParameter;
|
||||
import com.arsdigita.util.parameter.StringParameter;
|
||||
// URL resource: protocol handler removal: START
|
||||
|
|
@ -86,8 +88,8 @@ import org.apache.log4j.Logger;
|
|||
/**
|
||||
* A record containing server-session scoped configuration properties.
|
||||
*
|
||||
* Accessors of this class may return null. Developers should take
|
||||
* care to trap null return values in their code.
|
||||
* Accessors of this class may return null. Developers should take care
|
||||
* to trap null return values in their code.
|
||||
*
|
||||
* @see ContentSection#getConfig()
|
||||
*
|
||||
|
|
@ -108,7 +110,6 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
private final Parameter m_languages;
|
||||
private final Parameter m_defaultItemResolverClass;
|
||||
private final Parameter m_defaultTemplateResolverClass;
|
||||
private final Parameter m_disableItemPfs;
|
||||
private final Parameter m_useSectionCategories;
|
||||
private final Parameter m_itemAdapters;
|
||||
private final Parameter m_useStreamlinedCreation;
|
||||
|
|
@ -119,13 +120,12 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
private final Parameter m_hideAdminTabs;
|
||||
private final Parameter m_hideTimezone;
|
||||
private final Parameter m_hideLaunchDate;
|
||||
private final Parameter m_requireLaunchDate;
|
||||
private final Parameter m_hideUDCTUI;
|
||||
private final Parameter m_hideFolderIndexCheckbox;
|
||||
private final Parameter m_defaultNotificationTime;
|
||||
private final Parameter m_publishLifecycleListenerClass;
|
||||
private final Parameter m_publishToFileClass;
|
||||
private final Parameter m_notifyAuthorOnLifecycle;
|
||||
private final Parameter m_publishLifecycleListenerClass;
|
||||
private final Parameter m_requireLaunchDate;
|
||||
private final Parameter m_saveTextCleansWordTags;
|
||||
private final Parameter m_hideAdditionalResourceFields;
|
||||
private final Parameter m_disableFileAssetExtraction;
|
||||
|
|
@ -149,6 +149,14 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
private final Parameter m_categoryTreeOrdering;
|
||||
private final Parameter m_hideTextAssetUploadFile;
|
||||
private final Parameter m_allowContentCreateInSectionListing;
|
||||
|
||||
// ///////////////////////////////////////////
|
||||
// publishToFile package related parameter
|
||||
// ///////////////////////////////////////////
|
||||
|
||||
// Moved to publishToFile.PublishToFileConfig as of version 6.0.2
|
||||
// private final Parameter m_disableItemPfs;
|
||||
// private final Parameter m_publishToFileClass;
|
||||
|
||||
/**
|
||||
* Do not instantiate this class directly.
|
||||
|
|
@ -246,10 +254,10 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
Parameter.OPTIONAL,
|
||||
null);
|
||||
|
||||
m_dhtmlEditorHiddenButtons = new StringArrayParameter
|
||||
("com.arsdigita.cms.dhtml_editor_hidden_buttons",
|
||||
Parameter.OPTIONAL,
|
||||
null);
|
||||
m_dhtmlEditorHiddenButtons = new StringArrayParameter
|
||||
("com.arsdigita.cms.dhtml_editor_hidden_buttons",
|
||||
Parameter.OPTIONAL,
|
||||
null);
|
||||
|
||||
m_hideTemplatesTab = new BooleanParameter
|
||||
("com.arsdigita.cms.hide_templates_tab",
|
||||
|
|
@ -326,11 +334,11 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
ItemCategoryExtension.class,
|
||||
ItemCategoryExtension.class);
|
||||
|
||||
m_hideResetLifecycleLink = new BooleanParameter
|
||||
m_hideResetLifecycleLink = new BooleanParameter
|
||||
("com.arsdigita.cms.hide_reset_lifecycle_link",
|
||||
Parameter.OPTIONAL, new Boolean(true));
|
||||
|
||||
m_keywordWeight = new IntegerParameter
|
||||
m_keywordWeight = new IntegerParameter
|
||||
("com.arsdigita.cms.search.intermedia.keyword_weight",
|
||||
Parameter.OPTIONAL,
|
||||
new Integer(1));
|
||||
|
|
@ -339,6 +347,7 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
("com.arsdigita.cms.search.intermedia.title_weight",
|
||||
Parameter.OPTIONAL,
|
||||
new Integer(1));
|
||||
|
||||
m_scoreTitleAndKeywords = new BooleanParameter
|
||||
("com.arsdigita.cms.search.score_title_and_keywords",
|
||||
Parameter.OPTIONAL,
|
||||
|
|
@ -346,10 +355,10 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
|
||||
/**
|
||||
* each entry in the list is a : separated pair. The first string
|
||||
* is the className for the type (refer to classname column in contenttypes table
|
||||
* eg com.arsdigita.cms.contenttypes.MultiPartArticle
|
||||
* Second string is the name of the bebop step component
|
||||
* eg com.arsdigita.cms.contenttypes.ui.ImageStep
|
||||
* is the className for the type (refer to classname column in contenttypes table
|
||||
* eg com.arsdigita.cms.contenttypes.MultiPartArticle
|
||||
* Second string is the name of the bebop step component
|
||||
* eg com.arsdigita.cms.contenttypes.ui.ImageStep
|
||||
*/
|
||||
m_skipAssetSteps = new StringArrayParameter
|
||||
("com.arsdigita.cms.skip_asset_steps",
|
||||
|
|
@ -357,67 +366,68 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
null);
|
||||
|
||||
m_mandatoryDescriptions = new BooleanParameter
|
||||
("com.arsdigita.cms.mandatory_descriptions",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
("com.arsdigita.cms.mandatory_descriptions",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
|
||||
m_deleteExpiryNotificationsWhenSent = new BooleanParameter
|
||||
("com.arsdigita.cms.delete_expiry_notification_when_sent",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
m_deleteExpiryNotificationsWhenSent = new BooleanParameter
|
||||
("com.arsdigita.cms.delete_expiry_notification_when_sent",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
|
||||
m_deleteWorkflowNotificationsWhenSent = new BooleanParameter
|
||||
("com.arsdigita.cms.delete_workflow_notification_when_sent",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
("com.arsdigita.cms.delete_workflow_notification_when_sent",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
|
||||
m_categoryTreeOrdering = new EnumerationParameter
|
||||
("com.arsdigita.cms.category_tree_order",
|
||||
Parameter.OPTIONAL, Category.SORT_KEY );
|
||||
("com.arsdigita.cms.category_tree_order",
|
||||
Parameter.OPTIONAL, Category.SORT_KEY );
|
||||
|
||||
// 2 valid values at the moment - enumeration used rather than boolean in case other
|
||||
// possible orders are deemed valid
|
||||
// 2 valid values at the moment - enumeration used rather than boolean
|
||||
// in case other possible orders are deemed valid
|
||||
((EnumerationParameter)m_categoryTreeOrdering).put("SortKey", Category.SORT_KEY );
|
||||
((EnumerationParameter)m_categoryTreeOrdering).put("Alphabetical", Category.NAME);
|
||||
|
||||
m_hasContactsAuthoringStep = new BooleanParameter
|
||||
("com.arsdigita.cms.has_contacts_authoring_step",
|
||||
Parameter.REQUIRED, new Boolean(false));
|
||||
("com.arsdigita.cms.has_contacts_authoring_step",
|
||||
Parameter.REQUIRED, new Boolean(false));
|
||||
|
||||
m_hideTextAssetUploadFile = new BooleanParameter(
|
||||
"com.arsdigita.cms.hide_text_asset_upload_file",
|
||||
Parameter.REQUIRED,
|
||||
new Boolean(false));
|
||||
m_hideTextAssetUploadFile = new BooleanParameter
|
||||
("com.arsdigita.cms.hide_text_asset_upload_file",
|
||||
Parameter.REQUIRED,
|
||||
new Boolean(false));
|
||||
|
||||
m_allowContentCreateInSectionListing = new BooleanParameter(
|
||||
"com.arsdigita.cms.allow_content_create_in_section_listing",
|
||||
Parameter.REQUIRED,
|
||||
new Boolean(true));
|
||||
m_allowContentCreateInSectionListing = new BooleanParameter
|
||||
("com.arsdigita.cms.allow_content_create_in_section_listing",
|
||||
Parameter.REQUIRED,
|
||||
new Boolean(true));
|
||||
|
||||
// Lifecycle package
|
||||
|
||||
m_deleteLifecycleWhenComplete = new BooleanParameter
|
||||
("com.arsdigita.cms.delete_lifecycle_when_complete",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
("com.arsdigita.cms.delete_lifecycle_when_complete",
|
||||
Parameter.OPTIONAL, new Boolean(false));
|
||||
|
||||
// PublishToFile package
|
||||
m_publishToFileClass = new SpecificClassParameter
|
||||
("com.arsdigita.cms.publish_to_file_class",
|
||||
Parameter.REQUIRED,
|
||||
PublishToFile.class,
|
||||
PublishToFileListener.class);
|
||||
// ///////////////////////////////////////////
|
||||
// publishToFile package related parameter
|
||||
// ///////////////////////////////////////////
|
||||
|
||||
// XXX: temporary parameter. will be removed when MapParameter
|
||||
// works and the p2fs initializer is converted away from the
|
||||
// legacy init
|
||||
m_disableItemPfs = new BooleanParameter
|
||||
("com.arsdigita.cms.disable_item_pfs",
|
||||
Parameter.REQUIRED, new Boolean(false));
|
||||
|
||||
// Moved to publishToFile.PublishToFileConfig as of version 6.0.2
|
||||
// m_disableItemPfs = new BooleanParameter
|
||||
// ("com.arsdigita.cms.disable_item_pfs",
|
||||
// Parameter.REQUIRED, new Boolean(false));
|
||||
//
|
||||
// m_publishToFileClass = new SpecificClassParameter
|
||||
// ("com.arsdigita.cms.publish_to_file_class",
|
||||
// Parameter.REQUIRED,
|
||||
// PublishToFile.class,
|
||||
// PublishToFileListener.class);
|
||||
|
||||
register(m_templateRootPath);
|
||||
register(m_defaultItemTemplatePath);
|
||||
register(m_defaultFolderTemplatePath);
|
||||
register(m_languages);
|
||||
register(m_publishToFileClass);
|
||||
register(m_disableItemPfs);
|
||||
register(m_defaultItemResolverClass);
|
||||
register(m_defaultTemplateResolverClass);
|
||||
register(m_categoryAuthoringAddForm);
|
||||
|
|
@ -448,8 +458,8 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
register(m_unpublishedNotFound);
|
||||
register(m_linksOnlyInSameSubsite);
|
||||
register(m_categoryAuthoringExtension);
|
||||
register(m_hideResetLifecycleLink);
|
||||
register(m_keywordWeight);
|
||||
register(m_hideResetLifecycleLink);
|
||||
register(m_keywordWeight);
|
||||
register(m_titleWeight);
|
||||
register(m_scoreTitleAndKeywords);
|
||||
register(m_skipAssetSteps);
|
||||
|
|
@ -458,9 +468,14 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
register(m_deleteExpiryNotificationsWhenSent);
|
||||
register(m_deleteWorkflowNotificationsWhenSent);
|
||||
register(m_categoryTreeOrdering);
|
||||
register(m_hasContactsAuthoringStep);
|
||||
register(m_hideTextAssetUploadFile);
|
||||
register(m_allowContentCreateInSectionListing);
|
||||
register(m_hasContactsAuthoringStep);
|
||||
register(m_hideTextAssetUploadFile);
|
||||
register(m_allowContentCreateInSectionListing);
|
||||
|
||||
// Moved to publishToFile.PublishToFileConfig as of version 6.0.2
|
||||
// register(m_disableItemPfs);
|
||||
// register(m_publishToFileClass);
|
||||
|
||||
loadInfo();
|
||||
}
|
||||
|
||||
|
|
@ -480,14 +495,6 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
return (String) get(m_languages);
|
||||
}
|
||||
|
||||
public final Class getPublishToFileClass() {
|
||||
return (Class) get(m_publishToFileClass);
|
||||
}
|
||||
|
||||
public final boolean getDisableItemPfs() {
|
||||
return ((Boolean) get(m_disableItemPfs)).booleanValue();
|
||||
}
|
||||
|
||||
public final Class getDefaultItemResolverClass() {
|
||||
return (Class) get(m_defaultItemResolverClass);
|
||||
}
|
||||
|
|
@ -532,9 +539,9 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
return (String[])get(m_dhtmlEditorPlugins);
|
||||
}
|
||||
|
||||
public final String[] getDHTMLEditorHiddenButtons() {
|
||||
return (String[])get(m_dhtmlEditorHiddenButtons);
|
||||
}
|
||||
public final String[] getDHTMLEditorHiddenButtons() {
|
||||
return (String[])get(m_dhtmlEditorHiddenButtons);
|
||||
}
|
||||
|
||||
public final boolean getHideTemplatesTab() {
|
||||
return ((Boolean) get(m_hideTemplatesTab)).booleanValue();
|
||||
|
|
@ -616,34 +623,27 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
return (Class) get(m_categoryAuthoringExtension);
|
||||
}
|
||||
|
||||
private class SpecificClassParameter extends ClassParameter {
|
||||
// ///////////////////////////////////////////
|
||||
// publishToFile package related configuration
|
||||
// ///////////////////////////////////////////
|
||||
|
||||
private Class m_requiredClass;
|
||||
|
||||
public SpecificClassParameter(final String name,
|
||||
final int multiplicity,
|
||||
final Object defaultObj,
|
||||
final Class requiredClass) {
|
||||
super(name, multiplicity, defaultObj);
|
||||
m_requiredClass = requiredClass;
|
||||
}
|
||||
|
||||
// value != null
|
||||
@Override
|
||||
protected Object unmarshal(String value, ErrorList errors) {
|
||||
Class theClass = (Class) super.unmarshal(value,errors);
|
||||
if (theClass != null) {
|
||||
if (!m_requiredClass.isAssignableFrom(theClass)) {
|
||||
errors.add(new ParameterError(this, "class " + value +
|
||||
" must implement : " +
|
||||
m_requiredClass.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
return theClass;
|
||||
}
|
||||
// Moved to publishToFile.PublishToFileConfig! Temporarily retained here
|
||||
// for backwards compatibility
|
||||
public final boolean getDisableItemPfs() {
|
||||
// return ((Boolean) get(m_disableItemPfs)).booleanValue();
|
||||
return PublishToFileConfig.getConfig().isItemPfsDisabled();
|
||||
}
|
||||
|
||||
public final Class getPublishToFileClass() {
|
||||
// return (Class) get(m_publishToFileClass);
|
||||
return PublishToFileConfig.getConfig().getPublishListenerClass();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private class DHTMLEditorConfigParameter extends StringParameter {
|
||||
public DHTMLEditorConfigParameter(final String name,
|
||||
final int multiplicity,
|
||||
|
|
@ -714,7 +714,7 @@ public final class ContentSectionConfig extends AbstractConfig {
|
|||
|
||||
/**
|
||||
* for the given content type, returns a collection of
|
||||
* step that are deemed irrelevant for the type.
|
||||
* steps that are deemed irrelevant for the type.
|
||||
*
|
||||
* If no irrelevant steps, an empty set is returned.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -18,16 +18,6 @@ com.arsdigita.cms.languages.purpose=The list of languages for this installation.
|
|||
com.arsdigita.cms.languages.example=en,de,fr,nl,it,pt,es
|
||||
com.arsdigita.cms.languages.format=[string]
|
||||
|
||||
com.arsdigita.cms.publish_to_file_class.title=Publish to File listener class
|
||||
com.arsdigita.cms.publish_to_file_class.purpose=Class implementing PublishToFileListener. Contains the initial methods called when publishing or unpublishing. Normally this should be set to com.arsdigita.cms.publishToFile.PublishToFile, but custom classes can also be used.
|
||||
com.arsdigita.cms.publish_to_file_class.example=com.arsdigita.cms.publishToFile.PublishToFile
|
||||
com.arsdigita.cms.publish_to_file_class.format=[class]
|
||||
|
||||
com.arsdigita.cms.disable_item_pfs.title=Disable (non-Template) Item p2fs
|
||||
com.arsdigita.cms.disable_item_pfs.purpose=Disable publish-to-filesystem for items other than templates. (note: this parameter is a temporary measure to allow limited parameter-based control of p2fs until MapParameter is fully implemented)
|
||||
com.arsdigita.cms.disable_item_pfs.example=false
|
||||
com.arsdigita.cms.disable_item_pfs.format=[boolean]
|
||||
|
||||
com.arsdigita.cms.default_item_resolver_class.title=Item resolver class
|
||||
com.arsdigita.cms.default_item_resolver_class.purpose=Default item resolver class will be used for any content section which does not override in SectionInitializer enterprise.init section. This class must implement com.arsdigita.cms.dispatcher.ItemResolver.
|
||||
com.arsdigita.cms.default_item_resolver_class.example=com.arsdigita.cms.dispatcher.MultilingualItemResolver
|
||||
|
|
|
|||
|
|
@ -106,9 +106,6 @@ public class Initializer extends CompoundInitializer {
|
|||
/**
|
||||
* Initializes domain-coupling machinery, usually consisting of
|
||||
* registering object instantiators and observers.
|
||||
*
|
||||
* This starts up the search threads according to the values in the
|
||||
* properties file
|
||||
*/
|
||||
public void init(DomainInitEvent e) {
|
||||
super.init(e);
|
||||
|
|
@ -174,20 +171,6 @@ public class Initializer extends CompoundInitializer {
|
|||
new TraversalHandler());
|
||||
|
||||
|
||||
// Just set the class implementing methods run when for publishing
|
||||
// or unpublishing to file. No initialisation of the class here.
|
||||
try {
|
||||
QueueManager.setListener((PublishToFileListener)
|
||||
ContentSection.getConfig()
|
||||
.getPublishToFileClass().newInstance());
|
||||
} catch (InstantiationException ex) {
|
||||
throw new UncheckedWrapperException
|
||||
("Failed to instantiate the listener class", ex);
|
||||
} catch (IllegalAccessException ex) {
|
||||
throw new UncheckedWrapperException
|
||||
("Couldn't access the listener class", ex);
|
||||
}
|
||||
|
||||
MetadataProviderRegistry.registerAdapter(
|
||||
FileAsset.BASE_DATA_OBJECT_TYPE,
|
||||
new AssetMetadataProvider());
|
||||
|
|
|
|||
|
|
@ -87,6 +87,11 @@ init com.arsdigita.cms.installer.SectionInitializer {
|
|||
// Name of the content section. This is used as the URL
|
||||
// so it must contain only characters that are allowed in URLs e.g.,
|
||||
// no spaces.
|
||||
// If you modify the name you must adjust:
|
||||
// - Parameter m_defaultSection in c.ad.cms.ContentSectionConfig.java
|
||||
// - Parameter waf.pagemap.login_redirect=content/content-center-redirect.jsp
|
||||
// in integrations.properties of the respective bundle
|
||||
// - registerDomain(navigationKey, "/content/", null); in ldn.aplaws.Loader
|
||||
name = "content";
|
||||
|
||||
// List of roles to create. First field is role name,
|
||||
|
|
@ -123,6 +128,16 @@ init com.arsdigita.cms.installer.SectionInitializer {
|
|||
};
|
||||
|
||||
// List of content types to register
|
||||
|
||||
// Example:
|
||||
// {
|
||||
// "com.arsdigita.cms.contenttypes.Address",
|
||||
// "com.arsdigita.cms.contenttypes.Article",
|
||||
// "com.arsdigita.cms.contenttypes.Contact"
|
||||
// }
|
||||
// The types are registered when the content-section is created. Later
|
||||
// modifications have no effect.
|
||||
|
||||
types = {
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -200,11 +200,13 @@ public final class ContentSectionSetup {
|
|||
}
|
||||
if (templateResolverClass != null && templateResolverClass.length()>0) {
|
||||
m_section.setTemplateResolverClass(templateResolverClass);
|
||||
s_log.info("Registering " + templateResolverClass + " as the template resolver class");
|
||||
s_log.info("Registering " + templateResolverClass +
|
||||
" as the template resolver class");
|
||||
} else {
|
||||
m_section.setTemplateResolverClass
|
||||
(ContentSection.getConfig().getDefaultTemplateResolverClass().getName());
|
||||
s_log.info("Registering " + templateResolverClass + " as the template resolver class");
|
||||
s_log.info("Registering " + templateResolverClass +
|
||||
" as the template resolver class");
|
||||
}
|
||||
|
||||
m_section.save();
|
||||
|
|
@ -215,12 +217,14 @@ public final class ContentSectionSetup {
|
|||
|
||||
// The 3-step production workflow.
|
||||
WorkflowTemplate wf = new WorkflowTemplate();
|
||||
wf.setLabel( (String) GlobalizationUtil.globalize("cms.installer.production_workflow").localize());
|
||||
wf.setLabel( (String) GlobalizationUtil.globalize(
|
||||
"cms.installer.production_workflow").localize());
|
||||
wf.setDescription("A process that involves creating and approving content.");
|
||||
wf.save();
|
||||
|
||||
CMSTask authoring = new CMSTask();
|
||||
authoring.setLabel((String) GlobalizationUtil.globalize("cms.installer.authoring").localize());
|
||||
authoring.setLabel((String) GlobalizationUtil.globalize(
|
||||
"cms.installer.authoring").localize());
|
||||
authoring.setDescription("Create content.");
|
||||
authoring.save();
|
||||
|
||||
|
|
@ -233,7 +237,8 @@ public final class ContentSectionSetup {
|
|||
authoring.save();
|
||||
|
||||
CMSTask approval = new CMSTask();
|
||||
approval.setLabel( (String) GlobalizationUtil.globalize("cms.installer.approval").localize());
|
||||
approval.setLabel( (String) GlobalizationUtil.globalize(
|
||||
"cms.installer.approval").localize());
|
||||
approval.setDescription("Approve content.");
|
||||
approval.save();
|
||||
approval.addDependency(authoring);
|
||||
|
|
@ -248,7 +253,8 @@ public final class ContentSectionSetup {
|
|||
|
||||
|
||||
CMSTask deploy = new CMSTask();
|
||||
deploy.setLabel((String) GlobalizationUtil.globalize("cms.installer.deploy").localize());
|
||||
deploy.setLabel((String) GlobalizationUtil.globalize(
|
||||
"cms.installer.deploy").localize());
|
||||
deploy.setDescription("Deploy content.");
|
||||
deploy.save();
|
||||
deploy.addDependency(approval);
|
||||
|
|
@ -281,11 +287,14 @@ public final class ContentSectionSetup {
|
|||
PrivilegeDescriptor.get("cms_read_item"));
|
||||
|
||||
|
||||
String email = Boolean.TRUE.equals(pub) ? "public@nullhost" : "registered@nullhost";
|
||||
String email = Boolean.TRUE.equals(pub) ? "public@nullhost"
|
||||
: "registered@nullhost";
|
||||
|
||||
Party viewer = retrieveParty(email);
|
||||
if (viewer == null)
|
||||
throw new InitializationException( (String) GlobalizationUtil.globalize("cms.installer.cannot_find_group_for_email").localize() + email);
|
||||
throw new InitializationException(
|
||||
(String) GlobalizationUtil.globalize(
|
||||
"cms.installer.cannot_find_group_for_email").localize() + email);
|
||||
|
||||
s_log.info("Adding " + email + " to viewers role");
|
||||
viewers.getGroup().addMemberOrSubgroup(viewer);
|
||||
|
|
@ -333,18 +342,22 @@ public final class ContentSectionSetup {
|
|||
try {
|
||||
type = ContentType.findByAssociatedObjectType(name);
|
||||
} catch (DataObjectNotFoundException ex) {
|
||||
throw new UncheckedWrapperException( (String) GlobalizationUtil.globalize("cms.installer.cannot_find_content_type").localize() + name, ex);
|
||||
throw new UncheckedWrapperException(
|
||||
(String) GlobalizationUtil.globalize(
|
||||
"cms.installer.cannot_find_content_type").localize() + name, ex);
|
||||
}
|
||||
|
||||
s_log.info("Adding type " + name + " to " + m_section.getDisplayName());
|
||||
m_section.addContentType(type);
|
||||
|
||||
s_log.info("Setting the default lifecycle for " + name + " to " + m_lcd.getLabel());
|
||||
s_log.info("Setting the default lifecycle for " +
|
||||
name + " to " + m_lcd.getLabel());
|
||||
ContentTypeLifecycleDefinition.
|
||||
updateLifecycleDefinition(m_section, type, m_lcd);
|
||||
m_lcd.save();
|
||||
|
||||
s_log.info("Setting the default workflow template for " + name + " to " + m_wf.getLabel());
|
||||
s_log.info("Setting the default workflow template for " + name +
|
||||
" to " + m_wf.getLabel());
|
||||
ContentTypeWorkflowTemplate.updateWorkflowTemplate(m_section, type, m_wf);
|
||||
m_wf.save();
|
||||
|
||||
|
|
@ -392,7 +405,9 @@ public final class ContentSectionSetup {
|
|||
try {
|
||||
line = input.readLine();
|
||||
} catch (IOException ex) {
|
||||
throw new UncheckedWrapperException( (String) GlobalizationUtil.globalize("cms.installer.cannot_read_line_of_data").localize(), ex);
|
||||
throw new UncheckedWrapperException(
|
||||
(String) GlobalizationUtil.globalize(
|
||||
"cms.installer.cannot_read_line_of_data").localize(), ex);
|
||||
}
|
||||
if (line == null)
|
||||
break;
|
||||
|
|
@ -418,7 +433,8 @@ public final class ContentSectionSetup {
|
|||
|
||||
// The feature lifecycle.
|
||||
LifecycleDefinition lcd = new LifecycleDefinition();
|
||||
lcd.setLabel( (String) GlobalizationUtil.globalize("cms.installer.simple_publication").localize());
|
||||
lcd.setLabel( (String) GlobalizationUtil.globalize(
|
||||
"cms.installer.simple_publication").localize());
|
||||
lcd.setDescription("A one-phase lifecycle for items.");
|
||||
lcd.save();
|
||||
|
||||
|
|
@ -549,20 +565,24 @@ public final class ContentSectionSetup {
|
|||
}
|
||||
}
|
||||
|
||||
public Timer startNotifierTask(Boolean sendOverdue, Integer duration, Integer alertInterval, Integer max) {
|
||||
public Timer startNotifierTask(Boolean sendOverdue, Integer duration,
|
||||
Integer alertInterval, Integer max) {
|
||||
Timer unfinished = null;
|
||||
if (sendOverdue.booleanValue()) {
|
||||
if (duration == null || alertInterval == null || max == null) {
|
||||
s_log.info("Not sending overdue task alerts, required initialization parameters were not specified");
|
||||
s_log.info("Not sending overdue task alerts, " +
|
||||
"required initialization parameters were not specified");
|
||||
return null;
|
||||
}
|
||||
// start the Timer as a daemon, so it doesn't keep the JVM from exiting
|
||||
unfinished = new Timer(true);
|
||||
UnfinishedTaskNotifier notifier = new UnfinishedTaskNotifier(m_section, duration.intValue(),
|
||||
UnfinishedTaskNotifier notifier = new UnfinishedTaskNotifier(
|
||||
m_section, duration.intValue(),
|
||||
alertInterval.intValue(), max.intValue());
|
||||
// schedule the Task to start in 5 minutes, at 1 hour intervals
|
||||
unfinished.schedule(notifier, 5L * 60 * 1000, 60L * 60 * 1000);
|
||||
s_log.info("Sending overdue alerts for tasks greater than " + duration + " hours old");
|
||||
s_log.info("Sending overdue alerts for tasks greater than " +
|
||||
duration + " hours old");
|
||||
} else {
|
||||
s_log.info("Not sending overdue task alerts");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,7 +170,9 @@ public class SectionInitializer extends com.arsdigita.kernel.BaseInitializer {
|
|||
try {
|
||||
node = SiteNode.getSiteNode("/" + name);
|
||||
} catch (DataObjectNotFoundException ex) {
|
||||
throw new InitializationException( (String) GlobalizationUtil.globalize("cms.installer.root_site_node_missing").localize(), ex);
|
||||
throw new InitializationException(
|
||||
(String) GlobalizationUtil.globalize(
|
||||
"cms.installer.root_site_node_missing").localize(), ex);
|
||||
}
|
||||
ContentSection section = null;
|
||||
if ( rootNodeID.equals(node.getID()) ) {
|
||||
|
|
@ -180,7 +182,10 @@ public class SectionInitializer extends com.arsdigita.kernel.BaseInitializer {
|
|||
try {
|
||||
section = ContentSection.getSectionFromNode(node);
|
||||
} catch (DataObjectNotFoundException de) {
|
||||
throw new InitializationException( (String) GlobalizationUtil.globalize("cms.installer.could_not_load_section", new Object[] {name}).localize(), de);
|
||||
throw new InitializationException(
|
||||
(String) GlobalizationUtil.globalize(
|
||||
"cms.installer.could_not_load_section",
|
||||
new Object[] {name}).localize(), de);
|
||||
}
|
||||
}
|
||||
return section;
|
||||
|
|
|
|||
|
|
@ -25,13 +25,10 @@ import com.arsdigita.util.Assert;
|
|||
*
|
||||
* @author Michael Pih (pihman@arsdigita.com)
|
||||
* @version $Revision: #11 $ $Date: 2004/08/17 $
|
||||
* @version $Id: Duration.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class Duration {
|
||||
|
||||
public static final String versionId =
|
||||
"$Id: Duration.java 287 2005-02-22 00:29:02Z sskracic $" +
|
||||
" by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* A convenience wrapper around {@link #formatDuration(int)}.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import com.arsdigita.domain.DataObjectNotFoundException;
|
|||
import com.arsdigita.kernel.ACSObject;
|
||||
import com.arsdigita.persistence.DataAssociation;
|
||||
import com.arsdigita.persistence.DataAssociationCursor;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.DataQuery;
|
||||
import com.arsdigita.persistence.Filter;
|
||||
|
|
@ -43,13 +43,12 @@ import java.util.Date;
|
|||
*
|
||||
* @author Jack Chung
|
||||
* @author Michael Pih
|
||||
* @version $Revision: 1.1 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Revision: 1.1 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: Lifecycle.java 1585 2007-05-29 13:12:44Z chrisgilbert23 $
|
||||
*/
|
||||
|
||||
public class Lifecycle extends ACSObject {
|
||||
|
||||
public static final String versionId = "$Id: Lifecycle.java 1585 2007-05-29 13:12:44Z chrisgilbert23 $ by $Author: chrisgilbert23 $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
public final static String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.cms.Lifecycle";
|
||||
|
||||
|
|
@ -132,23 +131,23 @@ public class Lifecycle extends ACSObject {
|
|||
}
|
||||
|
||||
|
||||
|
||||
public void beforeDelete() {
|
||||
s_log.debug("About to delete lifecycle " + getID() + ". First delete phases & LifecycleService");
|
||||
super.beforeDelete();
|
||||
DataCollection lifecycleServices = SessionManager.getSession().retrieve(LifecycleService.BASE_DATA_OBJECT_TYPE);
|
||||
lifecycleServices.addEqualsFilter(LifecycleService.LIFECYCLE_ID, getID());
|
||||
while (lifecycleServices.next()) {
|
||||
DataObject service = lifecycleServices.getDataObject();
|
||||
s_log.debug("Deleting lifecycle service " + service.getOID());
|
||||
// we are deleting the lifecycle so delete all connections from cycle to acs objects if more than one
|
||||
service.delete();
|
||||
}
|
||||
PhaseCollection phases = getPhases();
|
||||
while (phases.next()) {
|
||||
phases.getPhase().delete(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void beforeDelete() {
|
||||
s_log.debug("About to delete lifecycle " + getID() + ". First delete phases & LifecycleService");
|
||||
super.beforeDelete();
|
||||
DataCollection lifecycleServices = SessionManager.getSession().retrieve(LifecycleService.BASE_DATA_OBJECT_TYPE);
|
||||
lifecycleServices.addEqualsFilter(LifecycleService.LIFECYCLE_ID, getID());
|
||||
while (lifecycleServices.next()) {
|
||||
DataObject service = lifecycleServices.getDataObject();
|
||||
s_log.debug("Deleting lifecycle service " + service.getOID());
|
||||
// we are deleting the lifecycle so delete all connections from cycle to acs objects if more than one
|
||||
service.delete();
|
||||
}
|
||||
PhaseCollection phases = getPhases();
|
||||
while (phases.next()) {
|
||||
phases.getPhase().delete(false);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Fetches the label of the lifecycle, which is the same as the
|
||||
* label of the associated lifecycle definition.
|
||||
|
|
|
|||
|
|
@ -39,12 +39,9 @@ import java.util.Date;
|
|||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @author Michael Pih (pihman@arsdigita.com)
|
||||
* @version $Revision: #14 $ $Date: 2004/08/17 $
|
||||
* @version $Id: LifecycleDefinition.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class LifecycleDefinition extends ACSObject {
|
||||
public static final String versionId =
|
||||
"$Id: LifecycleDefinition.java 287 2005-02-22 00:29:02Z sskracic $" +
|
||||
"$Author: sskracic $" +
|
||||
"$DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
private static Logger s_log = Logger.getLogger(LifecycleDefinition.class);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,17 +24,15 @@ import com.arsdigita.persistence.DataCollection;
|
|||
|
||||
/**
|
||||
* This class contains a collection fo Lifecycle Definition
|
||||
* @see DomainCollection
|
||||
* @see DataCollection
|
||||
*
|
||||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @version $Revision: #8 $ $Date: 2004/08/17 $
|
||||
*
|
||||
* @see DomainCollection
|
||||
* @see DataCollection
|
||||
* @version $Id: LifecycleDefinitionCollection.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
public class LifecycleDefinitionCollection extends DomainCollection {
|
||||
|
||||
public static final String versionId = "$Id: LifecycleDefinitionCollection.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@ import java.util.Date;
|
|||
*
|
||||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @version $Revision: #9 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: LifecycleEvent.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
|
||||
public class LifecycleEvent {
|
||||
|
||||
public static final String versionId = "$Id: LifecycleEvent.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
private int m_eventType;
|
||||
private Date m_startDateTime, m_endDateTime;
|
||||
private OID m_oid;
|
||||
|
|
|
|||
|
|
@ -25,12 +25,12 @@ package com.arsdigita.cms.lifecycle;
|
|||
*
|
||||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @version $Revision: #7 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: LifecycleListener.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
|
||||
|
||||
public interface LifecycleListener {
|
||||
|
||||
public static final String versionId = "$Id: LifecycleListener.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
/**
|
||||
* Invoked when an lifecycle or phase begins. If any runtime exception is
|
||||
* thrown, the transaction will be aborted.
|
||||
|
|
|
|||
|
|
@ -40,12 +40,11 @@ import java.sql.SQLException;
|
|||
*
|
||||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @version $Revision: #13 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: LifecycleService.java 287 2005-02-22 00:29:02Z sskracic $
|
||||
*/
|
||||
|
||||
public class LifecycleService extends DomainObject{
|
||||
|
||||
public static final String versionId = "$Id: LifecycleService.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(LifecycleService.class);
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
|
|
|
|||
|
|
@ -37,13 +37,12 @@ import java.util.Date;
|
|||
*
|
||||
* @author Jack Chung (flattop@arsdigita.com)
|
||||
* @author Michael Pih (pihman@arsdigita.com)
|
||||
* @version $Revision: 1.1 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Revision: 1.1 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @version $Id: Phase.java 1583 2007-05-25 15:32:13Z chrisgilbert23 $
|
||||
*/
|
||||
|
||||
public class Phase extends ACSObject {
|
||||
|
||||
public static final String versionId = "$Id: Phase.java 1583 2007-05-25 15:32:13Z chrisgilbert23 $ by $Author: chrisgilbert23 $, $DateTime: 2004/08/17 23:15:09 $";
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.cms.Phase";
|
||||
|
||||
|
|
@ -65,10 +64,10 @@ public class Phase extends ACSObject {
|
|||
|
||||
private static final Logger s_log = Logger.getLogger(Phase.class);
|
||||
|
||||
// temporarily stored during delete cycle
|
||||
private PhaseDefinition m_definition = null;
|
||||
private boolean m_updateCycleTimes = true;
|
||||
|
||||
// temporarily stored during delete cycle
|
||||
private PhaseDefinition m_definition = null;
|
||||
private boolean m_updateCycleTimes = true;
|
||||
|
||||
/**
|
||||
* If this constructor is used, the phase definition needs to be
|
||||
* set with the <code>setPhaseDefinition</code> method.
|
||||
|
|
@ -328,30 +327,30 @@ public class Phase extends ACSObject {
|
|||
}
|
||||
|
||||
|
||||
public void delete (boolean updateCycleTimes) {
|
||||
m_updateCycleTimes = updateCycleTimes;
|
||||
delete();
|
||||
|
||||
}
|
||||
|
||||
public void beforeDelete () {
|
||||
s_log.debug("About to delete phase " + getID());
|
||||
super.beforeDelete();
|
||||
Lifecycle cycle = getLifecycle();
|
||||
if ( cycle != null ) {
|
||||
PhaseDefinition definition = getPhaseDefinition();
|
||||
PhaseDefinitionCollection cyclePhaseDefinitions = cycle.getLifecycleDefinition().getPhaseDefinitions();
|
||||
cyclePhaseDefinitions.addEqualsFilter(PhaseDefinition.ID, definition.getID());
|
||||
if (cyclePhaseDefinitions.isEmpty()) {
|
||||
s_log.debug("Phase Definition " + definition.getID() + ": " + definition.getLabel() + " is a custom phase definition. I will delete it after deleting phase " + getID());
|
||||
// this is a custom definition - delete it once phase has been deleted
|
||||
m_definition = definition;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
public void delete (boolean updateCycleTimes) {
|
||||
m_updateCycleTimes = updateCycleTimes;
|
||||
delete();
|
||||
|
||||
}
|
||||
|
||||
public void beforeDelete () {
|
||||
s_log.debug("About to delete phase " + getID());
|
||||
super.beforeDelete();
|
||||
Lifecycle cycle = getLifecycle();
|
||||
if ( cycle != null ) {
|
||||
PhaseDefinition definition = getPhaseDefinition();
|
||||
PhaseDefinitionCollection cyclePhaseDefinitions = cycle.getLifecycleDefinition().getPhaseDefinitions();
|
||||
cyclePhaseDefinitions.addEqualsFilter(PhaseDefinition.ID, definition.getID());
|
||||
if (cyclePhaseDefinitions.isEmpty()) {
|
||||
s_log.debug("Phase Definition " + definition.getID() + ": " + definition.getLabel() + " is a custom phase definition. I will delete it after deleting phase " + getID());
|
||||
// this is a custom definition - delete it once phase has been deleted
|
||||
m_definition = definition;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Delete this phase, updating the start and end times of the
|
||||
* associated lifecycle.
|
||||
|
|
@ -359,17 +358,17 @@ public class Phase extends ACSObject {
|
|||
public void delete() {
|
||||
Lifecycle cycle = getLifecycle();
|
||||
super.delete();
|
||||
if ( cycle != null && m_updateCycleTimes) {
|
||||
if ( cycle != null && m_updateCycleTimes) {
|
||||
cycle.updateStartEndTimes();
|
||||
}
|
||||
}
|
||||
|
||||
public void afterDelete() {
|
||||
if (m_definition != null) {
|
||||
m_definition.delete();
|
||||
}
|
||||
}
|
||||
|
||||
public void afterDelete() {
|
||||
if (m_definition != null) {
|
||||
m_definition.delete();
|
||||
}
|
||||
}
|
||||
|
||||
protected void afterSave() {
|
||||
super.afterSave();
|
||||
Lifecycle cycle = getLifecycle();
|
||||
|
|
|
|||
|
|
@ -18,14 +18,33 @@
|
|||
*/
|
||||
package com.arsdigita.cms.publishToFile;
|
||||
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.Template;
|
||||
import com.arsdigita.db.DbHelper;
|
||||
|
||||
import com.arsdigita.domain.DomainObject;
|
||||
// import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.domain.DomainObjectInstantiator;
|
||||
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.metadata.MetadataRoot;
|
||||
import com.arsdigita.persistence.metadata.ObjectType;
|
||||
import com.arsdigita.runtime.CCMResourceManager;
|
||||
import com.arsdigita.runtime.CompoundInitializer;
|
||||
import com.arsdigita.runtime.ConfigError;
|
||||
import com.arsdigita.runtime.ContextCloseEvent;
|
||||
import com.arsdigita.runtime.DataInitEvent;
|
||||
import com.arsdigita.runtime.ContextInitEvent;
|
||||
// import com.arsdigita.runtime.DataInitEvent;
|
||||
import com.arsdigita.runtime.DomainInitEvent;
|
||||
import com.arsdigita.runtime.LegacyInitEvent;
|
||||
// import com.arsdigita.runtime.LegacyInitEvent;
|
||||
import com.arsdigita.runtime.LegacyInitializer;
|
||||
import com.arsdigita.runtime.RuntimeConfig;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -40,22 +59,22 @@ import org.apache.log4j.Logger;
|
|||
*/
|
||||
public class Initializer extends CompoundInitializer {
|
||||
|
||||
// Creates a s_logging category with name = to the full name of class
|
||||
/**
|
||||
* Creates a s_logging category with name = to the full name of class
|
||||
*/
|
||||
private static Logger s_log = Logger.getLogger(Initializer.class);
|
||||
|
||||
private static PublishToFileConfig s_conf= PublishToFileConfig.getConfig();
|
||||
|
||||
public Initializer() {
|
||||
final String url = RuntimeConfig.getConfig().getJDBCURL();
|
||||
final int database = DbHelper.getDatabaseFromURL(url);
|
||||
|
||||
// Left over from CMS initializer
|
||||
// add(new PDLInitializer
|
||||
// (new ManifestSource
|
||||
// ("ccm-cms.pdl.mf",
|
||||
// new NameFilter(DbHelper.getDatabaseSuffix(database), "pdl"))));
|
||||
|
||||
add(new LegacyInitializer("com/arsdigita/cms/publishToFile/enterprise.init"));
|
||||
// temporary solution for the time LegacyInitializer is not completely
|
||||
// migrated to this Initializer
|
||||
// add(new LegacyInitializer("com/arsdigita/cms/publishToFile/enterprise.init"));
|
||||
|
||||
// s_conf = PublishToFileConfig.getConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -63,17 +82,49 @@ public class Initializer extends CompoundInitializer {
|
|||
*
|
||||
* @param evt The data init event.
|
||||
*/
|
||||
public void init(DataInitEvent evt) {
|
||||
}
|
||||
// public void init(DataInitEvent evt) {
|
||||
// }
|
||||
|
||||
/**
|
||||
* Initializes domain-coupling machinery, usually consisting of
|
||||
* registering object instantiators and observers.
|
||||
*
|
||||
* In the future: This starts up the search threads according to the values in the
|
||||
* properties file
|
||||
*/
|
||||
public void init(DomainInitEvent e) {
|
||||
s_log.debug("publishToFile.Initializer.init(DomainInitEvent) invoked");
|
||||
|
||||
// Recursive invokation of init, is it really necessary??
|
||||
// On the other hand:
|
||||
// An empty implementations prevents this initializer from being executed.
|
||||
// A missing implementations causes the super class method to be executed,
|
||||
// which invokes the above added LegacyInitializer.
|
||||
// If super is not invoked, various other cms sub-initializer may not run.
|
||||
super.init(e);
|
||||
|
||||
/* From old Initializer system
|
||||
* DomainObjectInstantiator inst = new DomainObjectInstantiator() {
|
||||
* public DomainObject doNewInstance(DataObject dobj) {
|
||||
* return new PublishedFile(dobj);
|
||||
* }
|
||||
* };
|
||||
* DomainObjectFactory.registerInstantiator(
|
||||
* PublishedFile.BASE_DATA_OBJECT_TYPE,
|
||||
* inst);
|
||||
*/
|
||||
e.getFactory().registerInstantiator
|
||||
(PublishedFile.BASE_DATA_OBJECT_TYPE,
|
||||
new DomainObjectInstantiator() {
|
||||
public DomainObject doNewInstance(DataObject dataObject) {
|
||||
return new PublishedFile(dataObject);
|
||||
}
|
||||
public DomainObjectInstantiator
|
||||
resolveInstantiator(DataObject obj) {
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
// Not really handling domain registration but preparing the domain
|
||||
processDestination((ArrayList) s_conf.getPublishDestinations());
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -82,8 +133,67 @@ public class Initializer extends CompoundInitializer {
|
|||
*
|
||||
* @param evt The legacy init event.
|
||||
*/
|
||||
public void init(LegacyInitEvent evt) {}
|
||||
// An empty implementations prevents this initializer from beiong executed.
|
||||
// A missing implementations causes the super class method to be executed, which
|
||||
// invokes the above added LegacyInitializer.
|
||||
// That initializer starts P2fs background thread and creation of
|
||||
// ~/packages/content-section/templates/content works now.
|
||||
// public void init(LegacyInitEvent evt) {}
|
||||
|
||||
/**
|
||||
* Implementation of the {@link Initializer#init(ContextInitEvent)} method
|
||||
* used to setup and start background threads which synchronize the content
|
||||
* stored in the database (all modifications made using the CMS module are
|
||||
* persisted in database) with the file system.
|
||||
*
|
||||
* @param evt The context init event.
|
||||
**/
|
||||
public void init(ContextInitEvent evt) {
|
||||
s_log.debug("publishToFile.Initializer.init(ContextInitEvent) invoked");
|
||||
|
||||
// Recursive invokation of init, is it really necessary??
|
||||
// On the other hand:
|
||||
// An empty implementations prevents this initializer from being executed.
|
||||
// A missing implementations causes the super class method to be executed,
|
||||
// which invokes the above added LegacyInitializer.
|
||||
// If super is not invoked, various other cms sub-initializer may not run.
|
||||
super.init(evt);
|
||||
|
||||
PublishToFile.setRequestTimeout(s_conf.getRequestTimeout());
|
||||
QueueManager.setRetryDelay(s_conf.getRetryDelay());
|
||||
QueueManager.setBlockSize(s_conf.getBlockSize());
|
||||
QueueManager.setBlockSelectMethod(s_conf.getBlockSelectMethod());
|
||||
QueueManager.setMaximumFailCount(s_conf.getMaximumFailCount());
|
||||
|
||||
|
||||
// Set the class implementing methods run when for publishing
|
||||
// or unpublishing to file.
|
||||
try {
|
||||
QueueManager.setListener((PublishToFileListener)
|
||||
s_conf.getPublishListenerClass()
|
||||
.newInstance());
|
||||
} catch (InstantiationException ex) {
|
||||
throw new UncheckedWrapperException
|
||||
("Failed to instantiate the listener class", ex);
|
||||
} catch (IllegalAccessException ex) {
|
||||
throw new UncheckedWrapperException
|
||||
("Couldn't access the listener class", ex);
|
||||
}
|
||||
|
||||
|
||||
// start thread for monitoring queue
|
||||
// int startupDelay = s_conf.getStartupDelay();
|
||||
// int pollDelay = s_conf.getPollDelay();
|
||||
QueueManager.startWatchingQueue(s_conf.getStartupDelay(),
|
||||
s_conf.getPollDelay());
|
||||
|
||||
QueueManager.requeueMissingFiles();
|
||||
|
||||
|
||||
s_log.debug("publishToFile.Initializer.init(ContextInitEvent) completed");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of the {@link Initializer#close()} method.
|
||||
*
|
||||
|
|
@ -94,11 +204,149 @@ public class Initializer extends CompoundInitializer {
|
|||
* @param evt The legacy init event.
|
||||
**/
|
||||
public void close(ContextCloseEvent evt) {
|
||||
s_log.info("publishToFile.Initializer.destroy() invoked");
|
||||
s_log.debug("publishToFile.Initializer.destroy() invoked");
|
||||
|
||||
QueueManager.stopWatchingQueue();
|
||||
|
||||
s_log.info("publishToFile.Initializer.destroy() completed");
|
||||
s_log.debug("publishToFile.Initializer.destroy() completed");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process publishing destinations.
|
||||
* @param dest
|
||||
* @throws ConfigError
|
||||
*/
|
||||
private static void processDestination(ArrayList dest)
|
||||
throws ConfigError {
|
||||
if (dest == null) {
|
||||
throw new ConfigError("publish destinations must not be null");
|
||||
}
|
||||
if (dest.size() < 1) {
|
||||
throw new ConfigError("publish destinations must contain at " +
|
||||
"least one entry");
|
||||
}
|
||||
|
||||
Iterator entries = dest.iterator();
|
||||
while (entries.hasNext()) {
|
||||
processDestinationEntry((List)entries.next());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes one entry of the list of destinations.
|
||||
* Helper method for {@see #processDestination}.
|
||||
*
|
||||
* @param entry
|
||||
* @throws ConfigError
|
||||
*/
|
||||
private static void processDestinationEntry(List entry)
|
||||
throws ConfigError {
|
||||
|
||||
if ( entry.size() != 4 ) {
|
||||
throw new ConfigError("publish destinations entry must contain " +
|
||||
"four elements: '{ \n" +
|
||||
" \"content type\",\n" +
|
||||
" \"root directory\", \n" +
|
||||
" \"is shared\", \n" +
|
||||
" \"url stub\" \n" +
|
||||
"};\n");
|
||||
}
|
||||
|
||||
String contentType = (String)entry.get(0);
|
||||
// destRoot is here relative to webapp root!
|
||||
String destRoot = (String) entry.get(1);
|
||||
Boolean sharedRoot = (Boolean) entry.get(2);
|
||||
String destURL = (String) entry.get(3);
|
||||
|
||||
if ( contentType == null || contentType.trim().length() == 0) {
|
||||
throw new ConfigError("The destination content type must not be null");
|
||||
}
|
||||
|
||||
ObjectType type = MetadataRoot.getMetadataRoot().getObjectType(contentType);
|
||||
if (type == null) {
|
||||
throw new ConfigError("The destination content type cannot be found");
|
||||
}
|
||||
|
||||
if (destRoot == null || destRoot.trim().length() == 0) {
|
||||
throw new ConfigError("The destination root must not be null");
|
||||
}
|
||||
if (destRoot.endsWith("/")) {
|
||||
throw new ConfigError("the destination root '" + destRoot +
|
||||
"' must not end with a '/'");
|
||||
}
|
||||
|
||||
// Does destRoot really now turns into an absolute fully pathname
|
||||
destRoot = new File(CCMResourceManager.getBaseDirectory().getPath(),
|
||||
destRoot).getPath();
|
||||
s_log.info("Destination Root is set to : " + destRoot);
|
||||
|
||||
|
||||
|
||||
if (sharedRoot == null) {
|
||||
throw new ConfigError("The destination shared flag must not be null");
|
||||
}
|
||||
|
||||
|
||||
if (destURL == null || "".equals(destURL.trim())) {
|
||||
throw new ConfigError("the destination URL must not be null");
|
||||
}
|
||||
if (!destURL.startsWith("/")) {
|
||||
throw new ConfigError("the destination URL '" + destURL +
|
||||
"' must start with a '/'");
|
||||
}
|
||||
if (destURL.endsWith("/")) {
|
||||
throw new ConfigError("the destination URL '" + destURL +
|
||||
"' must not end with a '/'");
|
||||
}
|
||||
|
||||
DestinationStub dest = new DestinationStub(destRoot,
|
||||
sharedRoot.booleanValue(),
|
||||
destURL);
|
||||
|
||||
File file = dest.getFile();
|
||||
if (!file.exists()) {
|
||||
file.mkdirs();
|
||||
s_log.info(file.getPath() + " created");
|
||||
}
|
||||
boolean writable = false;
|
||||
FileWriter fl;
|
||||
File fname = new File(file.getPath(),"placeholder.txt");
|
||||
s_log.info("Try to create : " + destRoot);
|
||||
try {
|
||||
writable = file.canWrite() && file.isDirectory();
|
||||
try {
|
||||
fl = new FileWriter(fname.getPath());
|
||||
fl.write("Location for the p2fs module to store static content. \n");
|
||||
fl.close();
|
||||
} catch ( IOException e ) {
|
||||
// Will be reported as an initalization error
|
||||
s_log.warn("Error creating file " + fname.getPath());
|
||||
}
|
||||
|
||||
|
||||
} catch ( SecurityException ex ) {
|
||||
// Will be reported as an initalization error
|
||||
}
|
||||
if ( ! writable ) {
|
||||
// HACK: Let's see if we can write to the config directory. If we can,
|
||||
// then we're running as ccmadmin inside of ccm load, and there is no
|
||||
// need to thrown an exception.
|
||||
File conf = CCMResourceManager.getConfigDirectory();
|
||||
if (conf.isDirectory() && conf.canWrite()) {
|
||||
// we're ok
|
||||
} else {
|
||||
throw new ConfigError(" the document root '" + file
|
||||
+"' must be a writable directory");
|
||||
}
|
||||
}
|
||||
|
||||
if (Template.BASE_DATA_OBJECT_TYPE.equals(contentType) ||
|
||||
!s_conf.isItemPfsDisabled()) {
|
||||
PublishToFile.addDestination(contentType,
|
||||
dest);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ import com.arsdigita.persistence.metadata.MetadataRoot;
|
|||
import com.arsdigita.persistence.metadata.ObjectType;
|
||||
import com.arsdigita.runtime.CCMResourceManager;
|
||||
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
|
|
@ -141,9 +143,10 @@ public class LegacyInitializer implements com.arsdigita.initializer.Initializer
|
|||
TransactionContext txn =
|
||||
SessionManager.getSession().getTransactionContext();
|
||||
txn.beginTxn();
|
||||
|
||||
setupPublishToFileSystem();
|
||||
|
||||
QueueManager.requeueMissingFiles();
|
||||
// QueueManager.requeueMissingFiles();
|
||||
|
||||
txn.commitTxn();
|
||||
}
|
||||
|
|
@ -157,6 +160,7 @@ public class LegacyInitializer implements com.arsdigita.initializer.Initializer
|
|||
* initialize source and destinations for publishing to the file system
|
||||
*/
|
||||
private void setupPublishToFileSystem() throws InitializationException {
|
||||
|
||||
DomainObjectInstantiator inst = new DomainObjectInstantiator() {
|
||||
public DomainObject doNewInstance(DataObject dobj) {
|
||||
return new PublishedFile(dobj);
|
||||
|
|
@ -166,19 +170,37 @@ public class LegacyInitializer implements com.arsdigita.initializer.Initializer
|
|||
PublishedFile.BASE_DATA_OBJECT_TYPE,
|
||||
inst);
|
||||
|
||||
// PublishToFileConfig ptfConf = PublishToFileConfig.getConfig();
|
||||
|
||||
processDestination((List) m_conf.getParameter(PUBLISH_DESTINATIONS));
|
||||
|
||||
PublishToFile.setRequestTimeout(getInteger(REQUEST_TIMEOUT).intValue());
|
||||
// processDestination((List) m_conf.getParameter(PUBLISH_DESTINATIONS));
|
||||
// processDestination((List) ptfConf.getPublishDestinations());
|
||||
// setupQueueManager();
|
||||
|
||||
QueueManager.setRetryDelay(getInteger(RETRY_DELAY));
|
||||
QueueManager.setBlockSize(getInteger(BLOCK_SIZE));
|
||||
QueueManager.setBlockSelectMethod(getString(BLOCK_SELECT_METHOD));
|
||||
QueueManager.setMaximumFailCount(getInteger(MAXIMUM_FAIL_COUNT));
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare Queuemanager and start Queue processing.
|
||||
*/
|
||||
private void setupQueueManager(){
|
||||
|
||||
PublishToFileConfig ptfConf = PublishToFileConfig.getConfig();
|
||||
|
||||
// PublishToFile.setRequestTimeout(getInteger(REQUEST_TIMEOUT).intValue());
|
||||
PublishToFile.setRequestTimeout(ptfConf.getRequestTimeout());
|
||||
|
||||
// QueueManager.setRetryDelay(getInteger(RETRY_DELAY));
|
||||
QueueManager.setRetryDelay(ptfConf.getRetryDelay());
|
||||
// QueueManager.setBlockSize(getInteger(BLOCK_SIZE));
|
||||
QueueManager.setBlockSize(ptfConf.getBlockSize());
|
||||
// QueueManager.setBlockSelectMethod(getString(BLOCK_SELECT_METHOD));
|
||||
QueueManager.setBlockSelectMethod(ptfConf.getBlockSelectMethod());
|
||||
// QueueManager.setMaximumFailCount(getInteger(MAXIMUM_FAIL_COUNT));
|
||||
QueueManager.setMaximumFailCount(ptfConf.getMaximumFailCount());
|
||||
|
||||
|
||||
// setup listener if specified
|
||||
String listenerName = getString( PUBLISH_TO_FILE_LISTENER );
|
||||
/* String listenerName = getString( PUBLISH_TO_FILE_LISTENER );
|
||||
if (listenerName != null) {
|
||||
PublishToFileListener listener = null;
|
||||
Class listenerClass = null;
|
||||
|
|
@ -202,13 +224,30 @@ public class LegacyInitializer implements com.arsdigita.initializer.Initializer
|
|||
}
|
||||
QueueManager.setListener(listener);
|
||||
}
|
||||
*/
|
||||
// Just set the class implementing methods run when for publishing
|
||||
// or unpublishing to file. No initialisation of the class here.
|
||||
try {
|
||||
QueueManager.setListener((PublishToFileListener)
|
||||
ptfConf.getpublishListenerClass()
|
||||
.newInstance());
|
||||
} catch (InstantiationException ex) {
|
||||
throw new UncheckedWrapperException
|
||||
("Failed to instantiate the listener class", ex);
|
||||
} catch (IllegalAccessException ex) {
|
||||
throw new UncheckedWrapperException
|
||||
("Couldn't access the listener class", ex);
|
||||
}
|
||||
|
||||
|
||||
// start thread for monitoring queue
|
||||
int startupDelay = getInteger(QUEUE_POLL_STARTUP_DELAY).intValue();
|
||||
int pollDelay = getInteger(QUEUE_POLL_DELAY).intValue();
|
||||
// int startupDelay = getInteger(QUEUE_POLL_STARTUP_DELAY).intValue();
|
||||
int startupDelay = ptfConf.getStartupDelay();
|
||||
// int pollDelay = getInteger(QUEUE_POLL_DELAY).intValue();
|
||||
int pollDelay = ptfConf.getPollDelay();
|
||||
QueueManager.startWatchingQueue(startupDelay, pollDelay);
|
||||
}
|
||||
|
||||
}
|
||||
//
|
||||
// Process publishing destinations
|
||||
//
|
||||
|
|
@ -67,6 +67,7 @@ public class PublishToFile implements PublishToFileListener {
|
|||
Logger.getLogger(PublishToFile.class);
|
||||
|
||||
// Queue entry timeout
|
||||
// TODO: pickup value from configuration file as a single source!
|
||||
private static int s_timeout = DEFAULT_TIMEOUT;
|
||||
private static Map s_destinations = new HashMap();
|
||||
|
||||
|
|
|
|||
|
|
@ -19,21 +19,29 @@
|
|||
package com.arsdigita.cms.publishToFile;
|
||||
|
||||
import com.arsdigita.runtime.AbstractConfig;
|
||||
import com.arsdigita.util.parameter.BooleanParameter;
|
||||
import com.arsdigita.util.parameter.ClassParameter;
|
||||
import com.arsdigita.util.parameter.IntegerParameter;
|
||||
import com.arsdigita.util.parameter.Parameter;
|
||||
import com.arsdigita.util.parameter.SpecificClassParameter;
|
||||
import com.arsdigita.util.parameter.StringParameter;
|
||||
|
||||
// import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
// STATUS: All parameter and its values copied from the old Initializer class
|
||||
// and from enterprise.init file.
|
||||
// Temporary solution for m_destinations (destinations for published content
|
||||
// items and template), returned as constant list.
|
||||
|
||||
|
||||
/**
|
||||
* Configuration object for the publish-to-file service.
|
||||
*
|
||||
* UNFINISHED WORK - NOT USABLE YET!
|
||||
* ToDO: Parameter destination is a list, but we have no ListParameter type for now.
|
||||
* We have either to develop a ListParameter class or treat this parameter as
|
||||
* a set of StringArrayParameter.
|
||||
*
|
||||
* @author Peter Boy <pboy@barkhof.uni-bremen.de>
|
||||
* @version $Id: $
|
||||
*/
|
||||
|
|
@ -43,32 +51,60 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
|
||||
private static PublishToFileConfig s_conf;
|
||||
|
||||
/**
|
||||
* Temporary, constant list of publish destinations. It is intended as a
|
||||
* temporary fix until we have a configurable pramameter
|
||||
* {@see #m_destinations} and {@see #getPublishDestinations()}.
|
||||
* Should be replaced and removed then.
|
||||
*/
|
||||
private static ArrayList s_tmpDestList;
|
||||
|
||||
/**
|
||||
* Disable publish-to-filesystem for items other than templates.
|
||||
* NOTE: Templates are stored in the database and must be synchronized with
|
||||
* the filesystem in order to be used. Therefore publish-to filesystem must
|
||||
* not deactivated at all.
|
||||
*/
|
||||
// Moved from ContentSectionConfig where this parameter was a temporary measure
|
||||
// to allow limited parameter-based control of p2fs until MapParameter,
|
||||
// which was intended to replace old Initilizer system's parameter
|
||||
// implementation, is fully implemented)
|
||||
private final Parameter m_disableItemPfs;
|
||||
|
||||
/**
|
||||
* List of publish destinations for content types.
|
||||
* Each element is a four-element list in the format
|
||||
* Each list element is itself a four-element list in the format
|
||||
* { "content type", "root directory", "shared storage", "url stub" }.
|
||||
*
|
||||
* Content type is the object type of the content type.
|
||||
* Root directory must be a path to a writable directory, relative to the
|
||||
* webapp root.
|
||||
* Root directory must be a path to a writable directory, relative to
|
||||
* webapp root(!).
|
||||
* Shared storage must be true if the root directory is shared NFS storage,
|
||||
* false otherwise.
|
||||
* URL stub is the path component of the URL from which the live
|
||||
* URL stub is the path componen3t of the URL from which the live
|
||||
* server will serve from this directory.
|
||||
*/
|
||||
private final Parameter m_destination;
|
||||
// ToDO: Parameter destination is a list, but we have no ListParameter type
|
||||
// for now. We have either to develop a ListParameter class or treat this
|
||||
// parameter as a set of StringArrayParameter.
|
||||
// Another possibility considered was MapParameter
|
||||
private final Parameter m_destinations;
|
||||
|
||||
/**
|
||||
* Class which implements PublishToFileListener used to perform
|
||||
* Class implementing PublishToFileListener Interface.
|
||||
*
|
||||
* Contains the initial methods called when publishing or unpublishing. It
|
||||
* is usually be set to com.arsdigita.cms.publishToFile.PublishToFile,
|
||||
* but custom classes can also be used. That can be used to perform
|
||||
* additional actions when publishing or unpublishing to the file system.
|
||||
*/
|
||||
private final Parameter m_publishListener;
|
||||
private final Parameter m_publishToFileListenerClass;
|
||||
|
||||
/**
|
||||
* Time (in seconds) after system startup to wait before starting to monitor
|
||||
* publishToFile queue.
|
||||
*
|
||||
* Set startupDelay to 0 to disable the processing of the queue. This
|
||||
* Set startupDelay to 0 (< 0) to disable the processing of the queue. This
|
||||
* disables the processing of templates as well so it will affect a basic
|
||||
* functionality of the system and is not recommended under normal
|
||||
* conditions.
|
||||
|
|
@ -76,7 +112,7 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
private final Parameter m_startupDelay;
|
||||
|
||||
/**
|
||||
* Time (in seconds) between checking if there are entries in the
|
||||
* Time (in seconds) between checking whether there are entries in the
|
||||
* publishToFile queue.
|
||||
*
|
||||
* A value <= 0 disables processing the queue on this server.
|
||||
|
|
@ -97,6 +133,16 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
* Number of queue entries to process at once.
|
||||
*/
|
||||
private final Parameter m_blockSize;
|
||||
|
||||
/**
|
||||
* Method used to select entries for processing.
|
||||
* 'QueuedOrder' - in queued order.
|
||||
* 'GroupByParent'- group entries according to parent when selecting items
|
||||
* (allows optimizations if a listener task required for
|
||||
* all elements in a folder can be done only once for the
|
||||
* folder).
|
||||
*/
|
||||
private final Parameter m_blockSelectMethod;
|
||||
|
||||
/**
|
||||
* Number of times a failed queue entry will be reprocessed.
|
||||
|
|
@ -106,16 +152,6 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
* The default value -1 will ignore this parameter.
|
||||
*/
|
||||
private final Parameter m_maximumFailCount;
|
||||
|
||||
/**
|
||||
* Method used to select entries for processing.
|
||||
* 'QueuedOrder' - in queued order.
|
||||
* 'GroupByParent'- group entries according to parent when selecting items
|
||||
* (allows optimizations if a listener task required for
|
||||
* all elements in a folder can be done only once for the
|
||||
* folder).
|
||||
*/
|
||||
private final Parameter m_blockSelectMethod;
|
||||
|
||||
|
||||
|
||||
|
|
@ -126,7 +162,7 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
* the constructor directly.
|
||||
* @return
|
||||
*/
|
||||
static synchronized PublishToFileConfig getConfig() {
|
||||
public static synchronized PublishToFileConfig getConfig() {
|
||||
if (s_conf == null) {
|
||||
s_conf = new PublishToFileConfig();
|
||||
s_conf.load();
|
||||
|
|
@ -142,22 +178,19 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
*/
|
||||
public PublishToFileConfig() {
|
||||
|
||||
/**
|
||||
* List of publish destinations for content types.
|
||||
* Each element is a four-element list in the format
|
||||
* { "content type", "root directory", "shared storage", "url stub" }.
|
||||
*
|
||||
* Content type is the object type of the content type.
|
||||
* Root directory must be a path to a writable directory, relative to the
|
||||
* webapp root.
|
||||
* Shared storage must be true if the root directory is shared NFS storage,
|
||||
* false otherwise.
|
||||
* URL stub is the path component of the URL from which the live
|
||||
* server will serve from this directory.
|
||||
*/
|
||||
// Unfinished work! Not usable!
|
||||
// Initialize field values
|
||||
|
||||
// Notice: Default now TRUE! Had previously be false.
|
||||
// Parameter renamed and relocated, Adaptation of installation bundles
|
||||
// required (version 6.0.2).
|
||||
m_disableItemPfs = new BooleanParameter
|
||||
("com.arsdigita.cms.publishToFile.disable_item_pfs",
|
||||
Parameter.REQUIRED, new Boolean(true));
|
||||
|
||||
// m_destinations is unfinished work! Not usable!
|
||||
// Parameter is a list, but we have currently no ListParameter type.
|
||||
m_destination = new StringParameter
|
||||
// Others have considered to develop a MapParameter for it.
|
||||
m_destinations = new StringParameter
|
||||
("com.arsdigita.cms.publishToFile.destination", Parameter.REQUIRED,
|
||||
"{ " +
|
||||
" { 'com.arsdigita.cms.ContentItem', " +
|
||||
|
|
@ -171,107 +204,136 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
"} "
|
||||
);
|
||||
|
||||
/**
|
||||
* Class which implements PublishToFileListener used to perform
|
||||
* additional actions when publishing or unpublishing to the file system.
|
||||
*/
|
||||
// Originally (old initializer system):
|
||||
// publishListener = "com.arsdigita.cms.publishToFile.PublishToFile";
|
||||
m_publishListener = new ClassParameter
|
||||
("com.arsdigita.cms.publishToFile.publish_listener", Parameter.REQUIRED,
|
||||
PublishToFile.class);
|
||||
m_publishToFileListenerClass = new SpecificClassParameter
|
||||
("com.arsdigita.cms.publishToFile.publish_to_file_listener_class",
|
||||
Parameter.REQUIRED,
|
||||
PublishToFile.class,
|
||||
PublishToFileListener.class);
|
||||
|
||||
|
||||
// Queue management parameters.
|
||||
|
||||
/**
|
||||
* Time (in seconds) after system startup to wait before starting to
|
||||
* monitor publishToFile queue.
|
||||
*
|
||||
* Set startupDelay to 0 to disable the processing of the queue. This
|
||||
* disables the processing of templates as well so it will affect a basic
|
||||
* functionality of the system and is not recommended under normal
|
||||
* conditions.
|
||||
*/
|
||||
|
||||
m_startupDelay = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.startup_delay", Parameter.REQUIRED,
|
||||
new Integer(30));
|
||||
|
||||
/**
|
||||
* Time (in seconds) between checking if there are entries in the
|
||||
* publishToFile queue.
|
||||
*
|
||||
* A value <= 0 disables processing the queue on this server.
|
||||
*/
|
||||
m_pollDelay = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.poll_delay", Parameter.REQUIRED,
|
||||
new Integer(5));
|
||||
|
||||
/**
|
||||
* Time to wait (seconds) before retrying to process a failed entry
|
||||
*/
|
||||
m_retryDelay = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.retry_delay", Parameter.REQUIRED,
|
||||
new Integer(120));
|
||||
|
||||
/**
|
||||
* Time to wait (seconds) before aborting item request.
|
||||
*/
|
||||
m_requestTimeout = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.request_timeout", Parameter.REQUIRED,
|
||||
new Integer(120));
|
||||
new Integer(60));
|
||||
|
||||
/**
|
||||
* Number of queue entries to process at once (in one transaction).
|
||||
*/
|
||||
m_blockSize = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.block_size", Parameter.REQUIRED,
|
||||
new Integer(40));
|
||||
|
||||
/**
|
||||
* Number of times a failed queue entry will be reprocessed.
|
||||
* Maximum Fail Count for actions in Queue Manager.
|
||||
* If Fail Count in database is more than specified limit, Queue Manager
|
||||
* will ignore the action.
|
||||
* A value -1 will ignore this parameter.
|
||||
*/
|
||||
m_maximumFailCount = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.maximum_fail_count", Parameter.REQUIRED,
|
||||
new Integer(10));
|
||||
|
||||
/**
|
||||
* Method used to select entries for processing.
|
||||
* 'QueuedOrder' - in queued order.
|
||||
* 'GroupByParent'- group entries according to parent when selecting items
|
||||
* (allows optimizations if a listener task required for
|
||||
* all elements in a folder can be done only once for the
|
||||
* folder).
|
||||
*/
|
||||
m_blockSelectMethod = new StringParameter
|
||||
("com.arsdigita.cms.publishToFile.block_select_method", Parameter.REQUIRED,
|
||||
"GroupByParent");
|
||||
|
||||
m_maximumFailCount = new IntegerParameter
|
||||
("com.arsdigita.cms.publishToFile.maximum_fail_count", Parameter.REQUIRED,
|
||||
new Integer(10));
|
||||
|
||||
register(m_destination);
|
||||
register(m_publishListener);
|
||||
|
||||
// Register parameters
|
||||
|
||||
register(m_disableItemPfs);
|
||||
// register(m_destinations); Unfinished; currently not usable
|
||||
register(m_publishToFileListenerClass);
|
||||
register(m_startupDelay);
|
||||
register(m_pollDelay);
|
||||
register(m_retryDelay);
|
||||
register(m_requestTimeout);
|
||||
register(m_blockSize);
|
||||
register(m_maximumFailCount);
|
||||
register(m_blockSelectMethod);
|
||||
register(m_maximumFailCount);
|
||||
|
||||
loadInfo();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve whether or not content items should be statically published
|
||||
* (i.e. exported) into the filesystem.
|
||||
* (Templates are always exported independently from this parameter because
|
||||
* otherwise they are not accessible by the servlet container!)
|
||||
*
|
||||
* @return (boolean) m_disableItemPfs Parameter
|
||||
*/
|
||||
public final boolean isItemPfsDisabled() {
|
||||
return ((Boolean) get(m_disableItemPfs)).booleanValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve list of publish destinations for content types. Each
|
||||
* list element is itself a four-element list in the format
|
||||
* { "content type", "root directory", "shared storage", "url stub" }.
|
||||
*
|
||||
* Content type is the object type of the content type.
|
||||
* Root directory must be a path to a writable directory, relative to the
|
||||
* webapp root.
|
||||
* Shared storage must be true if the root directory is shared NFS storage,
|
||||
* false otherwise.
|
||||
* URL stub is the path component of the URL from which the live
|
||||
* server will serve from this directory.
|
||||
*
|
||||
* By default the object type of the last element is template. P2FS is not
|
||||
* only used to store content items in the file system but to watch templates
|
||||
* stored in the database (by parameter or Web GUI) and synchronize them
|
||||
* with the file system so that the servlet container is able to use them.
|
||||
*/
|
||||
public List getPublishDestinations() {
|
||||
// Comment by pboy (Febr. 2010)
|
||||
// In the old Initializer system this parameter was burried in the
|
||||
// enterprise.init file which used to be part of the jar file. Therefore,
|
||||
// it was practically not configurable by users, just by developers only
|
||||
// (who can recompile and create a jar file).
|
||||
// P2fs for content items is rarely used, or even not at all. Location of
|
||||
// templates is fixed for any installation. So we return a constant List
|
||||
// here. Developers may modify it as needed.
|
||||
// If someone needs p2fs for content items we have to create a List type
|
||||
// parameter and make it configurable.
|
||||
|
||||
// Quick 'n dirty but works
|
||||
s_tmpDestList = new ArrayList();
|
||||
s_tmpDestList.add
|
||||
( new ArrayList() {{ add("com.arsdigita.cms.ContentItem");
|
||||
add("p2fs");
|
||||
add(new Boolean(false));
|
||||
add("/p2fs");
|
||||
}}
|
||||
);
|
||||
s_tmpDestList.add
|
||||
( new ArrayList() {{
|
||||
add("com.arsdigita.cms.Template");
|
||||
add("packages/content-section/templates");
|
||||
add(new Boolean(false));
|
||||
add("/templates");
|
||||
}}
|
||||
);
|
||||
|
||||
s_log.debug("s_tmpDestList is " + s_tmpDestList.size() );
|
||||
return s_tmpDestList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the class which implements PublishToFileListener used to perform
|
||||
* additional actions when publishing or unpublishing to the file system.
|
||||
*
|
||||
* @return PublishToFileListener implementation class
|
||||
*/
|
||||
public Class getpublishListenerClass() {
|
||||
return (Class) get(m_publishListener);
|
||||
public Class getPublishListenerClass() {
|
||||
return (Class) get(m_publishToFileListenerClass);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -306,8 +368,19 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
}
|
||||
|
||||
/**
|
||||
* Retrieve simple queue's period in seconds
|
||||
* @return period, in seconds
|
||||
* Retrieve time to wait (seconds) before aborting an item request.
|
||||
*
|
||||
* @return timeout, in seconds.
|
||||
*/
|
||||
public int getRequestTimeout() {
|
||||
s_log.debug("Retrieving m_requestTimeout.");
|
||||
return ((Integer) get(m_requestTimeout)).intValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve number of queue entries to process at once.
|
||||
*
|
||||
* @return number of blocks.
|
||||
*/
|
||||
public int getBlockSize() {
|
||||
s_log.debug("Retrieving m_blockSize.");
|
||||
|
|
@ -315,21 +388,25 @@ public class PublishToFileConfig extends AbstractConfig {
|
|||
}
|
||||
|
||||
/**
|
||||
* Retrieve digest queue's delay in seconds.
|
||||
* @return delay, in seconds.
|
||||
*/
|
||||
public int getMaximumFailCount() {
|
||||
s_log.debug("Retrieving m_maximumFailCount.");
|
||||
return ((Integer) get(m_maximumFailCount)).intValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve digest queue's period in seconds
|
||||
* @return period, in seconds
|
||||
* Retrieve method used to select entries for processing.
|
||||
*
|
||||
* @return 'QueuedOrder' or 'GroupByParent' (default)
|
||||
*/
|
||||
public String getBlockSelectMethod() {
|
||||
s_log.debug("Retrieving m_blockSelectMethod.");
|
||||
return ( (String) get(m_blockSelectMethod));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve number of times a failed queue entry will be reprocessed. If
|
||||
* Fail Count in database is more than specified limit, Queue Manager
|
||||
* will ignore the action.
|
||||
*
|
||||
* @return number of times
|
||||
*/
|
||||
public int getMaximumFailCount() {
|
||||
s_log.debug("Retrieving m_maximumFailCount.");
|
||||
return ((Integer) get(m_maximumFailCount)).intValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,15 @@
|
|||
com.arsdigita.cms.disable_item_pfs.title=Disable (non-Template) Item p2fs
|
||||
com.arsdigita.cms.disable_item_pfs.purpose=Disable publish-to-filesystem for items other than templates.
|
||||
com.arsdigita.cms.disable_item_pfs.example=true
|
||||
com.arsdigita.cms.disable_item_pfs.format=[boolean]
|
||||
|
||||
|
||||
com.arsdigita.cms.publish_to_file_class.title=Publish to File listener class
|
||||
com.arsdigita.cms.publish_to_file_class.purpose=Class implementing PublishToFileListener. Contains the initial methods called when publishing or unpublishing. Normally this should be set to com.arsdigita.cms.publishToFile.PublishToFile, but custom classes can also be used.
|
||||
com.arsdigita.cms.publish_to_file_class.example=com.arsdigita.cms.publishToFile.PublishToFile
|
||||
com.arsdigita.cms.publish_to_file_class.format=[class]
|
||||
|
||||
|
||||
waf.notification.request_manager_delay.title=Request Manager Delay
|
||||
waf.notification.request_manager_delay.purpose=Start of request manager's delay in seconds.
|
||||
waf.notification.request_manager_delay.example=900
|
||||
|
|
|
|||
Loading…
Reference in New Issue