From 80c13748e875e4c7298efcae9c15d6fa495670ab Mon Sep 17 00:00:00 2001 From: quasi Date: Tue, 29 Oct 2013 06:41:24 +0000 Subject: [PATCH] =?UTF-8?q?Bild-Caption=20verl=C3=A4ngern=20(#1786)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sowohl die Caption, als auch Title und Description sind nun per Parameter in cms config in der Länge einstellelbar. Dabei wird die jeweilige Länge auf die Länge des DB Feldes begrenzt (hart kodiert). Parameter: com.arsdigita.cms.image_browser.{caption,title,description}_size git-svn-id: https://svn.libreccm.org/ccm/trunk@2392 8810af33-2d31-482b-a856-94f89814c4df --- ccm-cms/src/com/arsdigita/cms/CMSConfig.java | 2344 +++++++++-------- .../cms/CMSConfig_parameter.properties | 18 +- .../cms/ui/ImageLibraryComponent.java | 7 +- 3 files changed, 1208 insertions(+), 1161 deletions(-) diff --git a/ccm-cms/src/com/arsdigita/cms/CMSConfig.java b/ccm-cms/src/com/arsdigita/cms/CMSConfig.java index 69954ddc9..379de2365 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSConfig.java +++ b/ccm-cms/src/com/arsdigita/cms/CMSConfig.java @@ -61,1194 +61,1224 @@ import org.apache.log4j.Logger; */ public final class CMSConfig extends AbstractConfig { - /** - * Private Logger instance for debugging purpose. - */ - private static final Logger s_log = Logger.getLogger(CMSConfig.class); - /** - * Private Object to hold one's own instance to return to users. - */ - private static CMSConfig s_config; + /** + * Private Logger instance for debugging purpose. + */ + private static final Logger s_log = Logger.getLogger(CMSConfig.class); + /** + * Private Object to hold one's own instance to return to users. + */ + private static CMSConfig s_config; - /** - * Returns the singleton configuration record for the content section - * environment. - * - * @return The CMSConfig record; it cannot be null - */ - public static synchronized CMSConfig getInstance() { - if (s_config == null) { - s_config = new CMSConfig(); - s_config.load(); - } + /** + * Returns the singleton configuration record for the content section + * environment. + * + * @return The CMSConfig record; it cannot be null + */ + public static synchronized CMSConfig getInstance() { + if (s_config == null) { + s_config = new CMSConfig(); + s_config.load(); + } - return s_config; - } - - /** - * Storage (map) for method getAssetStepsToSkip(ContentType type) to store - * mapping of steps that are deemed irrelevant for the passid in type. - */ - private static Map s_skipAssetSteps = null; - /** - * Item category add form specifies Subclass of ItemCategoryForm to use for - * the assign categories step. Used in - * c.ad.cms.ui.authoring.ItemCategoryStep - */ - private final Parameter m_categoryAuthoringAddForm = - new SpecificClassParameter( - "com.arsdigita.cms.category_authoring_add_form", - Parameter.REQUIRED, - ItemCategoryForm.class, - SimpleComponent.class); - /** - * Path for the default item template. Path is relative to the Template Root - * path. - */ - private final Parameter m_defaultItemTemplatePath = - new StringParameter( - "com.arsdigita.cms.default_item_template_path", - Parameter.REQUIRED, - "/default/item.jsp"); - /** - * Path for the default folder template. Path is relative to the Template - * Root path. - */ - private final Parameter m_defaultFolderTemplatePath = - new StringParameter( - "com.arsdigita.cms.default_folder_template_path", - Parameter.REQUIRED, - "/default/folder.jsp"); - /** - * Path or the root folter for template folders. Path is relative to webapp - * root. Modify with care! Usually modified by developers only! - */ - private final Parameter m_templateRootPath = - new StringParameter( - "com.arsdigita.cms.template_root_path", - Parameter.REQUIRED, - "/templates/ccm-cms/content-section"); - // up to version 6.6.4 - // "/packages/content-section/templates"); - // URL resource: protocol handler removal: START - // remove: - // try { - // m_itemAdapters = new URLParameter - // ("com.arsdigita.cms.item_adapters", - // Parameter.REQUIRED, - // new URL("resource:WEB-INF/resources/cms-item-adapters.xml")); - // } catch (MalformedURLException ex) { - // throw new UncheckedWrapperException("Cannot parse URL", ex); - // } - // ADD: - /** - * Item Adapters File, path to an XML resource containing adapter - * specifications. Path is relative to webapp root. - */ - private final Parameter m_itemAdapters = - new ResourceParameter( - "com.arsdigita.cms.item_adapters", - Parameter.REQUIRED, - "/WEB-INF/resources/cms-item-adapters.xml"); - // URL resource: protocol handler removal: END - /** - * Use streamlined content creation: upon item creation, automatically open - * authoring steps and forward to the next step - */ - private final Parameter m_useStreamlinedCreation = new BooleanParameter( - "com.arsdigita.cms.use_streamlined_creation", - Parameter.REQUIRED, - Boolean.TRUE); - /** - * DHTML Editor Configuration for use in CMS module, lists the config object - * name and Javascript source location for its definition. - */ - private final Parameter m_dhtmlEditorConfig = - new DHTMLEditorConfigParameter( - "com.arsdigita.cms.dhtml_editor_config", - Parameter.REQUIRED, - new DHTMLEditor.Config("Xinha.Config", - "/assets/xinha/CCMcmsXinhaConfig.js")); - // previous parameter definition: - // > DHTMLEditor.Config.STANDARD); < - // didn't work because of broken unmarshalling (cf. similiar problem - // with ResourceParameter and patch provided by Brad). It work for - // HTMLArea, because configuration was hard coded into xsl(!). - // Additionally, we would like to use a specific configuration for cms - // to include cms specific functions (like access to internal . - // content items for links and internal image assets, which may not - // be accessable by other modules which use DHTMLeditor. - // Would be bad style to configure a cms specific parameter in core. - /** - * Defines which plugins to use, e.g.TableOperations,CSS Format: - * [string,string,string] - */ - private final Parameter m_dhtmlEditorPlugins = new StringArrayParameter( - "com.arsdigita.cms.dhtml_editor_plugins", - Parameter.OPTIONAL, - null); - /** - * Prevent undesirable functions from being made available, eg images should - * only be added through the cms methods. - */ - private final Parameter m_dhtmlEditorHiddenButtons = - new StringArrayParameter( - "com.arsdigita.cms.dhtml_editor_hidden_buttons", - Parameter.OPTIONAL, - null); - /** - * Hide section admin tabs from users without administrative rights. - */ - private final Parameter m_hideAdminTabs = new BooleanParameter( - "com.arsdigita.cms.hide_admin_tabs", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Hide Folder Index Checkbox from folder view - */ - private final Parameter m_hideFolderIndexCheckbox = new BooleanParameter( - "com.arsdigita.cms.hide_folder_index_checkbox", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Hide launch date parameter on all forms and displays where it's used. - */ - private final Parameter m_hideLaunchDate = new BooleanParameter( - "com.arsdigita.cms.hide_launch_date", - Parameter.REQUIRED, - Boolean.TRUE); - /** - * Require the launch date parameter to be set by the content author. - */ - private final Parameter m_requireLaunchDate = new BooleanParameter( - "com.arsdigita.cms.require_launch_date", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Hide the templates tab on the item admin page. - */ - private final Parameter m_hideTemplatesTab = new BooleanParameter( - "com.arsdigita.cms.hide_templates_tab", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Hide the upload file link in the editing of a text asset. - */ - private final Parameter m_hideTextAssetUploadFile = new BooleanParameter( - "com.arsdigita.cms.hide_text_asset_upload_file", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Hide timezone labels (if, for example, all users will be in the same - * timezone and such information would be unnecessary) - */ - private final Parameter m_hideTimezone = new BooleanParameter( - "com.arsdigita.cms.hide_timezone", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Hide User Defined Content Types UI - */ - private final Parameter m_hideUDCTUI = new BooleanParameter( - "com.arsdigita.cms.hide_udct_ui", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Specifies the name of the class to use as a PublishLifecycleListener - */ - private final Parameter m_publishLifecycleListenerClass = - new StringParameter( - "com.arsdigita.cms.publish_lifecycle_listener_class", - Parameter.OPTIONAL, - PublishLifecycleListener.class.getName()); - /** - * Wether the Wysiwyg editor should clear the text of MSWord tags, everytime - * the user clicks on 'Save' - */ - private final Parameter m_saveTextCleansWordTags = new BooleanParameter( - "com.arsdigita.cms.save_text_cleans_word_tags", - Parameter.OPTIONAL, - Boolean.FALSE); - /** - * Get the search indexing not to process FileAssets, eg to avoid PDF - * slowdowns - */ - private final Parameter m_disableFileAssetExtraction = new BooleanParameter( - "com.arsdigita.cms.search.disableFileAssetExtraction", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Whether an item's workflow should be deleted, once the item has been - * (re)published - */ - private final Parameter m_deleteWorkflowAfterPublication = - new BooleanParameter( - "com.arsdigita.cms.delete_workflow_after_publication", - Parameter.REQUIRED, - Boolean.TRUE); - /** - * Defines the number of days ahead that are covered in the 'Soon Expired' - * tab - */ - private final Parameter m_soonExpiredTimespanDays = new IntegerParameter( - "com.arsdigita.cms.soon_expired_timespan_days", - Parameter.REQUIRED, - new Integer(14)); - /** - * Defines the number of months ahead that are covered in the 'Soon Expired' - * tab - */ - private final Parameter m_soonExpiredTimespanMonths = new IntegerParameter( - "com.arsdigita.cms.soon_expired_timespan_months", - Parameter.REQUIRED, - new Integer(1)); - /** - * Does a redirect to the unpublished item generate not found error? - */ - private final Parameter m_unpublishedNotFound = new BooleanParameter( - "com.arsdigita.cms.unpublished_not_found", - Parameter.REQUIRED, - Boolean.TRUE); - /** - * Links created through browse interfaces should only be within the same - * subsite - */ - private final Parameter m_linksOnlyInSameSubsite = new BooleanParameter( - "com.arsdigita.cms.browse_links_in_same_subsite_only", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Item category step extension hook: Subclass of ItemCategoryExtension - * which adds extension actions for the category authoring step - */ - private final Parameter m_categoryAuthoringExtension = - new SpecificClassParameter( - "com.arsdigita.cms.category_authoring_extension", - Parameter.REQUIRED, - ItemCategoryExtension.class, - ItemCategoryExtension.class); - /** - * Link available to reset lifecycle on republish. If false don't display - * the link otherwise display. - */ - private final Parameter m_hideResetLifecycleLink = new BooleanParameter( - "com.arsdigita.cms.hide_reset_lifecycle_link", - Parameter.OPTIONAL, - Boolean.TRUE); - /** - * Whether to include INPATH operators to contains clause in intermedia - * search - */ - private final Parameter m_scoreTitleAndKeywords = - new BooleanParameter( - "com.arsdigita.cms.search.score_title_and_keywords", - Parameter.OPTIONAL, - Boolean.FALSE); - /** - * Title Weight, the relative weight given to title element within cms:item - * when ranking search results (only used by interMedia) - */ - private final Parameter m_titleWeight = new IntegerParameter( - "com.arsdigita.cms.search.intermedia.title_weight", - Parameter.OPTIONAL, - new Integer(1)); - /** - * Keyword Weight, the relative weight given to the dcKeywords element - * within dublinCore element within cms:item element when ranking search - * results (only used by interMedia) - */ - private final Parameter m_keywordWeight = - new IntegerParameter( - "com.arsdigita.cms.search.intermedia.keyword_weight", - Parameter.OPTIONAL, - new Integer(1)); - /** - * Limit the item search to current content section - */ - private final Parameter m_limitToContentSection = - new BooleanParameter( - "com.arsdigita.cms.search.limitToContentSection", - Parameter.OPTIONAL, - Boolean.TRUE); - /** - * Asset steps to skip, specify asset steps that are not relevant for - * specific content types. 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 - */ - private final Parameter m_skipAssetSteps = new StringArrayParameter( - "com.arsdigita.cms.skip_asset_steps", - Parameter.OPTIONAL, - null); - /** - * Mandatory Descriptions Content types may refer to this to decide whether - * to validate against empty descriptions - */ - private final Parameter m_mandatoryDescriptions = new BooleanParameter( - "com.arsdigita.cms.mandatory_descriptions", - Parameter.OPTIONAL, - Boolean.FALSE); - /** - * Delete Finished Lifecycles. Decide whether lifecycles and their phases - * should be deleted from the system when finished. - */ - private final Parameter m_deleteLifecycleWhenComplete = - new BooleanParameter( - "com.arsdigita.cms.delete_lifecycle_when_complete", - Parameter.OPTIONAL, - Boolean.FALSE); - /** - * Contacts for content items. Allows you to add a Contact authoring step to - * all items - */ - private final Parameter m_hasContactsAuthoringStep = new BooleanParameter( - "com.arsdigita.cms.has_contacts_authoring_step", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Ordering for nodes in assign category tree. Decide whether entries should - * be ordered alphabetically or according to sort key (maintained in - * category admin tab in content centre) SortKey|Alphabetical is initialized - * in constructor! See below. - */ - private final Parameter m_categoryTreeOrdering = - new EnumerationParameter( - "com.arsdigita.cms.category_tree_order", - Parameter.OPTIONAL, - Category.SORT_KEY); - /** - * Allow creation of a new Use Context in category tab of content sections. - * "Use Context" is the construct to constitute a category hierarchy - * implementet in core. It is superseded by the construct "Category Domain" - * in Terms (ccm-ldn-terms). - * Global parameter for all content sections. Default is false because all - * installation bundles use Terms. - */ - private final Parameter m_allowCategoryCreateUseContext = - new BooleanParameter( - "com.arsdigita.cms.allow_category_create_use_context", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Allow content creation in Workspace (content center) section listing. - * Allows you to turn off the ability to create content in the section - * listing - */ - private final Parameter m_allowContentCreateInSectionListing = - new BooleanParameter( - "com.arsdigita.cms.allow_content_create_in_section_listing", - Parameter.REQUIRED, - Boolean.TRUE); - /** - * Hide the legacy public site link in Workspace (content center) section - * listing. Legacy public site display is replaced by navigation based - * presentation (or by portlets) and should be hidden in the admin ui by - * default now. - */ - private final Parameter m_hideLegacyPublicSiteLink = - new BooleanParameter( - "com.arsdigita.cms.hide_legacy_public_site_link", - Parameter.REQUIRED, - Boolean.TRUE); - // /////////////////////////////////////////// - // Notification related parameters - // /////////////////////////////////////////// - /** - * Delete Sent Workflow Notifications. Decide whether successfully sent - * notifications and messages should be deleted from the system - */ - private final Parameter m_deleteWorkflowNotificationsWhenSent = - new BooleanParameter( - "com.arsdigita.cms.delete_workflow_notification_when_sent", - Parameter.OPTIONAL, - Boolean.FALSE); - /** - * Decide whether successfully sent notifications and messages should be - * deleted from the system - */ - private final Parameter m_deleteExpiryNotificationsWhenSent = - new BooleanParameter( - "com.arsdigita.cms.delete_expiry_notification_when_sent", - Parameter.OPTIONAL, - Boolean.FALSE); - /** - * Amount of time (in hours) before the expiration of a content item that - * users in the Alert Recipient role are alerted via email - */ - private final Parameter m_defaultNotificationTime = new IntegerParameter( - "com.arsdigita.cms.default_notification_time", - Parameter.REQUIRED, - new Integer(0)); - /** - * Wether a content item's author should be notified by the item's - * LifecycleListener; defaults to true - */ - private final Parameter m_notifyAuthorOnLifecycle = new BooleanParameter( - "com.arsdigita.cms.notify_author_on_lifecycle", - Parameter.OPTIONAL, - Boolean.TRUE); - // //////////////////////////////////////////////////// - // Content Center (Workspace) config related parameters - // //////////////////////////////////////////////////// - /** - * XML Mapping of the content center tabs to URLs, see - * {@link ContentCenterDispatcher} - */ - private final StringParameter m_contentCenterMap = new StringParameter( - "com.arsdigita.cms.loader.content_center_map", - Parameter.REQUIRED, - "/WEB-INF/resources/content-center-map.xml"); - // /////////////////////////////////////////// - // Content Section config related parameters - // /////////////////////////////////////////// + return s_config; + } + /** + * Storage (map) for method getAssetStepsToSkip(ContentType type) to + * store mapping of steps that are deemed irrelevant for the passid in + * type. + */ + private static Map s_skipAssetSteps = null; + /** + * Item category add form specifies Subclass of ItemCategoryForm to use + * for the assign categories step. Used in + * c.ad.cms.ui.authoring.ItemCategoryStep + */ + private final Parameter m_categoryAuthoringAddForm = + new SpecificClassParameter( + "com.arsdigita.cms.category_authoring_add_form", + Parameter.REQUIRED, + ItemCategoryForm.class, + SimpleComponent.class); + /** + * Path for the default item template. Path is relative to the Template + * Root path. + */ + private final Parameter m_defaultItemTemplatePath = + new StringParameter( + "com.arsdigita.cms.default_item_template_path", + Parameter.REQUIRED, + "/default/item.jsp"); + /** + * Path for the default folder template. Path is relative to the + * Template Root path. + */ + private final Parameter m_defaultFolderTemplatePath = + new StringParameter( + "com.arsdigita.cms.default_folder_template_path", + Parameter.REQUIRED, + "/default/folder.jsp"); + /** + * Path or the root folter for template folders. Path is relative to + * webapp root. Modify with care! Usually modified by developers only! + */ + private final Parameter m_templateRootPath = + new StringParameter( + "com.arsdigita.cms.template_root_path", + Parameter.REQUIRED, + "/templates/ccm-cms/content-section"); + // up to version 6.6.4 + // "/packages/content-section/templates"); + // URL resource: protocol handler removal: START + // remove: + // try { + // m_itemAdapters = new URLParameter + // ("com.arsdigita.cms.item_adapters", + // Parameter.REQUIRED, + // new URL("resource:WEB-INF/resources/cms-item-adapters.xml")); + // } catch (MalformedURLException ex) { + // throw new UncheckedWrapperException("Cannot parse URL", ex); + // } + // ADD: + /** + * Item Adapters File, path to an XML resource containing adapter + * specifications. Path is relative to webapp root. + */ + private final Parameter m_itemAdapters = + new ResourceParameter( + "com.arsdigita.cms.item_adapters", + Parameter.REQUIRED, + "/WEB-INF/resources/cms-item-adapters.xml"); + // URL resource: protocol handler removal: END + /** + * Use streamlined content creation: upon item creation, automatically + * open authoring steps and forward to the next step + */ + private final Parameter m_useStreamlinedCreation = new BooleanParameter( + "com.arsdigita.cms.use_streamlined_creation", + Parameter.REQUIRED, + Boolean.TRUE); + /** + * DHTML Editor Configuration for use in CMS module, lists the config + * object name and Javascript source location for its definition. + */ + private final Parameter m_dhtmlEditorConfig = + new DHTMLEditorConfigParameter( + "com.arsdigita.cms.dhtml_editor_config", + Parameter.REQUIRED, + new DHTMLEditor.Config("Xinha.Config", + "/assets/xinha/CCMcmsXinhaConfig.js")); + // previous parameter definition: + // > DHTMLEditor.Config.STANDARD); < + // didn't work because of broken unmarshalling (cf. similiar problem + // with ResourceParameter and patch provided by Brad). It work for + // HTMLArea, because configuration was hard coded into xsl(!). + // Additionally, we would like to use a specific configuration for cms + // to include cms specific functions (like access to internal . + // content items for links and internal image assets, which may not + // be accessable by other modules which use DHTMLeditor. + // Would be bad style to configure a cms specific parameter in core. + /** + * Defines which plugins to use, e.g.TableOperations,CSS Format: + * [string,string,string] + */ + private final Parameter m_dhtmlEditorPlugins = new StringArrayParameter( + "com.arsdigita.cms.dhtml_editor_plugins", + Parameter.OPTIONAL, + null); + /** + * Prevent undesirable functions from being made available, eg images + * should only be added through the cms methods. + */ + private final Parameter m_dhtmlEditorHiddenButtons = + new StringArrayParameter( + "com.arsdigita.cms.dhtml_editor_hidden_buttons", + Parameter.OPTIONAL, + null); + /** + * Hide section admin tabs from users without administrative rights. + */ + private final Parameter m_hideAdminTabs = new BooleanParameter( + "com.arsdigita.cms.hide_admin_tabs", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Hide Folder Index Checkbox from folder view + */ + private final Parameter m_hideFolderIndexCheckbox = new BooleanParameter( + "com.arsdigita.cms.hide_folder_index_checkbox", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Hide launch date parameter on all forms and displays where it's used. + */ + private final Parameter m_hideLaunchDate = new BooleanParameter( + "com.arsdigita.cms.hide_launch_date", + Parameter.REQUIRED, + Boolean.TRUE); + /** + * Require the launch date parameter to be set by the content author. + */ + private final Parameter m_requireLaunchDate = new BooleanParameter( + "com.arsdigita.cms.require_launch_date", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Hide the templates tab on the item admin page. + */ + private final Parameter m_hideTemplatesTab = new BooleanParameter( + "com.arsdigita.cms.hide_templates_tab", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Hide the upload file link in the editing of a text asset. + */ + private final Parameter m_hideTextAssetUploadFile = new BooleanParameter( + "com.arsdigita.cms.hide_text_asset_upload_file", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Hide timezone labels (if, for example, all users will be in the same + * timezone and such information would be unnecessary) + */ + private final Parameter m_hideTimezone = new BooleanParameter( + "com.arsdigita.cms.hide_timezone", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Hide User Defined Content Types UI + */ + private final Parameter m_hideUDCTUI = new BooleanParameter( + "com.arsdigita.cms.hide_udct_ui", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Specifies the name of the class to use as a PublishLifecycleListener + */ + private final Parameter m_publishLifecycleListenerClass = + new StringParameter( + "com.arsdigita.cms.publish_lifecycle_listener_class", + Parameter.OPTIONAL, + PublishLifecycleListener.class.getName()); + /** + * Wether the Wysiwyg editor should clear the text of MSWord tags, + * everytime the user clicks on 'Save' + */ + private final Parameter m_saveTextCleansWordTags = new BooleanParameter( + "com.arsdigita.cms.save_text_cleans_word_tags", + Parameter.OPTIONAL, + Boolean.FALSE); + /** + * Get the search indexing not to process FileAssets, eg to avoid PDF + * slowdowns + */ + private final Parameter m_disableFileAssetExtraction = new BooleanParameter( + "com.arsdigita.cms.search.disableFileAssetExtraction", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Whether an item's workflow should be deleted, once the item has been + * (re)published + */ + private final Parameter m_deleteWorkflowAfterPublication = + new BooleanParameter( + "com.arsdigita.cms.delete_workflow_after_publication", + Parameter.REQUIRED, + Boolean.TRUE); + /** + * Defines the number of days ahead that are covered in the 'Soon + * Expired' tab + */ + private final Parameter m_soonExpiredTimespanDays = new IntegerParameter( + "com.arsdigita.cms.soon_expired_timespan_days", + Parameter.REQUIRED, + new Integer(14)); + /** + * Defines the number of months ahead that are covered in the 'Soon + * Expired' tab + */ + private final Parameter m_soonExpiredTimespanMonths = new IntegerParameter( + "com.arsdigita.cms.soon_expired_timespan_months", + Parameter.REQUIRED, + new Integer(1)); + /** + * Does a redirect to the unpublished item generate not found error? + */ + private final Parameter m_unpublishedNotFound = new BooleanParameter( + "com.arsdigita.cms.unpublished_not_found", + Parameter.REQUIRED, + Boolean.TRUE); + /** + * Links created through browse interfaces should only be within the + * same subsite + */ + private final Parameter m_linksOnlyInSameSubsite = new BooleanParameter( + "com.arsdigita.cms.browse_links_in_same_subsite_only", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Item category step extension hook: Subclass of ItemCategoryExtension + * which adds extension actions for the category authoring step + */ + private final Parameter m_categoryAuthoringExtension = + new SpecificClassParameter( + "com.arsdigita.cms.category_authoring_extension", + Parameter.REQUIRED, + ItemCategoryExtension.class, + ItemCategoryExtension.class); + /** + * Link available to reset lifecycle on republish. If false don't + * display the link otherwise display. + */ + private final Parameter m_hideResetLifecycleLink = new BooleanParameter( + "com.arsdigita.cms.hide_reset_lifecycle_link", + Parameter.OPTIONAL, + Boolean.TRUE); + /** + * Whether to include INPATH operators to contains clause in intermedia + * search + */ + private final Parameter m_scoreTitleAndKeywords = + new BooleanParameter( + "com.arsdigita.cms.search.score_title_and_keywords", + Parameter.OPTIONAL, + Boolean.FALSE); + /** + * Title Weight, the relative weight given to title element within + * cms:item when ranking search results (only used by interMedia) + */ + private final Parameter m_titleWeight = new IntegerParameter( + "com.arsdigita.cms.search.intermedia.title_weight", + Parameter.OPTIONAL, + new Integer(1)); + /** + * Keyword Weight, the relative weight given to the dcKeywords element + * within dublinCore element within cms:item element when ranking search + * results (only used by interMedia) + */ + private final Parameter m_keywordWeight = + new IntegerParameter( + "com.arsdigita.cms.search.intermedia.keyword_weight", + Parameter.OPTIONAL, + new Integer(1)); + /** + * Limit the item search to current content section + */ + private final Parameter m_limitToContentSection = + new BooleanParameter( + "com.arsdigita.cms.search.limitToContentSection", + Parameter.OPTIONAL, + Boolean.TRUE); + /** + * Asset steps to skip, specify asset steps that are not relevant for + * specific content types. 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 + */ + private final Parameter m_skipAssetSteps = new StringArrayParameter( + "com.arsdigita.cms.skip_asset_steps", + Parameter.OPTIONAL, + null); + /** + * Mandatory Descriptions Content types may refer to this to decide + * whether to validate against empty descriptions + */ + private final Parameter m_mandatoryDescriptions = new BooleanParameter( + "com.arsdigita.cms.mandatory_descriptions", + Parameter.OPTIONAL, + Boolean.FALSE); + /** + * Delete Finished Lifecycles. Decide whether lifecycles and their + * phases should be deleted from the system when finished. + */ + private final Parameter m_deleteLifecycleWhenComplete = + new BooleanParameter( + "com.arsdigita.cms.delete_lifecycle_when_complete", + Parameter.OPTIONAL, + Boolean.FALSE); + /** + * Contacts for content items. Allows you to add a Contact authoring + * step to all items + */ + private final Parameter m_hasContactsAuthoringStep = new BooleanParameter( + "com.arsdigita.cms.has_contacts_authoring_step", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Ordering for nodes in assign category tree. Decide whether entries + * should be ordered alphabetically or according to sort key (maintained + * in category admin tab in content centre) SortKey|Alphabetical is + * initialized in constructor! See below. + */ + private final Parameter m_categoryTreeOrdering = + new EnumerationParameter( + "com.arsdigita.cms.category_tree_order", + Parameter.OPTIONAL, + Category.SORT_KEY); + /** + * Allow creation of a new Use Context in category tab of content + * sections. "Use Context" is the construct to constitute a category + * hierarchy implementet in core. It is superseded by the construct + * "Category Domain" in Terms (ccm-ldn-terms). Global parameter for all + * content sections. Default is false because all installation bundles + * use Terms. + */ + private final Parameter m_allowCategoryCreateUseContext = + new BooleanParameter( + "com.arsdigita.cms.allow_category_create_use_context", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Allow content creation in Workspace (content center) section listing. + * Allows you to turn off the ability to create content in the section + * listing + */ + private final Parameter m_allowContentCreateInSectionListing = + new BooleanParameter( + "com.arsdigita.cms.allow_content_create_in_section_listing", + Parameter.REQUIRED, + Boolean.TRUE); + /** + * Hide the legacy public site link in Workspace (content center) + * section listing. Legacy public site display is replaced by navigation + * based presentation (or by portlets) and should be hidden in the admin + * ui by default now. + */ + private final Parameter m_hideLegacyPublicSiteLink = + new BooleanParameter( + "com.arsdigita.cms.hide_legacy_public_site_link", + Parameter.REQUIRED, + Boolean.TRUE); + // /////////////////////////////////////////// + // Notification related parameters + // /////////////////////////////////////////// + /** + * Delete Sent Workflow Notifications. Decide whether successfully sent + * notifications and messages should be deleted from the system + */ + private final Parameter m_deleteWorkflowNotificationsWhenSent = + new BooleanParameter( + "com.arsdigita.cms.delete_workflow_notification_when_sent", + Parameter.OPTIONAL, + Boolean.FALSE); + /** + * Decide whether successfully sent notifications and messages should be + * deleted from the system + */ + private final Parameter m_deleteExpiryNotificationsWhenSent = + new BooleanParameter( + "com.arsdigita.cms.delete_expiry_notification_when_sent", + Parameter.OPTIONAL, + Boolean.FALSE); + /** + * Amount of time (in hours) before the expiration of a content item + * that users in the Alert Recipient role are alerted via email + */ + private final Parameter m_defaultNotificationTime = new IntegerParameter( + "com.arsdigita.cms.default_notification_time", + Parameter.REQUIRED, + new Integer(0)); + /** + * Wether a content item's author should be notified by the item's + * LifecycleListener; defaults to true + */ + private final Parameter m_notifyAuthorOnLifecycle = new BooleanParameter( + "com.arsdigita.cms.notify_author_on_lifecycle", + Parameter.OPTIONAL, + Boolean.TRUE); + // //////////////////////////////////////////////////// + // Content Center (Workspace) config related parameters + // //////////////////////////////////////////////////// + /** + * XML Mapping of the content center tabs to URLs, see + * {@link ContentCenterDispatcher} + */ + private final StringParameter m_contentCenterMap = new StringParameter( + "com.arsdigita.cms.loader.content_center_map", + Parameter.REQUIRED, + "/WEB-INF/resources/content-center-map.xml"); + // /////////////////////////////////////////// + // Content Section config related parameters + // /////////////////////////////////////////// // Nolonger used, // replaced by c.ad.cms.ContentSection.getDefaultSection().getName() // private final Parameter m_defaultSection = new StringParameter( // "com.arsdigita.cms.default_content_section", // Parameter.REQUIRED, // "content"); - // /////////////////////////////////////////// - // Content Section creation parameters - // XXX these are probably temporary parameters, as the - // item/template resolvers will be determined by the successor - // to SectionInitializer. However, it still may be useful to - // keep these for the default values. - // /////////////////////////////////////////// - private final Parameter m_defaultItemResolverClass = - new SpecificClassParameter( - "com.arsdigita.cms.default_item_resolver_class", - Parameter.REQUIRED, - MultilingualItemResolver.class, - ItemResolver.class); - private final Parameter m_defaultTemplateResolverClass = - new SpecificClassParameter( - "com.arsdigita.cms.default_template_resolver_class", - Parameter.REQUIRED, - DefaultTemplateResolver.class, - TemplateResolver.class); - ///////////////////////////////////////////// - // ItemSearchWidget - ///////////////////////////////////////////// - private final Parameter m_itemSearchDefaultTab = - new StringParameter( - "com.arsdigita.cms.item_search.default_tab", - Parameter.REQUIRED, "flatBrowse"); + // /////////////////////////////////////////// + // Content Section creation parameters + // XXX these are probably temporary parameters, as the + // item/template resolvers will be determined by the successor + // to SectionInitializer. However, it still may be useful to + // keep these for the default values. + // /////////////////////////////////////////// + private final Parameter m_defaultItemResolverClass = + new SpecificClassParameter( + "com.arsdigita.cms.default_item_resolver_class", + Parameter.REQUIRED, + MultilingualItemResolver.class, + ItemResolver.class); + private final Parameter m_defaultTemplateResolverClass = + new SpecificClassParameter( + "com.arsdigita.cms.default_template_resolver_class", + Parameter.REQUIRED, + DefaultTemplateResolver.class, + TemplateResolver.class); + ///////////////////////////////////////////// + // ItemSearchWidget + ///////////////////////////////////////////// + private final Parameter m_itemSearchDefaultTab = + new StringParameter( + "com.arsdigita.cms.item_search.default_tab", + Parameter.REQUIRED, "flatBrowse"); // private final Parameter m_itemSearchFlatBrowsePaneEnable = new BooleanParameter( // "com.arsdigita.cms.item_search.flat_browse_pane.enable", // Parameter.REQUIRED, // true); - private final Parameter m_itemSearchFlatBrowsePanePageSize = new IntegerParameter( - "com.arsdigita.cms.item_search.flat_browse_pane.page_size", - Parameter.REQUIRED, - 20); - ///////////////////////////////////////////// - // FolderBrowse - ///////////////////////////////////////////// - private final Parameter m_folderBrowseListSize = new IntegerParameter( - "com.arsdigita.cms.folder_browse_list_size", - Parameter.REQUIRED, - 20); - ///////////////////////////////////////////// - // Folder A to Z show limit: Display a A to Z filter bar when a folder has more than x items - ///////////////////////////////////////////// - private final Parameter m_folderAtoZShowLimit = new IntegerParameter( - "com.arsdigita.cms.folder_atoz_show_limit", - Parameter.REQUIRED, - 100); - ////////////////////////////////////////////// - //If set to true the old style ItemLifecycleItemPane (allows you to - //republish and withdraw items) is used. Otherwise the new style form is - //used, which is more secure against wrong clicks. - ////////////////////////////////////////////// - private final Parameter m_useOldStyleItemLifecycleItemPane = - new BooleanParameter( - "com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane", - Parameter.REQUIRED, - false); - //////////////////////////////////////////////// - //Actives threaded publishing. If active, the publish process for - //content items will run in a separate thread. May useful if you have - //large objects. - //////////////////////////////////////////////////// - private final Parameter m_threadPublishing = new BooleanParameter( - "com.arsdigita.cms.lifecycle.threaded_publishing", - Parameter.REQUIRED, - true); - private final Parameter m_publishingFailureSender = new StringParameter( - "cms.arsdigita.cms.lifecycle.threaded_publishing.notify_on_error.from", - Parameter.REQUIRED, - ""); - private final Parameter m_publishingFailureReceiver = new StringParameter( - "cms.arsdigita.cms.lifecycle.threaded_publishing.notify_on_error.to", - Parameter.REQUIRED, - ""); - ///////////////////////////////////////////////// - // ImageBrowser Parameter - ///////////////////////////////////////////////// - private final Parameter m_imageBrowserThumbnailMaxWidth = new IntegerParameter( - "com.arsdigita.cms.image_browser.thumbnail_max_width", - Parameter.REQUIRED, - 50); - private final Parameter m_imageBrowserThumbnailMaxHeight = new IntegerParameter( - "com.arsdigita.cms.image_browser.thumbnail_max_height", - Parameter.REQUIRED, - 50); - ///////////////////////////////////////////////// - // ImageCache Parameter - ///////////////////////////////////////////////// - private final Parameter m_imageCacheEnabled = new BooleanParameter( - "com.arsdigita.cms.image_cache.enable", - Parameter.REQUIRED, - true); - private final Parameter m_imageCachePrefetchEnabled = new BooleanParameter( - "com.arsdigita.cms.image_cache.prefetch_enable", - Parameter.REQUIRED, - false); - private final Parameter m_imageCacheMaxSize = new IntegerParameter( - "com.arsdigita.cms.image_cache.max_size", - Parameter.REQUIRED, - 100); - private final Parameter m_imageCacheMaxAge = new IntegerParameter( - "com.arsdigita.cms.image_cache.max_age", - Parameter.REQUIRED, - 300); - /** - * Enable the PersonOrgaUnitsStep? - */ - private final Parameter m_attachPersonOrgaUnitsStep = new BooleanParameter( - "com.arsdigita.cms.contenttypes.genericperson.attach_person_orgaunits_step", - Parameter.REQUIRED, - Boolean.TRUE); - - private final Parameter m_personOrgaUnitsStepSortKey = new BooleanParameter( - "com.arsdigita.cms.contenttypes.genericperson.person_orgaunits_step_sortkey", - Parameter.REQUIRED, - 20); - - /** - * Enable or disable the XML cache in {@link SimpleXMLGenerator} - */ - private final Parameter m_enableXmlCache = new BooleanParameter( - "com.arsdigita.cms.xml.cache.enable", - Parameter.REQUIRED, - Boolean.FALSE); - /** - * Maximum number of items stored in the XML cache - * - */ - private final Parameter m_xmlCacheSize = new IntegerParameter( - "com.arsdigita.cms.xml.cache.size", - Parameter.REQUIRED, - 2500); - /** - * Maximum age of cache entry for the XML cache - * - */ - private final Parameter m_xmlCacheAge = new IntegerParameter( - "com.arsdigita.cms.xml.cache.age", - Parameter.REQUIRED, - 60 * 60 * 24); + private final Parameter m_itemSearchFlatBrowsePanePageSize = new IntegerParameter( + "com.arsdigita.cms.item_search.flat_browse_pane.page_size", + Parameter.REQUIRED, + 20); + ///////////////////////////////////////////// + // FolderBrowse + ///////////////////////////////////////////// + private final Parameter m_folderBrowseListSize = new IntegerParameter( + "com.arsdigita.cms.folder_browse_list_size", + Parameter.REQUIRED, + 20); + ///////////////////////////////////////////// + // Folder A to Z show limit: Display a A to Z filter bar when a folder has more than x items + ///////////////////////////////////////////// + private final Parameter m_folderAtoZShowLimit = new IntegerParameter( + "com.arsdigita.cms.folder_atoz_show_limit", + Parameter.REQUIRED, + 100); + ////////////////////////////////////////////// + //If set to true the old style ItemLifecycleItemPane (allows you to + //republish and withdraw items) is used. Otherwise the new style form is + //used, which is more secure against wrong clicks. + ////////////////////////////////////////////// + private final Parameter m_useOldStyleItemLifecycleItemPane = + new BooleanParameter( + "com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane", + Parameter.REQUIRED, + false); + //////////////////////////////////////////////// + //Actives threaded publishing. If active, the publish process for + //content items will run in a separate thread. May useful if you have + //large objects. + //////////////////////////////////////////////////// + private final Parameter m_threadPublishing = new BooleanParameter( + "com.arsdigita.cms.lifecycle.threaded_publishing", + Parameter.REQUIRED, + true); + private final Parameter m_publishingFailureSender = new StringParameter( + "cms.arsdigita.cms.lifecycle.threaded_publishing.notify_on_error.from", + Parameter.REQUIRED, + ""); + private final Parameter m_publishingFailureReceiver = new StringParameter( + "cms.arsdigita.cms.lifecycle.threaded_publishing.notify_on_error.to", + Parameter.REQUIRED, + ""); + ///////////////////////////////////////////////// + // ImageBrowser Parameter + ///////////////////////////////////////////////// + private final Parameter m_imageBrowserThumbnailMaxWidth = new IntegerParameter( + "com.arsdigita.cms.image_browser.thumbnail_max_width", + Parameter.REQUIRED, + 50); + private final Parameter m_imageBrowserThumbnailMaxHeight = new IntegerParameter( + "com.arsdigita.cms.image_browser.thumbnail_max_height", + Parameter.REQUIRED, + 50); + private final Parameter m_imageBrowserCaptionSize = new IntegerParameter( + "com.arsdigita.cms.image_browser.caption_size", + Parameter.REQUIRED, + 100); + private final Parameter m_imageBrowserDescriptionSize = new IntegerParameter( + "com.arsdigita.cms.image_browser.description_size", + Parameter.REQUIRED, + 400); + private final Parameter m_imageBrowserTitleSize = new IntegerParameter( + "com.arsdigita.cms.image_browser.title_size", + Parameter.REQUIRED, + 200); + ///////////////////////////////////////////////// + // ImageCache Parameter + ///////////////////////////////////////////////// + private final Parameter m_imageCacheEnabled = new BooleanParameter( + "com.arsdigita.cms.image_cache.enable", + Parameter.REQUIRED, + true); + private final Parameter m_imageCachePrefetchEnabled = new BooleanParameter( + "com.arsdigita.cms.image_cache.prefetch_enable", + Parameter.REQUIRED, + false); + private final Parameter m_imageCacheMaxSize = new IntegerParameter( + "com.arsdigita.cms.image_cache.max_size", + Parameter.REQUIRED, + 100); + private final Parameter m_imageCacheMaxAge = new IntegerParameter( + "com.arsdigita.cms.image_cache.max_age", + Parameter.REQUIRED, + 300); + /** + * Enable the PersonOrgaUnitsStep? + */ + private final Parameter m_attachPersonOrgaUnitsStep = new BooleanParameter( + "com.arsdigita.cms.contenttypes.genericperson.attach_person_orgaunits_step", + Parameter.REQUIRED, + Boolean.TRUE); + private final Parameter m_personOrgaUnitsStepSortKey = new BooleanParameter( + "com.arsdigita.cms.contenttypes.genericperson.person_orgaunits_step_sortkey", + Parameter.REQUIRED, + 20); + /** + * Enable or disable the XML cache in {@link SimpleXMLGenerator} + */ + private final Parameter m_enableXmlCache = new BooleanParameter( + "com.arsdigita.cms.xml.cache.enable", + Parameter.REQUIRED, + Boolean.FALSE); + /** + * Maximum number of items stored in the XML cache + * + */ + private final Parameter m_xmlCacheSize = new IntegerParameter( + "com.arsdigita.cms.xml.cache.size", + Parameter.REQUIRED, + 2500); + /** + * Maximum age of cache entry for the XML cache + * + */ + private final Parameter m_xmlCacheAge = new IntegerParameter( + "com.arsdigita.cms.xml.cache.age", + Parameter.REQUIRED, + 60 * 60 * 24); - // /////////////////////////////////////////// - // publishToFile package related parameter - // /////////////////////////////////////////// - // Moved to publishToFile.PublishToFileConfig as of version 6.0.2 - // private final Parameter m_disableItemPfs; - // private final Parameter m_publishToFileClass; - /** - * Constructor, but do NOT instantiate this class directly. - * - * @see ContentSection#getConfig() - * - */ - public CMSConfig() { + // /////////////////////////////////////////// + // publishToFile package related parameter + // /////////////////////////////////////////// + // Moved to publishToFile.PublishToFileConfig as of version 6.0.2 + // private final Parameter m_disableItemPfs; + // private final Parameter m_publishToFileClass; + /** + * Constructor, but do NOT instantiate this class directly. + * + * @see ContentSection#getConfig() + * + */ + public CMSConfig() { - // Initialize m_categoryTreeOrdering parameter here! - // 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); + // Initialize m_categoryTreeOrdering parameter here! + // 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); - register(m_templateRootPath); - register(m_defaultItemTemplatePath); - register(m_defaultFolderTemplatePath); - register(m_categoryAuthoringAddForm); - register(m_itemAdapters); - register(m_useStreamlinedCreation); - register(m_dhtmlEditorConfig); - register(m_dhtmlEditorPlugins); - register(m_dhtmlEditorHiddenButtons); - register(m_hideTemplatesTab); - register(m_hideAdminTabs); - register(m_hideTimezone); - register(m_hideLaunchDate); - register(m_requireLaunchDate); - register(m_hideUDCTUI); - register(m_hideFolderIndexCheckbox); - register(m_defaultNotificationTime); - register(m_publishLifecycleListenerClass); - register(m_notifyAuthorOnLifecycle); - register(m_saveTextCleansWordTags); - register(m_disableFileAssetExtraction); - register(m_deleteWorkflowAfterPublication); - register(m_soonExpiredTimespanMonths); - register(m_soonExpiredTimespanDays); - register(m_unpublishedNotFound); - register(m_linksOnlyInSameSubsite); - register(m_categoryAuthoringExtension); - register(m_hideResetLifecycleLink); - register(m_keywordWeight); - register(m_limitToContentSection); - register(m_titleWeight); - register(m_scoreTitleAndKeywords); - register(m_skipAssetSteps); - register(m_mandatoryDescriptions); - register(m_deleteLifecycleWhenComplete); - register(m_deleteExpiryNotificationsWhenSent); - register(m_deleteWorkflowNotificationsWhenSent); - register(m_categoryTreeOrdering); - register(m_hasContactsAuthoringStep); - register(m_hideTextAssetUploadFile); - register(m_allowCategoryCreateUseContext); - register(m_allowContentCreateInSectionListing); - register(m_hideLegacyPublicSiteLink); + register(m_templateRootPath); + register(m_defaultItemTemplatePath); + register(m_defaultFolderTemplatePath); + register(m_categoryAuthoringAddForm); + register(m_itemAdapters); + register(m_useStreamlinedCreation); + register(m_dhtmlEditorConfig); + register(m_dhtmlEditorPlugins); + register(m_dhtmlEditorHiddenButtons); + register(m_hideTemplatesTab); + register(m_hideAdminTabs); + register(m_hideTimezone); + register(m_hideLaunchDate); + register(m_requireLaunchDate); + register(m_hideUDCTUI); + register(m_hideFolderIndexCheckbox); + register(m_defaultNotificationTime); + register(m_publishLifecycleListenerClass); + register(m_notifyAuthorOnLifecycle); + register(m_saveTextCleansWordTags); + register(m_disableFileAssetExtraction); + register(m_deleteWorkflowAfterPublication); + register(m_soonExpiredTimespanMonths); + register(m_soonExpiredTimespanDays); + register(m_unpublishedNotFound); + register(m_linksOnlyInSameSubsite); + register(m_categoryAuthoringExtension); + register(m_hideResetLifecycleLink); + register(m_keywordWeight); + register(m_limitToContentSection); + register(m_titleWeight); + register(m_scoreTitleAndKeywords); + register(m_skipAssetSteps); + register(m_mandatoryDescriptions); + register(m_deleteLifecycleWhenComplete); + register(m_deleteExpiryNotificationsWhenSent); + register(m_deleteWorkflowNotificationsWhenSent); + register(m_categoryTreeOrdering); + register(m_hasContactsAuthoringStep); + register(m_hideTextAssetUploadFile); + register(m_allowCategoryCreateUseContext); + register(m_allowContentCreateInSectionListing); + register(m_hideLegacyPublicSiteLink); - // Content Center (Workspace) config related parameters - register(m_contentCenterMap); + // Content Center (Workspace) config related parameters + register(m_contentCenterMap); - // Content Section config related parameters - // register(m_defaultSection); + // Content Section config related parameters + // register(m_defaultSection); - // Content Section creation parameters - register(m_defaultItemResolverClass); - register(m_defaultTemplateResolverClass); + // Content Section creation parameters + register(m_defaultItemResolverClass); + register(m_defaultTemplateResolverClass); - register(m_itemSearchDefaultTab); + register(m_itemSearchDefaultTab); - register(m_folderBrowseListSize); - register(m_folderAtoZShowLimit); + register(m_folderBrowseListSize); + register(m_folderAtoZShowLimit); - register(m_useOldStyleItemLifecycleItemPane); - register(m_threadPublishing); - register(m_publishingFailureSender); - register(m_publishingFailureReceiver); + register(m_useOldStyleItemLifecycleItemPane); + register(m_threadPublishing); + register(m_publishingFailureSender); + register(m_publishingFailureReceiver); - // ImageBrowser - register(m_imageBrowserThumbnailMaxWidth); - register(m_imageBrowserThumbnailMaxHeight); + // ImageBrowser + register(m_imageBrowserThumbnailMaxWidth); + register(m_imageBrowserThumbnailMaxHeight); + register(m_imageBrowserCaptionSize); + register(m_imageBrowserDescriptionSize); + register(m_imageBrowserTitleSize); - // ImageCache Parameter - register(m_imageCacheEnabled); - register(m_imageCachePrefetchEnabled); - register(m_imageCacheMaxSize); - register(m_imageCacheMaxAge); + // ImageCache Parameter + register(m_imageCacheEnabled); + register(m_imageCachePrefetchEnabled); + register(m_imageCacheMaxSize); + register(m_imageCacheMaxAge); - // publishToFile package related parameter - // Moved to publishToFile.PublishToFileConfig as of version 6.0.2 - // register(m_disableItemPfs); - // register(m_publishToFileClass); + // publishToFile package related parameter + // Moved to publishToFile.PublishToFileConfig as of version 6.0.2 + // register(m_disableItemPfs); + // register(m_publishToFileClass); // register(m_itemSearchFlatBrowsePaneEnable); - register(m_itemSearchFlatBrowsePanePageSize); - - register(m_attachPersonOrgaUnitsStep); - register(m_personOrgaUnitsStepSortKey); - - register(m_enableXmlCache); - register(m_xmlCacheSize); - register(m_xmlCacheAge); - - loadInfo(); - } - - /** - * Retrieve path of the root folter for template folders. Path is relative - * to webapp root. - */ - public final String getTemplateRoot() { - return (String) get(m_templateRootPath); - } - - public final String getDefaultItemTemplatePath() { - return (String) get(m_defaultItemTemplatePath); - } - - public final String getDefaultFolderTemplatePath() { - return (String) get(m_defaultFolderTemplatePath); - } - - public final Class getDefaultItemResolverClass() { - return (Class) get(m_defaultItemResolverClass); - } - - public final Class getDefaultTemplateResolverClass() { - return (Class) get(m_defaultTemplateResolverClass); - } - - public final Class getCategoryAuthoringAddForm() { - return (Class) get(m_categoryAuthoringAddForm); - } - - public final InputStream getItemAdapters() { - // URL resource: protocol handler removal: START - // remove: - // try { - // return ((URL)get(m_itemAdapters)).openStream(); - // } catch (IOException ex) { - // throw new UncheckedWrapperException("Cannot read stream", ex); - // } - // ADD: - return (InputStream) get(m_itemAdapters); - } - - /** - * - * @deprecated use - * com.arsdigita.cms.ContentSection.getDefaultSection().getName() instead - */ - public final String getDefaultContentSection() { - // return (String) get(m_defaultSection); - return (String) ContentSection.getDefaultSection().getName(); - } - - public final boolean getUseStreamlinedCreation() { - return ((Boolean) get(m_useStreamlinedCreation)).booleanValue(); - } - - public final DHTMLEditor.Config getDHTMLEditorConfig() { - return (DHTMLEditor.Config) get(m_dhtmlEditorConfig); - } - - public final String[] getDHTMLEditorPlugins() { - return (String[]) get(m_dhtmlEditorPlugins); - } - - public final String[] getDHTMLEditorHiddenButtons() { - return (String[]) get(m_dhtmlEditorHiddenButtons); - } - - public final boolean getHideTemplatesTab() { - return ((Boolean) get(m_hideTemplatesTab)).booleanValue(); - } - - public final boolean getHideAdminTabs() { - return ((Boolean) get(m_hideAdminTabs)).booleanValue(); - } - - public final boolean getHideTimezone() { - return ((Boolean) get(m_hideTimezone)).booleanValue(); - } - - public final boolean getHideLaunchDate() { - return ((Boolean) get(m_hideLaunchDate)).booleanValue(); - } - - public final boolean getRequireLaunchDate() { - return ((Boolean) get(m_requireLaunchDate)).booleanValue(); - } - - public final boolean getHideUDCTUI() { - return ((Boolean) get(m_hideUDCTUI)).booleanValue(); - } - - public final boolean getHideFolderIndexCheckbox() { - return ((Boolean) get(m_hideFolderIndexCheckbox)).booleanValue(); - } - - public final int getDefaultNotificationTime() { - return ((Integer) get(m_defaultNotificationTime)).intValue(); - } - - public final String getPublishLifecycleListenerClass() { - return (String) get(m_publishLifecycleListenerClass); - } - - public final boolean getNotifyAuthorOnLifecycle() { - return ((Boolean) get(m_notifyAuthorOnLifecycle)).booleanValue(); - } - - public final boolean getSaveTextCleansWordTags() { - return ((Boolean) get(m_saveTextCleansWordTags)).booleanValue(); - } - - public final boolean getDisableFileAssetExtraction() { - return ((Boolean) get(m_disableFileAssetExtraction)).booleanValue(); - } - - public final boolean getDeleteWorkflowAfterPublication() { - return ((Boolean) get(m_deleteWorkflowAfterPublication)).booleanValue(); - } - - public final boolean getLinksOnlyInSameSubsite() { - return ((Boolean) get(m_linksOnlyInSameSubsite)).booleanValue(); - } - - public final int getSoonExpiredMonths() { - return ((Integer) get(m_soonExpiredTimespanMonths)).intValue(); - } - - public final int getSoonExpiredDays() { - return ((Integer) get(m_soonExpiredTimespanDays)).intValue(); - } - - public final boolean isUnpublishedNotFound() { - return ((Boolean) get(m_unpublishedNotFound)).booleanValue(); - } - - public final Class getCategoryAuthoringExtension() { - return (Class) get(m_categoryAuthoringExtension); - } - - // /////////////////////////////////////////// - // publishToFile package related configuration - // /////////////////////////////////////////// - // 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(); - } - - /** - * Fetch the file name contaning XML Mapping of the content center tabs to - * URLs - * - * @return String containig file name including path component. - */ - public String getContentCenterMap() { - return (String) get(m_contentCenterMap); - } - - /** - * Internal class representing a DHTMLEditor configuration parameter. It - * creates a new DHMTLEditor Config object (internal class in DHTMLEditor). - * - * XXX Method unmarshal is broken and currently does not work correctly. It - * does not process default values provided by using - * DHTMLEditor.Config.Standard (see parameter m_dhtmlEditorConfig above). - * May be a similiar problem as with ResourceParameter and default value, - * see patch provided by pbrucha. Best solution may be to remove this - * special parameter class and use a string parameter instead to directly - * create a DHTMLEditor.Config object. (pboy, 2010-09-02) - */ - private class DHTMLEditorConfigParameter extends StringParameter { - - public DHTMLEditorConfigParameter(final String name, - final int multiplicity, - final Object defaultObj) { - super(name, multiplicity, defaultObj); - } - - /** - * WARNING: Does not correctly process default values, see above! - * - * @param value - * @param errors - * @return - */ - @Override - protected Object unmarshal(String value, ErrorList errors) { - return DHTMLEditor.Config.valueOf(value); - } - - } - protected static HashMap extraXMLGenerators = new HashMap(); - - /** - * Add one ExtraXMLGenerator to the list. - */ - public static void registerExtraXMLGenerator(String type, - ExtraXMLGenerator gen) { - List gens = (List) extraXMLGenerators.get(type); - if (gens == null) { - gens = new LinkedList(); - extraXMLGenerators.put(type, gens); - } - // Store class reference so it can be recreated for each page. - // This requires a fix to all components using extraXMLGenerators, - // for example see the currently only one in core/cms: GreetingItemExtraXML - gens.add(gen.getClass()); // XXX assumes default ctor - } - - /** - * Get the iterator of ExtraXMLGenerators. - */ - public static Iterator getExtraXMLGeneratorsIterator() { - return extraXMLGenerators.entrySet().iterator(); - } - - public final boolean hideResetLifecycleLink() { - return ((Boolean) get(m_hideResetLifecycleLink)).booleanValue(); - } - - /** - * The relative weight given to the dcKeywords element within dublinCore - * element within cms:item element when ranking search results Only used by - * the interMedia query engine. - * - */ - public Integer getKeywordSearchWeight() { - return (Integer) get(m_keywordWeight); - } - - public final boolean limitToContentSection() { - return ((Boolean) get(m_limitToContentSection)).booleanValue(); - } - - /** - * The relative weight given to title element within cms:item element when - * ranking search results Only used by the interMedia query engine. - * - */ - public Integer getTitleSearchWeight() { - return (Integer) get(m_titleWeight); - } - - /** - * Whether to include INPATH operators to contains clause in intermedia - * search - * - * NB - if true, INDEX MUST BE CREATED WITH PATH_SECTION_GROUP - upgrade - * 6.5.0 - 6.5.1 - * - * @return - */ - public boolean scoreKeywordsAndTitle() { - return ((Boolean) get(m_scoreTitleAndKeywords)).booleanValue(); - } - - /** - * for the given content type, returns a collection of steps that are deemed - * irrelevant for the type. - * - * If no irrelevant steps, an empty set is returned. - * - * Steps are the names of the bebop step components that are used by the - * authoring kit wizard - * - * @param type - * @return - */ - public Collection getAssetStepsToSkip(ContentType type) { - s_log.debug("getting asset steps to skip for type " - + type.getClassName()); - if (s_skipAssetSteps == null) { - // populate static map once based on config parameter value - s_log.debug("loading skipsteps"); - s_skipAssetSteps = new HashMap(); - String[] skipSteps = (String[]) get(m_skipAssetSteps); - if (skipSteps != null) { - - s_log.debug(skipSteps.length + " entries in parameter"); - for (int i = 0; i < skipSteps.length; i++) { - String[] pair = StringUtils.split(skipSteps[i], ':'); - // 1st string is name of content type, 2nd string is name of asset step - s_log.debug("parameter read - type = " + pair[0] - + " - step = " + pair[1]); - Collection typeSteps = - (Collection) s_skipAssetSteps.get(pair[0]); - if (typeSteps == null) { - typeSteps = new HashSet(); - s_skipAssetSteps.put(pair[0], typeSteps); - - } - typeSteps.add(pair[1]); - - } - } - - } - Collection skipSteps = (Collection) s_skipAssetSteps.get(type. - getClassName()); - if (skipSteps == null) { - s_log.debug("no steps to skip"); - skipSteps = new HashSet(); - } - return skipSteps; - - } - - /** - * May be used by any content type creation form to decide whether to - * validate description field - * - */ - public boolean mandatoryDescriptions() { - return ((Boolean) get(m_mandatoryDescriptions)).booleanValue(); - } - - /** - * Used to decide whether lifecycles (and all asociated phases) should be - * deleted from the system when complete - * - * (Deleting lifecycle means that you lose a bit of historical information - * eg when was this item unpublished) - */ - public boolean deleteFinishedLifecycles() { - return ((Boolean) get(m_deleteLifecycleWhenComplete)).booleanValue(); - } - - /** - * Used to decide whether to delete old notification records for expiry - * notifications. - * - * If true, notifications and messages are deleted if the notification is - * successfully sent. Any send failures are retained - * - */ - public boolean deleteExpiryNotifications() { - return ((Boolean) get(m_deleteExpiryNotificationsWhenSent)).booleanValue(); - } - - /** - * Used to decide whether to delete old notification records for workflow - * notifications. - * - * If true, notifications and messages are deleted if the notification is - * successfully sent. Any send failures are retained - * - */ - public boolean deleteWorkflowNotifications() { - return ((Boolean) get(m_deleteWorkflowNotificationsWhenSent)). - booleanValue(); - } - - public String getCategoryTreeOrder() { - return (String) get(m_categoryTreeOrdering); - } - - /** - * I'am not sure for what this method is. I found it here when I tried - * figure out how add multiple parts to an ContentType, like - * ccm-cms-types-contact and the Multipart article do. I think this method - * should not be here because it is only needed by one specific contenttype. - * Because of this, I think that this method and the contact are violating - * many rules of modern software design. Jens Pelzetter, 2009-06-02. - * - * @return - */ - public boolean getHasContactsAuthoringStep() { - return ((Boolean) get(m_hasContactsAuthoringStep)).booleanValue(); - } - - public final boolean getHideTextAssetUploadFile() { - return ((Boolean) get(m_hideTextAssetUploadFile)).booleanValue(); - } - - /** - * Retrieve whether to allow creation of a new Use Context in category tab - * of content sections. "Use Context" is used to constitute a category - * hierarchy in core. It is superseded by the construct "Category Domain" - * in Terms (ccm-ldn-terms). - * Global parameter for all content sections. Default is false because all - * installation bundles use Terms. - * @return TRUE if creation is allowed, otherwise FALSE (default) - */ - public final boolean getAllowCategoryCreateUseContext() { - return ((Boolean) get(m_allowCategoryCreateUseContext)). - booleanValue(); - } - - public final boolean getAllowContentCreateInSectionListing() { - return ((Boolean) get(m_allowContentCreateInSectionListing)). - booleanValue(); - } - - /** - * Hide the (no longer used) legacy public site link in Workspace (content - * center) section listing, true by default. - */ - public final boolean getHideLegacyPublicSiteLink() { - return ((Boolean) get(m_hideLegacyPublicSiteLink)).booleanValue(); - } - - public String getItemSearchDefaultTab() { - return (String) get(m_itemSearchDefaultTab); - } - - public Integer getFolderBrowseListSize() { - return (Integer) get(m_folderBrowseListSize); - } - - public Integer getFolderAtoZShowLimit() { - return (Integer) get(m_folderAtoZShowLimit); - } - - public Boolean getUseOldStyleItemLifecycleItemPane() { - return (Boolean) get(m_useOldStyleItemLifecycleItemPane); - } - - public Boolean getThreadedPublishing() { - return (Boolean) get(m_threadPublishing); - } - - public String getPublicationFailureSender() { - return (String) get(m_publishingFailureSender); - } - - public String getPublicationFailureReceiver() { - return (String) get(m_publishingFailureReceiver); - } - - public Integer getImageBrowserThumbnailMaxWidth() { - return (Integer) get(m_imageBrowserThumbnailMaxWidth); - } - - public Integer getImageBrowserThumbnailMaxHeight() { - return (Integer) get(m_imageBrowserThumbnailMaxHeight); - } - - public Boolean getImageCacheEnabled() { - return (Boolean) get(m_imageCacheEnabled); - } - - public Boolean getImageCachePrefetchEnabled() { - return (Boolean) get(m_imageCachePrefetchEnabled); - } - - public Integer getImageCacheMaxSize() { - return (Integer) get(m_imageCacheMaxSize); - } - - public Integer getImageCacheMaxAge() { - return (Integer) get(m_imageCacheMaxAge); - } + register(m_itemSearchFlatBrowsePanePageSize); + + register(m_attachPersonOrgaUnitsStep); + register(m_personOrgaUnitsStepSortKey); + + register(m_enableXmlCache); + register(m_xmlCacheSize); + register(m_xmlCacheAge); + + loadInfo(); + } + + /** + * Retrieve path of the root folter for template folders. Path is + * relative to webapp root. + */ + public final String getTemplateRoot() { + return (String) get(m_templateRootPath); + } + + public final String getDefaultItemTemplatePath() { + return (String) get(m_defaultItemTemplatePath); + } + + public final String getDefaultFolderTemplatePath() { + return (String) get(m_defaultFolderTemplatePath); + } + + public final Class getDefaultItemResolverClass() { + return (Class) get(m_defaultItemResolverClass); + } + + public final Class getDefaultTemplateResolverClass() { + return (Class) get(m_defaultTemplateResolverClass); + } + + public final Class getCategoryAuthoringAddForm() { + return (Class) get(m_categoryAuthoringAddForm); + } + + public final InputStream getItemAdapters() { + // URL resource: protocol handler removal: START + // remove: + // try { + // return ((URL)get(m_itemAdapters)).openStream(); + // } catch (IOException ex) { + // throw new UncheckedWrapperException("Cannot read stream", ex); + // } + // ADD: + return (InputStream) get(m_itemAdapters); + } + + /** + * + * @deprecated use + * com.arsdigita.cms.ContentSection.getDefaultSection().getName() + * instead + */ + public final String getDefaultContentSection() { + // return (String) get(m_defaultSection); + return (String) ContentSection.getDefaultSection().getName(); + } + + public final boolean getUseStreamlinedCreation() { + return ((Boolean) get(m_useStreamlinedCreation)).booleanValue(); + } + + public final DHTMLEditor.Config getDHTMLEditorConfig() { + return (DHTMLEditor.Config) get(m_dhtmlEditorConfig); + } + + public final String[] getDHTMLEditorPlugins() { + return (String[]) get(m_dhtmlEditorPlugins); + } + + public final String[] getDHTMLEditorHiddenButtons() { + return (String[]) get(m_dhtmlEditorHiddenButtons); + } + + public final boolean getHideTemplatesTab() { + return ((Boolean) get(m_hideTemplatesTab)).booleanValue(); + } + + public final boolean getHideAdminTabs() { + return ((Boolean) get(m_hideAdminTabs)).booleanValue(); + } + + public final boolean getHideTimezone() { + return ((Boolean) get(m_hideTimezone)).booleanValue(); + } + + public final boolean getHideLaunchDate() { + return ((Boolean) get(m_hideLaunchDate)).booleanValue(); + } + + public final boolean getRequireLaunchDate() { + return ((Boolean) get(m_requireLaunchDate)).booleanValue(); + } + + public final boolean getHideUDCTUI() { + return ((Boolean) get(m_hideUDCTUI)).booleanValue(); + } + + public final boolean getHideFolderIndexCheckbox() { + return ((Boolean) get(m_hideFolderIndexCheckbox)).booleanValue(); + } + + public final int getDefaultNotificationTime() { + return ((Integer) get(m_defaultNotificationTime)).intValue(); + } + + public final String getPublishLifecycleListenerClass() { + return (String) get(m_publishLifecycleListenerClass); + } + + public final boolean getNotifyAuthorOnLifecycle() { + return ((Boolean) get(m_notifyAuthorOnLifecycle)).booleanValue(); + } + + public final boolean getSaveTextCleansWordTags() { + return ((Boolean) get(m_saveTextCleansWordTags)).booleanValue(); + } + + public final boolean getDisableFileAssetExtraction() { + return ((Boolean) get(m_disableFileAssetExtraction)).booleanValue(); + } + + public final boolean getDeleteWorkflowAfterPublication() { + return ((Boolean) get(m_deleteWorkflowAfterPublication)).booleanValue(); + } + + public final boolean getLinksOnlyInSameSubsite() { + return ((Boolean) get(m_linksOnlyInSameSubsite)).booleanValue(); + } + + public final int getSoonExpiredMonths() { + return ((Integer) get(m_soonExpiredTimespanMonths)).intValue(); + } + + public final int getSoonExpiredDays() { + return ((Integer) get(m_soonExpiredTimespanDays)).intValue(); + } + + public final boolean isUnpublishedNotFound() { + return ((Boolean) get(m_unpublishedNotFound)).booleanValue(); + } + + public final Class getCategoryAuthoringExtension() { + return (Class) get(m_categoryAuthoringExtension); + } + + // /////////////////////////////////////////// + // publishToFile package related configuration + // /////////////////////////////////////////// + // 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(); + } + + /** + * Fetch the file name contaning XML Mapping of the content center tabs + * to URLs + * + * @return String containig file name including path component. + */ + public String getContentCenterMap() { + return (String) get(m_contentCenterMap); + } + + /** + * Internal class representing a DHTMLEditor configuration parameter. It + * creates a new DHMTLEditor Config object (internal class in + * DHTMLEditor). + * + * XXX Method unmarshal is broken and currently does not work correctly. + * It does not process default values provided by using + * DHTMLEditor.Config.Standard (see parameter m_dhtmlEditorConfig + * above). May be a similiar problem as with ResourceParameter and + * default value, see patch provided by pbrucha. Best solution may be to + * remove this special parameter class and use a string parameter + * instead to directly create a DHTMLEditor.Config object. (pboy, + * 2010-09-02) + */ + private class DHTMLEditorConfigParameter extends StringParameter { + + public DHTMLEditorConfigParameter(final String name, + final int multiplicity, + final Object defaultObj) { + super(name, multiplicity, defaultObj); + } + + /** + * WARNING: Does not correctly process default values, see + * above! + * + * @param value + * @param errors + * @return + */ + @Override + protected Object unmarshal(String value, ErrorList errors) { + return DHTMLEditor.Config.valueOf(value); + } + } + protected static HashMap extraXMLGenerators = new HashMap(); + + /** + * Add one ExtraXMLGenerator to the list. + */ + public static void registerExtraXMLGenerator(String type, + ExtraXMLGenerator gen) { + List gens = (List) extraXMLGenerators.get(type); + if (gens == null) { + gens = new LinkedList(); + extraXMLGenerators.put(type, gens); + } + // Store class reference so it can be recreated for each page. + // This requires a fix to all components using extraXMLGenerators, + // for example see the currently only one in core/cms: GreetingItemExtraXML + gens.add(gen.getClass()); // XXX assumes default ctor + } + + /** + * Get the iterator of ExtraXMLGenerators. + */ + public static Iterator getExtraXMLGeneratorsIterator() { + return extraXMLGenerators.entrySet().iterator(); + } + + public final boolean hideResetLifecycleLink() { + return ((Boolean) get(m_hideResetLifecycleLink)).booleanValue(); + } + + /** + * The relative weight given to the dcKeywords element within dublinCore + * element within cms:item element when ranking search results Only used + * by the interMedia query engine. + * + */ + public Integer getKeywordSearchWeight() { + return (Integer) get(m_keywordWeight); + } + + public final boolean limitToContentSection() { + return ((Boolean) get(m_limitToContentSection)).booleanValue(); + } + + /** + * The relative weight given to title element within cms:item element + * when ranking search results Only used by the interMedia query engine. + * + */ + public Integer getTitleSearchWeight() { + return (Integer) get(m_titleWeight); + } + + /** + * Whether to include INPATH operators to contains clause in intermedia + * search + * + * NB - if true, INDEX MUST BE CREATED WITH PATH_SECTION_GROUP - upgrade + * 6.5.0 - 6.5.1 + * + * @return + */ + public boolean scoreKeywordsAndTitle() { + return ((Boolean) get(m_scoreTitleAndKeywords)).booleanValue(); + } + + /** + * for the given content type, returns a collection of steps that are + * deemed irrelevant for the type. + * + * If no irrelevant steps, an empty set is returned. + * + * Steps are the names of the bebop step components that are used by the + * authoring kit wizard + * + * @param type + * @return + */ + public Collection getAssetStepsToSkip(ContentType type) { + s_log.debug("getting asset steps to skip for type " + + type.getClassName()); + if (s_skipAssetSteps == null) { + // populate static map once based on config parameter value + s_log.debug("loading skipsteps"); + s_skipAssetSteps = new HashMap(); + String[] skipSteps = (String[]) get(m_skipAssetSteps); + if (skipSteps != null) { + + s_log.debug(skipSteps.length + " entries in parameter"); + for (int i = 0; i < skipSteps.length; i++) { + String[] pair = StringUtils.split(skipSteps[i], ':'); + // 1st string is name of content type, 2nd string is name of asset step + s_log.debug("parameter read - type = " + pair[0] + + " - step = " + pair[1]); + Collection typeSteps = + (Collection) s_skipAssetSteps.get(pair[0]); + if (typeSteps == null) { + typeSteps = new HashSet(); + s_skipAssetSteps.put(pair[0], typeSteps); + + } + typeSteps.add(pair[1]); + + } + } + + } + Collection skipSteps = (Collection) s_skipAssetSteps.get(type. + getClassName()); + if (skipSteps == null) { + s_log.debug("no steps to skip"); + skipSteps = new HashSet(); + } + return skipSteps; + + } + + /** + * May be used by any content type creation form to decide whether to + * validate description field + * + */ + public boolean mandatoryDescriptions() { + return ((Boolean) get(m_mandatoryDescriptions)).booleanValue(); + } + + /** + * Used to decide whether lifecycles (and all asociated phases) should + * be deleted from the system when complete + * + * (Deleting lifecycle means that you lose a bit of historical + * information eg when was this item unpublished) + */ + public boolean deleteFinishedLifecycles() { + return ((Boolean) get(m_deleteLifecycleWhenComplete)).booleanValue(); + } + + /** + * Used to decide whether to delete old notification records for expiry + * notifications. + * + * If true, notifications and messages are deleted if the notification + * is successfully sent. Any send failures are retained + * + */ + public boolean deleteExpiryNotifications() { + return ((Boolean) get(m_deleteExpiryNotificationsWhenSent)).booleanValue(); + } + + /** + * Used to decide whether to delete old notification records for + * workflow notifications. + * + * If true, notifications and messages are deleted if the notification + * is successfully sent. Any send failures are retained + * + */ + public boolean deleteWorkflowNotifications() { + return ((Boolean) get(m_deleteWorkflowNotificationsWhenSent)). + booleanValue(); + } + + public String getCategoryTreeOrder() { + return (String) get(m_categoryTreeOrdering); + } + + /** + * I'am not sure for what this method is. I found it here when I tried + * figure out how add multiple parts to an ContentType, like + * ccm-cms-types-contact and the Multipart article do. I think this + * method should not be here because it is only needed by one specific + * contenttype. Because of this, I think that this method and the + * contact are violating many rules of modern software design. Jens + * Pelzetter, 2009-06-02. + * + * @return + */ + public boolean getHasContactsAuthoringStep() { + return ((Boolean) get(m_hasContactsAuthoringStep)).booleanValue(); + } + + public final boolean getHideTextAssetUploadFile() { + return ((Boolean) get(m_hideTextAssetUploadFile)).booleanValue(); + } + + /** + * Retrieve whether to allow creation of a new Use Context in category + * tab of content sections. "Use Context" is used to constitute a + * category hierarchy in core. It is superseded by the construct + * "Category Domain" in Terms (ccm-ldn-terms). Global parameter for all + * content sections. Default is false because all installation bundles + * use Terms. + * + * @return TRUE if creation is allowed, otherwise FALSE (default) + */ + public final boolean getAllowCategoryCreateUseContext() { + return ((Boolean) get(m_allowCategoryCreateUseContext)). + booleanValue(); + } + + public final boolean getAllowContentCreateInSectionListing() { + return ((Boolean) get(m_allowContentCreateInSectionListing)). + booleanValue(); + } + + /** + * Hide the (no longer used) legacy public site link in Workspace + * (content center) section listing, true by default. + */ + public final boolean getHideLegacyPublicSiteLink() { + return ((Boolean) get(m_hideLegacyPublicSiteLink)).booleanValue(); + } + + public String getItemSearchDefaultTab() { + return (String) get(m_itemSearchDefaultTab); + } + + public Integer getFolderBrowseListSize() { + return (Integer) get(m_folderBrowseListSize); + } + + public Integer getFolderAtoZShowLimit() { + return (Integer) get(m_folderAtoZShowLimit); + } + + public Boolean getUseOldStyleItemLifecycleItemPane() { + return (Boolean) get(m_useOldStyleItemLifecycleItemPane); + } + + public Boolean getThreadedPublishing() { + return (Boolean) get(m_threadPublishing); + } + + public String getPublicationFailureSender() { + return (String) get(m_publishingFailureSender); + } + + public String getPublicationFailureReceiver() { + return (String) get(m_publishingFailureReceiver); + } + + public Integer getImageBrowserThumbnailMaxWidth() { + return (Integer) get(m_imageBrowserThumbnailMaxWidth); + } + + public Integer getImageBrowserThumbnailMaxHeight() { + return (Integer) get(m_imageBrowserThumbnailMaxHeight); + } + + public int getImageBrowserCaptionSize() { + return Math.min(((Integer) get(m_imageBrowserCaptionSize)).intValue(), 100); + } + + public int getImageBrowserDescriptionSize() { + return Math.min(((Integer) get(m_imageBrowserDescriptionSize)).intValue(), 400); + } + + public int getImageBrowserTitleSize() { + return Math.min(((Integer) get(m_imageBrowserTitleSize)).intValue(), 200); + } + + public Boolean getImageCacheEnabled() { + return (Boolean) get(m_imageCacheEnabled); + } + + public Boolean getImageCachePrefetchEnabled() { + return (Boolean) get(m_imageCachePrefetchEnabled); + } + + public Integer getImageCacheMaxSize() { + return (Integer) get(m_imageCacheMaxSize); + } + + public Integer getImageCacheMaxAge() { + return (Integer) get(m_imageCacheMaxAge); + } // public Boolean getItemSearchFlatBrowsePaneEnable() { // return (Boolean) get(m_itemSearchFlatBrowsePaneEnable); // } - public Integer getItemSearchFlatBrowsePanePageSize() { - return (Integer) get(m_itemSearchFlatBrowsePanePageSize); - } + public Integer getItemSearchFlatBrowsePanePageSize() { + return (Integer) get(m_itemSearchFlatBrowsePanePageSize); + } - public Boolean getAttachPersonOrgaUnitsStep() { - return (Boolean) get(m_attachPersonOrgaUnitsStep); - } - - public Integer getPersonOrgaUnitsStepSortKey() { - return (Integer) get(m_personOrgaUnitsStepSortKey); - } - - public Boolean getEnableXmlCache() { - return (Boolean) get(m_enableXmlCache); - } - - public Integer getXmlCacheSize() { - return (Integer) get(m_xmlCacheSize); - } - - public Integer getXmlCacheAge() { - return (Integer) get(m_xmlCacheAge); - } + public Boolean getAttachPersonOrgaUnitsStep() { + return (Boolean) get(m_attachPersonOrgaUnitsStep); + } + public Integer getPersonOrgaUnitsStepSortKey() { + return (Integer) get(m_personOrgaUnitsStepSortKey); + } + + public Boolean getEnableXmlCache() { + return (Boolean) get(m_enableXmlCache); + } + + public Integer getXmlCacheSize() { + return (Integer) get(m_xmlCacheSize); + } + + public Integer getXmlCacheAge() { + return (Integer) get(m_xmlCacheAge); + } } diff --git a/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties b/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties index ee4f5d5c5..ee2706438 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties @@ -295,6 +295,22 @@ com.arsdigita.cms.image_browser.thumbnail_max_height.purpose=Set the maximum hei com.arsdigita.cms.image_browser.thumbnail_max_height.example=150 com.arsdigita.cms.image_browser.thumbnail_max_height.format=[integer] + +com.arsdigita.cms.image_browser.caption_size.title = Max size for image caption (must be < 100) +com.arsdigita.cms.image_browser.caption_size.purpose = Set the ValidationListener for image caption to a smaller size than the db field +com.arsdigita.cms.image_browser.caption_size.example = 100 +com.arsdigita.cms.image_browser.caption_size.format = [Integer] + +com.arsdigita.cms.image_browser.description_size.title = Max size for image description (must be < 400) +com.arsdigita.cms.image_browser.description_size.purpose = Set the ValidationListener for image description to a smaller size than the db field +com.arsdigita.cms.image_browser.description_size.example = 400 +com.arsdigita.cms.image_browser.description_size.format = [Integer] + +com.arsdigita.cms.image_browser.title_size.title = Max size for image title (must be < 200) +com.arsdigita.cms.image_browser.title_size.purpose = Set the ValidationListener for image title to a smaller size than the db field +com.arsdigita.cms.image_browser.title_size.example = 200 +com.arsdigita.cms.image_browser.title_size.format = [Integer] + com.arsdigita.cms.image_cache.enable.title=Enable server-side image cache com.arsdigita.cms.image_cache.enable.purpose=Enable server-side coherent image cache, which will speed up server-side image resizing com.arsdigita.cms.image_cache.enable.example=true|false @@ -338,4 +354,4 @@ com.arsdigita.cms.xml.cache.size.format=[integer] com.arsdigita.cms.xml.cache.age.title=Maximum age of an entry in the XML cache com.arsdigita.cms.xml.cache.age.purpose=Maximum age of an entry in the XML cache com.arsdigita.cms.xml.cache.age.example=60*60*24 -com.arsdigita.cms.xml.cache.age.format=[integer] \ No newline at end of file +com.arsdigita.cms.xml.cache.age.format=[integer] diff --git a/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java b/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java index 53d91e2a2..47862f9db 100644 --- a/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/ImageLibraryComponent.java @@ -18,6 +18,7 @@ import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.BigDecimalParameter; import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.cms.CMS; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ReusableImageAsset; @@ -101,12 +102,12 @@ public class ImageLibraryComponent extends SimpleContainer m_form.add(new Label(GlobalizationUtil .globalize("cms.contentasset.image.ui.caption"))); m_caption.addValidationListener(new NotNullValidationListener()); - m_caption.setSize(40); + m_caption.setSize(CMS.getConfig().getImageBrowserCaptionSize()); m_form.add(m_caption); m_description.addValidationListener(new NotNullValidationListener()); - m_description.setSize(40); + m_description.setSize(CMS.getConfig().getImageBrowserCaptionSize()); m_title.addValidationListener(new NotNullValidationListener()); - m_title.setSize(40); + m_title.setSize(CMS.getConfig().getImageBrowserCaptionSize()); // Only show the title and description fields where these have // been explicitly requested. /*