diff --git a/ccm-core/src/com/arsdigita/installer/LoadSQLPlusScript.java b/ccm-core/src/com/arsdigita/installer/LoadSQLPlusScript.java index 220f2b589..7efcf5f66 100755 --- a/ccm-core/src/com/arsdigita/installer/LoadSQLPlusScript.java +++ b/ccm-core/src/com/arsdigita/installer/LoadSQLPlusScript.java @@ -29,9 +29,12 @@ import java.sql.SQLException; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; +/** + * + * @version $Id: LoadSQLPlusScript.java 287 2005-02-22 00:29:02Z sskracic $ + */ public class LoadSQLPlusScript { - public static final String versionId = "$Id: LoadSQLPlusScript.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2004/08/16 18:10:38 $"; private static final Logger s_log = Logger.getLogger(LoadSQLPlusScript.class); diff --git a/ccm-core/src/com/arsdigita/installer/SQLLoader.java b/ccm-core/src/com/arsdigita/installer/SQLLoader.java index 4315dd429..22aaa3da2 100755 --- a/ccm-core/src/com/arsdigita/installer/SQLLoader.java +++ b/ccm-core/src/com/arsdigita/installer/SQLLoader.java @@ -34,13 +34,11 @@ import org.apache.log4j.Logger; * SQLLoader * * @author Rafael H. Schloming <rhs@mit.edu> - * @version $Revision: #9 $ $Date: 2004/08/16 $ + * @version $Id: SQLLoader.java 1839 2009-03-05 07:50:52Z terry $ **/ public abstract class SQLLoader { - public final static String versionId = "$Id: SQLLoader.java 1839 2009-03-05 07:50:52Z terry $ by $Author: terry $, $DateTime: 2004/08/16 18:10:38 $"; - private static final Logger s_log = Logger.getLogger(SQLLoader.class); private Connection m_conn; diff --git a/ccm-core/src/com/arsdigita/kernel/User.java b/ccm-core/src/com/arsdigita/kernel/User.java index eb92e92fb..ad87d5997 100755 --- a/ccm-core/src/com/arsdigita/kernel/User.java +++ b/ccm-core/src/com/arsdigita/kernel/User.java @@ -41,11 +41,10 @@ import com.arsdigita.persistence.metadata.ObjectType; * Represents a user. * * @author Phong Nguyen - * @version 1.0 + * @version $Id: User.java 1586 2007-05-31 13:05:10Z chrisgilbert23 $ **/ public class User extends Party { - public static final String versionId = "$Id: User.java 1586 2007-05-31 13:05:10Z chrisgilbert23 $ by $Author: chrisgilbert23 $, $DateTime: 2004/08/16 18:10:38 $"; private PersonName m_name; private boolean m_external; diff --git a/ccm-iaw-aplaws/CHANGE_LOG b/ccm-iaw-aplaws/CHANGE_LOG new file mode 100644 index 000000000..6ef21170d --- /dev/null +++ b/ccm-iaw-aplaws/CHANGE_LOG @@ -0,0 +1,6 @@ +2007-08-06: +./ccm-shp-aplaws/src/WEB-INF/content-types/c...types/aplaws-mparticle-item.jsp + + + + + + + + + + + + + + + + + + + + + + + + Service module which tailors the aplaws software to a specific purpose + and/or a specific site. + - setting up a categorization / terms system (cf. load.java) + - integrate custom spezific jsp's + - setting up custom specific configuration parameters (cf. the bundles) + - overwrite default classes by custom specific ones (cf. src/.../aplaws) + - provide a default theme, which meets accessibility requirements and + overwrites the default, table based design (cf. web/.../themes) + + This modules tailors APLAWS for use at the "Institut fuer Arbeit und + Wirtschaft (IAW), University of Bremen, Germany. + + APLAWS is a collaboration and content management system which is based upon + the Red Hat Web Application Framework, which is a platform for writing + database-backed web applications in Java. + + diff --git a/ccm-iaw-aplaws/bundles/devel/AUTHORS b/ccm-iaw-aplaws/bundles/devel/AUTHORS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/bundles/devel/ChangeLog b/ccm-iaw-aplaws/bundles/devel/ChangeLog new file mode 100644 index 000000000..786623bdb --- /dev/null +++ b/ccm-iaw-aplaws/bundles/devel/ChangeLog @@ -0,0 +1,9 @@ +* Thu Sep 22 2005 Alan Pevec +- Build all APLAWS+ bundles from the common set of templates. + +* Mon Feb 21 2005 Alan Pevec +- Requires applications. + +* Mon Jan 26 2004 Daniel Berrange +- Initial build. + diff --git a/ccm-iaw-aplaws/bundles/devel/NEWS b/ccm-iaw-aplaws/bundles/devel/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/bundles/devel/README b/ccm-iaw-aplaws/bundles/devel/README new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/bundles/devel/bundle.in b/ccm-iaw-aplaws/bundles/devel/bundle.in new file mode 100644 index 000000000..5e469a349 --- /dev/null +++ b/ccm-iaw-aplaws/bundles/devel/bundle.in @@ -0,0 +1,4 @@ +BUNDLE_NAME=aplaws-plus-zes-devel +BUNDLE_PRETTY_NAME="APLAWS+ ZeS Devel Bundle" +VERSION=1.0.5devel +RELEASE=1 diff --git a/ccm-iaw-aplaws/bundles/devel/cfg/applications.cfg b/ccm-iaw-aplaws/bundles/devel/cfg/applications.cfg new file mode 100644 index 000000000..9664bbf53 --- /dev/null +++ b/ccm-iaw-aplaws/bundles/devel/cfg/applications.cfg @@ -0,0 +1,80 @@ +# Main apps +ccm-core +ccm-cms + +# Content assets +ccm-cms-assets-fileattachment +ccm-cms-assets-notes +ccm-cms-assets-relatedlink + +# Content types +# -- ccm-cms-types-address +# -- ccm-cms-types-agenda +ccm-cms-types-article +ccm-cms-types-baseAddress +ccm-cms-types-baseContact +ccm-cms-types-bookmark +# -- ccm-cms-types-contact +# -- ccm-cms-types-esdservice +ccm-cms-types-event +# -- faqitem wird bei IAW nicht gebraucht +# -- ccm-cms-types-faqitem +ccm-cms-types-filestorageitem +ccm-cms-types-formitem +ccm-cms-types-formsectionitem +ccm-cms-types-genericorganization +# -- glossaryitem wird bei IAW nicht gebraucht +# -- ccm-cms-types-glossaryitem +# -- ccm-cms-types-htmlform +# -- ccm-cms-types-inlinesite +# -- ccm-cms-types-job +# -- ccm-cms-types-legalnotice +# -- ccm-cms-types-minutes +# -- ccm-cms-types-motditem +ccm-cms-types-mparticle +ccm-cms-types-newsitem +# -- ccm-cms-types-organization +# -- ccm-cms-types-pressrelease +# -- ccm-cms-types-service +ccm-cms-types-organizationalunit +ccm-cms-types-person +ccm-cms-types-siteproxy +ccm-cms-types-researchnetwork +# -- xmlfeed wird ebenfalls nicht gebraucht +# -- ccm-cms-types-xmlfeed + + +# Applications +# ------------ +# -- ccm-auth-http +# -- ccm-bookmarks +# -- ccm-docmngr ## temp., produces errors in build +# -- ccm-formbuilder-pdf +ccm-forum +ccm-simplesurvey +ccm-user-preferences +# -- ccm-weblog +# -- ccm-webpage + +# ldn extensions +# -------------- +# -- ccm-ldn-aplaws +# -- ccm-ldn-atoz +# -- ccm-ldn-dublin +# -- ccm-ldn-exporter +# -- ccm-ldn-freeform +ccm-ldn-image-step +# -- ccm-ldn-importer +ccm-ldn-navigation +ccm-ldn-portal +ccm-ldn-rss +ccm-ldn-search +ccm-ldn-shortcuts +ccm-ldn-subsite +ccm-ldn-terms +ccm-ldn-theme +ccm-ldn-util + +# zes extensions +ccm-iaw-aplaws + diff --git a/ccm-iaw-aplaws/bundles/devel/cfg/integration.properties b/ccm-iaw-aplaws/bundles/devel/cfg/integration.properties new file mode 100644 index 000000000..5ce03ab47 --- /dev/null +++ b/ccm-iaw-aplaws/bundles/devel/cfg/integration.properties @@ -0,0 +1,114 @@ +waf.bebop.base_page=com.arsdigita.aplaws.ui.SimplePage +; dhtml editor to use (system wide) +waf.bebop.dhtml_editor=Xinha +waf.bebop.dhtml_editor_src=/assets/xinha/XinhaLoader.js + +waf.categorization.show_internal_name=true +waf.categorization.supported_languages=de,en + +waf.dispatcher.default_expiry=3600 +; +waf.kernel.data_permission_check_enabled=false +waf.kernel.primary_user_identifier=email +; if you activate screen_name, forum loader doesn't work. +; waf.kernel.primary_user_identifier=screen_name + +; security.properties: +waf.auto_registration_on=false +waf.pagemap.root=navigation/ +waf.pagemap.workspace=navigation/ +waf.pagemap.login_redirect=content/content-center-redirect.jsp + +; Searches for localized style sheet (among others) +waf.templating.stylesheet_resolver=com.arsdigita.templating.PatternStylesheetResolver +waf.templating.stylesheet_paths=/WEB-INF/resources/aplaws-stylesheet-paths.txt + +; Configures the xml processing +waf.xml.xsl_transformer=xalan +waf.xml.activate_full_date_formatter=true + +com.arsdigita.cms.category_authoring_add_form=com.arsdigita.aplaws.ui.ItemCategoryPicker + +com.arsdigita.cms.default_item_template_path=/default/aplaws-item.jsp +com.arsdigita.cms.default_folder_template_path=/default/aplaws-folder.jsp +com.arsdigita.cms.default_template_resolver_class=com.arsdigita.london.subsite.dispatcher.SubsiteItemTemplateResolver + +; Configure dhtml editor for use in cms content-center +com.arsdigita.cms.dhtml_editor_config=XinhaConfig,/assets/xinha/XinhaConfig.js +com.arsdigita.cms.dhtml_editor_hidden_buttons= +; com.arsdigita.cms.dhtml_editor_plugins=TableOperations,CSS +com.arsdigita.cms.dhtml_editor_plugins= + +com.arsdigita.cms.disable_item_pfs=true + +com.arsdigita.cms.hide_admin_tabs=true +com.arsdigita.cms.hide_folder_index_checkbox=true +com.arsdigita.cms.hide_launch_date=true +com.arsdigita.cms.hide_templates_tab=true +com.arsdigita.cms.hide_timezone=true +com.arsdigita.cms.hide_udct_ui=true + +com.arsdigita.cms.use_section_categories=false +com.arsdigita.cms.use_streamlined_creation=true + + +com.arsdigita.cms.contenttypes.event.hide_cost=true +com.arsdigita.cms.contenttypes.event.hide_date_description=false +com.arsdigita.cms.contenttypes.event.hide_event_type=true +com.arsdigita.cms.contenttypes.event.hide_link_to_map=true +com.arsdigita.cms.contenttypes.event.hide_main_contributor=true +com.arsdigita.cms.contenttypes.event.use_html_date_description=false + + +com.arsdigita.cms.contenttypes.newsitem.hide_homepage=true + +com.arsdigita.cms.contenttypes.mparticle.template=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp + +com.arsdigita.cms.contenttypes.siteproxy.defaulttemplate=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp + +; Forum application +com.arsdigita.forum.show_new_tabs=true +com.arsdigita.forum.use_wysiwyg_editor=true +com.arsdigita.forum.allow_quick_finish=true +com.arsdigita.forum.disable_page_caching=true + +; atoz currently not in use +; com.arsdigita.london.atoz.root_category_picker=com.arsdigita.london.terms.ui.RootCategoryPicker + +; com.arsdigita.london.navigation.category_menu_show_grand_children=false +com.arsdigita.london.navigation.category_menu_show_grand_children_min=2 +com.arsdigita.london.navigation.category_menu_show_grand_children=adaptive +com.arsdigita.london.navigation.category_menu_show_grand_children_limit=1 +com.arsdigita.london.navigation.category_menu_show_grand_children_max=4 +com.arsdigita.london.navigation.category_menu_show_nephews=false +com.arsdigita.london.navigation.default_cat_root_path=/navigation/ +com.arsdigita.london.navigation.default_template=/packages/navigation/templates/iaw-default.jsp + +com.arsdigita.london.search.show_sponsored_links=true + +com.arsdigita.london.subsite.root_category_picker=com.arsdigita.london.terms.ui.RootCategoryPicker + +com.arsdigita.london.theme.default_theme_context= +com.arsdigita.london.theme.default_theme_manifest=ccm-ldn-theme.web.mf +com.arsdigita.london.theme.default_theme_path=__ccm__/themes/aplaws-generic +com.arsdigita.london.theme.file_extensions=bmp gif jpeg jpg png css js png xsl xml + + +; ============================================================================================= +; devel specific configurations +waf.runtime.jdbc_url=jdbc\:postgresql\://localhost/iaw?user\=iaw&password\=iaw24 +waf.runtime.jdbc_pool_size=80 + +waf.web.server=localhost\:8080 +; waf.web.server=iaw.barkhof.uni-bremen.de\:80 + +waf.admin.email=webmaster@iaw.uni-bremen.de +waf.admin.name.given=IAW +waf.admin.name.family=Administrator +waf.admin.password=nge2015 +waf.admin.password.question=12345 +waf.admin.password.answer=6 + +; waf.debug=true +; waf.bebop.fancy_xsl_errors=true + diff --git a/ccm-iaw-aplaws/bundles/devel/cfg/web.xml b/ccm-iaw-aplaws/bundles/devel/cfg/web.xml new file mode 100644 index 000000000..f2a92540c --- /dev/null +++ b/ccm-iaw-aplaws/bundles/devel/cfg/web.xml @@ -0,0 +1,561 @@ + + + + + CCM ZeS + Content and Collaboration Management + + + + log4j-conf-file + WEB-INF/conf/log4j.properties + + + + + + + + shortcuts + com.arsdigita.london.shortcuts.ShortcutFilter + + + + subsite + com.arsdigita.london.subsite.SubsiteFilter + + + + + + subsite + /ccm/* + + + + + shortcuts + /* + + + + + com.arsdigita.web.CCMApplicationContextListener + + + + + + reg + com.arsdigita.web.ContextRegistrationServlet + + uri + / + + 1 + + + + legacy-dispatcher + com.arsdigita.sitenode.SiteNodeDispatcher + 3 + + + + ccm-dispatcher + com.arsdigita.web.DispatcherServlet + + fallback-servlet + legacy-dispatcher + + 2 + + + + legacy-adapter + com.arsdigita.web.LegacyAdapterServlet + + + + cache-manager + com.arsdigita.caching.CacheServlet + + + + db-test + com.arsdigita.web.monitoring.DBTestServlet + + + + versioning-log + com.arsdigita.versioning.VersioningServlet + + + + oid-redirect + com.arsdigita.web.OIDRedirectServlet + + + + resource-resolver + com.arsdigita.web.ResourceServlet + + + + + + content-section + com.arsdigita.cms.ContentSectionServlet + + + + content-type-xsl + com.arsdigita.cms.dispatcher.ContentTypeXSLServlet + + + + content-item-xsl + com.arsdigita.cms.dispatcher.ContentItemXSLServlet + + + + template-xsl + com.arsdigita.cms.dispatcher.TemplateXSLServlet + + + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + + + + + + + + + forum-main + com.arsdigita.forum.ForumServlet + + + + + portal-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-portal + + + + + navigation-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-navigation + + + file-resolver + com.arsdigita.london.navigation.NavigationFileResolver + + + + + portlet-type-xsl + com.arsdigita.dispatcher.PortletTypeXSLServlet + + + + + rss-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-rss + + + file-resolver + com.arsdigita.london.rss.RSSFileResolver + + + + + + + worker + com.arsdigita.london.search.SearchWorkerServlet + 4 + + + + search-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-search + + + + + AxisServlet + Apache-Axis Servlet + + org.apache.axis.transport.http.AxisServlet + + + + + + + shortcuts-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-shortcuts + + + + + + subsite-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-subsite + + + + + + + terms-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-terms + + + + + + + theme-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-theme + + + + + ThemeDownload + com.arsdigita.london.theme.dispatcher.ThemeDownloadServlet + + + + ThemePreviewServlet + Servlet to allow admins to preview look/feel + + com.arsdigita.london.theme.dispatcher.InternalThemePrefixerServlet + + + prefix + /theme + + + + + + + + + + + forum-main + /forum-main/main/* + + + + + portlet-type-xsl + /__ccm__/servlet/portlet-type/* + + + + portal-files + /ccm-ldn-portal/files/* + + + + navigation-files + /ccm-ldn-navigation/files/* + + + + + rss-files + /ccm-ldn-rss/files/* + + + + + search-files + /ccm-ldn-search/files/* + + + + AxisServlet + /services/* + + + + + + shortcuts-files + /ccm-ldn-shortcuts/files/* + + + + + subsite-files + /ccm-ldn-subsite/files/* + + + + + + terms-files + /ccm-ldn-terms/files/* + + + + + + theme-files + /theme-files/* + + + + ThemeDownload + /theme-files/download/* + + + + ThemePreviewServlet + /theme/* + + + + + + + + reg + /__ccm__/null/reg/* + + + + ccm-dispatcher + /ccm/* + + + + legacy-adapter + /__ccm__/servlet/legacy-adapter/* + + + + cache-manager + /expireCache/* + + + + db-test + /dbtest + + + + versioning-log + /versioning/* + + + + oid-redirect + /redirect/* + + + + resource-resolver + /resource/* + + + + + + content-section + /__ccm__/servlet/content-section/* + + + + content-item-xsl + /__ccm__/servlet/content-item/* + + + + content-type-xsl + /__ccm__/servlet/content-type/* + + + + template-xsl + /__ccm__/servlet/template/* + + + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + + + + + com.arsdigita.dispatcher.AccessDeniedException + /error/access-denied.jsp + + + + com.arsdigita.dispatcher.ObjectNotFoundException + /error/object-not-found.jsp + + + + com.arsdigita.kernel.permissions.PermissionException + /error/permission-denied.jsp + + + + com.arsdigita.persistence.DbNotAvailableException + /error/db-not-available.jsp + + + + com.arsdigita.db.DbNotAvailableException + /error/db-not-available.jsp + + + + java.lang.Exception + /error/general.jsp + + + + java.lang.Error + /error/general.jsp + + + + + + /WEB-INF/bebop-show.tld + /WEB-INF/bebop-show.tld + + + + /WEB-INF/bebop-define.tld + /WEB-INF/bebop-define.tld + + + diff --git a/ccm-iaw-aplaws/bundles/standard/AUTHORS b/ccm-iaw-aplaws/bundles/standard/AUTHORS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/bundles/standard/ChangeLog b/ccm-iaw-aplaws/bundles/standard/ChangeLog new file mode 100644 index 000000000..786623bdb --- /dev/null +++ b/ccm-iaw-aplaws/bundles/standard/ChangeLog @@ -0,0 +1,9 @@ +* Thu Sep 22 2005 Alan Pevec +- Build all APLAWS+ bundles from the common set of templates. + +* Mon Feb 21 2005 Alan Pevec +- Requires applications. + +* Mon Jan 26 2004 Daniel Berrange +- Initial build. + diff --git a/ccm-iaw-aplaws/bundles/standard/NEWS b/ccm-iaw-aplaws/bundles/standard/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/bundles/standard/README b/ccm-iaw-aplaws/bundles/standard/README new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/bundles/standard/bundle.in b/ccm-iaw-aplaws/bundles/standard/bundle.in new file mode 100644 index 000000000..0bed0eda7 --- /dev/null +++ b/ccm-iaw-aplaws/bundles/standard/bundle.in @@ -0,0 +1,4 @@ +BUNDLE_NAME=aplaws-plus-shp +BUNDLE_PRETTY_NAME="APLAWS+ SHP Standard Bundle" +VERSION=1.0.5devel +RELEASE=1 diff --git a/ccm-iaw-aplaws/doc/app-schemas/Makefile b/ccm-iaw-aplaws/doc/app-schemas/Makefile new file mode 100644 index 000000000..4938e5409 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/Makefile @@ -0,0 +1,10 @@ + +schemas = $(wildcard *.xsd) + +all: app-schemas.html + +app-schemas.html: app-schemas.htmc $(schemas) $(xmldocs) + htmltoc.pl $< > $@ + +clean: + rm -f app-schemas.html *.bak *~ diff --git a/ccm-iaw-aplaws/doc/app-schemas/app-schemas.htmc b/ccm-iaw-aplaws/doc/app-schemas/app-schemas.htmc new file mode 100644 index 000000000..84fc5003c --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/app-schemas.htmc @@ -0,0 +1,141 @@ + + + +APLAWS-II: Application Schemas + + + + + +

APLAWS-II: Application Schemas

+ +

+Final 1 November 2003 +

+ + + + + +

+This document provides the XML Schemas for the principle public facing +applications in APLAWS. The schemas describe the XML that is generated +by UI components prior to being fed into the XSLT transformer. Since the +precise combination of components that can be present in a particular +JSP page can vary from install to install, these schemas don't document +an entire page, but rather, each individual component that can be plugged +into a page. +

+ +

+The official specification for XML schemas can be found at the +W3C site. For a gentler introduction, the O'Reilly +XML Schema book is recommended reading. +

+ + + +

+Category navigation components may be present on any +page in the site, since they provide things such as +the list of top level categories, breadcrumb trail, +etc. +

+ +
+
+
+ + + + +

+The directory page in APLAWS, commonly found at /content/directory.jsp +contains a summary of top two levels of navigation categories. +

+ +
+
+
+ + + +

+The services page in APLAWS, commonly found at /content/services.jsp, +is little more than a placeholder for designers to hook on to. +

+ +
+
+
+ + + +

+The sitemap page in APLAWS, commonly found at /content/sitemap.jsp +is little more than a placeholder for designers to hook on to. +

+ +
+
+
+ + + +

+The portals schema describes the generic framework for browsing +workspaces & portals. Each portlet type will have its own schema +to describe what XML it generates. +

+ +
+
+
+ + + +

+The schema for forums only describes the components that are used to +present information about messages. It does not cover the Bebop forms +and administrative UI components. +

+ +
+
+
+ + + +

+The schema for search describes the XML document used to represent +the result list and the filter metadata which can be used to build +a query form in HTML. +

+ +
+
+
+ + + + +

+The A-Z application is a framework for providing a list of +topics and items paginated by letter. +

+ +
+
+
+ + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/app-schemas.html b/ccm-iaw-aplaws/doc/app-schemas/app-schemas.html new file mode 100644 index 000000000..0b17098ba --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/app-schemas.html @@ -0,0 +1,1056 @@ + + + +APLAWS-II: Application Schemas + + + + + +

APLAWS-II: Application Schemas

+ +

+Final 1 November 2003 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1Introduction
2Navigation
3Directory
4Services
5Site Map
6Portals
7Forums
8Search
9A-Z
+ +

1 Introduction

+ +

+This document provides the XML Schemas for the principle public facing +applications in APLAWS. The schemas describe the XML that is generated +by UI components prior to being fed into the XSLT transformer. Since the +precise combination of components that can be present in a particular +JSP page can vary from install to install, these schemas don't document +an entire page, but rather, each individual component that can be plugged +into a page. +

+ +

+The official specification for XML schemas can be found at the +W3C site. For a gentler introduction, the O'Reilly +XML Schema book is recommended reading. +

+ +

2 Navigation

+ +

+Category navigation components may be present on any +page in the site, since they provide things such as +the list of top level categories, breadcrumb trail, +etc. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns="http://xmlns.redhat.com/atoz/1.0"
+  elementFormDefault="qualified" 
+  targetNamespace="http://xmlns.redhat.com/atoz/1.0">
+
+  <xs:element name="categoryRoot">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs the root navigation category
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.Root</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="category" minOccurs="1" maxOccurs="1"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+  <xs:element name="categoryTopLevel">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs the first level navigation categories (ie immediate
+        children of the root).
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.TopLevel</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+  <xs:element name="categorySiblings">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs siblings of the category category (ie, those categories
+        at the same level as the current category.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.Siblings</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+  <xs:element name="categoryChildren">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs immediate children of the current category
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.Children</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+  <xs:element name="categoryPath">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs the categories on a path between the root navigation
+        category (exclusive) and the current category (inclusive).
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.Path</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="category" minOccurs="1" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+  <xs:element name="categoryMenu">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs the immediate children of all categories between the 
+        root navigation category & the current category (both inclusive).
+        This is intended for showing a contextually-expanded tree to
+        the current category.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.Menu</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+  <xs:element name="categoryHierarchy">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Outputs all categories, starting from the root navigation category
+        and recursing.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.category.Hierarchy</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+ 
+
+  <xs:complexType name="category">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        Represents the information for a single category. When
+        generating links to the category page, the url attribute
+        is the preferred method. The id attribute is merely
+        present for informational purposes. 
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:attribute name="id" type="xs:integer"/>
+    <xs:attribute name="title" type="xs:string"/>
+    <xs:attribute name="description" type="xs:string" use="optional"/>
+    <xs:attribute name="url" type="xs:anyURI"/>
+  </xs:complexType>
+
+  <xs:complexType name="nestedCategory">
+    <xs:extension base="category">
+      <xs:sequence>
+        <xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+    </xs:extension>
+  </xs:complexType
+</xs:schema>
+ + +

3 Directory

+ +

+The directory page in APLAWS, commonly found at /content/directory.jsp +contains a summary of top two levels of navigation categories. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns="http://www.arsdigita.com/cms/1.0"
+  elementFormDefault="qualified" 
+  targetNamespace="http://www.arsdigita.com/cms/1.0">
+
+  <xs:element name="directory">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        The directory component displays a summary of the first two
+        levels of the navigation category heirarchy. The categoryID
+        attribute can be used to link to 
+        $context-prefix/navigation/category.jsp?categoryID=XXX
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.navigation.ui.DirectoryComponent</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="directoryL1Category" minOccurs="0" maxOccurs="unbounded">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="directoryL2Category" minOccurs="0" maxOccurs="unbounded">
+                <xs:complexType>
+                  <xs:attribute name="title" type="xs:string">
+                  <xs:attribute name="description" type="xs:string" use="optional">
+                  <xs:attribute name="categoryID" type="xs:integer">
+                </xs:complexType>
+              </xs:element>
+
+              <xs:element name="directoryItem" minOccurs="0" maxOccurs="3">
+                <xs:annotation>
+                  <xs:documentation xml:lang="en">
+                    The first two items are instances of the 'Fixed Promo'
+                    content type in the current category. The third item
+                    is a 'Fixed Promo' item from the subcategory.
+                  </xs:documentation>
+                </xs:annotation>
+
+                <xs:complexType>
+                  <xs:attribute name="title" type="xs:string">
+                  <xs:attribute name="path" type="xs:anyURI">
+                </xs:complexType>
+              </xs:element>
+            </xs:sequence>
+
+            <xs:attribute name="title" type="xs:string">
+            <xs:attribute name="description" type="xs:string" use="optional">
+            <xs:attribute name="categoryID" type="xs:integer">
+          </xs:complexType>
+        </xs:element>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
+
+ +

4 Services

+ +

+The services page in APLAWS, commonly found at /content/services.jsp, +is little more than a placeholder for designers to hook on to. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns="http://www.arsdigita.com/aplaws/1.0"
+  elementFormDefault="qualified" 
+  targetNamespace="http://www.arsdigita.com/aplaws/1.0">
+
+  <xs:element name="services">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        The services component is just a place holder for hooking onto
+        in XSLT. At this time it contains no content.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.aplaws.ui.ServicesComponent</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+  </xs:element>
+</xs:schema>
+
+ +

5 Site Map

+ +

+The sitemap page in APLAWS, commonly found at /content/sitemap.jsp +is little more than a placeholder for designers to hook on to. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns="http://www.arsdigita.com/aplaws/1.0"
+  elementFormDefault="qualified" 
+  targetNamespace="http://www.arsdigita.com/aplaws/1.0">
+
+  <xs:element name="sitemap">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        The sitemap component is just a place holder for hooking onto
+        in XSLT. At this time it contains no content.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.aplaws.ui.SitemapComponent</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+  </xs:element>
+</xs:schema>
+
+ +

6 Portals

+ +

+The portals schema describes the generic framework for browsing +workspaces & portals. Each portlet type will have its own schema +to describe what XML it generates. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+  xmlns="http://www.uk.arsdigita.com/portal/1.0"
+  xmlns:portlet="http://www.uk.arsdigita.com/portlet/1.0"
+  xmlns:debug="http://xmlns.redhat.com/waf/bebop/debug/1.0"
+  xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
+  elementFormDefault="qualified" 
+  targetNamespace="http://www.uk.arsdigita.com/portal/1.0">
+
+
+  <xs:element name="workspace">
+    <xs:sequence>
+      <xs:element name="workspaceDetails" type="workspaceDetails">
+      <xs:element name="portalList" type="portalList">
+      <xs:element name="bebop:portal" type="portalDisplay">
+    </xs:sequence>
+  </xs:element>
+
+
+  <xs:complexType name="workspaceDetails">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        This outputs metadata about the workspace along with a 
+        summary of permissions.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <debug:class>com.arsdigita.london.portal.ui.WorkspaceDetails</debug:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="objectType" minOccurs="1" maxOccurs="1"/>
+      <xs:element name="title" minOccurs="1" maxOccurs="1"/>
+      <xs:element name="description" minOccurs="0" maxOccurs="1"/>
+      <xs:element name="primaryURL" minOccurs="1" maxOccurs="1"/>
+    </xs:sequence>
+
+    <xs:attribute name="oid" type="xs:string"/>
+    <xs:attribute name="canEdit" type="xs:boolean"/>
+    <xs:attribute name="canAdmin" type="xs:boolean"/>
+  </xs:complexType>
+
+
+
+  <xs:complexType name="portalList">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        This component generates a summary list of all portals
+        in a workspace. One use of this is to generate a set
+        of tabbed panes for switching between portals.
+      </xs:documentation>
+
+      <xs:appinfo>
+        <debug:class>com.arsdigita.london.portal.ui.PortalList</debug:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="portalDetails" minOccurs="0" maxOccurs="unbounded">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="objectType" minOccurs="1" maxOccurs="1"/>
+            <xs:element name="title" minOccurs="1" maxOccurs="1"/>
+            <xs:element name="description" minOccurs="0" maxOccurs="1"/>
+          </xs:sequence>
+
+          <xs:attribute name="oid" type="xs:string"/>
+          <xs:attribute name="isSelected" type="xs:boolean"/>
+
+          <xs:attribute name="selectAction" type="xs:url"/>
+          <xs:attribute name="deleteAction" type="xs:url" use="optional"/>
+          <xs:attribute name="moveLeftAction" type="xs:url" use="optional"/>
+          <xs:attribute name="moveRightAction" type="xs:url" use="optional"/>
+        </xs:complexType>
+      </xs:element>
+      <xs:element name="bebop:form"/>
+    </xs:sequence>
+  </xs:complexType>
+
+
+
+  <xs:complexType name="portalDisplay">
+    <xs:annotation>
+      <xs:appinfo>
+        <debug:class>com.arsdigita.london.portal.ui.PersistentPortal</debug:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="" minOccurs="" maxOccurs="">
+    </xs:sequence>
+  </xs:complexType>
+
+</xs:schema>
+
+ +

7 Forums

+ +

+The schema for forums only describes the components that are used to +present information about messages. It does not cover the Bebop forms +and administrative UI components. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
+  xmlns="http://xmlns.redhat.com/forums/1.0" 
+  elementFormDefault="qualified" 
+  targetNamespace="http://xmlns.redhat.com/forums/1.0">
+
+  <xs:element name="forum" type="forumComponent">
+  
+  <xs:complexType name="forumComponent">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.forum.ui.ForumComponent</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="forumMode" minOccurs="0" maxOccurs="unbounded" type="forumMode"/>
+
+      <xs:choice>
+        <xs:choice>
+          <xs:annotation>
+            <xs:appinfo>
+              <gen:class>com.arsdigita.forum.ui.ForumUserView</gen:class>
+            </xs:appinfo>
+          </xs:annotation>
+
+          <xs:sequence>
+            <xs:element name="forumOptions" type="forumOptions"/>
+            <xs:element name="topicSelector" type="topicSelector"/>
+            <xs:element name="threadList" type="threadList"/>
+          </xs:sequence>
+
+          <xs:element name="bebop:form" type="bebopForm">
+            <xs:annotation>
+              <xs:appinfo>
+                <gen:class>com.arsdigita.forum.ui.NewPostForm</gen:class>
+              </xs:appinfo>
+            </xs:annotation>       
+          </xs:element>
+        </xs:choice>
+
+        <xs:choice>
+          <xs:annotation>
+            <xs:appinfo>
+              <gen:class>com.arsdigita.forum.ui.CategoryView</gen:class>
+            </xs:appinfo>
+          </xs:annotation>
+
+          <xs:sequence>
+            <xs:element name="topicOptions" type="topicOptions"/>
+            <xs:element name="topicList" type="topicList"/>
+          </xs:sequence>
+
+          <xs:element name="bebop:form" type="bebopForm">
+            <xs:annotation>
+              <xs:appinfo>
+                <gen:class>com.arsdigita.forum.ui.CategoryAddForm</gen:class>
+              </xs:appinfo>
+            </xs:annotation>       
+          </xs:element>
+        </xs:choice>
+
+        <xs:sequence>
+          <xs:annotation>
+            <xs:appinfo>
+              <gen:class>com.arsdigita.forum.ui.ForumAlertsView</gen:class>
+            </xs:appinfo>
+          </xs:annotation>
+
+          <xs:element name="forumAlerts" type="forumAlerts"/>
+          <xs:element name="threadAlerts" type="threadAlerts"/>
+        </xs:sequence>
+
+        <xs:sequence>
+          <xs:annotation>
+            <xs:appinfo>
+              <gen:class>com.arsdigita.forum.ui.admin.ModerationView</gen:class>
+            </xs:appinfo>
+          </xs:annotation>
+
+          <xs:element name="bebop:form" type="bebopForm"/>
+        </xs:sequence>
+      </xs:choice>
+    </xs:sequence>
+  </xs:complexType>
+
+ 
+  <xs:complexType name="threadComponent">
+    <xs:choice>
+      <xs:element name="bebop:form" type="bebopForm">
+        <xs:annotation>
+          <xs:appinfo>
+            <gen:class>com.arsdigita.forum.ui.EditPostForm</gen:class>
+          </xs:appinfo>
+        </xs:annotation>       
+      </xs:element>
+      <xs:element name="bebop:form" type="bebopForm">
+        <xs:annotation>
+          <xs:appinfo>
+            <gen:class>com.arsdigita.forum.ui.ReplyToPostForm</gen:class>
+          </xs:appinfo>
+        </xs:annotation>       
+      </xs:element>
+      <xs:element name="bebop:form" type="bebopForm">
+        <xs:annotation>
+          <xs:appinfo>
+            <gen:class>com.arsdigita.forum.ui.RejectionForm</gen:class>
+          </xs:appinfo>
+        </xs:annotation>       
+      </xs:element>
+      <xs:sequence>
+        <xs:element name="threadOptions" type="threadOptions"/>
+        <xs:element name="threadDisplay" type="threadDisplay"/>
+      </xs:element>
+    </xs:choice>
+  </xs:complexType>
+
+  <xs:complexType name="forumMode">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        A forum mode refers to one of the alternate
+        views onto the forum application. The url
+        attributes provides the link for switching
+        into the mode.
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:attribute name="mode" type="xs:string"/>
+    <xs:attribute name="url" type="xs:anyURI"/>
+    <xs:attribute name="selected" type="xs:boolean"/>
+  </xs:complexType>
+
+  <xs:complexType name="forumOptions">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        A set of links relating to operations 
+        in the thread list, such as posting
+        a new message.
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="bebop:link" type="bebopLink"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="topicSelector">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.forum.ui.TopicSelector</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="topic">
+        <xs:sequence>
+           XXX DOR
+        </xs:sequence>
+      </xs:element>
+    <xs:sequence>
+
+    <xs:attribute name="baseURL" type="xs:anyURI"/>
+    <xs:attribute name="param" type="xs:string"/>
+    <xs:attribute name="anyTopicID" type="xs:integer"/>
+    <xs:attribute name="noTopicID" type="xs:integer"/>
+  </xs:complexType>
+
+
+  <xs:complexType name="threadList">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.forum.ui.ThreadList</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="paginator" type="paginator"/>
+      <xs:element name="thread" minOccurs="0" maxOccurs="unbounded">
+        <xs:sequence>
+           XXX DOR
+        </xs:sequence>
+        <xs:attribute name="url" type="xs:anyURI"/>
+      </xs:element>
+    <xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="topicOptions">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        A set of links relating to operations 
+        in the topic list, such as creating
+        a new topic.
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="bebop:link" type="bebopLink"/>
+    </xs:sequence>
+  </xs:complexType>
+
+
+  <xs:complexType name="topicList">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.forum.ui.TopicList</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="topicSummary" minOccurs="0" maxOccurs="unbounded">
+        <xs:sequence>
+          <xs:element name="id"/>
+          <xs:element name="name"/>
+          <xs:element name="latestPost"/>
+          <xs:element name="numThreads"/>
+        </xs:sequence>
+      </xs:element>
+      <xs:element name="noTopicSummary">
+        <xs:sequence>
+          <xs:element name="latestPost"/>
+          <xs:element name="numThreads"/>
+        </xs:sequence>
+        <xs:attribute name="url" type="xs:anyURI"/>
+      </xs:element>
+    <xs:sequence>
+
+    <xs:attribute name="param" type="xs:string"/>
+    <xs:attribute name="baseURL" type="xs:anyURI"/>
+  </xs:complexType>
+
+  <xs:complexType name="threadAlertList">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.forum.ui.ThreadAlertList</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="threadAlert" minOccurs="0" maxOccurs="unbounded">
+        <xs:sequence>
+           XXX DOR
+        </xs:sequence>
+        <xs:attribute name="url" type="xs:anyURI"/>
+      </xs:element>
+    <xs:sequence>    
+  </xs:complexType>
+
+  <xs:complexType name="forumAlerts">
+    <xs:element name="bebop:form" type="bebopForm"/>
+  </xs:complexType>
+
+  <xs:complexType name="threadAlerts">
+    <xs:element name="bebop:form" type="bebopForm"/>
+  </xs:complexType>
+
+  <xs:complexType name="threadOptions">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        A set of links relating to operations 
+        in the thread list, such as alert
+        subscribe
+      </xs:documentation>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="bebop:link" type="bebopLink"/>
+    </xs:sequence>
+  </xs:complexType>
+
+
+  <xs:complexType name="threadDisplay">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.forum.ui.ThreadList</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="paginator" type="paginator"/>
+      <xs:element name="message" minOccurs="0" maxOccurs="unbounded">
+        <xs:sequence>
+           XXX DOR
+        </xs:sequence>
+        <xs:attribute name="approveURL" type="xs:anyURI" use="optional"/>
+        <xs:attribute name="rejectURL" type="xs:anyURI" use="optional"/>
+        <xs:attribute name="deleteURL" type="xs:anyURI" use="optional"/>
+        <xs:attribute name="editURL" type="xs:anyURI" use="optional"/>
+        <xs:attribute name="replyURL" type="xs:anyURI"/>
+      </xs:element>
+    <xs:sequence>
+  </xs:complexType>
+
+
+  <xs:complexType name="paginator">
+    <xs:attribute name="param" type="xs:string"/>
+    <xs:attribute name="baseURL" type="xs:anyURI"/>
+    <xs:attribute name="pageNumber" type="xs:integer"/>
+    <xs:attribute name="pageCount" type="xs:integer"/>
+    <xs:attribute name="pageSize" type="xs:integer"/>
+    <xs:attribute name="objectBegin" type="xs:long"/>
+    <xs:attribute name="objectEnd" type="xs:long"/>
+    <xs:attribute name="objectCount" type="xs:long"/>
+  </xs:complexType>
+
+  <xs:complexType name="bebopForm">
+  </xs:complexType>
+
+  <xs:complexType name="bebopLink">
+  </xs:complexType>
+
+</xs:schema>
+
+ +

8 Search

+ +

+The schema for search describes the XML document used to represent +the result list and the filter metadata which can be used to build +a query form in HTML. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
+  xmlns="http://xmlns.redhat.com/core/search/1.0" 
+  elementFormDefault="qualified" 
+  targetNamespace="http://xmlns.redhat.com/core/search/1.0">
+
+  <xs:element name="query" type="query"/>
+  <xs:element name="results" type="results"/>
+
+  <xs:complexType name="results">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.search.ui.ResultsPane</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="paginator">
+        <xs:attribute name="param" type="xs:string"/>
+        <xs:attribute name="baseURL" type="xs:anyURI"/>
+        <xs:attribute name="pageNumber" type="xs:integer"/>
+        <xs:attribute name="pageCount" type="xs:integer"/>
+        <xs:attribute name="pageSize" type="xs:integer"/>
+        <xs:attribute name="objectBegin" type="xs:long"/>
+        <xs:attribute name="objectEnd" type="xs:long"/>
+        <xs:attribute name="objectCount" type="xs:long"/>
+      </xs:element>
+
+      <xs:element name="documents">
+        <xs:sequence>
+          <xs:element name="object" minOccurs="0" maxOccurs="unbounded">
+            <xs:attribute name="oid" type="xs:string"/>
+            <xs:attribute name="url" type="xs:string"/>
+            <xs:attribute name="score" type="xs:string"/>
+            <xs:attribute name="title" type="xs:string"/>
+            <xs:attribute name="summary" type="xs:string" use="optional"/>
+            <xs:attribute name="locale" type="xs:string"/>
+            <xs:attribute name="creationDate" type="xs:string" use="optional"/>
+            <xs:attribute name="creationParty" type="xs:string" use="optional"/>
+            <xs:attribute name="lastModifiedDate" type="xs:string" use="optional"/>
+            <xs:attribute name="lastModifiedParty" type="xs:string" use="optional"/>
+          </xs:element>
+        </xs:sequence>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="query">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.search.ui.BaseQueryComponent</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:sequence>
+      <xs:element name="terms">
+        <xs:sequence>
+          <xs:element name="error" minOccurs="0" maxOccurs="unbounded">
+        </xs:sequence>
+
+        <xs:attribute name="param" type="xs:string"/>
+        <xs:attribute name="value" type="xs:string"/>
+      </xs:element>
+      <xs:element name="filter" minOccurs="0" maxOccurs="unbounded">
+        <xs:sequence>
+          <xs:element name="error" minOccurs="0" maxOccurs="unbounded">
+
+          <xs:choice>
+            <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="objectType" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
+          </xs:choice>
+        </xs:sequence>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="category">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.search.ui.filters.CategoryFilterWidget</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:attribute name="oid" type="xs:string"/>
+    <xs:attribute name="title" type="xs:string"/>
+    <xs:attribute name="description" type="xs:string"/>
+    <xs:attribute name="isSelected" type="xs:string" use="optional"/>
+  </xs:complexType>
+
+  <xs:complexType name="objectType">
+    <xs:annotation>
+      <xs:appinfo>
+        <gen:class>com.arsdigita.search.ui.filters.ObjectTypeFilterWidget</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:attribute name="name" type="xs:string"/>
+    <xs:attribute name="isSelected" type="xs:string" use="optional"/>
+  </xs:complexType>
+
+</xs:schema>
+
+ + +

9 A-Z

+ +

+The A-Z application is a framework for providing a list of +topics and items paginated by letter. +

+ +
+<xs:schema 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
+  xmlns="http://xmlns.redhat.com/atoz/1.0"
+  elementFormDefault="qualified" 
+  targetNamespace="http://xmlns.redhat.com/atoz/1.0">
+
+  <xs:element name="atoz">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        The AtoZ provides a pluggable letter paginated
+        listing of topics and optionally items with a
+        topic
+      </xs:documentation>
+
+      <xs:appinfo>
+        <gen:class>com.arsdigita.london.atoz.ui.AtoZPane</gen:class>
+      </xs:appinfo>
+    </xs:annotation>
+
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="letter" minOccurs="26" maxOccurs="26">
+          <xs:complexType>
+            <xs:attribute name="isSelected" type="xs:boolean"/>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="provider" type="provider" minOccurs="0" maxOccurs="unbounded"/>
+      </sequence>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:complexType name="entryList">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        This type is a base for an element containing
+        child entries, either topics or items.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:choice>
+        <xs:element name="atomicEntry" type="atomicEntry"/>
+        <xs:element name="compoundEntry" type="compoundEntry"/>
+      </xs:choice>.
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="provider">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        A provider is a module which generates A-Z entries.
+        A category provider may generate a list of items
+        corresponding to navigation categories.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:extension base="entryList">
+      <xs:attribute name="title" type="xs:string"/>
+      <xs:attribute name="description" type="xs:string" use="optional"/>
+    </xs:extension>
+  </xs:complexType>
+
+  <xs:complexType name="atomicEntry">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        An atomic entry is a leaf-node in the A-Z, representing
+        a single item (or page of content) in the A-Z. As such
+        it has a URL pointing to the location of the item.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:attribute name="title" type="xs:string"/>
+    <xs:attribute name="description" type="xs:string" use="optional"/>
+    <xs:attribute name="url" type="xs:anyURI"/>
+  </xs:complexType>
+
+  <xs:complexType name="compoundEntry">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+        A compound entry can be thought of as a topic, 
+        with a title and description. It will contain
+        a number of child entries, representing either
+        sub-topics or items.
+      </xs:documentation>
+    </xs:annotation>
+    <xs:extension base="entryList">
+      <xs:attribute name="title" type="xs:string"/>
+      <xs:attribute name="description" type="xs:string" use="optional"/>
+    </xs:extension>
+  </xs:complexType>
+
+</xs:schema>
+
+ +
+

+Written by Daniel Berrange (berrange@redhat.com) +Generated by htmltoc.pl.
+

+ + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/atoz.xsd b/ccm-iaw-aplaws/doc/app-schemas/atoz.xsd new file mode 100644 index 000000000..dabaa3ee6 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/atoz.xsd @@ -0,0 +1,90 @@ + + + + + + The AtoZ provides a pluggable letter paginated + listing of topics and optionally items with a + topic + + + + com.arsdigita.london.atoz.ui.AtoZPane + + + + + + + + + + + + + + + + + + + This type is a base for an element containing + child entries, either topics or items. + + + + + + + . + + + + + + + A provider is a module which generates A-Z entries. + A category provider may generate a list of items + corresponding to navigation categories. + + + + + + + + + + + + An atomic entry is a leaf-node in the A-Z, representing + a single item (or page of content) in the A-Z. As such + it has a URL pointing to the location of the item. + + + + + + + + + + + A compound entry can be thought of as a topic, + with a title and description. It will contain + a number of child entries, representing either + sub-topics or items. + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/directory.xsd b/ccm-iaw-aplaws/doc/app-schemas/directory.xsd new file mode 100644 index 000000000..cd97da858 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/directory.xsd @@ -0,0 +1,59 @@ + + + + + + The directory component displays a summary of the first two + levels of the navigation category heirarchy. The categoryID + attribute can be used to link to + $context-prefix/navigation/category.jsp?categoryID=XXX + + + + com.arsdigita.london.navigation.ui.DirectoryComponent + + + + + + + + + + + + + + + + + + + + The first two items are instances of the 'Fixed Promo' + content type in the current category. The third item + is a 'Fixed Promo' item from the subcategory. + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/forum.xsd b/ccm-iaw-aplaws/doc/app-schemas/forum.xsd new file mode 100644 index 000000000..d061917cb --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/forum.xsd @@ -0,0 +1,312 @@ + + + + + + + + com.arsdigita.forum.ui.ForumComponent + + + + + + + + + + com.arsdigita.forum.ui.ForumUserView + + + + + + + + + + + + + com.arsdigita.forum.ui.NewPostForm + + + + + + + + + com.arsdigita.forum.ui.CategoryView + + + + + + + + + + + + com.arsdigita.forum.ui.CategoryAddForm + + + + + + + + + com.arsdigita.forum.ui.ForumAlertsView + + + + + + + + + + + com.arsdigita.forum.ui.admin.ModerationView + + + + + + + + + + + + + + + + com.arsdigita.forum.ui.EditPostForm + + + + + + + com.arsdigita.forum.ui.ReplyToPostForm + + + + + + + com.arsdigita.forum.ui.RejectionForm + + + + + + + + + + + + + + A forum mode refers to one of the alternate + views onto the forum application. The url + attributes provides the link for switching + into the mode. + + + + + + + + + + + + A set of links relating to operations + in the thread list, such as posting + a new message. + + + + + + + + + + + + com.arsdigita.forum.ui.TopicSelector + + + + + + + XXX DOR + + + + + + + + + + + + + + + com.arsdigita.forum.ui.ThreadList + + + + + + + + XXX DOR + + + + + + + + + + A set of links relating to operations + in the topic list, such as creating + a new topic. + + + + + + + + + + + + + com.arsdigita.forum.ui.TopicList + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.arsdigita.forum.ui.ThreadAlertList + + + + + + + XXX DOR + + + + + + + + + + + + + + + + + + A set of links relating to operations + in the thread list, such as alert + subscribe + + + + + + + + + + + + + com.arsdigita.forum.ui.ThreadList + + + + + + + + XXX DOR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/navigation-types.xsd b/ccm-iaw-aplaws/doc/app-schemas/navigation-types.xsd new file mode 100644 index 000000000..aaff137d6 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/navigation-types.xsd @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/navigation.xsd b/ccm-iaw-aplaws/doc/app-schemas/navigation.xsd new file mode 100644 index 000000000..117751e63 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/navigation.xsd @@ -0,0 +1,165 @@ + + + + + + Outputs the root navigation category + + + + com.arsdigita.london.navigation.ui.category.Root + + + + + + + + + + + + + + Outputs the first level navigation categories (ie immediate + children of the root). + + + + com.arsdigita.london.navigation.ui.category.TopLevel + + + + + + + + + + + + + + Outputs siblings of the category category (ie, those categories + at the same level as the current category. + + + + com.arsdigita.london.navigation.ui.category.Siblings + + + + + + + + + + + + + + Outputs immediate children of the current category + + + + com.arsdigita.london.navigation.ui.category.Children + + + + + + + + + + + + + + Outputs the categories on a path between the root navigation + category (exclusive) and the current category (inclusive). + + + + com.arsdigita.london.navigation.ui.category.Path + + + + + + + + + + + + + + Outputs the immediate children of all categories between the + root navigation category & the current category (both inclusive). + This is intended for showing a contextually-expanded tree to + the current category. + + + + com.arsdigita.london.navigation.ui.category.Menu + + + + + + + + + + + + + + Outputs all categories, starting from the root navigation category + and recursing. + + + + com.arsdigita.london.navigation.ui.category.Hierarchy + + + + + + + + + + + + + + + Represents the information for a single category. When + generating links to the category page, the url attribute + is the preferred method. The id attribute is merely + present for informational purposes. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-iaw-aplaws/doc/app-schemas/portal.xsd b/ccm-iaw-aplaws/doc/app-schemas/portal.xsd new file mode 100644 index 000000000..14fd26470 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/portal.xsd @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + This outputs metadata about the workspace along with a + summary of permissions. + + + + com.arsdigita.london.portal.ui.WorkspaceDetails + + + + + + + + + + + + + + + + + + + + + This component generates a summary list of all portals + in a workspace. One use of this is to generate a set + of tabbed panes for switching between portals. + + + + com.arsdigita.london.portal.ui.PortalList + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.arsdigita.london.portal.ui.PersistentPortal + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/search.xsd b/ccm-iaw-aplaws/doc/app-schemas/search.xsd new file mode 100644 index 000000000..85614ba33 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/search.xsd @@ -0,0 +1,103 @@ + + + + + + + + + com.arsdigita.search.ui.ResultsPane + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.arsdigita.search.ui.BaseQueryComponent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.arsdigita.search.ui.filters.CategoryFilterWidget + + + + + + + + + + + + + com.arsdigita.search.ui.filters.ObjectTypeFilterWidget + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/services.xsd b/ccm-iaw-aplaws/doc/app-schemas/services.xsd new file mode 100644 index 000000000..4d59a6746 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/services.xsd @@ -0,0 +1,20 @@ + + + + + + The services component is just a place holder for hooking onto + in XSLT. At this time it contains no content. + + + + com.arsdigita.aplaws.ui.ServicesComponent + + + + diff --git a/ccm-iaw-aplaws/doc/app-schemas/sitemap.xsd b/ccm-iaw-aplaws/doc/app-schemas/sitemap.xsd new file mode 100644 index 000000000..e7f801b99 --- /dev/null +++ b/ccm-iaw-aplaws/doc/app-schemas/sitemap.xsd @@ -0,0 +1,20 @@ + + + + + + The sitemap component is just a place holder for hooking onto + in XSLT. At this time it contains no content. + + + + com.arsdigita.aplaws.ui.SitemapComponent + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Address.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Address.xsd new file mode 100644 index 000000000..e5af2bc74 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Address.xsd @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Agenda.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Agenda.xsd new file mode 100644 index 000000000..355f8b11f --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Agenda.xsd @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Article.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Article.xsd new file mode 100644 index 000000000..ad762da2c --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Article.xsd @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/ArticleSection.xsd b/ccm-iaw-aplaws/doc/ct-schemas/ArticleSection.xsd new file mode 100644 index 000000000..56f2014ef --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/ArticleSection.xsd @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Event.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Event.xsd new file mode 100644 index 000000000..a4923b848 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Event.xsd @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/FAQItem.xsd b/ccm-iaw-aplaws/doc/ct-schemas/FAQItem.xsd new file mode 100644 index 000000000..6d6499084 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/FAQItem.xsd @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/FileStorageItem.xsd b/ccm-iaw-aplaws/doc/ct-schemas/FileStorageItem.xsd new file mode 100644 index 000000000..22f806859 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/FileStorageItem.xsd @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/GlossaryItem.xsd b/ccm-iaw-aplaws/doc/ct-schemas/GlossaryItem.xsd new file mode 100644 index 000000000..1f92f3700 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/GlossaryItem.xsd @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Job.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Job.xsd new file mode 100644 index 000000000..29541d388 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Job.xsd @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/LegalNotice.xsd b/ccm-iaw-aplaws/doc/ct-schemas/LegalNotice.xsd new file mode 100644 index 000000000..19a1cac9d --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/LegalNotice.xsd @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/MOTDItem.xsd b/ccm-iaw-aplaws/doc/ct-schemas/MOTDItem.xsd new file mode 100644 index 000000000..05a88582b --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/MOTDItem.xsd @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Makefile b/ccm-iaw-aplaws/doc/ct-schemas/Makefile new file mode 100644 index 000000000..8b0bcb2e6 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Makefile @@ -0,0 +1,36 @@ + +SERVER = http://dev.london.redhat.com:9068/ + +types = Address \ + Agenda \ + Article \ + Event \ + FileStorageItem \ + Job \ + LegalNotice \ + Minutes \ + MultiPartArticle \ + ArticleSection \ + NewsItem \ + PressRelease \ + Service \ + FAQItem \ + GlossaryItem \ + MOTDItem \ + Organization + + +schemas = $(types:%=%.xsd) + +all: ct-schemas.html + +ct-schemas.html: ct-schemas.htmc $(schemas) + htmltoc.pl $< > $@ + +%.xsd: + wget -O $@.raw '$(SERVER)aplaws/schema.jsp?type=com.arsdigita.cms.contenttypes.$(@:%.xsd=%)&context=com.arsdigita.cms.dispatcher.SimpleXMLGenerator&wrapAttr=true&wrapRoot=false' + xmllint -format $@.raw > $@ + rm $@.raw + +clean: + rm -f $(schemas) ct-schemas.html *.bak *~ diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Minutes.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Minutes.xsd new file mode 100644 index 000000000..1068b35b2 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Minutes.xsd @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/MultiPartArticle.xsd b/ccm-iaw-aplaws/doc/ct-schemas/MultiPartArticle.xsd new file mode 100644 index 000000000..95650031e --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/MultiPartArticle.xsd @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/NewsItem.xsd b/ccm-iaw-aplaws/doc/ct-schemas/NewsItem.xsd new file mode 100644 index 000000000..437248f76 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/NewsItem.xsd @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Organization.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Organization.xsd new file mode 100644 index 000000000..9b99acb5f --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Organization.xsd @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/PressRelease.xsd b/ccm-iaw-aplaws/doc/ct-schemas/PressRelease.xsd new file mode 100644 index 000000000..20f972ce5 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/PressRelease.xsd @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/Service.xsd b/ccm-iaw-aplaws/doc/ct-schemas/Service.xsd new file mode 100644 index 000000000..b16038ff2 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/Service.xsd @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/ct-schemas.htmc b/ccm-iaw-aplaws/doc/ct-schemas/ct-schemas.htmc new file mode 100644 index 000000000..82e1778f7 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/ct-schemas.htmc @@ -0,0 +1,145 @@ + + + +APLAWS-II: Content Type Schemas + + + + + +

APLAWS-II: Content Type Schemas

+ +

+Final 1 November 2003 +

+ + + + + +

+This document provides XML Schemas for the principle APLAWS +content types. These schemas correspond to the XML generated +for presenting content items for viewing. Other uses of XML +wrt to content types (ie search indexing, import / export) may +use different XML schemas. In addition to the basic content type +attributes, these schemas also describe the XML generated for links, +file attachments and dublin core metadata that are associated with +any content type. +

+ +

+The official specification for XML schemas can be found at the +W3C site. For a gentler introduction, the O'Reilly +XML Schema book is recommended reading. +

+ + + +

+The schemas that follow represent the XML generated by the +com.arsdigita.cms.dispatcher.ContentPanel bebop component. +This is the standard component used on the CMS item.jsp template. +

+ + + +
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + + + + + + + diff --git a/ccm-iaw-aplaws/doc/ct-schemas/ct-schemas.html b/ccm-iaw-aplaws/doc/ct-schemas/ct-schemas.html new file mode 100644 index 000000000..899aae214 --- /dev/null +++ b/ccm-iaw-aplaws/doc/ct-schemas/ct-schemas.html @@ -0,0 +1,1381 @@ + + + +APLAWS-II: Content Type Schemas + + + + + +

APLAWS-II: Content Type Schemas

+ +

+Draft 1 August 2003 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1Introduction
2Content Types
2.1....Address
2.2....Agenda
2.3....Article
2.4....Event
2.5....File Storage Item
2.6....Job
2.7....Legal Notice
2.8....Minutes
2.9....Multi-part Article
2.10....News Item
2.11....Press Release
2.12....Service
+ +

1 Introduction

+ +

+This document provides XML Schemas for the principle APLAWS +content types. These schemas correspond to the XML generated +for presenting content items for viewing. Other uses of XML +wrt to content types (ie search indexing, import / export) may +use different XML schemas. In addition to the basic content type +attributes, these schemas also describe the XML generated for links, +file attachments and dublin core metadata that are associated with +any content type. +

+ +

+The official specification for XML schemas can be found at the +W3C site. For a gentler introduction, the O'Reilly +XML Schema book is recommended reading. +

+ +

2 Content Types

+ +

2.1 Address

+ +
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinAddress" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinAddress">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="address" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="postalCode" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="phone" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="mobile" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="fax" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="email" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="notes" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="uri" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.2 Agenda

+ +
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinAgenda" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinAgenda">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="agendaDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="location" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="attendees" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="subjectItems" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="contactInfo" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="summary" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="creationDate" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.3 Article

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinArticle" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinArticle">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="imageCaptions">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="caption" type="xs:string"></xs:element>
+                     <xs:element name="imageAsset">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="mimeType">
+                                 <xs:complexType>
+                                    <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                                    <xs:sequence>
+                                       <xs:element name="mimeType" type="xs:string"></xs:element>
+                                       <xs:element name="label" type="xs:string"></xs:element>
+                                       <xs:element name="fileExtension" type="xs:string"></xs:element>
+                                    </xs:sequence>
+                                 </xs:complexType>
+                              </xs:element>
+                              <xs:element minOccurs="0" name="width" type="xs:double"></xs:element>
+                              <xs:element minOccurs="0" name="height" type="xs:double"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="lead" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.4 Event

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinEvent" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinEvent">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="startDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="endDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="startTime" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="endTime" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="eventDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="location" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="lead" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="mainContributor" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="eventType" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="mapLink" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="cost" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.5 File Storage Item

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinFileStorageItem" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinFileStorageItem">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element name="description" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="file">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.6 Job

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinJob" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinJob">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="grade" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="closingDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="salary" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="body" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="refNumber" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="department" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="jobDescription" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="personSpecification" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="contactDetails" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.7 Legal Notice

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinLegalNotice" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinLegalNotice">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="governmentUID" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.8 Minutes

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinMinutes" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinMinutes">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="minuteNumber" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="actionItem" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="attendees" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="descriptionOfMinutes" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.9 Multi-part Article

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinMultiPartArticle" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinMultiPartArticle">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="summary" type="xs:string"></xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="sections">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="rank" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="text">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                     <xs:element minOccurs="0" name="image">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="mimeType">
+                                 <xs:complexType>
+                                    <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                                    <xs:sequence>
+                                       <xs:element name="mimeType" type="xs:string"></xs:element>
+                                       <xs:element name="label" type="xs:string"></xs:element>
+                                       <xs:element name="fileExtension" type="xs:string"></xs:element>
+                                    </xs:sequence>
+                                 </xs:complexType>
+                              </xs:element>
+                              <xs:element minOccurs="0" name="width" type="xs:double"></xs:element>
+                              <xs:element minOccurs="0" name="height" type="xs:double"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.10 News Item

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinNewsItem" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinNewsItem">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="imageCaptions">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="caption" type="xs:string"></xs:element>
+                     <xs:element name="imageAsset">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="mimeType">
+                                 <xs:complexType>
+                                    <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                                    <xs:sequence>
+                                       <xs:element name="mimeType" type="xs:string"></xs:element>
+                                       <xs:element name="label" type="xs:string"></xs:element>
+                                       <xs:element name="fileExtension" type="xs:string"></xs:element>
+                                    </xs:sequence>
+                                 </xs:complexType>
+                              </xs:element>
+                              <xs:element minOccurs="0" name="width" type="xs:double"></xs:element>
+                              <xs:element minOccurs="0" name="height" type="xs:double"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="lead" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="newsDate" type="xs:string"></xs:element>
+            <xs:element name="isHomepage" type="xs:boolean"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.11 Press Release

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinPressRelease" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinPressRelease">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="textAsset">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="contactInfo" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="summary" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="referenceCode" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ +

2.12 Service

+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinService" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/london/cms/dublin/types/DublinService">
+   <xs:element name="object">
+      <xs:complexType>
+         <xs:attribute name="oid" type="xs:string"></xs:attribute>
+         <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="links">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="linkTitle" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkDescription" type="xs:string"></xs:element>
+                     <xs:element name="targetType" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetURI" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="targetWindow" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="brokenAt" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="linkOrder" type="xs:integer"></xs:element>
+                     <xs:element minOccurs="0" name="targetItem">
+                        <xs:complexType>
+                           <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                           <xs:sequence>
+                              <xs:element name="name" type="xs:string"></xs:element>
+                              <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+                           </xs:sequence>
+                        </xs:complexType>
+                     </xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="name" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element minOccurs="0" name="type">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element name="label" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="description" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+            <xs:element name="name" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="language" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="title" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="launchDate" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="summary" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="servicesProvided" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="openingTimes" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="address" type="xs:string"></xs:element>
+            <xs:element minOccurs="0" name="contacts" type="xs:string"></xs:element>
+            <xs:element name="dublinCore">
+               <xs:complexType>
+                  <xs:attribute name="oid" type="xs:string"></xs:attribute>
+                  <xs:sequence>
+                     <xs:element minOccurs="0" name="dcAudience" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcContributor" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDateValid" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcLanguage" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcDescription" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcIdentifier" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPreservation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcPublisher" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRelation" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcRights" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcSource" type="xs:string"></xs:element>
+                     <xs:element minOccurs="0" name="dcKeywords" type="xs:string"></xs:element>
+                  </xs:sequence>
+               </xs:complexType>
+            </xs:element>
+         </xs:sequence>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>
+ + + + +
+

+Written by Daniel Berrange (berrange@redhat.com) +Generated by htmltoc.pl.
+

+ + + diff --git a/ccm-iaw-aplaws/doc/deployment/Makefile.local b/ccm-iaw-aplaws/doc/deployment/Makefile.local new file mode 100644 index 000000000..66961cc6d --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/Makefile.local @@ -0,0 +1 @@ +DOCNAME=rhea-dpg-aplaws-en diff --git a/ccm-iaw-aplaws/doc/deployment/application-development.sgml b/ccm-iaw-aplaws/doc/deployment/application-development.sgml new file mode 100644 index 000000000..a8634c7d2 --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/application-development.sgml @@ -0,0 +1,379 @@ + + Application Development + + Once you have your development server up and running you are ready + to start custom development. The +ccm-devel-create.pl creates a skeleton application +directory for your project where you should place your custom code. +You should have a directory for each custom application you develop in +your dev directory and an entry in +project.xml. This chapter will detail the layout +of the application directory and configuration files, however the +details of actually writing XSL, Java, PDL, and JSP are beyond the +scope of this document, please refer to the guides on CCM Website or other resources. + + + + Quick Guide for the Impatient + + + Log in as your development user and run the command ccm-profile projectname + . + + + + cddev to change into the development directory. + + + + + Make the desired code changes + + + + ant deploy to deploy and test the changes. + + + + If you are using CVS check in the changes. + + + + + + An Application Directory + + The dev directory will contain one or more application + directories. Each of these directories will be built as a single + unit, but may depend on functionality provided by other + applications. + + An application directory contains several + subdirectories: + + + Application Directory Structure + + + application name + | + | + + -- application.xml + | + | + + -- etc/ + | | + | | + | + -- enterprise.init.in + | + | + + -- web/ + | | + | | + | + -- packages + | + | + + -- src/ + | | + | | + | + -- com/arsdigita/ + | + | + + -- pdl/ + | + | + + -- com/arsdigita/ + + + + + + etc/ + This holds any custom fragments your package will + need to add to the system initializer file, + enterprise.init, in a file called + enterprise.init.in. When you are + building your project, one of the steps you will take + will be running a task that concatenates all the + appropriate enterprise.init.in + fragments together into one master configuration + file. + + etc/ might also contain + custom libraries or other special files your package + relies on. + + + + pdl/ + This directory contains the PDL files for custom data + objects your application creates and uses. If you + explore the pdl/ directory, you'll + see it is organized like Java packages, with directories + following a package hierarchy. Like Java, PDL code is + organized in packages (called + models), and PDL objects can extend + other PDL objects. + + + + sql/ + This directory contains the custom SQL files +that create, drop, + and upgrade the database schema for your application, + and a single custom create script + (oracle-se-create.sql, for example) + for each database you want your application to run on. + SQL files are organized by package and by the database + they are appropriate for. Note that auto generated sql, + which is what most of your sql will be, only appears in + the build and deployment directories, not in this + sql/ directory. + + + + src/ + holds the Java source code for your package. It is + organized according to the standard Java package directory + hierarchy. + + + + test/ + This holds Junit and other + test classes for your application. + test/ will have at least a + src/ directory underneath it, and it + may have other directories holding non-Java files necessary + for running your application tests. + + + + web/ + This holds files from your application that should be + deployed directly to the servlet container's + webapp root (like the document root + for a web server, the webapp root is the directory where the + servlet container looks for Java classes, and for JSPs and + any static files it needs to serve). Under + web/ you will find a + packages/ directory; in a complete + application, you might also see a + STATIC/ or assets/ + directory for static files like graphics or CSS. + + The packages/ directory under + web/ deserves a few special words. + packages/ is the location for the XSL + for your application, and also for any JSPs you may want to + include. Note that a ccm package is + not the same thing as a Java package; a + &CCM; application can contain many &CCM; packages, which can + contain many Java packages. The distinction is that a &CCM; + package is represented by a row in a &CCM; system table, can + be mounted at site nodes and can have its own dispatcher. A + Java package is simply a unit of code organization, and is + not tracked by &CCM; in any way. + + XSL stylesheets for a package go under the + packages/package-name/xsl/ + directory. Custom JSPs go under the + packages/package-name/www/ + directory. + + + + + + + The <filename>application.xml</filename> file + + application.xml provides metadata about + an application, primarily for use when building a package. + + + Sample <filename>application.xml</filename> file + +<?xml version="1.0" encoding="ISO-8859-1"?> + +<ccm:application name="aplaws-custom" + prettyName="The APLAWS customization and styling package" + version="1.0.0" + release="1"> + + <ccm:dependancies> +<!-- <ccm:requires name="core" version="5.0.0"/> --> + </ccm:dependancies> + + <ccm:contacts> +<!-- + <ccm:contact uri="http://www.redhat.com/software/ccm" type="website"/> + <ccm:contact uri="mailto:cms@redhat.com" type="support"/> + --> + </ccm:contacts> + + <ccm:description> +The aplaws-custom package customizes the APLAWS system. + </ccm:description> + +</ccm:application> + + + + + <filename>application.xml</filename> elements + + As with project.xml, the most commonly + changed parameters are attributes of the top level element, + <ccm:application>: + + + + name + The machine friendly name of the + application. This is not normally changed once it has + been set. + + + + prettyName + The human friendly name of the application. + + + + version + The version number of the application. This always + consists of 3 numbers, separated by '.', which have + decreasing significance from left to right. + + By convention, the first number is the 'very + major' version number. This is normally only changed to + signify a very significant enhancement or change in + functionality. The second number is less major, but + still represents a significant new version. The third + number is the minor version number. You will normally + change this number for bug fixes or minor + enhancements. + + + Note + If you specified this application in the + extendsVersion attribute of + project.xml then the value you + specify here will be top level version number for + your project. + + + + + release + The release number specifies a particular build of + a version number. + + By convention, you should increase the release + number only if you are correcting something which should + have been in the original release, or something so minor + it could not possibly impact on any other part of the + system, such as a typo. When increasing the version + number, you should reset the release number to 1. + + + Note + If you specified this application in the + extendsVersion attribute of + project.xml then the value you + specify here will be top level release number for + your project. + + + + <command><ccm:dependancies></command>, + <command><ccm:contacts></command>, and + <command><ccm:description></command> + + The <ccm:dependancies>, + <ccm:contacts> and + <ccm:description> elements are placeholders + for future functionality, and are not currently used. + + + + Using CVS + + The Concurrent Versions System (CVS) is a powerful file +system-based tool for managing changes made to a code base. It is +particularly useful for tracking changes across time and for +facilitating collaboration of multiple developers on the same +code. This section will provide a brief introduction to CVS and the very basic commands. However it is strongly recommended that you study the CVS manual to take full advantage of this tool. + + CVS works by storing all changes in a central +repository, called the CVS repository. Developers can make copies of +the code from the CVS repository - called a check out - and make +changes to the code. Joe Developer is happy with the changes the the +developer can submit the new changes to the repository (called a check +in). If a Bob Developer comes along and checks out the same code base, +it will now have the changes that Joe made, along with the history of +how Joe changed the code. Because both developers are always referring +to the central CVS repository code changes can be easily shared. + + + +CVS can provide you with the following capabilities for your code base: + + + Remember what all the previous checked-in + versions of a file contained, using its repository. + Show you the difference between what's in your + tree and what's in the repository. + Help you merge changes made simultaneously by +multiple authors who might have been unaware of each other's + work. + Group a snapshot of currently checked-in + versions of files as a partcular release + Revert back to a previous version of the code. + Act as a backup and restore facility. + + + + + + + + + <command>Making changes: cvs commit</command> + + + + Once you have made changes to a file you need to notify the repository of your changes. You can do this with the command cvs commit. + + + + <command>Retrieving changes: cvs update</command> + + + You can retrieve changes that other developers have made + with the command cvs update. You should always run cvs update before you start working to make sure that the files you are working on are up to date. + + + + CVS Help + + CVS is a very popular software and there is endless online +documentation on how to use it. There is also help available in the manual page for CVS and command line help. + + + + CVS online documentation. + + + man cvs + cvs --help-options: List of options you can use with CVS. + cvs --help-commands: List of commands you can use with CVS. + + + + + + + + \ No newline at end of file diff --git a/ccm-iaw-aplaws/doc/deployment/building-packages.sgml b/ccm-iaw-aplaws/doc/deployment/building-packages.sgml new file mode 100644 index 000000000..bf25c4329 --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/building-packages.sgml @@ -0,0 +1,468 @@ + + Building and Deploying A Package + + + To install your customized code to the production server you +will need to package the codebase with RPM. +RPM is available for most flavours of UNIX, including + &RHEL; and Solaris. This section outlines +the steps for building a new RPM and installing it on your production +or staging server. + + + + Building a package + + Deployment to a live server is done by creating a package from a + tested and known good instance and installing it on your live + servers. + + + Setting up an Instance + + An RPM is built from a staging or development instance. You + will have a dev directory setup which contains all the code you + intend to run on your live server. The first step is to ensure the + quality of the instance you are building from. + + First you should do a clean and rebuild of your instance. With + your environment setup for appropriate instance using + ccm-profile, execute the following commands from + the top level dev directory: + + +ccm-stop +ant +ant +ccm-start + + + Once this has completed you should test it extensively, but + concentrating specifically on anything you may have changed since + the last build. When you are happy with it, you can create a + package. + + + + Creating a package + + Before creating a package, you should first increment the + version or release number as described in . Be sure to commit your change to CVS + if you are using it. + + Creating a package only requires a single command. In the top + level dev directory there will be a file called + rollingbuild.sh. To execute it, type: + + +./rollingbuild.sh + + + rollingbuild.sh does a complete build from + scratch and can potentially take a long time to run. By default it + also builds more than one type of package. To make it run quicker, + you can use the following command instead: + + +CCM_DIST_NOZIPS=1 ./rollingbuild.sh + + + + + + RPM version + + You will want to increment the release and version numbers of your + packages everytime you create a new build. You can do this +by editing project.xml or + application.xml. Please see . + + + + If you do not increment the release number you will not +be able to upgrade an existing installation without using the + rpm --force option. You should +always increment the release number no matter how +insignificant the change is. Having good accounting in terms of +releases allows you to revert to older versions. + + + + + + File locations + + rollingbuild.sh creates a number of rpms + which are arranged according to convention. All of the rpms are + created in the directory + /var/ccm-devel/rpm/username/RPMS/noarch. The source RPM is in /var/ccm-devel/rpm/username/SRPMS/ + + When it finishes, rollingbuild will have created a number of + packages. + + + projectname-x.x.x-x.noarch.rpm - This is the binary RPM of the code base. + + + projectname-servlet-resin-x.x.x-x.noarch.rpm - This is the RPM for running your project with the Resin servlet container. + + + projectname-servlet-tomcat3-x.x.x-x.noarch.rpm - This is the RPM for running your project with the Tomcat servlet container. + + + projectname-devel-tomcat3-x.x.x-x.noarch.rpm - This is the RPM for creating another project that extends the current project. This will install code in /usr/share/ccm-devel/project. + + +projectname-doc-x.x.x-x.noarch.rpm - This is the javadoc generated from your project code. It will include all the APLAWS and &CCM; Javadoc. + + +projectname-x.x.x-x.src.noarch.rpm - This is the source RPM for your project. + + + + + + + Installing your RPM + + Once you have created your RPM you will need to install +it on your staging or production machine. Here are the steps for + installing your RPMS, you will need to be logged in as the root user. + + + Quick steps for the impatient + + Copy two RPMs, + projectname-x.x.x-x.noarch.rpm, +and + projectname-servlet-resin-x.x.x-x.noarch.rpm +to your staging server. + + + Install the two RPMs at once by running the following command. + + rpm -Uvh projectname-x.x.x-x.noarch.rpm projectname-servlet-resin-x.x.x-x.noarch.rpm + + + + Copy the file /etc/projectname.cfg-resin to /etc/projectname.cfg. + + + Edit /etc/projectname.cfg in the same way you edited config.vars. + + + Update the configuration files for your server by running projectname-configure.pl. This is similar to running ant make-init. + +/usr/sbin/projectname-configure.pl /etc/projectname.cfg + + + +The server should restart automatically when the configuration files are changed. If this does not happen you can restart the server manually with the init script. + +/etc/init.d/projectname restart # stop|start + + + + + + Installing the RPMS: <filename><replaceable>projectname</replaceable>-x.x.x-x.noarch.rpm</filename> + + You will need to install the two RPMs +projectname-x.x.x-x.noarch.rpm, +and +projectname-servlet-resin-x.x.x-x.noarch.rpm +together as the two are +interdependent. projectname-x.x.x-x.noarch.rpm +will install your code in +/var/www/projectname +where it will be used by your application server. This RPM also +installs the init file +/etc/init.d/projectname, +the configuration script +/usr/sbin/projectname-configure.pl, +and the log directory +/var/log/projectname. + + + + Installing the RPMS: <filename><replaceable>projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</filename> + + The servlet RPM will install configuration files and +wrapper scripts for controlling the servlet container. Specifically it will install the following files: + + /usr/share/projectname/bin/resin/run-apache.sh.in + /usr/share/projectname/bin/resin/run-resin.sh.in + /usr/share/projectname/bin/resin/run.sh.in + /usr/share/projectname/conf/resin + /usr/share/projectname/conf/resin/httpd-resin-vhost.conf.in + /usr/share/projectname/conf/resin/resin-back.conf.in + /usr/share/projectname/conf/resin/resin-front.conf.in + + + + + These files are templates for your installation. When +you run the command +/usr/sbin/projectname-configure.pl +copies of these files will be placed in +/var/www/projectname/conf +and +/var/www/projectname/bin. They +will also be edited to reflect the parameters you set in +/etc/projectname.cfg + + + + + The <filename><replaceable>projectname</replaceable>.cfg</filename> + + Once the RPMs are installed you will need to edit the +configuration file for your server. The template for the config file +is + /etc/projectname.cfg-resin. Copy +this file to +/etc/projectname.cfg +and edit the parameters much like how you edited +config.vars. Some of the parameters are not in +config.vars and you will need to change the +values depending on how your Resin and HTTP servers are set up. Below +is an example of a configuration file for a production installation +with two Resin application servers and one Apache front end. The +values you need to change in addition to what what you find in +config.vars is emphasised with additional +comments. The Resin servers are called resin1.example.com and +resin2.example.com and the Apache server is called apache.example.com. + + + + <command>hostname</command> + The hostnames for the servers need to be exactly +as they appear when you run the hostname +command. If you want to change the default behavior of +hostname to return the short name or the fully +qualified domain name here is what you can do: + + + Edit /etc/sysconfig/network and change HOSTNAME +to be the fully qualified domain name. You can also use the gui tools +netconfig and +redhat-config-network to do this. These changes +will only take effect after the machine has been restarted. To change +it at runtime pass an argument to hostname as root. + +$ hostname resin1.example.com + + +You can test this by running hostname with no +arguments. + + + +########################################## +# APLAWS Master configuration file # +######################################### + +servlet-container = resin +## This is set to servlet23 by default but should be resin +servlet-webxml = resin + +# NB: all hostnames used should be +# the fully qualified name as returned +# by the 'hostname' command with no arguments. + +#################################### +# UNIX system level configuration + +# Installation directory for resin +## This should be the directory of your Resin installation +resin-home = /opt/resin/2.1.8 + +# Installation directory for this app +app-home = /var/www/aplaws + + +# Directory containing the base runtime & config files +runtime-home = /usr/share/aplaws + +# UNIX accounts to run as +user = servlet +group = servlet + +# Whereever you installed JDK 1.3.1 +# java-home = /usr/j2se +# java-home = /usr/java/jdk1.3.1 +## The java-home should point to $JAVA_HOME +java-home = /opt/IBMJava2-131 + +# Userinputly tell java to use more memory +# +# For Sun's JDK, on a machine with 1GB +#jre-args = -J-client -J-Xss128k -J-Xms512m -J-Xmx512m -J-XX:NewSize=128m -J-XX:MaxNewSize=128m +# +# For IBM's JDK on a machine with 256MB +#jre-args = -J-Xms128m -J-Xmx128m +jre-args = -J-Xms1536m -J-Xmx1536m + +# The hostname of the front end apache box +apache = apache.example.com + +# The hostnames of the back end resin boxes +resin = resin1.example.com +resin = resin2.example.com + +# The SRUN ports for apache to talk to the resin +# boxes. The 'hostname:port' pair designates which +# srun port each resin instance listens on. +# If there is a firewall, between the resin and +# apache boxes, a second 'hostname:port' pair +# specifies the host and port of the firewall +# +# eg1. no firewall +srun = resin1.example.com:6802 +srun = resin2.example.com:6802 + +# eg2. with firewall +#srun = resin1.example.com:6082, firewall:6802 +#srun = resin2.example.com:6082, firewall:6803 + +# Turn on http listening on either apache +# or resin boxes. Only need http port on +# the resin boxes for debugging purposes +http = apache.example.com:80 + +# Only for debugging +http = resin1.example.com:8080 +http = resin2.example.com:8080 + +# ACS initialization file +admin-answer = 6 +admin-email = admin@example.com +admin-forename = Administrator +admin-password = 123456 +admin-question = 12345 +admin-surname = Account +cache-expiry = 900 +cache-peers = "http://resin1.example.com:8080" +caching-active = yes +db-pass = aplaws_xyz +db-pool = 150 +db-user = aplaws +debug-mode = false +default-locale = en_US +default-scheme = http +developer-support = false +dispatcher-context-path = +dispatcher-servlet-path = +dmi-active = false +dmi-data-model-file = "/WEB-INF/sql/ccm-core/default/dmi/dmi-create.sql" +dmi-xml-files = { "core-dmi.xml", "/WEB-INF/sql/ccm-core" } +host-name = apache.example.com +hostname = apache.example.com +jdbc-url = jdbc:postgresql://postgres.example.com/aplaws +log-dir = /var/log/aplaws +log-level = warn +log-size = 1000000 +login-stylesheet = login_en.xsl +lucene-index-location = /var/www/aplaws/lib/lucene-index +permissionsDMLChecking = false +search-intermedia-enabled = false +search-lucene-enabled = true +search-lucene-indexer-id = 2 +server-name = apache.example.com +server-port = 80 +sitename = APLAWS +smtp-host = localhost +state-dir = /var/www/aplaws/lib +subsite-dispatcher-class = com.arsdigita.ui.login.SubsiteDispatcher +xslt-engine = Saxon +xslt-timeout = 60000 + +# WCT CMS Initialization File +content-digest-sender = article-digest@example.com +forms-content-digest-sender = forms-digest@foo.com +inso_filter_works = 0 +publish-to-fs-servers = "http://resin1.example.com/", "http://resin2.example.com/" +publish-to-fs-source = "http://resin2.example.com/" +publish-to-fs-this-server = "http://resin2.example.com/" +search-engine = lucene + +# Version: $Id: building-packages.sgml 287 2005-02-22 00:29:02Z sskracic $ $Date: 2004/07/29 $ +adminCanEditPosts = true +authorCanEditPosts = true +digestUserEmail = digests +replyHostName = apache.example.com + +# Navigation initialization file +default-content-section-url = "/content/" + +# System Properties +project-name = aplaws + + + + + + + <command>/usr/sbin/<replaceable>projectname</replaceable>-configure.pl</command> + + + Once you have edited +/etc/projectname.cfg-resin +you can run +/usr/sbin/projectname-configure.pl +to generate the config files and the run scripts for your server to +use. Make sure that you do not get errors after you run this +command. /usr/sbin/projectname-configure.pl +copies files from +/usr/share/projectname/bin/resin/ +and replaces the parameter values with what you have set in the +configuration file and places them in +/var/www/projectname/conf. It +also generates the wrapper run scripts in +/var/www/projectname/bin. + + + + + <command>/etc/init.d/<replaceable>projectname</replaceable></command> + + Once the configuration files and the wrapper scripts are written +you can start, stop, and restart your sever using + /etc/init.d/projectname. +The log files are located in your specified directory, by default +/var/log/projectname. You +should tail -f +/var/log/projectname/*.log to +monitor the progress of your server startup. + + + <command>/etc/init.d/<replaceable>projectname</replaceable></command> restart + + When you restart the server the command will pause for a number +of seconds to wait for the application server to completely exit. + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/deployment/create-new-project.sgml b/ccm-iaw-aplaws/doc/deployment/create-new-project.sgml new file mode 100644 index 000000000..7ef92a9c1 --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/create-new-project.sgml @@ -0,0 +1,259 @@ + + Creating a New Project + + This section addresses using the APLAWS build tools to create a new + project, or instance of your project. This may be for development or for + use as a staging server. + Note: +This section assumes that you have all the necessary tools +installed for a working development area. The steps for setting up a +development environment is beyond the scope of this document. Please +consult the installation guide for details. + + + Quick Guide for the Impatient + + + As the root user, create a system login for the +development user (). + + + As the root user, set up the new development user as for +the development + environment with the command ccm-devel-user.sh username () + + + As the development user, start a new APLAWS project with +the command ccm-devel-create.pl xxx () + + + + Familiarize yourself with the web directory, the dev +directory, and CVS (, , , and ). + + + + + + + + + Setting up Users + + This section should be carried out by the system +administrator. The first step is to create accounts for all users who +will be + developing with APLAWS. This has two steps: + + + + Create a system login + + + + Create a &CCM; development area + + + + + Note + + A user only has to be setup once. Once their system account + and &CCM; development environment have been created, they can create + any number of projects without having to go through this process + again. + + + + Creating a system login + + The following commands will create a new user, + set the password for that user and add the user to the + ccm-devel group. + + +useradd username +passwd username +gpasswd username + + + + Note + These commands are for &RHELAS;. These will be slightly + different on other systems, but the effect must be the + same. + + + + + Set Up the Development User with the Development Environment + + Once a user is created, you need to configure the &CCM; development + area for them. This is done with the + ccm-devel-user.sh command, which must be executed + as root. + +ccm-devel-user.sh username + + + + + + Starting a new APLAWS project + + Login as the development user that was just created for you. To +start a new project, based on APLAWS we use the + . For the project name a good naming scheme + would be to concatenate the word aplaws_ with your organization name, e.g. + aplaws_herefordshire. Putting those two bits together, we + get: + + + +bash-2.05b$ ccm-devel-create.pl xxx + + +Installation complete; your server will run on port 9005. + + + + You should make a note of this port number. When you have your + instance running, you will access it at the URL + http://your-server:port/. + Note: +The port number of your development server can also be +found in the configuration file for your servlet container. This is +located in + /var/ccm-devel/web/username/projectname/conf. + + + + + Troubleshooting + + If you make a mistake running this command, you can undo the + effects by removing the web and dev directories it created. You +will need to rm -rf the following directories: + + + /var/ccm-devel/dev/username + /projectname + + + + + /var/ccm-devel/web/username/projectname + + + + + + + + + The ccm-devel-create.pl command creates two +directories for your use. The project web directory and +the project dev directory. From this point on, the project dev directory will be refered to as the dev directory. +It is important that you do +not confuse the two directories,the web directory is for your web +server and should not be modified directly. The +project on the other hand is your dedicated working +area. Since your project will be based on APLAWS also important to +note the function of the shared source directory +where the APLAWS code lives. + + + + Dev Directory + +The dev directory is located at + /var/ccm-devel/dev/username/projectname. This +is the directory that will contain all your custom code. When you use +ant to deploy your code, the Java, jsp, and XSL in this directory will +be compiled and placed in the appropriate locations in the web + directory. The contents of this directory is discussed in more detail in the section. + + + + Web Directory + The web directory is located at + /var/ccm-devel/web/username/projectname. This +area is dedicated to your application server. All content in this +directory except for the conf subdirectory, +should be reproducible from the contents of the dev directory and the +shared source directories. You should never make +changes directly in this directory. + + + + Shared Source Directory + + The shared source directory is at +/usr/share/ccm-devel/projects/aplaws-xxx. This +is where the APLAWS code base lives, the files here should not be +modified, and only used as a reference. The code in this directory and +the code in the project directory is complied and +placed in the web directory for use by the web server. + + + + + + CVS + + If you installed the ccm-devel-cvs package, + the system will automatically perform some CVS tasks for you. + Namely: + + + + Create a new CVS module + + + + Check out an existing CVS module + + + + When you create a new project the system will check to see if + there is already a CVS module by the same name. For example, of you + created a project called aplaws_camden, it will + look for a CVS module called + aplaws_camden. + + Depending on whether or not the CVS module already exists, it + will create or use it as appropriate. + + + Note + + This is the only way in which CVS is directly used by the + build tools. If have a good understanding of CVS and + have more complicated requirements, it is quite safe to change + the default setup after it has been created. + + + + + For further reference on CVS please refer to the CVS manual. + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/deployment/development-environment.sgml b/ccm-iaw-aplaws/doc/deployment/development-environment.sgml new file mode 100644 index 000000000..cc7670fde --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/development-environment.sgml @@ -0,0 +1,925 @@ + + The Development Environment + + + Starting development + Once you have your project setup, you should use the +commands from the &CCM; build tools to set up your environment variables + and begin development. You should always login as +your development user or su - + developmentuser, +ccm-profile projectname, +and cddev. Please see , and . + + + + Quick Development Guide for the impatient + Here is a outline of the steps for starting development the +first time. Each step has a reference link to the detailed +documentation in the later section. While this will get you started, +not all the commands are referenced from this section, you should read +through the whole document to familiarize yourself with the command +set and take full advantage of the build environment. + + + + Log in as the development user + + + + + Set up your shell environment variables with the command +ccm-profile project_name +(). + + + + + + cddev to get to the dev directory +(). + + + + + Edit ant.properties and +project.xml ( + . + + + + + Generate config.vars with the command +ant make-config + (, + + + + + + Create server readable configuration file +enterprise.init with the command ant +make-init (). + + + + + Deploy the code with ant deploy (). + + + + + Load the datamodel by going into the web directory and running + the apropreate create script (). + + + + + Start the server with ccm-start, follow the progress with tailllogs + (, ). + + + + + + + + + Useful Commands + + + ccm-profile + ccm-profile project_name + This command sets up the environment +variables in your shell. It also makes all + other commands available, and customizes them to work with + a particular project. + + + Note + Because ccm-profile creates all + the other build tool commands, it must be run first. + Failing to run ccm-profile will most + likely result in the error command not + found when trying to execute any other + build tool command. + + + + + cddev + Change directory to the current project's development + directory. See the section on for an explanation of its contents. + + + + cdweb + Change directory to the current project's web + directory. This contains the logs, configuration files and + the deployed web application. Changes are not normally made + directly in this directory or any of its sub-directories. + Rather changes are made automatically by the build + tools. + + + Warning + Making changes directly in the web directory can + cause unpredictable results. + + + + + taillogs + The APLAWS server will generate a variety of logs +while it is running. The location of the log files are determined by +the configuration parameter in config.vars called +log-dir. Usually this is set to a subdirectory +called logs in the dev directory ( +). The taillogs +displays new entries in all log files immediately as they are added. To quit, type + CtrlC. The log files displayed are located at /var/ccm-devel/web/username/projectname/logs/. + + + + + Note + When they grow above a certain size (by default + 1MB), log files are rolled, which means the log file is + renamed and a new one is created for new entries. If + this happens to a file while you are viewing it, you + will stop seeing updates. If you suspect this has + happened, stop taillogs and restart + it. + + + + + + tailccm + The same as taillogs, except just + for /var/ccm-devel/web/username/projectname/logs/ccm.log. + + + + ccm-start + Start your instance running. After running this + command you should run tailccm or + taillogs which will show you when the + initialization process has completed. + + It is also possible to pass arguments to + ccm-start, which will be passed directly + to the servlet container. For example: + + +ccm-start + + + This particular example will start the instance with + the JIT compiler switched off. + + + + ccm-stop + Stop the instance. + + + Warning + The ccm-stop command only + signals the servlet container to stop. Depending on + what the instance is doing, it can take a short while + for all processes to actually shut down. You should + take care that all java processes have stopped before + trying to start a new instance, as this can cause + unpredictable results. + + + + + ccm-configure.sh + If you want to work off of a different +version of APLAWS or want to add a new application you will need to + change your project.xml(). You will need to +reconfigure the project area by running +ccm-configure.sh. This command creates or updates +the + build.xml file in the +project directory from the information + contained in project.xml. It should be + executed every time a change is made to + project.xml. + + Unlike other commands, you must be in the same + directory as project.xml when executing + ccm-configure.sh. + + + + + + The Dev Directory + + The dev directory is the top level development directory, it is located in /var/ccm-devel/dev/username/projectname. It + contains information for the build process and all the source code in + subdirectories. The dev directory contains a variety of configuration files for customizing ant, the servlet container, and APLAWS for your project. + + + The Dev Directory Structure + +/var/ccm-devel/dev/username/projectname + | + | + +--+ project.xml + | + | + +--+ ant.properties + | + | + +--+ config.vars + | + | + +--+ enterprise.init + | + | + +--+ application directory + + + + + + project.xml + Contains a description of the project and its + components. This file is used to generate build.xml, and + to contains all the metadata required for creating a + project package. It is described fully in the + . + + + + ant.properties + This contains information required by + ant, which is used for building + &CCM; projects. The only option which may require alteration + in this file is ccm.servlet.engine. For + APLAWS projects, this should be set to + . + + + + build.xml + This file is used directly by + ant, and should never be edited + directly. It is created automatically by the + ccm-configure.sh command from the + information contained in + project.xml. + + + <filename>config.vars</filename> + + This file stores the configuration parameters for your +development server. You will need to generate and edit this file to + before you can get your server running. It is explained in more detail in the . + + + + + <filename>enterprise.init</filename> + This file is generated from config.vars and enterprise.init.in files in the application directories. This is the file that the server reads at startup. It is explained in more detail in the . + + + + + + The <filename>project.xml</filename> file + + This file describes the project and its components for the + development and package building tools. + + Below is a sample project.xml + file. + + + +<?xml version="1.0" encoding="ISO-8859-1"?> + + <ccm:project name="aplaws_borough" + prettyName="APLAWS - Borough" + type="project" +versionFrom="aplaws_borough" + extends="aplaws" + extendsVersion="1.2.15" +version="0.8.3" +release="1" + xmlns:ccm="http://ccm.redhat.com/ccm-project"> + + <!-- List all project specific applications here --> + <ccm:build> + <ccm:application name="aplaws_borough" prettyName="aplaws_borough" buildOrder="1"/> + </ccm:build> + + <!-- List all shared, pre-built applications here --> + <ccm:prebuilt> + <!--<ccm:application name="cms" version="5.0.0" buildOrder="1"/> --> + </ccm:prebuilt> + +</ccm:project> + + + + The attributes of the <ccm:project> + tag define the highest level information about the project: + + + + name + The machine friendly name of the project. This is + the name of the package when you create one, the name of + a number of directories created when installing the + package, and the name of the System V service the + package creates. + + You will not typically change the value of this + attribute once it has been set. + + + + prettyName + This is a more descriptive name for the project + for use when making a package. + + + + type + This attribute should always have the value + for APLAWS based + projects. + + + + versionFrom + This is the name of an application subdirectory + which contains a file called + application.xml. If the + versionFrom attribute is used, the + version number for the package is taken from that file, + instead of project.xml. The format + of this file is explained in the + . + + For APLAWS this will typically be your "-custom" + directory containing custom styling. + + + + version + This is the version number of the project. The +version number is used when an RPM is built from the development +environment. If the versionFrom attribute exists +it will be ignored and the version numbers in the + application.xml will be +used. Please see . + + + + release + This is the release number of the project. The +version number is used when an RPM is built from the development +environment. If the versionFrom attribute exists +it will be ignored and the release number in the +application.xml will be used. Please see + + + + extends + This is the name of the project you are + extending. In order for this to work, you will have to + have installed the development package for that project. + For example, for aplaws you will have installed a + package called + aplaws-devel-1.2.xx-y. + + + You will not typically change the value of this + attribute once it has been set. + + + + extendsVersion + This is the version of the project which + you are extending. For example, if you + installed aplaws-devel-1.2.15-3, + extendsVersion would be set to . + Note that the release number ("-3") is omitted. + + You will update this value every time you install + a new version of the aplaws-devel package. + + + + + + <ccm:build> + In addition to the above attributes, there are 2 sections + where the structure of the application is defined. + + This section contains a list of applications which + will be compiled and included in this project. For every + application listed here, there must be an application + subdirectory with the same name in the project + directory. + + The buildOrder attribute is + used to define which order the applications should be + built in. If an application uses components provided by + another application you will have to make sure they are + built in the correct order. + + Another option not shown in the example above is + the overwrite attribute. If set to + , files in this application which + overlap with existing files will overwrite the existing + ones. This is primarily used for overriding XSL + stylesheets. Thus in an APLAWS project, the + application containing custom styling will typically use + this option. + + + + <ccm:prebuilt> + This section contains a list of pre-built + applications. These application do not need to be + compiled, but will be deployed and packaged as part of + this project. + + In the same way as the extends + and extendsVersion attributes of + <ccm:project> refer to the + extended applications development package, the + name and version + attributes of <ccm:prebuilt> + refer to the development package of a prebuilt + application. + + APLAWS projects do not normally use any prebuilt + applications. It is fine for this section to be + empty or, as in the example above, the contents to be + commented out. + + + + + Server Configuration <filename>config.vars</filename> and <filename>enterprise.init</filename> + The server initialization file for a &CCM; based project is + called enterprise.init. It is generated from a + number of fragments in its component applications usually stored in + + application/etc/enterprise.init.in + and from the parameter values set in +config.vars. config.vars +in turn, is created by pulling all + placeholder variables out of + enterprise.init.in fragments in a project's + component applications. config.vars and enterprise.init does not exist at the beginning of the project. Here are the steps you must take at the beginning of a project. + + + Run ant make-config () - this will generate config.vars. + +Edit config.vars and set the parameters to suit your project. + + + Run ant make-init - This will generate +enterprise.init from the values in +config.vars and the various +enterprise.init.in files (). + + + + +Note:You should always edit config.vars and +not enterprise.init. The changes you make to +config.vars is merged into +enterprise.init with the ant command ant +make-init (). + + + + Sample <filename>config.vars</filename> + + + APLAWS is designed to be configurable, however you can leave +many of these parameters as they are to get a basic installation. At the bare minimum you will need to edit the following paramters. + + + + db-pass: Database password + + + + + db-user: Database user + + + + + debug-mode: Determines wheather whitespace is +stripped from the HTML output. This should be set to true for +development. + + + + + jdbc-url: The JDBC URL to the + database instance. For Oracle this value should match + the entry in +$ORACLE_HOME/network/admin/tnsnames.ora. For +Postgres the entry should be +jdbc:postgresql://servername/databasename. + + + + + + log-dir: This should point to + /var/ccm-devel/web/username/projectname/logs + for the taillogs to work. + + + + + lucene-index-location: On a +Postgres environment the search engine needs to be set to Lucene. The +index location should be a directory that the development user can +write to, the recommended directory is +/var/ccm-devel/web/username/projectname/lucene.dat + + + + + search-lucene-enabled: Set to false +for Oracle, true for a Postgres environment. + + + + + search-intermedia-enabled: Set to +true for Oracle, false for Postgres. + + + + + state-dir: The directory where +server state files will be written, this should be a directory that's +writable by the development user. The recommended directory is +/var/ccm-devel/web/username/projectname/run. + + + + + xslt-engine: Options are Xalan, +Saxon, and JD.XSLT. The recommended parser is JD.XSLT. + + + + +can leave many of this values as they are. But you will need to change +the values of parameters such as db-pass, db-user, jdbc-url, log-dir, +state-dir. The # sign is a comment marker, below is + an annotated config.vars. + + + + + +# ACS initialization file +admin-answer = 6 # Answer for web admin user's password reminder question +admin-email = admin@example.com # email address of the web admin user +admin-forename = Administrator # Forename of the web admin user +admin-password = 123456 # web admin user's password +admin-question = 12345 # web admin user password reminder question +admin-surname = Account # web admin user's surname +autoRegistration = true # redirect to registration form for unknown email addresses +cache-expiry = 900 +cache-peers = # peer servers for multi-tiered environment, leave blank for development +caching-active = yes +db-pass = ccm_xyz # Database password +db-pool = 10 # database connection pool size +db-user = ccm # Database useranme +debug-mode = true # Turn HTML indentation on/off for development +default-locale = en_GB +default-scheme = http +developer-support = false +dispatcher-context-path = # leading URL stub +dispatcher-servlet-path = +dmi-active = false +dmi-data-model-file = "/WEB-INF/sql/ccm-core/default/dmi/dmi-create.sql" +dmi-xml-files = { "core-dmi.xml", "/WEB-INF/sql/ccm-core" } +hostname = ccm.example.com # hostname of the server +jdbc-url = jdbc:oracle:oci8:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = ora8) (SRVR = DEDICATED))) #JDBC URL for the database server +log-dir = /var/ccm-devel/web/username/projectname/logs +# Log directory for the server, this value should point to the logs directory in your web directory +log-level = warn +log-size = 1000000 +login-stylesheet = login_en.xsl +lucene-index-location = /var/ccm-devel/web/username/projectname/lucene +# If the database is Postgres the value should be changed to point to a directory in the web directory. + +page-map = WEB-INF/resources/hereford-login-page-map.xml +permissionsDMLChecking = false +rememberLoginByDefault = true +search-intermedia-enabled = true +# Change to false on a postgres environment + +search-lucene-enabled = false +# Change to true on a postgres environment + +search-lucene-indexer-id = 0 +server-name = localhost +server-port = 8080 +sitename = My APLAWS site +# name of your website +smtp-host = localhost +state-dir = /var/ccm-devel/web/username/projectname/state +# Value should point to a writable directory in the web directory + +subsite-dispatcher-class = com.arsdigita.ui.login.SubsiteDispatcher +workflow-send-alerts = true +workflow-sender-email = workflow-alerts@example.com +# email notification sender for workflow alerts +workflow-sender-given-name = Workflow # Name of alert sender +workflow-sender-surname = Alerts # Surname of alert sender +xslt-engine = JD.XSLT +# XSLT parser, options are Saxon, Xalan, JD.XSLT. JD.XSLT is recommended + +xslt-timeout = 60 +# interval for XSLT, set to a smaller number for development + + + +# CMS initialization file +cms-item-adapters = /WEB-INF/resources/hereford-item-adapters.xml +content-center-map = /WEB-INF/resources/content-center-map.xml +content-digest-sender = article-digest@herefordshire.gov.uk +content-section-name = content +default-folder-template = /default/folder.jsp +default-item-template = /default/item.jsp +default-root-category = true +forms-content-digest-sender = forms-digest@herefordshire.gov.uk +forms-section-name = forms +overdue-alert-interval = 24 +overdue-duration = 96 +overdue-max-alerts = 5 +overdue-send-alerts = false +publish-to-fs-servers = "http://servlet1/", "http://servlet2/" +publish-to-fs-source = "http://servlet1/" +publish-to-fs-this-server = "http://servlet1/" +search-engine = intermedia +template-root = /packages/content-section/templates + +# Portal initialization file +portal-url = /portal/ + +# Forum initialization file, the third item in the forum list of lists is weather the forum is moderated or not +adminCanEditPosts = true +authorCanEditPosts = true +digestUserEmail = digests +forums = {{"forum1", "Forum #1", false, "nasakai@redhat.com", "Forum #1 Moderation" }, {"forum2", "Forum #2", false, "nasakai@redhat.com", "Forum #2 Moderation"}} +replyHostName = devnull.redhat.com + +# +search-spider-delay = 60 +search-spider-frequency = 0 +search-spider-urls = "http://www.redhat.com/", "http://www.example.org/" + +# Navigation initialization file +default-content-section-url = "/content/" +related-items-purpose = "DUBLINCORE" + +# Noticeboard initialization file +adminCanEditNotices = true +authorCanEditNotices = true +noticeboards = {{"noticeboard", "Noticeboard"}} + +# +chat-control-host = localhost +chat-control-port = 8200 +chat-public-host = localhost +chat-public-port = 8200 +chat-start-server = false + +# System Properties +project-name = hereford + + + + + + + + + + + Deploying with Ant + + Compilation and deployment of &CCM; and &CCM; based projects is + done using ant. The options you can +give to the ant command are called +targets, and they are defined in the +build.xml file. There are two types of ant +targets that you will be using. The first set is the configuration +targets such as ant +make-config, ant +update-config, and ant +make-init. The second set are the +deploy targets : The &CCM; build + tools configures ant to compile or copy the files from the + and the +shared source directory + into the web +directory. The most commonly used deploy targets are the following: ant +deploy-config, ant deploy, and +ant +deploy-application.For a complete list for your project, type +ant on its own. Please see ,, , , , , , , + + + Note + Ant's configuration file is build.xml. + This file is automatically generated by + ccm-configure.sh from + project.xml. Immediately after creating a + project or making any change to project.xml, + you must re-run ccm-configure.sh otherwise ant + will not work as desired. + + + + While you should not need to edit build.xml yourself, if you +would like to find out more, you can refer to the documentation at + the ant homepage. + + Running ant: + All ant commands must be run from the top level project +directory (the directory that contains +build.xml. This should be the directory that you +are in after you execute cddev (). + + + + <filename>ant make-config</filename> + Generates the configuration file config.vars by pulling all + placeholder variables out of + enterprise.init.in fragments in a project's + component applications. + + + + Caution + Only run ant + +once as subsequent executions will overwrite any +customizations you have made to your config.vars +. +After the initial creation, keep it up-to-date with ant update-config (). + + + + +<command>ant update-config</command> + + + Examines the enterprise.init.in files and adds any new/changed parameters to config.vars. This command will preserve the parameter values that you have set. + + + + + ant make-init + + This command will generate enterprise.init by + concatenated all enterprise.init.in + fragments in component applications and substituting values in + config.vars. + + Note: + This only creates enterprise.init in + the development directory. For it to be used it must be + deployed. This is one of the tasks performed by the + deploy target, or to deploy it on its own you + can use ant deploy-config + () + + + +<command>ant deploy-config</command> + + + This deploys only configuration information. This includes +enterprise.init and +web.xml. Use this target if you have made changes +to either of these files, for example by using the + target. This command copies +enterprise.init from the dev directory to the +web directory. The file is located at +/var/ccm-devel/web/username/projectname/webapps/ccm/WEB-INF/resources/enterprise.init. + + + + + <command>ant deploy</command> + This deploys the entire project including all + applications, the parent project if any and all + configuration information. + + + + <command>deploy-<replaceable>application</replaceable></command> + When you have only made changes to a single + application and don't need to redeploy the whole + project, use this target to deploy just a single + application. + + For example, ant + will deploy only + the aplaws-custom + application. + + + + + + <command>ant clean</command> + This removes all deployed files and directories, + and all compiled classes from build +directories. In other words this commands removes files in +webapps/ccm in the development web directory (). Use + this when you need to be sure that your project is + rebuilt cleanly, for example after changing + project.xml or before building a + package for deployment on a live server. + + + + + Setting Up the Database + You will need to have a database instance that you can +use for development. These steps should be conducted by your DBA, the +following is the instructions for Postgres and Oracle environments. If +you need instructions on setting up your database server please see +. + + + + Loading the Datamodel for Postgres + + cdweb to change to the web directory and + change into webapps/ccm/WEB-INF/sql. You will + find a file called postgres-create.sh. + Run this command with your database parameters to load the +datamodel. + + +$ sh postgres-create.sh dbname dbusername db server hostname + + + + + + + + Loading the Datamodel for Oracle + + cdweb to change to the web directory and + change into webapps/ccm/WEB-INF/sql. You will + find a file called oracle-create.sh, the + argument for this script should be the database connection +string you use to connect to the database via +sqlplus. For example, if you connect to your Oracle +instance with the following command: + + +sqlplus my_aplaws/my_aplaws@myoracleserver + + + + Then you should run oracle-create.sh like this: + + +$ sh oracle-create.sh my_aplaws/my_aplaws@myoracleserver + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/deployment/installing-aplaws.sgml b/ccm-iaw-aplaws/doc/deployment/installing-aplaws.sgml new file mode 100644 index 000000000..eaf5c581a --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/installing-aplaws.sgml @@ -0,0 +1,832 @@ + + Installing APLAWS + APLAWS is normally installed on a four server + high-availability configuration. The web server will contain + Apache and Squid reverse proxy server, and serve as the front + end. Two or more application servers will run the actual APLAWS + codebase, normally using Resin. The database server will have + either a Postgres or an Oracle database installed. The details of + each server configuration is detailed below, however this guide + will not cover OS installation or Oracle database + installation. + + + Caution + + There are many steps involved in conducting a full production +installation of APLAWS. While we try to cover everything in as much +detail as possible it is recommended that you have a RedHat engineer +either conduct the installtion or check the installation after +completion. + + + + Quick Guide for the Impatient + Here is what you have to do to conduct a full production + installation of APLAWS. As you can see there are many steps + involved, and many things can go wrong during the + process. + + + + Configure the database server. + + + Install the database + + + Create the user and the + tablespace/database + + + + + Set up the application server + + + Ensure that you can connect to the database via + psql or sqlplus. + + + InstallIBMJava2-JRE and IBM-JAVA2-JDK. + + + Install resin-xxx.rpm + + + Install aplaws-xxx.noarch.rpm and + aplaws-servlet-resin-xxx.rpm no the application + server. + + + Configure the APLAWS instance and ensure that + it is serving pages. + + + + + Configure the web server + + + Configure Apache virtual hosts so that it is + connecting to the Resin instances via s-run. + + + Configure Squid to serv as a reverse + proxy. + + + + + + + + Setting up the database server + APLAWS will run on PostgreSQL or Oracle database + servers. + + Installing PostgreSQL server + You will need to install the following RPMS + + + rh-postgresql-7.3.4-8 + + + rh-postgresql-jdbc-7.3.4-8 + + + rh-postgresql-libs-7.3.4-8 + + + rh-postgresql-server-7.3.4-8 + + + + + Enabling TCP Connection + After installing a PostgreSQL database server you will + need to edit the configuration to enable TCP connections from + the application servers. + + + <filename>postgres.conf</filename> + + Edit + /var/lib/pgpsql/data/postgres.confto + set tcpip_socket to true. + + +# tcpip_socket = false +tcpip_socket = true + + + + + + <filename>pg_hba.conf</filename> + + Add parameters to the end of + /var/lib/pgpsql/data/pg_hba.confto + allow connections from the application server. The second + line is an example configuration for an app server with the + IP 172.16.68.0 and a netmask 255.255.255.0. You can set the + policy to be md5 or trust. For more information please + consult the + Postgres Manual. + + +# Put your actual configuration here +# ---------------------------------- +# +# CAUTION: The default configuration allows any local user to connect +# using any PostgreSQL user name, including the superuser, over either +# Unix-domain sockets or TCP/IP. If you are on a multiple-user +# machine, the default configuration is probably too liberal for you. +# Change it to use something other than "trust" authentication. +# +# If you want to allow non-local connections, you need to add more +# "host" records. Also, remember TCP/IP connections are only enabled +# if you enable "tcpip_socket" in postgresql.conf. + +# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD + +#local all all trust +#host all all 127.0.0.1 255.255.255.255 trust + +# Using sockets credentials for improved security. Not available everywhere, +# but works on Linux, *BSD (and probably some others) + +local all all ident sameuser + +host all all 172.16.68.0 255.255.255.0 md5 +host all all 127.0.0.1 255.255.255.255 md5 + + + + + + + Database Startup + Once the configuration is complete you will need to + start the database as the root user. + # service rhdb start + + + Create User and Database + As the postgres user, you will need to enable plpgsql + for your databse. Then you will need to create an Unicode + database and a user for your APLAWS installation. + +# su - postgres +$ createlang plpgsql template1 +$ createuser aplaws +$ createdb -E unicode aplaws + + At this point you should test your installation by + logging into the database. + + + Client Installation + You will need to install the following RPMS on the + application server. + + + rh-postgresql-7.3.4-8 + + + rh-postgresql-jdbc-7.3.4-8 + + + rh-postgresql-libs-7.3.4-8 + + + Test that you can connect to the database server. + +$ psql -h database server-U aplaws aplaws + + + + + + Setting up the application server + + Required Software + You will need to install the following RPMS on the + application server. + + + IBMJava2-SDK + + + IBMJava2-JRE + + + resin (not versions 2.0 or 2.3) + + + aplaws-xxx.noarch.rpm + + + aplaws-servlet-resin-xxx.noarch.rpm + + + For IBMJava and resin you do not need to do anything + beyond simple + rpm -Uvh. + + + Installing the RPMs + You will need to install the two RPMs + + + projectname-x.x.x-x.noarch.rpm, and + + + projectname-servlet-resin-x.x.x-x.noarch.rpmtogether + as the two are interdependent. + + + projectname-x.x.x-x.noarch.rpmwill + install your code in + /var/www/ + projectnamewhere it + will be used by your application server. This RPM also + installs the init file + /etc/init.d/ + projectname, the + configuration script + /usr/sbin/ + + projectname-configure.pl, and the + log directory + /var/log/ + projectname. + + + + Installing the Project RPMs + The servlet RPM will install configuration files and + wrapper scripts for controlling the servlet container. + Specifically it will install the following files: + + + + /usr/share/ + + projectname/bin/resin/run-apache.sh.in + + + + + /usr/share/ + + projectname/bin/resin/run-resin.sh.in + + + + + /usr/share/ + + projectname/bin/resin/run.sh.in + + + + + /usr/share/ + + projectname/conf/resin + + + + + /usr/share/projectname/conf/resin/httpd-resin-vhost.conf.in + + + + + /usr/share/ + + projectname/conf/resin/resin-back.conf.in + + + + + /usr/share/ + + projectname/conf/resin/resin-front.conf.in + + + + These files are templates for your installation. When + you run the command + /usr/sbin/ + + projectname-configure.plcopies of + these files will be placed in + /var/www/ + projectname/confand + /var/www/ + projectname/bin. They + will also be edited to reflect the parameters you set in + /etc/ + projectname.cfg + + + The + <filename> + <replaceable>projectname</replaceable>.cfg</filename> + Once the RPMs are installed you will need to edit the + configuration file for your server. The template for the + config file is + /etc/ + projectname.cfg-resin. + Copy this file to + /etc/ + projectname.cfgand edit + the parameters much like how you edited + config.vars. Some of the parameters are + not in + config.varsand you will need to change + the values depending on how your Resin and HTTP servers are + set up. Below is an example of a configuration file for a + production installation with two Resin application servers + and one Apache front end. The values you need to change in + addition to what what you find in + config.varsis emphasised with additional + comments. The Resin servers are called resin1.example.com and + resin2.example.com and the Apache server is called + apache.example.com. + + + <command>hostname</command> + + The hostnames for the servers need to be exactly as + they appear when you run the + hostnamecommand. If you want to change + the default behavior of + hostnameto return the short name or the + fully qualified domain name here is what you can do: + Edit + /etc/sysconfig/networkand change + HOSTNAME to be the fully qualified domain name. You can + also use the gui tools + netconfigand + redhat-config-networkto do this. These + changes will only take effect after the machine has been + restarted. To change it at runtime pass an argument to + hostnameas root. + $ hostname resin1.example.comYou can test + this by running + hostnamewith no arguments. + + +########################################## +# APLAWS Master configuration file # +######################################### + +servlet-container = resin +## This is set to servlet23 by default but should be resin +servlet-webxml = resin + +# NB: all hostnames used should be +# the fully qualified name as returned +# by the 'hostname' command with no arguments. + +#################################### +# UNIX system level configuration + +# Installation directory for resin +## This should be the directory of your Resin installation +resin-home = /opt/resin/2.1.8 + +# Installation directory for this app +app-home = /var/www/aplaws + + +# Directory containing the base runtime & config files +runtime-home = /usr/share/aplaws + +# UNIX accounts to run as +user = servlet +group = servlet + +# Whereever you installed JDK 1.3.1 +# java-home = /usr/j2se +# java-home = /usr/java/jdk1.3.1 +## The java-home should point to $JAVA_HOME +java-home = /opt/IBMJava2-131 + +# Userinputly tell java to use more memory +# +# For Sun's JDK, on a machine with 1GB +#jre-args = -J-client -J-Xss128k -J-Xms512m -J-Xmx512m -J-XX:NewSize=128m -J-XX:MaxNewSize=128m +# +# For IBM's JDK on a machine with 256MB +#jre-args = -J-Xms128m -J-Xmx128m +jre-args = -J-Xms1536m -J-Xmx1536m + +# The hostname of the front end apache box +apache = apache.example.com + +# The hostnames of the back end resin boxes +resin = resin1.example.com +resin = resin2.example.com + +# The SRUN ports for apache to talk to the resin +# boxes. The 'hostname:port' pair designates which +# srun port each resin instance listens on. +# If there is a firewall, between the resin and +# apache boxes, a second 'hostname:port' pair +# specifies the host and port of the firewall +# +# eg1. no firewall +srun = resin1.example.com:6802 +srun = resin2.example.com:6802 + +# eg2. with firewall +#srun = resin1.example.com:6082, firewall:6802 +#srun = resin2.example.com:6082, firewall:6803 + +# Turn on http listening on either apache +# or resin boxes. Only need http port on +# the resin boxes for debugging purposes +http = apache.example.com:80 + +# Only for debugging +http = resin1.example.com:8080 +http = resin2.example.com:8080 + +# ACS initialization file +admin-answer = 6 +admin-email = admin@example.com +admin-forename = Administrator +admin-password = 123456 +admin-question = 12345 +admin-surname = Account +cache-expiry = 900 +cache-peers = "http://resin1.example.com:8080" +caching-active = yes +db-pass = aplaws_xyz +db-pool = 150 +db-user = aplaws +debug-mode = false +default-locale = en_US +default-scheme = http +developer-support = false +dispatcher-context-path = +dispatcher-servlet-path = +dmi-active = false +dmi-data-model-file = "/WEB-INF/sql/ccm-core/default/dmi/dmi-create.sql" +dmi-xml-files = { "core-dmi.xml", "/WEB-INF/sql/ccm-core" } +host-name = apache.example.com +hostname = apache.example.com +jdbc-url = jdbc:postgresql://postgres.example.com/aplaws +log-dir = /var/log/aplaws +log-level = warn +log-size = 1000000 +login-stylesheet = login_en.xsl +lucene-index-location = /var/www/aplaws/lib/lucene-index +permissionsDMLChecking = false +search-intermedia-enabled = false +search-lucene-enabled = true +search-lucene-indexer-id = 2 +server-name = apache.example.com +server-port = 80 +sitename = APLAWS +smtp-host = localhost +state-dir = /var/www/aplaws/lib +subsite-dispatcher-class = com.arsdigita.ui.login.SubsiteDispatcher +xslt-engine = Saxon +xslt-timeout = 60000 + +# WCT CMS Initialization File +content-digest-sender = article-digest@example.com +forms-content-digest-sender = forms-digest@foo.com +inso_filter_works = 0 +publish-to-fs-servers = "http://resin1.example.com/", "http://resin2.example.com/" +publish-to-fs-source = "http://resin2.example.com/" +publish-to-fs-this-server = "http://resin2.example.com/" +search-engine = lucene + +# Version: $Id: installing-aplaws.sgml 287 2005-02-22 00:29:02Z sskracic $ $Date: 2004/01/23 $ +adminCanEditPosts = true +authorCanEditPosts = true +digestUserEmail = digests +replyHostName = apache.example.com + +# Navigation initialization file +default-content-section-url = "/content/" + +# System Properties +project-name = aplaws + + + + + + <command>/usr/sbin/ <replaceable>projectname</replaceable>-configure.pl</command> + + Once you have edited + /etc/ + + projectname.cfg-resinyou can run + /usr/sbin/ + + projectname-configure.plto generate + the config files and the run scripts for your server to use. + Make sure that you do not get errors after you run this + command. + /usr/sbin/ + + projectname-configure.plcopies files + from + /usr/share/ + + projectname/bin/resin/and replaces + the parameter values with what you have set in the + configuration file and places them in + /var/www/ + projectname/conf. It + also generates the wrapper run scripts in + /var/www/ + projectname/bin. + + +bash-2.03# /usr/sbin/aplaws-configure.pl /etc/aplaws.cfg Reading /etc/aplaws.cfg +Wrote /var/www/aplaws/dist/WEB-INF/resources/enterprise.init +Wrote /var/www/aplaws/dist/WEB-INF/web.xml +Wrote /var/www/aplaws/bin/run-resin.sh +Wrote /var/www/aplaws/conf/resin.conf +Wrote /var/www/aplaws/bin/run.sh + + + Here is a list of the files and how they are modified. + + + + + /var/www/aplaws/dist/WEB-INF/resources/enterprise.init: + Initialization file used for the APLAWS server. Contains + settings for the individual APLAWS packages such as + database connection parameters, content types, and + stylesheet engine, i.e. the paramters after + # ACS initialization filein + aplaws.cfg. + + + + + /var/www/aplaws/dist/WEB-INF/web.xml:: + Configured to work with Resin set by the line: + servlet-container = resinin + aplaws.cfg. + + + + /var/www/aplaws/bin/run-resin.sh: + Wrapper script for starting and stopping Resin. Contains + information such as JAVA_HOME, RESIN_HOM, and JVM setting + (e.g. + app-home, + runtime-home, + java-home, + jre-args). + + + + /var/www/aplaws/conf/resin.conf: + Configuration for the Resin servlet container. Contains + information such as s-run port number, http port number, + and maximum number of processes (i.e. + srun, + http. + + + + + Starting the server + Once the configuration files and the wrapper scripts + are written you can start, stop, and restart your sever using + + /etc/init.d/ + projectname. The log + files are located in your specified directory, by default + /var/log/ + projectname. You should + + tail -f /var/log/ + projectname/*.logto + monitor the progress of your server startup. + + + <command>/etc/init.d/ + <replaceable> + projectname</replaceable></command>restart + When you restart the server the command will pause + for a number of seconds to wait for the application server + to completely exit. + + Once you are happy with your installation you should + set APLAWS to startup automatically at reboot by running + chkconfig aplaws on. + + + + Configuring the Web Server + + Required Software + You will need to install the following software to your + webserver. + + resin source (tar.gz) + apache + apache-devel + squid + aplaws-xxx.noarch.rpm + aplaws-servlet-resin-xxx.noarch.rpm + + + You need Resin sources and apache-devel package because + you will need to compile and install mod_caucho. You should + use Apache and Squid that comes with your Advanced Server. + Even though you will not be serving pages out of Resin on the + web server, you need to install the aplaws packages because + Apache will be serving static files directly from the file + system to improve performance. + + + mod_caucho + First install resin in + /optby untaring the source distribution. + Run the following command to install mod_caucho. + $ ./configure --with-apache /usr/sbin + + Reference + If you have problems with this section, or have a + non-standard Apache installation consult the manual + + Resin with Apache on Unix. + + + + Installing the APLAWS RPMs + You do not need to configure virtual hosting and + mod_caucho manually. Installing and configuring the APLAWs + RPMs will do this for you. Follow the instructions at + and configure and + install the RPMs. When you run the script + /usr/sbin/aplaws-configure.pl + /etc/aplaws.cfgconfiguration files will be written + to the file system. Here is a list of affected files and + highlights of the changes. + + + + /etc/httpd/httpd.conf: Adds a + directive to include the vhost configuration file + + /var/www/aplaws/conf/httpd-resin-vhost.conf. + + + + + /var/www/aplaws/conf/httpd-resin-vhost.conf: + Sets the DocumentRoot to be + /var/www/aplaws/distand the + CauchoConfigFile for mod_caucho as + + /var/www/aplaws/dist/resin-apache.conf. + + + + resin-apache.conf: Sets the location + of the application server by defining the IP and the + s-run port that the resin server is listening on. + + + + Check + At this point you should be able to retrive pages + from application server via Apache. Test the connection by + running + wget http://localhostor using + telnet. + + + + Configuring SQUID + In this section you will configure Squid to be the web + accelerator for Apache. This step is not required but + strongly recommended as it will significantly increase the + performance of your site. + For virtual hosting to work correctly (particularly + with IE) we need to run both Apache and SQUID on the same + machine and port number. This means we must tell apache on + only bind to 127.0.0.1 and SQUID to only bind to the machines + public ip address. + + Setting the Listen ports on Apache and Squid + In /etc/httpd/conf/httpd.conf uncomment and change + BindAddress * +to + BindAddress 127.0.0.1 +Next, uncomment and change + Listen 80 +To + Listen 127.0.0.1:80 +Then go down to the <IfDefine + HAVE_SSL> block containin the two Listen statements and + add + Listen 127.0.0.1:443 +In /etc/squid/squid.conf change + # http_port 3128 +To + http_port 192.168.168.199:80 + + + + Configuring permissions for Squid + The default SQUID config doesn't cache urls with + query parameters in them. This is only for compatability + with badly written CGI scripts that don't send cache + control headers. We do things properly so we need to change + this behaviour. So in the squid config, comment out + +#hierarchy_stoplist cgi-bin ? +#acl QUERY urlpath_regex cgi-bin \? +#no_cache deny QUERY + + + Turn on referers and useragents so that + log analysis is useful + +useragent_log /var/log/squid/agent.log +referer_log /var/log/squid/referer.log + +You'll need our custom version of SQUID + compiled with + --enable-referer-logand + --enable-agent-log options. + Next we add some access control rules to allow public + users to access the cache. Add the following lines near the + other block of acl definitions: + +acl accel_host dst 127.0.0.1/255.255.255.255 +acl accel_host dst 192.168.168.199/255.255.255.255 +acl accel_port port 80 + + + If the firewall in front of the SQUID + server has a different IP address to the network interface + you need to add that in as well. +acl accel_host dst 193.132.194.147/255.255.255.255 +Then, allow access to requests matching + these acls. Comment out + #http_access deny all + Add in + +http_access deny !accel_host +http_access deny !accel_port +http_access allow all + + + + + Configureing Squid for HTTP Acceleration + Set the main hostname + visible_hostname www.stoke.gov.uk + SQUID limits HTTP file uploads to 1 MB in + size, so we need to increase this to at least 20 MB + otherwise CMS file storage is rather limited in usefulness: + + request_body_max_size 20 MB + Finally, tell SQUID to be an accellerator + for the apache server: + httpd_accel_host 127.0.0.1 httpd_accel_port 80 +Finally for virtual hosting to work, we set + + +httpd_accel_single_host on +httpd_accel_uses_host_header on + + + + Test + This configuration separates the IP and port that + Squid listens to from the Apache port. So if you do + wget -S http://localhostyou are + connecting to Apache, if you do + wget -S http:// + your-external-ipyou are + connecting to Squid. This difference will helpful in + determining the point of failure if you have + problems + + + Once you are happy with your installation you should + set Apache and Squid to startup automatically at reboot by using +chkconfig. + + + + diff --git a/ccm-iaw-aplaws/doc/deployment/rhea-dpg-aplaws-en.sgml b/ccm-iaw-aplaws/doc/deployment/rhea-dpg-aplaws-en.sgml new file mode 100644 index 000000000..2454f54c8 --- /dev/null +++ b/ccm-iaw-aplaws/doc/deployment/rhea-dpg-aplaws-en.sgml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + +%RH-ENTITIES; + + + +%RHEA-ENTITIES; + + + + + + + + + + + +]> + + + + APLAWS + &SHORT-TITLE; + + + + + + + + + + + + + + + + + + + + + + + 2003 + &FORMAL-RHI; + + &BOILERPLATE; + + + + Table of Contents + + + + +&create-new-project; +&development-environment; +&application-development; +&building-packages; +&installing-aplaws; + diff --git a/ccm-iaw-aplaws/doc/docs-stuff/31-db2indexed-html b/ccm-iaw-aplaws/doc/docs-stuff/31-db2indexed-html new file mode 100755 index 000000000..f7b79e0a4 --- /dev/null +++ b/ccm-iaw-aplaws/doc/docs-stuff/31-db2indexed-html @@ -0,0 +1,51 @@ +#! /bin/sh + +# Make sure we have an absolute path to the backend and stylesheet, as +# jw doesn't like relative paths... + +STUFFPATH=`dirname $0` +if [ -n "${STUFFPATH##/*}" ] +then + STUFFPATH=$PWD/$STUFFPATH +fi + +# Figure out what our output directory should be called. Note that we +# also check to see if the user explicitly specified an output directory, +# in which case we'll use their choice... + +O_OPTION=0 +for i in "$@" +do + if [ $O_OPTION = "1" ] + then + OUTPUTDIR=$i + O_OPTION=0 + fi + if [ $i = "-o" ] + then + O_OPTION=1 + fi +done + +# See if the user specified an output directory... + +if [ -z $OUTPUTDIR ] + then +# Nope -- default to the name of the SGML file... + OUTPUTDIR="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`" + fi + +# Nuke the output directory (if it exists); jw will create it for us... + +if [ -d $OUTPUTDIR ] + then + echo -n "Cleaning out $OUTPUTDIR..." + rm -rf $OUTPUTDIR + echo "Done!" + fi + +jw -f docbook \ + -b $STUFFPATH/31-indexed-html \ + -d $STUFFPATH/stylesheets/docbook31/redhat.dsl#html \ + -o $OUTPUTDIR \ + $* diff --git a/ccm-iaw-aplaws/doc/docs-stuff/addcss.py b/ccm-iaw-aplaws/doc/docs-stuff/addcss.py new file mode 100644 index 000000000..a2e497d44 --- /dev/null +++ b/ccm-iaw-aplaws/doc/docs-stuff/addcss.py @@ -0,0 +1,59 @@ +#!/usr/bin/python + +## script to add css to RHL HTML pages +## Copyright (C) 2002 Red Hat, Inc. +## Copyright (C) 2002 Tammy Fox + +## Author: Tammy Fox + +import sys +import string +import os +import re +import tempfile + +#grab files specified on command line +html_files = sys.argv[1:] + +for file in html_files: + + ## add header + #open file + f = open(file, "rw") + + #read in contents of file + content = f.read() + #reg expression to find BODY tag + replace_this = re.search(' + +# Make sure we have an absolute path to the backend and stylesheet, as +# jw doesn't like relative paths... + +STUFFPATH=`dirname $0` +if [ -n "${STUFFPATH##/*}" ] +then + STUFFPATH=$PWD/$STUFFPATH +fi + +DVI_PAGES=$1 +FILENAME=$2 + +export DVI_PAGES + +if [ "$1" == "" ] || [ "$2" == "" ] ; then + echo "Usage: $0 " + echo "example: $0 42-50 rhl-cg-en.sgml" + exit 1 +fi + +# +#Grab name of the SGML file without extension +# + + +FILENAME="`echo $FILENAME | sed 's,\.sgml$,,;s,\.sgm$,,'`" + +# Generate index +jw -f docbook \ + -b $STUFFPATH/index \ + -d $STUFFPATH/stylesheets/redhat.dsl#html \ + -o $FILENAME-tmp \ + ${FILENAME}.sgml + +# Generate PS with generated index +jw -f docbook \ + -b $STUFFPATH/indexedpg-ps \ + -d $STUFFPATH/stylesheets/redhat.dsl#print \ + ${FILENAME}.sgml + +# Remove temp directory +echo -n Removing temp directory $PWD/$FILENAME-tmp... +rm -rf $PWD/$FILENAME-tmp +echo Done! + diff --git a/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/Xresources.txt b/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/Xresources.txt new file mode 100644 index 000000000..7c9e742a4 --- /dev/null +++ b/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/Xresources.txt @@ -0,0 +1,18 @@ +You can modify the background color, foreground color, font used, window size, and more by editing the .Xresources file in your home directory. If this file does not exist, you will need to create it. + +Also note that you must type the command + +xrdb -merge .Xresources + +from your home directory to have X reread this configuration file, and you must restart Emacs before the changes will take effect. + +Sample .Xresources file: + +emacs.background: Wheat +emacs.f oreground: Black +emacs.pointerColor: Blue +emacs.cursorColor: Red +emacs.bitmapIcon: on +emacs.font: fixed +emacs.geometry: 100x45 + diff --git a/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/emacsfile.txt b/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/emacsfile.txt new file mode 100644 index 000000000..6c894abed --- /dev/null +++ b/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/emacsfile.txt @@ -0,0 +1,130 @@ +This is a copy of Dave Mason's .emacs file. Add the following to your +own: + +----------------------begin cut------------------------- + +;; +;;MODES +;; + +(setq auto-mode-alist (cons '("\\.sgml$" . sgml-mode) auto-mode-alist)) +;;(setq auto-mode-alist (cons '("\\.sgm$" . sgml-mode) auto-mode-alist)) + +;;turn on html-helper-mode +;;don't really need this with psgml, i think +(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t) +(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) +auto-mode-alist)) + +;; turn on auto-fill in `text-mode' and derived modes +;;(mail, news, etc) +(add-hook 'text-mode-hook 'turn-on-auto-fill) + +;; +;;SGML!! +;; +;;############################################################# + +;; +;;PSGML mode stuff +;; + + +(autoload 'sgml-mode "psgml" "My Most Major Mode" t) + +(setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (turn-on-auto-fill) (setq fill-column 80))) + +(defun My-SGML-keymap () + (local-set-key [(alt i)] + '(lambda () + (interactive) + (sgml-indent-line) + (sgml-insert-element 'item) + (sgml-indent-line))) + (local-set-key [(alt l)] + '(lambda () + (interactive) + (sgml-insert-element 'list) + (sgml-insert-element 'item) + (sgml-indent-line))) + (local-set-key [(alt p)] + '(lambda () + (interactive) + (sgml-indent-line) + (sgml-insert-element 'para) + (sgml-indent-line))) + (local-set-key [(alt -)] + '(lambda () + (interactive) + (insert "—")))) + +(add-hook 'sgml-mode-hook 'My-SGML-keymap) + +;; +;; Fix up indentation of data... +;; + +(setq-default sgml-indent-data t) + +;; +;; SGML markup faces. +;; + +(setq-default sgml-set-face t) + + +(make-face 'sgml-comment-face) +(make-face 'sgml-doctype-face) +(make-face 'sgml-end-tag-face) +(make-face 'sgml-entity-face) +(make-face 'sgml-ignored-face) +(make-face 'sgml-ms-end-face) +(make-face 'sgml-ms-start-face) +(make-face 'sgml-pi-face) +(make-face 'sgml-sgml-face) +(make-face 'sgml-short-ref-face) +(make-face 'sgml-start-tag-face) + +(set-face-foreground 'sgml-comment-face "maroon") +(set-face-foreground 'sgml-doctype-face "dark green") +(set-face-foreground 'sgml-end-tag-face "blue2") +(set-face-foreground 'sgml-entity-face "red2") +(set-face-foreground 'sgml-ignored-face "maroon") +(set-face-background 'sgml-ignored-face "gray90") +(set-face-foreground 'sgml-ms-end-face "maroon") +(set-face-foreground 'sgml-ms-start-face "maroon") +(set-face-foreground 'sgml-pi-face "maroon") +(set-face-foreground 'sgml-sgml-face "maroon") +(set-face-foreground 'sgml-short-ref-face "goldenrod") +(set-face-foreground 'sgml-start-tag-face "blue2") + +(setq-default sgml-markup-faces + '((comment . sgml-comment-face) + (doctype . sgml-doctype-face) + (end-tag . sgml-end-tag-face) + (entity . sgml-entity-face) + (ignored . sgml-ignored-face) + (ms-end . sgml-ms-end-face) + (ms-start . sgml-ms-start-face) + (pi . sgml-pi-face) + (sgml . sgml-sgml-face) + (short-ref . sgml-short-ref-face) + (start-tag . sgml-start-tag-face))) + + +(defun docbook-mode () + (sgml-mode) + ) + + +;; +;;END SGML STUFF +;; +;;################################################################## + + + (global-set-key [(f1)] (lambda () (interactive) (manual- + entry (current-word)))) + + +---------------------end cut------------------------------- diff --git a/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/xdefaults.txt b/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/xdefaults.txt new file mode 100644 index 000000000..7bbb9183e --- /dev/null +++ b/ccm-iaw-aplaws/doc/docs-stuff/fundamentals/xdefaults.txt @@ -0,0 +1,19 @@ +Warning: This no longer works with the current version of RHL. Please refer to Xresources.txt. + +In your .Xdefaults file, you'll find entries for the display +properties of Emacs. If you wish, you can substitute those entries +with the following, which will give you a larger Emacs window, and +change the default color of the background, cursor and pointer. + +----------------begin cut------------------------- + +emacs*Background: Wheat +emacs*Foreground: Black +emacs*pointerColor: Blue +emacs*cursorColor: Red +emacs*bitmapIcon: on +emacs*font: fixed +emacs.geometry: 100x45 + + +---------------end cut--------------------------- diff --git a/ccm-iaw-aplaws/doc/docs-stuff/icon/docs.png b/ccm-iaw-aplaws/doc/docs-stuff/icon/docs.png new file mode 100644 index 000000000..5adcf8652 Binary files /dev/null and b/ccm-iaw-aplaws/doc/docs-stuff/icon/docs.png differ diff --git a/ccm-iaw-aplaws/doc/generic-content-tools/filestorage-import.xsl b/ccm-iaw-aplaws/doc/generic-content-tools/filestorage-import.xsl new file mode 100644 index 000000000..53de26e84 --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content-tools/filestorage-import.xsl @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/generic-content-tools/fix-namespace.sh b/ccm-iaw-aplaws/doc/generic-content-tools/fix-namespace.sh new file mode 100755 index 000000000..d38e7593e --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content-tools/fix-namespace.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +for i in `find $1 -name '*.xml'` +do + mv $i $i.orig + xsltproc fix-namespace.xsl $i.orig > $i +done diff --git a/ccm-iaw-aplaws/doc/generic-content-tools/fix-namespace.xsl b/ccm-iaw-aplaws/doc/generic-content-tools/fix-namespace.xsl new file mode 100644 index 000000000..893b1eebc --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content-tools/fix-namespace.xsl @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/generic-content-tools/generate.sh b/ccm-iaw-aplaws/doc/generic-content-tools/generate.sh new file mode 100755 index 000000000..c8dab06ea --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content-tools/generate.sh @@ -0,0 +1,20 @@ +#!/bin/sh + + +rm -rf xml assets items +mkdir xml assets items + +( + cd xml + unzip ../aplaws.zip +) + +( + cd assets + unzip ../forms.zip + rm -f *.htm +) + +echo Fixing namespaces +./fix-namespace.sh xml +./process-esdservice-xml.pl xml items diff --git a/ccm-iaw-aplaws/doc/generic-content-tools/process-esdservice-xml.pl b/ccm-iaw-aplaws/doc/generic-content-tools/process-esdservice-xml.pl new file mode 100755 index 000000000..173fca806 --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content-tools/process-esdservice-xml.pl @@ -0,0 +1,211 @@ +#!/usr/bin/perl -w + +use strict; +use File::Basename; +use File::Path; + +sub usage() { + print "Process a set of ESDService items in UK Government Interchange format\n"; + print "into a format suitable for import into the Red Hat CMS.\n\n"; + + print "Usage: $0 [source dir] [dest dir] \n"; + print " source dir: The directory containing the XML files to process.\n"; + print " dest dir: The directory to write the processed files and directories into.\n"; + print " content section: The content section that content will be imported to.\n"; + print " (optional, defaults to \"content\")\n"; + exit(0); +} + +if (!$ARGV[1]) { + usage(); +} + + +my $sourceDir = $ARGV[0]; +my $destDir = $ARGV[1]; +my $contentSection = $ARGV[2] ? $ARGV[2] : "content"; +my $xslFile = File::Basename::dirname($0) . "/servicecontent-import.xsl"; +my $xslAssetFile = File::Basename::dirname($0) . "/filestorage-import.xsl"; + +open(TERMS, "> $destDir/term-mapping.xml") || die("Can't open file: $!"); +print TERMS < + + +EOF +; + +# A mapping from DirectoryLevel1 names to a +# DirectoryLevel1 title and hash of DirectoryLevel2 info +my %level1Dirs = (); + +for my $xmlSource (glob("$sourceDir/*.xml")) { + my $xmlFile = File::Basename::basename($xmlSource); + + open(XMLSOURCE, "< $xmlSource") || die("Couldn't open file: $!"); + my $xmlText; + { + local $/ = undef; + $xmlText = ; + } + close(XMLSOURCE); + + my $dirLevel1Title = $xmlText; + # Get the value of the DirectoryLevel1 tag + $dirLevel1Title =~ s|.*([^<]*).*|$1|s; + # Convert it to a filename-friendly format + my $dirLevel1Name = toFilename($dirLevel1Title); + + # Same for DirectoryLevel2 + my $dirLevel2Title = $xmlText; + $dirLevel2Title =~ s|.*([^<]*).*|$1|s; + my $dirLevel2Name = toFilename($dirLevel2Title); + + my $level1; + if (exists $level1Dirs{$dirLevel1Name}) { + # Get a reference to the level 1 list + $level1 = $level1Dirs{$dirLevel1Name}; + } else { + # Create the level 1 list and populate it with + # the level 1 title and an empty hash + $level1 = [$dirLevel1Title, {}]; + $level1Dirs{$dirLevel1Name} = $level1; + } + + # Get a reference to the hash that will store level 2 info + my $level2 = $level1->[1]; + my $level2Files; + if (exists $level2->{$dirLevel2Name}) { + # Get a reference to the list of files in the level 2 dir + $level2Files = $level2->{$dirLevel2Name}->[1]; + } else { + # Create a list with the level 2 title and + # an empty list of level 2 files. + $level2Files = []; + $level2->{$dirLevel2Name} = [$dirLevel2Title, $level2Files]; + } + + my $targetDir = "$destDir/$dirLevel1Name/$dirLevel2Name"; + if (! -d $targetDir) { + # Create the destination directory + File::Path::mkpath($targetDir); + } + + my $targetFile = "$targetDir/$xmlFile"; + + my $cleanedXML = $xmlText; + # We need to strip off the "xmlns" attribute or no xsl:templates will match +# $cleanedXML =~ s|xmlns:ns2="http://www.esd.org.uk/standards"||g; +# $cleanedXML =~ s|ns2:||g; + $cleanedXML =~ s|ServiceContent|ns2:ServiceContent|g; + $cleanedXML =~ s|ns3:||g; + $cleanedXML =~ s|xmlns:ns3="http://www.esd.org.uk/standards/esdbody"||g; + +# $cleanedXML =~ s| xmlns="http://www.esd.org.uk/standards/xmlschemas/draft/servicecontent.xsd"||g; + open(CLEANEDXML, "> ${targetFile}.tmp") || die("Couldn't open file: $!"); + print CLEANEDXML $cleanedXML; + close(CLEANEDXML); + + # This assumes the XML file name has the pattern [0-9]+\.xml. We use this rather than a synthetic + # value for the OIDs so we can reliably track which items have already been imported. + my $esdID = $xmlFile; + $esdID =~ s|([0-9]+)\.xml|$1|; + + # Process the file using "xsltproc", provided by the libxslt package + system(("xsltproc", "-o", $targetFile, "--param", "esdID", $esdID, $xslFile, "${targetFile}.tmp")) == 0 || + die("Error processing XML file $xmlSource: $!"); + + #unlink("${targetFile}.tmp") || die("Could not delete ${targetFile}.tmp: $!"); + print "Wrote $targetFile\n"; + + if ($cleanedXML =~ m|a\s+href="(?:forms/)?(\d+.*.pdf)|) { + my $targetAssetFile = "$targetDir/form-$xmlFile"; + system(("xsltproc", "-o", $targetAssetFile, "--param", "esdID", $esdID, "--param", "assetName", "'$1'", $xslAssetFile, "${targetFile}.tmp")) == 0 || + die("Error processing XML file $xmlSource: $!"); + print "Wrote $targetAssetFile\n"; + push(@{$level2Files}, "/$dirLevel1Name/$dirLevel2Name/form-$xmlFile"); + } + + # Append the path to the current file to the level 2 file list + push(@{$level2Files}, "/$dirLevel1Name/$dirLevel2Name/$xmlFile"); + + + my $termID = $xmlText; + # Get the value of the LGSLService tag (if any) and use it to generate the term mapping. + if ($termID =~ s|.*.*?.*|$1|s) { + open(OUTPUTXML, "< $targetFile") || die("Couldn't open file: $!"); + my $outputXML; + { + local $/ = undef; + $outputXML = ; + } + close(XMLSOURCE); + my $itemName = $outputXML; + # Get the first instance of "cms:item" from the output XML, and use this to generate + # the path to the item. + $itemName =~ s|.*]+>\s*([^<]+).*|$1|s; + print TERMS " \n"; + print TERMS " \n"; + print TERMS " \n"; + print TERMS " \n"; + } + +} + +print TERMS "\n"; +close(TERMS); + +# The header for the import index +open(INDEX, "> $destDir/index.xml") || die("Couldn't open file: $!"); +print INDEX < + + + +EOF +; + +# Generate the import index +my $id = 3; +for my $level1Name (keys %level1Dirs) { + my $level1 = $level1Dirs{$level1Name}; + my $level1Title = $level1->[0]; + print INDEX " \n"; + $id++; + + my $level2 = $level1->[1]; + for my $level2Name (keys %{$level2}) { + my $level2Title = $level2->{$level2Name}->[0]; + print INDEX " \n"; + $id++; + my $level2Files = $level2->{$level2Name}->[1]; + for my $importFile (@{$level2Files}) { + print INDEX " \n"; + } + print INDEX " \n"; + } + print INDEX " \n"; +} + +print INDEX < + + +EOF +; + +close(INDEX); + +# Convert the first argument into a filename-friendly format. +# The argument is lowercased, spaces and slashes are converted to +# hyphens, and special characters are removed. +sub toFilename { + my $result = lc(shift); + #$result =~ tr|/\\ *?!%^+=#"&:;,`~$'\s|\-\-\-|d; + $result =~ s/[^-a-zA-Z0-9_]/-/g; + # Replace any instances of "---" we may have generated, because + # 3 hyphens in a ro is just too much. + $result =~ s/-+/-/g; + #$result =~ s|---|--|g; + return $result; +} diff --git a/ccm-iaw-aplaws/doc/generic-content-tools/servicecontent-import.xsl b/ccm-iaw-aplaws/doc/generic-content-tools/servicecontent-import.xsl new file mode 100644 index 000000000..df55cb9be --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content-tools/servicecontent-import.xsl @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + en + + + + + + + + + + + + <![CDATA[ + + ]]> + + + + + + + + + internalLink + 1 + PDF Form + + + + + + + + + + + + + + + + + + + + + + + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/generic-content/README b/ccm-iaw-aplaws/doc/generic-content/README new file mode 100644 index 000000000..0abb2f6f5 --- /dev/null +++ b/ccm-iaw-aplaws/doc/generic-content/README @@ -0,0 +1,11 @@ + +To import this content, run: + + ccm-run com.arsdigita.london.importer.cms.ItemImportTool ./items/index.xml ./items/ ./assets/ + ccm-run com.arsdigita.london.terms.Importer ./items/term-mapping.xml + +To publish this & any other content in the CMS, run + + ccm-run com.arsdigita.london.util.cmd.BulkPublish + +-- End diff --git a/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-cm.sgml b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-cm.sgml new file mode 100644 index 000000000..1f0395f04 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-cm.sgml @@ -0,0 +1,37 @@ + + + + + + &BOOKID; + + + + For and , + permission is granted to copy, distribute and/or modify this document under + the terms of the GNU Free Documentation License, Version 1.1 or any later + version published by the Free Software Foundation. A copy of the license is + available at http://www.gnu.org/licenses/fdl.html. + The content described in this paragraph is copyrighted by Mission Critical Linux, Inc. (2000), + K.M. Sorenson (2000), and &FORMAL-RHI; (2000-2003). + + + + This material in may be distributed only subject to + the terms and conditions set forth in the Open Publication License, V1.0 or + later (the latest version is presently available at http://www.opencontent.org/openpub/). + Distribution of substantively modified versions of this material is + prohibited without the explicit permission of the copyright holder. + Distribution of the work or derivative of the work in any standard (paper) + book form for commercial purposes is prohibited unless prior permission is + obtained from the copyright holder. The content described in this paragraph + is copyrighted by &FORMAL-RHI; + (2000-2003). + + + &BOILERPLATE-TRADEMARKS; + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-sh.sgml b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-sh.sgml new file mode 100644 index 000000000..e47f64418 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-sh.sgml @@ -0,0 +1,123 @@ + + + + + + &BOOKID; + + + + Copyright 2001, 2002 by + &FORMAL-RHI; This material may be distributed only subject to the terms and + conditions set forth in the Open Publication License, V1.0 or later (the + latest version is presently available at http://www.opencontent.org/openpub/). + + + + Distribution of substantively modified versions of this document is + prohibited without the explicit permission of the copyright holder. + + + + Distribution of the work or derivative of the work in any standard (paper) + book form for commercial purposes is prohibited unless prior permission is + obtained from the copyright holder. + + + + The admonition graphics (note, tip, important, caution, and warning) were + created by Marianne Pecci goddess@ipass.net. They may be + redistributed with explicit permission from Marianne Pecci and Red Hat, Inc. + + + + &RH;, &RHN;, the &RH; "Shadow Man" logo, RPM, Maximum RPM, the RPM logo, Linux + Library, PowerTools, Linux Undercover, RHmember, RHmember More, Rough Cuts, + Rawhide, C2Net and all &RH;-based trademarks and logos are trademarks or registered + trademarks of &FORMAL-RHI; in the United States and other countries. + + + + Linux is a registered trademark of Linus Torvalds. + + + + Motif and UNIX are registered trademarks of The Open Group. + + + + Compaq and the names of Compaq products referenced herein are either + trademarks and/or service marks or registered trademarks and/or service + marks of Compaq. + + + + Itanium is a registered trademark of Intel Corporation. + + + + Netscape is a registered trademark of Netscape Communications Corporation in + the United States and other countries. + + + + Windows is a registered trademark of Microsoft Corporation. + + + + SSH and Secure Shell are trademarks of SSH Communications Security, Inc. + + + + FireWire is a trademark of Apple Computer Corporation. + + + + All other trademarks and copyrights referred to are the property of their + respective owners. + + + + + This manual, as well as the software described in it, is furnished under + license and may only be used or copied in accordance with the terms of such + license. The information in this manual is furnished for information use + only, is subject to change without notice, and should not be constructed as + a commitment by Red Hat, Inc. Red Hat assumes no responsibly or liability + for any errors or inaccuracies that may appear in this book. + + + Except as permitted by such license, no part of this publication may be + reproduced, stored in a retreival system, or transmitted, in any form or by + any means, electronic, mechanical, recording, or otherwise, without prior + written permission of Red Hat, Inc. + + + Portions of this manual were developed by the Apache Group, and are taken + with permission from the Apache 1.3 User s Guide at + http://www.apache.org/docs. Portions of this manual were developed by the + PHP Documentation Group, and are taken with permission from the PHP 1.3 + Manual at http://www.php.net/manual. + + + This product includes software developed by the OpenSSL Project for use in + the OpenSSL Toolkit (http://www.openssl.org). Some of the cryptographic + software in this product was written by Eric Young + (eay@cryptsoft.com). Remainder copyright C2Net Software, Inc., 1995, 1996, + 1997, 1998, 1999, and 2000. All rights reserved. + + + Stronghold Web Server 3.0 Server Setup Guide version 3.0.2 + + + Copyright 2001 + + + All terms mentioned in this book that are known to be trademarks or service + marks have been approriately capitalized. Red Hat cannot attest to the + accuracy of this information. Use of a term in this book should not be + regarded as affecting the validity of any trademark or service mark. + + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-trademarks.sgml b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-trademarks.sgml new file mode 100644 index 000000000..7b4223d8c --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate-trademarks.sgml @@ -0,0 +1,77 @@ + + &RH;, &RHN;, the &RH; "Shadow Man" logo, RPM, Maximum RPM, the RPM logo, Linux + Library, PowerTools, Linux Undercover, RHmember, RHmember More, Rough Cuts, + Rawhide and all &RH;-based trademarks and logos are trademarks or registered + trademarks of &FORMAL-RHI; in the United States and other countries. + + + + Linux is a registered trademark of Linus Torvalds. + + + + Motif and UNIX are registered trademarks of The Open Group. + + + + + + Intel and Pentium are registered trademarks of Intel + Corporation. Itanium and Celeron are trademarks of Intel Corporation. + + + + AMD, Opteron, Athlon, Duron, and K6 are registered trademarks of Advanced + Micro Devices, Inc. + + + + Netscape is a registered trademark of Netscape Communications Corporation in + the United States and other countries. + + + + Java and Swing are trademarks or registered trademarks of Sun Microsystems, + Inc. in the U.S. or other countries. + + + + Oracle is a registered trademark, and Oracle8i, Oracle9i, and + interMedia are trademarks or registered trademarks of + Oracle Corporation. + + + Microsoft and Windows are either registered trademarks or trademarks of + Microsoft Corporation in the United States and/or other countries. + + + + SSH and Secure Shell are trademarks of SSH Communications Security, Inc. + + + + FireWire is a trademark of Apple Computer Corporation. + + + IBM, AS/400, OS/400, RS/6000, S/390, and zSeries are registered + trademarks of International Business Machines Corporation. eServer, iSeries, + and pSeries are trademarks of International Business Machines + Corporation. + + + All other trademarks and copyrights referred to are the property of their + respective owners. + + + + The GPG fingerprint of the security@redhat.com key is: + + + CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/boilerplate.sgml b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate.sgml new file mode 100644 index 000000000..4bd6fcc02 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/boilerplate.sgml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + &FORMAL-RHI; + + + +
+ 1801 Varsity Drive + Raleigh NC 27606-2072 USA + Phone: +1 919 754 3700 + Phone: 888 733 4281 + Fax: +1 919 754 3701 + PO Box 13588 + Research Triangle Park NC 27709 USA +
+
+ + + &BOOKID; + + + + Copyright 2004 by &FORMAL-RHI; + This material may be distributed only subject to the terms and conditions + set forth in the Open Publication License, V1.0 or later (the latest version + is presently available at http://www.opencontent.org/openpub/). + + + + Distribution of substantively modified versions of this document is + prohibited without the explicit permission of the copyright holder. + + + + Distribution of the work or derivative of the work in any standard (paper) + book form for commercial purposes is prohibited unless prior permission is + obtained from the copyright holder. + + + &BOILERPLATE-TRADEMARKS; + +
diff --git a/ccm-iaw-aplaws/doc/rh-sgml/code-conventions.sgml b/ccm-iaw-aplaws/doc/rh-sgml/code-conventions.sgml new file mode 100644 index 000000000..47107baca --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/code-conventions.sgml @@ -0,0 +1,112 @@ + + Code Presentation Conventions + + In addition to the standard document conventions covered in , there are some additional conventions + related specifically to discussing source code: + + + + + classname + + This is the name of a class in an object-oriented + (OO) programming language. For example, the + class + com.arsdigita.categorization.CategoryTreeNode. + + + + + method name + + This is the name of a method in an OO programming language, + e.g. the method getBaseDataObjectType. + + + + + function + + The name of a function or subroutine, as in a programming + language. For example, the function + SecurityLogger.warn(). + + + + + variable name + + The name of a variable. For example, the variable + BASE_DATA_OBJECT_TYPE. + + + + + + + An option for a software command or + Method. For example, a user has been granted + privileges on an object. + + + + + return value + + The value returned by a function. For example, a method returns + null. + + + + + replaceable + + Content that may, must or will be replaced by the user or a + program. For example, the code is commented with + NOTE(n), + where n is the number of the + NOTE. + + + + + program listing + + A literal listing of all or part of a program. The + \ character is used to break a line + for printing purposes. You will want to reconnect them back into a + single line, preserving the spacing in the line. + + + +import com.arsdigita.kernel.permissions.PermissionService; +import com.arsdigita.kernel.permissions.PermissionDescriptor; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; +import com.arsdigita.persistence.OID; + +OID acsObject = new OID("example.MyACSObject", +new BigDecimal(50)); + +OID party = new OID("com.arsdigita.kernel.Group", new BigDecimal(5)); + + +PermissionDescriptor perm = +new PermissionDescriptor(PrivilegeDescriptor.READ, +acsObject, party); + +PermissionService.grantPermission(perm); + + + + + first term + + The first occurrence of a term, such as the first time we + introduce a bulletin-board and note its + abbreviated form, bboard. + + + + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/cut-paste.sgml b/ccm-iaw-aplaws/doc/rh-sgml/cut-paste.sgml new file mode 100644 index 000000000..95897aa9b --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/cut-paste.sgml @@ -0,0 +1,16 @@ + + + + Copying and Pasting Text With X + + copying and pasting text + when using X + + + + Copying and pasting text is easy using your mouse and the X Window + System. To copy text, simply click and drag your mouse over the text to + highlight it. To paste the text somewhere, click the middle mouse + button in the spot where the text should be placed. + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/doc-conventions.sgml b/ccm-iaw-aplaws/doc/rh-sgml/doc-conventions.sgml new file mode 100644 index 000000000..48ae3de53 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/doc-conventions.sgml @@ -0,0 +1,325 @@ + + + + Document Conventions + + + conventions + document + + When you read this manual, certain words are represented + in different fonts, typefaces, sizes, and weights. This highlighting is + systematic; different words are represented in the same style to + indicate their inclusion in a specific category. The types of words + that are represented this way include the following: + + + + + command + + + Linux commands (and other operating system commands, when used) + are represented this way. This style should indicate to you that + you can type the word or phrase on the command line and press + Enter to invoke a command. Sometimes a command + contains words that would be displayed in a different style on their + own (such as file names). In these cases, they are considered to be + part of the command, so the entire phrase is displayed as a command. + For example: + + + + Use the cat testfile command to view the + contents of a file, named testfile, in the + current working directory. + + + + + + + file name + + + File names, directory names, paths, and RPM package names are + represented this way. This style should indicate that a + particular file or directory exists by that name on your system. Examples: + + + + The .bashrc file in your home directory + contains bash shell definitions and aliases for your own use. + + + + The /etc/fstab file contains information + about different system devices and file systems. + + + + Install the webalizer RPM if you want to use + a Web server log file analysis program. + + + + + + + + application + + + This style indicates that the program is an end-user application + (as opposed to system software). For example: + + + + Use Mozilla to browse + the Web. + + + + + + + key + + + A key on the keyboard is shown in this style. For example: + + + + To use Tab completion, type in a character and then + press the Tab key. Your terminal displays the list + of files in the directory that start with that letter. + + + + + + + key + combination + + + A combination of keystrokes is represented in this way. For + example: + + + + The Ctrl Alt + Backspace key combination exits your + graphical session and return you to the graphical login screen or + the console. + + + + + + + text found on a GUI interface + + + A title, word, or phrase found on a GUI interface screen or + window is shown in this style. Text shown in this style is being + used to identify a particular GUI screen or an element on a GUI + screen (such as text associated with a checkbox or field). Example: + + + + Select the Require Password checkbox if you + would like your screensaver to require a password before stopping. + + + + + + + top level of a menu on a GUI screen or window + + + + A word in this style indicates that the word is + the top level of a pulldown menu. If you click on the word on + the GUI screen, the rest of the menu should appear. For example: + + + + Under File on a GNOME terminal, the + New Tab option allows you to open + multiple shell prompts in the same window. + + + + If you need to type in a sequence of commands from a GUI menu, + they are shown like the following example: + + + + Go to Main Menu Button (on the Panel) => + Programming => Emacs + to start the Emacs text editor. + + + + + + + + + button on a GUI screen or window + + + + This style indicates that the text can be found on a clickable + button on a GUI screen. For example: + + + + Click on the Back button to return to the + webpage you last viewed. + + + + + + + computer output + + + Text in this style indicates text displayed to a shell prompt + such as error messages and responses to commands. For example: + + + + The ls command displays the contents of a + directory. For example: + + + + +Desktop about.html logs paulwesterberg.png +Mail backupfiles mail reports + + + + + The output returned in response to the command (in this case, the + contents of the directory) is shown in this style. + + + + + + + prompt + + + A prompt, which is a computer's way of signifying that it is ready + for you to input something, is shown in this style. + Examples: + + + + $ + + + + # + + + + [stephen@maturin stephen]$ + + + + leopard login: + + + + + + + + user input + + + Text that the user has to type, either on the command line, or + into a text box on a GUI screen, is displayed in this style. In + the following example, text is displayed in + this style: + + + + To boot your system into the text based installation program, you + must type in the text command at the + boot: prompt. + + + + + + replaceable + + Text used for examples which is meant to be replaced with data + provided by the user is displayed in this style. In the following + example, <version-number> is displayed + in this style: + + The directory for the kernel source is + /usr/src/<version-number>/, + where <version-number> is the version + of the kernel installed on this system. + + + + + + + + Additionally, we use several different strategies to draw your attention to + certain pieces of information. In order of how critical the information is + to your system, these items are marked as note, tip, important, caution, + or a warning. For example: + + + + Note + + Remember that Linux is case sensitive. In other words, a rose is not + a ROSE is not a rOsE. + + + + + Tip + + The directory /usr/share/doc/ contains additional + documentation for packages installed on your system. + + + + + Important + + If you modify the DHCP configuration file, the changes will not take + effect until you restart the DHCP daemon. + + + + + Caution + + Do not perform routine tasks as root — use a regular user account + unless you need to use the root account for system administration tasks. + + + + + Warning Be careful to remove only the necessary + &PROD; partitions. Removing other partitions could result in data loss or + a corrupted system environment. + + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/rh-entities.sgml b/ccm-iaw-aplaws/doc/rh-sgml/rh-entities.sgml new file mode 100644 index 000000000..05ef5d12c --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/rh-entities.sgml @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> +]]> +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +x" -- Referring to the kernel version, semi-generically --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Itanium, and AMD64" -- x8664 arch --> + + + + + +IBM eServer iSeries and IBM eServer pSeries" -- PPC multi arch --> + + + + + +IBM S/390 and IBM eServer zSeries" -- S390 multi arch --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/rhea-colophon.sgml b/ccm-iaw-aplaws/doc/rh-sgml/rhea-colophon.sgml new file mode 100644 index 000000000..5ccc58c25 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/rhea-colophon.sgml @@ -0,0 +1,229 @@ + + + + + The &PROD; manuals are written in DocBook SGML v4.1 format. The HTML + and PDF formats are produced using custom DSSSL stylesheets and custom + jade wrapper scripts. The DocBook SGML files are primarily written in + Emacs with the help of PSGML mode; additional + authoring and editing has been done with vi + using macros and key mappings. + + + Garrett LeSage created the admonition graphics (note, tip, important, + caution, and warning). They may be freely redistributed with the &RH; + documentation. + + + The &PROD; Product Documentation Team is: + + + + + Karsten + Wade + + Senior Technical Writer + + — Primary Writer/Maintainer of &RHEA; documentation for + &RHWAFX; and &RHECMSX;, for example the &RHWAFIG;, + the &RHWAFDG;, and the + &RHECMSDPG;. + + + + + Char + James-Tanny + + Technical Writer + + — Writer of the &RHECMSAG; and the + &RHECMSUG;. + + + The &PROD; Product Development Team made significant contributions to + the constructing, authoring, and editing of the entire line of &PROD; + documentation. + + + + + + + Archit + Shah + + Senior Software Engineer + + + + + + + + Bryan + Che + + Senior Software Engineer + + + + + + + + Dan + Berrange + + Senior Software Engineer + + + + + + + + Dennis + Gregorovic + + Senior Release Engineer + + + + + + + + Jon + Orris + + Senior QA Engineer + + + + + + + + Jim + Parsons + + Senior Software Engineer + + + + + + + + Justin + Ross + + Senior Software Engineer + + + + + + + + Rafael + Schloming + + Senior Software Engineer + + + + + + + + Richard + Li + + Director of Software Engineering + + + + + + + + Richard + Su + + Senior Software Engineer + + + + + + + + Scott + Seago + + Senior Software Engineer + + + + + + + + Vadim + Nasardinov + + Senior Software Engineer + + + + + + + None of the &PROD; documentation would be possible without the + extremely able assistance of the &RHI; Documentation Technical Lead, + + John + Ha + + Product Documentation Technical Lead + + . + + + The &PROD; documentation has descended from guides originally written + for ArsDigita. The words, images, and ideas live on from these + contributors: + + + + + + + Bob + Donald + + + + + + + Pete + Su + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/rhea-entities.sgml b/ccm-iaw-aplaws/doc/rh-sgml/rhea-entities.sgml new file mode 100644 index 000000000..280e9dd82 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/rhea-entities.sgml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/support.sgml b/ccm-iaw-aplaws/doc/rh-sgml/support.sgml new file mode 100644 index 000000000..70f1d4853 --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/support.sgml @@ -0,0 +1,29 @@ + + + + Sign Up for Support + + If you have a variant of &PROD; &PRODVER;, please remember to sign up + for the benefits you are entitled to as a &RH; customer. + + + Registration enables access to the &RH; Services you have purchased, + such as technical support and &RHN;. To register your product, go to: + + + +http://www.redhat.com/apps/activate/ + + + + Note You must activate your product before attempting + to connect to &RHN;. If your product has not been activated, &RHN; rejects + registration to channels to which the system is not entitled. + + + + Good luck, and thank you for choosing &PROD;! + + The &RH; Documentation Team + + diff --git a/ccm-iaw-aplaws/doc/rh-sgml/using-mouse.sgml b/ccm-iaw-aplaws/doc/rh-sgml/using-mouse.sgml new file mode 100644 index 000000000..970b851ab --- /dev/null +++ b/ccm-iaw-aplaws/doc/rh-sgml/using-mouse.sgml @@ -0,0 +1,37 @@ + + + + Using the Mouse + + mouse + how to use + + + + &PROD; is designed to use a three-button mouse. If you have a two-button + mouse, you should have selected three-button emulation during the + installation process. If you're using three-button emulation, pressing + both mouse buttons at the same time equates to pressing the missing + third (middle) button. + + + + In this document, if you are instructed to click with the mouse on + something, that means click the left mouse button. If you need to use + the middle or right mouse button, that will be explicitly stated. + (This will be reversed if you've configured your mouse to be used by a + left handed person.) + + + + + drag and drop + + The phrase "drag and drop" may be familiar to you. If you're instructed + to drag and drop an item on your GUI desktop, click on something and + hold the mouse button down. While continuing to hold down the mouse + button, drag the item by moving the mouse to a new location. When + you've reached the desired location, release the mouse button to drop + the item. + + diff --git a/ccm-iaw-aplaws/etc/servlet-declarations.xml b/ccm-iaw-aplaws/etc/servlet-declarations.xml new file mode 100644 index 000000000..1093f614a --- /dev/null +++ b/ccm-iaw-aplaws/etc/servlet-declarations.xml @@ -0,0 +1,23 @@ + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + diff --git a/ccm-iaw-aplaws/etc/servlet-mappings.xml b/ccm-iaw-aplaws/etc/servlet-mappings.xml new file mode 100644 index 000000000..54d31d105 --- /dev/null +++ b/ccm-iaw-aplaws/etc/servlet-mappings.xml @@ -0,0 +1,10 @@ + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + diff --git a/ccm-iaw-aplaws/pdl/.dummy b/ccm-iaw-aplaws/pdl/.dummy new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-iaw-aplaws/src/WEB-INF/aplaws/iaw-nav-domain-1.00.xml b/ccm-iaw-aplaws/src/WEB-INF/aplaws/iaw-nav-domain-1.00.xml new file mode 100644 index 000000000..3123c67d8 --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/aplaws/iaw-nav-domain-1.00.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/aplaws/iaw-nav-hierarchy-1.00.xml b/ccm-iaw-aplaws/src/WEB-INF/aplaws/iaw-nav-hierarchy-1.00.xml new file mode 100644 index 000000000..441260d0b --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/aplaws/iaw-nav-hierarchy-1.00.xml @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-domain.xml b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-domain.xml new file mode 100644 index 000000000..87ee0c8c2 --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-domain.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-hierarchy.xml b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-hierarchy.xml new file mode 100644 index 000000000..ed6c7c16b --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-hierarchy.xml @@ -0,0 +1,1034 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xml b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xml new file mode 100644 index 000000000..b983bd2d7 --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xsl b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xsl new file mode 100644 index 000000000..34b25d21e --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xsl @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp b/ccm-iaw-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp new file mode 100644 index 000000000..b32819af7 --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp @@ -0,0 +1,44 @@ + + + + + + NavigationModel model = new CMSNavigationModel(); + + + + + + + ((com.arsdigita.london.navigation.ui.category.Path)categoryPath) + .setModel(model); + + + + ((com.arsdigita.london.navigation.ui.category.Menu)categoryMenu) + .setModel(model); + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp b/ccm-iaw-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp new file mode 100644 index 000000000..c3b18a227 --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp @@ -0,0 +1,44 @@ + + + + + + NavigationModel model = new CMSNavigationModel(); + + + + + + + ((com.arsdigita.london.navigation.ui.category.Path)categoryPath) + .setModel(model); + + + + ((com.arsdigita.london.navigation.ui.category.Menu)categoryMenu) + .setModel(model); + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/WEB-INF/resources/aplaws-stylesheet-paths.txt b/ccm-iaw-aplaws/src/WEB-INF/resources/aplaws-stylesheet-paths.txt new file mode 100644 index 000000000..73c1cb5bf --- /dev/null +++ b/ccm-iaw-aplaws/src/WEB-INF/resources/aplaws-stylesheet-paths.txt @@ -0,0 +1,37 @@ +# -*- text -*- +# This file locates stylesheets, if you are using the +# "PatternStylesheetResolver". Please read the Javadoc for that file for +# the full story. + +# Output type is for things such as text/javascript +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::-::outputtype::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::-::outputtype::.xsl + +# Grabs custom item xsl for CMS +http://::host::/__ccm__/servlet/content-item/index.xsl?oid=::item_template_oid::&delegated=::item_delegated_url:: + +# added by Quasimodo +# Theme with single entry point (e.g Mandalay) +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/start.xsl + +# Theme, with optional locale & prefix +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::-::prefix::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::-::prefix::.xsl + +# Theme, with optional locale +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::.xsl + +# APLAWS generic default, with locale and prefix +# XXX change ROOT -> ccm-ldn-aplaws +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::-::prefix::-::locale::.xsl +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::-::prefix::.xsl + +# APLAWS generic default, with locale +# XXX change ROOT -> ccm-ldn-aplaws +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::-::locale::.xsl +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::.xsl + +# Global default, from application's own web app +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::.xsl diff --git a/ccm-iaw-aplaws/src/ccm-iaw-aplaws.config b/ccm-iaw-aplaws/src/ccm-iaw-aplaws.config new file mode 100644 index 000000000..22f63e443 --- /dev/null +++ b/ccm-iaw-aplaws/src/ccm-iaw-aplaws.config @@ -0,0 +1,5 @@ + + + + diff --git a/ccm-iaw-aplaws/src/ccm-iaw-aplaws.load b/ccm-iaw-aplaws/src/ccm-iaw-aplaws.load new file mode 100644 index 000000000..8fd14b0c0 --- /dev/null +++ b/ccm-iaw-aplaws/src/ccm-iaw-aplaws.load @@ -0,0 +1,22 @@ + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Aplaws.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Aplaws.java new file mode 100644 index 000000000..4f6d74d7e --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Aplaws.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2002-2005 Runtime Collective Ltd. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import org.apache.log4j.Logger; + +public class Aplaws { + public static final String versionId = + "$Id: Aplaws.java 1297 2006-08-25 18:17:50Z apevec $"; + + private static final Logger LOG = Logger.getLogger(Aplaws.class); + + private static AplawsConfig aplawsConfig = new AplawsConfig(); + + static { + aplawsConfig.load(); + } + + public static final AplawsConfig getAplawsConfig() { + return aplawsConfig; + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/AplawsConfig.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/AplawsConfig.java new file mode 100644 index 000000000..f4d3db66b --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/AplawsConfig.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2002-2005 Runtime Collective Ltd. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.runtime.AbstractConfig; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.BooleanParameter; +import com.arsdigita.util.parameter.StringParameter; + +/** + * AplawsConfig + * + * @version $Revision: 1.2 $ $Date: 2005/01/07 19:01:40 $ + */ + +public class AplawsConfig extends AbstractConfig { + + public final static String versionId = "$Id: AplawsConfig.java 1565 2007-04-18 16:46:14Z apevec $"; + + private final Parameter m_ajaxExpandAllBranches = new BooleanParameter( + "com.arsdigita.aplaws.ajax_expand_on_all_branches", + Parameter.OPTIONAL, + Boolean.FALSE); + + + + public AplawsConfig() { + register(m_ajaxExpandAllBranches); + loadInfo(); + } + + + + public boolean ajaxExpandAllBranches () { + return ((Boolean)get(m_ajaxExpandAllBranches)).booleanValue(); + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/AplawsConfig_parameter.properties b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/AplawsConfig_parameter.properties new file mode 100644 index 000000000..b4de56826 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/AplawsConfig_parameter.properties @@ -0,0 +1,4 @@ +com.arsdigita.aplaws.ajax_expand_on_all_branches.title=Use Ajax on all branch expansions +com.arsdigita.aplaws.ajax_expand_on_all_branches.purpose=Use Ajax on all branches, or bring back entire subtree on expansion of top level root +com.arsdigita.aplaws.ajax_expand_on_all_branches.example=true|false +com.arsdigita.aplaws.ajax_expand_on_all_branches.format=[boolean] diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Initializer.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Initializer.java new file mode 100644 index 000000000..6f1697843 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Initializer.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.categorization.Categorization; +import com.arsdigita.london.terms.TermCategoryListener; +import com.arsdigita.runtime.CompoundInitializer; +import com.arsdigita.runtime.DomainInitEvent; +import org.apache.log4j.Logger; + +import com.arsdigita.templating.PatternStylesheetResolver; + +/** + * The APLAWS initializer. + * + * @version $Id: Initializer.java 1232 2006-06-22 12:01:30Z sskracic $ + */ +public class Initializer extends CompoundInitializer { + + private static Logger s_log = Logger.getLogger + (Initializer.class.getName()); + + + public void init(DomainInitEvent evt) { + super.init(evt); + + Categorization.addCategoryListener(new TermCategoryListener()); + + PatternStylesheetResolver.registerPatternGenerator( + "webapp", + new WebAppPatternGenerator() + ); + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Loader.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Loader.java new file mode 100644 index 000000000..a6ac9f8da --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/Loader.java @@ -0,0 +1,379 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.london.navigation.Template; +import com.arsdigita.london.navigation.TemplateMapping; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.london.terms.importer.Parser; +import com.arsdigita.london.portal.PageLayout; +import com.arsdigita.london.portal.Workspace; + +import com.arsdigita.categorization.Category; +import com.arsdigita.categorization.RootCategoryCollection; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.SecurityManager; +import com.arsdigita.cms.ui.role.RoleFactory; +import com.arsdigita.loader.PackageLoader; +import com.arsdigita.kernel.Role; +import com.arsdigita.kernel.RoleCollection; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; +import com.arsdigita.persistence.DataQuery; +import com.arsdigita.runtime.ScriptContext; +import com.arsdigita.util.Assert; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.util.parameter.BooleanParameter; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.StringParameter; +import com.arsdigita.util.parameter.URLParameter; +import com.arsdigita.web.Application; + +import org.apache.log4j.Logger; + +import java.net.URL; +import java.net.MalformedURLException; +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +/** + * Loader. + * + * Creates category domains in the terms application according to + * configuration files and adds jsp templates to navigation. + * + * @author Justin Ross <jross@redhat.com> + * @version $Id: Loader.java 755 2005-09-02 13:42:47Z sskracic $ + */ +public class Loader extends PackageLoader { + public final static String versionId = + "$Id: Loader.java 755 2005-09-02 13:42:47Z sskracic $" + + "$Author: sskracic $" + + "$DateTime: 2004/03/25 09:34:39 $"; + + private static final Logger s_log = Logger.getLogger(Loader.class); + + private static final String[] categoryFiles = new String[] { + "WEB-INF/aplaws/iaw-nav-domain-1.00.xml" + , "WEB-INF/aplaws/iaw-nav-hierarchy-1.00.xml" + }; + + private StringParameter m_navigationDomain; + // private StringParameter m_servicesDomain; + // private StringParameter m_interactionDomain; + // private StringParameter m_subjectDomain; + // private StringParameter m_rssDomain; + + public Loader() { + + // Es werden stumpf mehrere Kategorisierungsdomains fuer TERMS + // definiert und dann über xml Dateien gefüllt: + // navigationDomain f. Navigation + // subjectDomain f. ??? + // interactionDomain f. ??? + // rssDomain fuer vermutlich RSS Feed + // + m_navigationDomain = new StringParameter( + "com.arsdigita.aplaws.navigation_domain", + Parameter.REQUIRED, + "IAW-NAV"); + register(m_navigationDomain); + + /* + * You may add more catagory domains by adding resources + * according the followin schema + */ + + /* currently not used + m_subjectDomain = new StringParameter( + "com.arsdigita.aplaws.subject_domain", + Parameter.REQUIRED, + "LGCL"); + register(m_subjectDomain); + */ + + /* currently not used + m_interactionDomain = new StringParameter( + "com.arsdigita.aplaws.subject_domain", + Parameter.REQUIRED, + "LGIL"); + register(m_interactionDomain); + */ + + /* currently not used + m_rssDomain = new StringParameter( + "com.arsdigita.aplaws.rss_domain", + Parameter.REQUIRED, + "APLAWS-RSS"); + register(m_rssDomain); + */ + + + } + + + public void run(final ScriptContext ctx) { + + String[] files = categoryFiles; + + final Parser parser = new Parser(); + for (int i = 0 ; i < files.length ; i++) { + final String file = files[i]; + if (s_log.isInfoEnabled()) { + s_log.info("Process " + file); + } + parser.parse(Thread.currentThread().getContextClassLoader + ().getResourceAsStream + (file)); + } + + String navigationKey = (String)get(m_navigationDomain); + registerDomain(navigationKey, "/navigation/", null); + registerDomain(navigationKey, "/content/", null); + registerDomain(navigationKey, "/portal/", null); + //registerDomain(navigationKey, "/atoz/", null); + //registerDomain(navigationKey, "/admin/subsite/", null); + + /* + * You may add more catagory domains by adding resources + * according the following schema + */ + + // String subjectKey = (String)get(m_subjectDomain); + // registerDomain(subjectKey, "/search/", null); + // registerDomain(subjectKey, "/content/", "subject"); + + // String servicesKey = (String)get(m_servicesDomain); + // registerDomain(servicesKey, "/services/", null); + // registerDomain(servicesKey, "/content/", "services"); + + // String rssKey = (String)get(m_rssDomain); + // registerDomain(rssKey, "/channels/", null); + // registerDomain(rssKey, "/content/", "rss"); + + // String interactionKey = (String)get(m_interactionDomain); + // registerDomain(interactionKey, "/content/", "interaction"); + + + + // register new / addidional JSP templates (index pages) in Navigation + // registerServicesTemplate("/services/"); wird nicht gebraucht + registerNavigationTemplates(); + + // Switch /portal/ to use 1 column layout for funky aplaws stuff. + Workspace portal = (Workspace)Application + .retrieveApplicationForPath("/portal/"); + portal.setDefaultLayout(PageLayout + .findLayoutByFormat(PageLayout.FORMAT_ONE_COLUMN)); + } + +// public void registerServicesTemplate(String appURL) { +// Application app = Application.retrieveApplicationForPath(appURL); +// Assert.exists(app, Application.class); +// Category root = Category.getRootForObject(app); +// Assert.exists(root, Category.class); +// +// Template template = Template.create( +// "APLAWS Services", +// "APLAWS ESD Toolkit Services", +// "/packages/navigation/templates/aplaws-services.jsp"); +// +// new TemplateMapping( template, +// root, +// Template.DEFAULT_DISPATCHER_CONTEXT, +// Template.DEFAULT_USE_CONTEXT ); +// } + + /** + * Use Package com.arsdigita.london.navigation to add additional + * templates (JSP page - index page) for use in navigation. + * These JSP pages can be choosen in admin/navigation as index + * pages for one or more specific categories. + * + * TODO: make configurable without recompiling! + */ + public void registerNavigationTemplates() { + Template template ; + + template = Template.create( + "IAW AtoZ paginator", + "IAW AtoZ paginator index page", + "/packages/navigation/templates/iaw-atoz.jsp"); + + template = Template.create( + "IAW Default", + "IAW default index page", + "/packages/navigation/templates/iaw-default.jsp"); + + template = Template.create( + "IAW Portalseite", + "IAW Portal Page", + "/packages/navigation/templates/iaw-portal.jsp"); + + template = Template.create( + "IAW Recent", + "IAW reverse order page", + "/packages/navigation/templates/iaw-recent.jsp"); + + template = Template.create( + "IAW Welcome Page", + "IAW Welcome Page for navigation", + "/packages/navigation/templates/iaw-welcome.jsp"); + + } + + /** + * Function to create an empty default domain in terms, preconfigured + * for navigation. It may be populated manually by the user/publisher + * using the terms admin application. + * This step is useful only if no specific navigation tree is + * delivered. + */ + // -- public void registerDefaultNavigationDomain() { + + // -- private StringParameter m_customNavKey; + // -- private URLParameter m_customNavDomainURL; + // -- private StringParameter m_customNavPath; + // -- private StringParameter m_customNavUseContext; + // -- private StringParameter m_customNavTitle; + // -- private StringParameter m_customNavDesc; + + // -- m_customNavKey = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_key", + // -- Parameter.REQUIRED, + // -- "APLAWS-NAVIGATION"); + +/* Zugriff auf Website wird nicht benötigt, aber der Parameter bei Einrichtung + * der Kategorien. Funktion URL prüft auf korrekte Syntax, nicht auf Existenz + */ + // -- try { + // -- m_customNavDomainURL = new URLParameter( + // -- "com.arsdigita.aplaws.custom_nav_domain_url", + // -- Parameter.REQUIRED, + // -- new URL("http://www.aplaws.org.uk/" + + // -- "standards/custom/1.00/termslist.xml")); + // -- } catch (MalformedURLException ex) { + // -- throw new UncheckedWrapperException("Cannot parse url", ex); + // -- } + + + // -- m_customNavPath = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_path", + // -- Parameter.REQUIRED, + // -- "local"); + + // -- m_customNavUseContext = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_use_context", + // -- Parameter.REQUIRED, + // -- "local"); + + // -- m_customNavTitle = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_title", + // -- Parameter.REQUIRED, + // -- "APLAWS Custom Navigation"); + + // -- m_customNavDesc = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_desc", + // -- Parameter.REQUIRED, + // -- "Installation specific navigation tree"); + + + // -- register(m_customNavDesc); + // -- register(m_customNavDomainURL); + // -- register(m_customNavKey); + // -- register(m_customNavPath); + // -- register(m_customNavTitle); + // -- register(m_customNavUseContext); + + // -- String customNavPath = (String)get(m_customNavPath); + // -- String customNavTitle = (String)get(m_customNavTitle); + + // Package com.arsdigita.web + // Application.createApplication(Navigation.BASE_DATA_OBJECT_TYPE, + // customNavPath, + // customNavTitle, + // null); + + + + // -- String customNavDesc = (String)get(m_customNavDesc); + // -- String customNavKey = (String)get(m_customNavKey); + // -- String customNavUseContext = (String)get(m_customNavUseContext); + // -- URL customNavDomainURL = (URL)get(m_customNavDomainURL); + + // -- Domain.create(customNavKey, customNavDomainURL, + // -- customNavTitle, customNavDesc, "1.0.0", new Date()); + + // registerDomain(customNavKey, '/'+customNavPath+'/', null); + // -- registerDomain(customNavKey, "/content/", customNavUseContext); + + // -- } + + /** + * Use Package com.arsdigita.london.terms to register a Domain for + * Categorisation + */ + public void registerDomain(String domainKey, + String appURL, + String context) { + if (s_log.isDebugEnabled()) { + s_log.debug("Mapping domain " + domainKey + + " to app " + appURL + + " in context " + context); + } + + Domain domain = Domain.retrieve(domainKey); // package com.arsdigita.london.terms + Application app = Application.retrieveApplicationForPath(appURL); + domain.setAsRootForObject(app, context); + if (app instanceof ContentSection) { + RoleCollection coll = ((ContentSection) app).getStaffGroup().getOrderedRoles(); + Set adminRoles = new HashSet(); + Set categorizeRoles = new HashSet(); + while (coll.next()) { + Role role = coll.getRole(); + final DataQuery privs = RoleFactory.getRolePrivileges + (app.getID(), role.getGroup().getID()); + while (privs.next()) { + String priv = (String) privs.get(RoleFactory.PRIVILEGE); + if (priv.equals(SecurityManager.CMS_CATEGORY_ADMIN)) { + adminRoles.add(role); + } else if (priv.equals(SecurityManager.CMS_CATEGORIZE_ITEMS)) { + categorizeRoles.add(role); + } + } + + } + RootCategoryCollection catCollection = Category.getRootCategories(((ContentSection) app)); + while (catCollection.next()) { + Iterator adminIter = adminRoles.iterator(); + while (adminIter.hasNext()) { + ((Role) adminIter.next()).grantPermission(catCollection.getCategory(), + PrivilegeDescriptor.ADMIN); + } + Iterator categorizeIter = categorizeRoles.iterator(); + while (categorizeIter.hasNext()) { + ((Role) categorizeIter.next()).grantPermission(catCollection.getCategory(), + Category.MAP_DESCRIPTOR); + } + } + } + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeSchemaGenerator.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeSchemaGenerator.java new file mode 100644 index 000000000..7d31607f7 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeSchemaGenerator.java @@ -0,0 +1,371 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.xml.Element; + +import com.arsdigita.persistence.metadata.ObjectType; +import com.arsdigita.persistence.metadata.Property; + +import java.util.HashMap; +import java.util.Stack; +import java.math.BigDecimal; + +public class ObjectTypeSchemaGenerator extends ObjectTypeTraversal { + + private boolean m_wrapRoot = false; + private boolean m_wrapObjects = false; + private boolean m_wrapAttributes = false; + + + + private Stack m_history = new Stack(); + private HashMap m_elements = new HashMap(); + + // The xs:element + private Element m_element; + // The (optional) xs:complexType + private Element m_type; + // The (optional) xs:sequence + private Element m_sequence; + // The (optional property + private Property m_property; + private Stack m_properties = new Stack(); + + private Element m_root; + private String m_rootName; + + public static final String SCHEMA_PREFIX = "xs:"; + + public static final String SCHEMA_NS = + "http://www.w3.org/2001/XMLSchema"; + + private static HashMap s_types = new HashMap(); + static { + s_types.put(String.class, "xs:string"); + s_types.put(Boolean.class, "xs:boolean"); + s_types.put(Integer.class, "xs:integer"); + s_types.put(BigDecimal.class, "xs:double"); + } + + protected static String lookupType(Class klass) { + if (s_types.containsKey(klass)) { + return (String)s_types.get(klass); + } + return "xs:string"; + } + + public static void registerType(Class klass, String type) { + s_types.put(klass, type); + } + + + public ObjectTypeSchemaGenerator(String rootName, + String namespace) { + m_root = new Element(SCHEMA_PREFIX + "schema", + SCHEMA_NS); + m_rootName = rootName; + + // Set the namespace for nodes defined by the schema + m_root.addAttribute("targetNamespace", namespace); + // Set the default namespace for unqualified nodes + m_root.addAttribute("xmlns", namespace); + // All nodes in an instance doc conforming to the schema + // must be qualified + m_root.addAttribute("elementFormDefault", "qualified"); + } + + public Element getRoot() { + return m_root; + } + + + /** + * Determines XML output for root object. + * If set to true a separate element will + * be output for the root object, if false, + * then the element passed into the constructor + * will be used. + */ + public void setWrapRoot(boolean value) { + m_wrapRoot = value; + } + + /** + * Determines XML output used for objects. + * If set to true, then a wrapper XML element + * will be generated for the association, + * and then individual elements generated for + * each object. If false then no wrapper + * XML element will be produced. + */ + public void setWrapObjects(boolean value) { + m_wrapObjects = value; + } + + /** + * Determines XML output used for scalar + * attributes. If set to true, then each + * attribute is output as a separate element, + * otherwise, attributes are output as simple + * attributes. + */ + public void setWrapAttributes(boolean value) { + m_wrapAttributes = value; + } + + /** + * Method called when the processing of an object + * starts + */ + protected void beginObject(ObjectType obj, + String path) { + // XXX deal with revisited objects - xs:choice possibly + + if (m_type != null && m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element parent; + String name; + if (m_element == null) { + if (m_wrapRoot) { + Element element = m_root.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", m_rootName); + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + Element sequence = type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + + parent = sequence; + name = nameFromPath(path); + } else { + parent = m_root; + name = m_rootName; + } + } else { + parent = m_sequence; + if (m_wrapObjects) { + name = "object"; + } else { + name = nameFromPath(path); + } + } + Element element = parent.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", name); + + if (m_property != null) { + if (m_property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + if (m_property.isCollection()) { + element.addAttribute("maxOccurs", "unbounded"); + } + } + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + + Element oid = type.newChildElement(SCHEMA_PREFIX + "attribute", + SCHEMA_NS); + oid.addAttribute("name", "oid"); + oid.addAttribute("type", "xs:string"); + + // Add to the path -> element map, not that we use this info yet + m_elements.put(path, element); + + // Preserve context + m_history.push(new Element[] { m_element, m_type, m_sequence }); + + m_element = element; + m_type = type; + m_sequence = null; + } + + /** + * Method called when the procesing of an object + * completes + */ + protected void endObject(ObjectType obj, + String path) { + Element[] saved = (Element[])m_history.pop(); + m_element = saved[0]; + m_type = saved[1]; + m_sequence = saved[2]; + } + + /** + * Method called when an attribute is encountered + */ + protected void handleAttribute(ObjectType obj, + String path, + Property property) { + if (m_wrapAttributes) { + if (m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element element = new Element(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + // XXX pdl type -> xs type mapping + element.addAttribute("type",lookupType(property.getJavaClass())); + + if (property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + + // Add to element + m_sequence.addContent(element); + + // Add to the path -> element map + m_elements.put(path, element); + } else { + Element element = new Element(SCHEMA_PREFIX + "attribute", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + // XXX pdl type -> xs type mapping + element.addAttribute("type", lookupType(property.getJavaClass())); + + if (property.isRequired()) { + element.addAttribute("use", "required"); + } + + // Add to element + m_type.addContent(element); + + // Add to the path -> element map + m_elements.put(path, element); + } + } + + /** + * Method called when the processing of a role + * starts + */ + protected void beginRole(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + if (m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element element = m_sequence.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + if (property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + Element sequence = type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + + // Preserve context + m_history.push(new Element[] { m_element, m_type, m_sequence }); + + m_element = element; + m_type = type; + m_sequence = sequence; + } + m_properties.push(m_property); + m_property = property; + } + + /** + * Method called when the procesing of a role + * completes + */ + protected void endRole(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + Element[] saved = (Element[])m_history.pop(); + m_element = saved[0]; + m_type = saved[1]; + m_sequence = saved[2]; + } + m_property = (Property)m_properties.pop(); + } + + /** + * Method called when the processing of an association + * starts + */ + protected void beginAssociation(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + if (m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element element = m_sequence.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + if (property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + Element sequence = type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + + // Preserve context + m_history.push(new Element[] { m_element, m_type, m_sequence }); + + m_element = element; + m_type = type; + m_sequence = sequence; + } + m_properties.push(m_property); + m_property = property; + } + + /** + * Method called when the procesing of an association + * completes + */ + protected void endAssociation(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + Element[] saved = (Element[])m_history.pop(); + m_element = saved[0]; + m_type = saved[1]; + m_sequence = saved[2]; + } + m_property = (Property)m_properties.pop(); + } + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversal.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversal.java new file mode 100644 index 000000000..802d77164 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversal.java @@ -0,0 +1,358 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.util.Assert; + +import com.arsdigita.persistence.metadata.ObjectType; +import com.arsdigita.persistence.metadata.Property; +import com.arsdigita.persistence.metadata.MetadataRoot; + +import java.util.Iterator; +import java.util.HashMap; + +import org.apache.log4j.Logger; + +// XXX this class is pretty similar to DomainObjectTraversal +// and it would be nice to figure out a way to let them share +// some of their logic (provided it didn't cripple / obfuscate +// the API). + +// At minimum the process for registering & looking up hierachical +// adapters can be shared. Also the mangling of names / paths. + + +/** + *

This class provides a general purpose framework for iterating + * over a domain object's properties, processing attributes and + * traversing associations as required.

+ * + *

Subclasses should implement the startXXX and endXXX methods to + * provide whatever processing logic they require upon encountering + * attributes, roles, associations and objects.

+ * + *

The {@link com.arsdigita.domain.ObjectTypeTraversalAdapter} + * provides a means to control which properties are processed and, + * most importantly, which associations are traversed. When + * registering an adapter, a 'use context' is supplied allowing + * different adapters to be used according to the requirements of any + * implementing subclass. It is recommended that the use context be + * based on the fully qualified name of the class using + * ObjectTypeTraversal, e.g., + * com.arsdigita.cms.ui.ObjectTypeRenderer.

+ * + *

The path argument provided to the adapter and the startXXX ad + * endXXX methods indicates which associations are currently being + * traversed. The first element in the path is always '/object'. If it + * then starts to traverse the 'rootCategory' association, the path + * will become '/object/rootCategory'. For self-recursive + * associations, rather than building up a long repeating string, the + * path will be shortened by adding a '+' for each element that is + * repeated. For example, '/object/container+' indicates that the + * container association has been followed two or more times.

+ */ +public abstract class ObjectTypeTraversal { + + private static HashMap s_adapters = new HashMap(); + + private static final Logger s_log = Logger.getLogger(ObjectTypeTraversal.class); + + /** + * Registers a traversal adapter for an object type in a given + * context. + * + * @param type the object type whose items will be traversed + * @param adapter the adapter for controlling object traversal + * @param context the context in which the adapter should be used + */ + public static void registerAdapter(ObjectType type, + ObjectTypeTraversalAdapter adapter, + String context) { + s_adapters.put(new AdapterKey(type, context), adapter); + } + + /** + * Unregisteres a traversal adapter for an object type in a + * given context + * + * @param type the object type whose items will be traversed + * @param context the context in which the adapter should be used + */ + public static void unregisterAdapter(ObjectType type, + String context) { + s_adapters.remove(new AdapterKey(type, context)); + } + + /** + * Registers a traversal adapter for an object type in a given + * context. + * + * @param type the object type whose items will be traversed + * @param adapter the adapter for controlling object traversal + * @param context the context in which the adapter should be used + */ + public static void registerAdapter(String type, + ObjectTypeTraversalAdapter adapter, + String context) { + registerAdapter(MetadataRoot.getMetadataRoot().getObjectType(type), + adapter, + context); + } + + /** + * Unregisteres a traversal adapter for an object type in a + * given context + * + * @param type the object type whose items will be traversed + * @param context the context in which the adapter should be used + */ + public static void unregisterAdapter(String type, + String context) { + unregisterAdapter(MetadataRoot.getMetadataRoot().getObjectType(type), + context); + } + + /** + * Retrieves the traversal adapter for an object type in a given + * context. + * + * @param type the object type to lookup + * @param context the adapter context + */ + public static ObjectTypeTraversalAdapter lookupAdapter(ObjectType type, + String context) { + return (ObjectTypeTraversalAdapter)s_adapters + .get(new AdapterKey(type, context)); + } + + /** + * Retrieves the closest matching traversal adapter for an object type + * in a given context. The algorithm looks for an exact match, then + * considers the supertype, and the supertype's supertype. If no match + * could be found at all, returns null + * + * @param type the object type to search for + * @param context the adapter context + */ + public static ObjectTypeTraversalAdapter findAdapter(ObjectType type, + String context) { + ObjectTypeTraversalAdapter adapter = null; + while (adapter == null && type != null) { + adapter = lookupAdapter(type, context); + type = type.getSupertype(); + } + return adapter; + } + + /** + * Walks over properties of a domain object, invoking + * methods to handle assoications, roles and attributes. + * + * @param obj the domain object to traverse + * @param context the context for the traversal adapter + */ + public void walk(String type, + String context) { + walk(MetadataRoot.getMetadataRoot().getObjectType(type), + context); + } + + /** + * Walks over properties of a domain object, invoking + * methods to handle assoications, roles and attributes. + * + * @param obj the domain object to traverse + * @param context the context for the traversal adapter + */ + public void walk(ObjectType type, + String context) { + Assert.exists(type, ObjectType.class); + + ObjectTypeTraversalAdapter adapter = findAdapter(type, + context); + Assert.exists(adapter, ObjectTypeTraversalAdapter.class); + walk(adapter, type, "/object"); + } + + private void walk(ObjectTypeTraversalAdapter adapter, + ObjectType type, + String path) { + beginObject(type, path); + + if (s_log.isInfoEnabled()) { + s_log.info("Walking " + path + " type: " + type.getQualifiedName()); + } + + for (Iterator i = type.getProperties(); i.hasNext(); ) { + Property prop = (Property) i.next(); + String propName = prop.getName(); + + if (!adapter.processProperty(type, + appendToPath(path, prop.getName()), + prop)) { + if (s_log.isDebugEnabled()) { + s_log.debug("Skipping property " + propName); + } + continue; + } + if (s_log.isDebugEnabled()) { + s_log.debug("Process property " + propName + " type " + prop.getType().getQualifiedName()); + } + + if (prop.isAttribute()) { + handleAttribute(type, path, prop); + } else { + if (!prop.isCollection()) { + beginRole(type, path, prop); + + walk(adapter, + (ObjectType)prop.getType(), + appendToPath(path, propName)); + + endRole(type, path, prop); + } else { + beginAssociation(type, path, prop); + + Property roleProp = prop.getAssociatedProperty(); + + walk(adapter, + (ObjectType)prop.getType(), + appendToPath(path, propName)); + + endAssociation(type, path, prop); + } + } + } + + endObject(type, path); + } + + + /** + * Method called when the processing of an object + * starts + */ + protected abstract void beginObject(ObjectType obj, + String path); + /** + * Method called when the procesing of an object + * completes + */ + protected abstract void endObject(ObjectType obj, + String path); + + /** + * Method called when an attribute is encountered + */ + protected abstract void handleAttribute(ObjectType obj, + String path, + Property property); + + /** + * Method called when the processing of a role + * starts + */ + protected abstract void beginRole(ObjectType obj, + String path, + Property property); + + /** + * Method called when the procesing of a role + * completes + */ + protected abstract void endRole(ObjectType obj, + String path, + Property property); + + /** + * Method called when the processing of an association + * starts + */ + protected abstract void beginAssociation(ObjectType obj, + String path, + Property property); + + /** + * Method called when the procesing of an association + * completes + */ + protected abstract void endAssociation(ObjectType obj, + String path, + Property property); + + + protected String appendToPath(String path, + String name) { + if (path.endsWith("/" + name)) { + path = path + "+"; + } else if (!path.endsWith("/" + name + "+")) { + path = path + "/" + name; + } + + return path; + } + + protected String nameFromPath(String path) { + int index = path.lastIndexOf("/"); + Assert.truth(index >= 0, "Path starts with /"); + + if (path.endsWith("+")) { + return path.substring(index + 1, path.length() - 2); + } else { + return path.substring(index + 1); + } + } + + protected String parentFromPath(String path) { + int index = path.lastIndexOf("/"); + Assert.truth(index >= 0, "Path starts with /"); + + if (index == 0) { + return null; + } else { + return path.substring(0, index - 1); + } + } + + private static class AdapterKey { + private ObjectType m_type; + private String m_context; + + public AdapterKey(ObjectType type, + String context) { + m_type = type; + m_context = context; + } + + public boolean equals(Object o) { + if (o instanceof AdapterKey) { + AdapterKey k = (AdapterKey)o; + return k.m_type.equals(m_type) && + k.m_context.equals(m_context); + } else { + return false; + } + } + + public int hashCode() { + return m_type.hashCode() + m_context.hashCode(); + } + } + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversalAdapter.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversalAdapter.java new file mode 100644 index 000000000..7376585f1 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversalAdapter.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.persistence.metadata.Property; +import com.arsdigita.persistence.metadata.ObjectType; + +// XXX this class is pretty similar to DomainObjectTraversal +// and it would be nice to figure out a way to let them share +// some of their logic (provided it didn't cripple / obfuscate +// the API). + +/** + *

This interface is used to control traversal of domain + * objects. Whenever a property is encountered, the {@link + * #processProperty} method will be called to determine whether or not + * to continue processing the object. The most important use for this + * is to prevent the needless (and potentially infinite) traversal of + * associations between objects, but it can also be used to filter out + * certain attributes.

+ * + *

Instances of this class need to be registered using the + * DomainObjectTraversal.registerAdapter method.

+ * + * @see com.arsdigita.domain.DomainObjectTraversal + * @see com.arsdigita.domain.SimpleDomainObjectTraversalAdapter + * @version $Id: ObjectTypeTraversalAdapter.java 287 2005-02-22 00:29:02Z sskracic $ + */ +public interface ObjectTypeTraversalAdapter { + /** + * Invoked to determine whether to process a property. + * Should return true to allow processing to commence, + * false to prevent it. + * + * @param obj the object type currently being processed + * @param path the path to the current domain object from + * the root object being traversed + * @param prop the property about to be processed + * @return true if the property should be processed + */ + public boolean processProperty(ObjectType obj, + String path, + Property prop); +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/SimpleObjectTypeTraversalAdapter.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/SimpleObjectTypeTraversalAdapter.java new file mode 100644 index 000000000..131c6785a --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/SimpleObjectTypeTraversalAdapter.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import org.apache.log4j.Logger; +import com.arsdigita.persistence.metadata.Property; +import com.arsdigita.persistence.metadata.ObjectType; +import java.util.HashSet; + +/** + * This is a general purpose traversal adaptor + * that allows/denies processing of a property + * based on the path to the property, and its + * presence in an inclusion/exclusion set. + * + * Instances of this class can be configured using + * the ObjectTypeTraversalInitializer + * + *

See com.arsdigita.cms.installer.ObjectTypeTraversalInitializer. + */ +public class SimpleObjectTypeTraversalAdapter + implements ObjectTypeTraversalAdapter { + + private static final Logger s_log = + Logger.getLogger(SimpleObjectTypeTraversalAdapter.class); + + /** + * Rule that indicates the set of properties should be treated + * as an inclusion list. ie, don't allow any properties except + * those listed. This is the default for associations + */ + public final static int RULE_INCLUDE = 0; + /** + * Rule that indicates the set of properties should be treated + * as an exclusion list. ie, allow through all properties, + * except those listed. This is the default for attributes. + */ + public final static int RULE_EXCLUDE = 1; + + private HashSet m_attr = new HashSet(); + private HashSet m_assoc = new HashSet(); + + private int m_attrRule = RULE_EXCLUDE; + private int m_assocRule = RULE_INCLUDE; + + private SimpleObjectTypeTraversalAdapter m_parent; + + /** + * Creates a new traversal adapter, with no parent + * delegate. If no explicit rule is present it will + * return false if RULE_INCLUDE is set, or true if + * RULE_EXCLUDE is set. + */ + public SimpleObjectTypeTraversalAdapter() { + this(null); + } + + /** + * Creates a new traversal adapter, extending the rules + * defined by a parent. If there is no explicit rule + * for the property questioned, it will delegate the + * query to the parent. + * @param parent the parent adapter to delegate to + */ + public SimpleObjectTypeTraversalAdapter( + SimpleObjectTypeTraversalAdapter parent + ) { + m_parent = parent; + } + + /** + * Set the rule for processing attributes + * + * @param rule the new processing rule + */ + public void setAttributeRule(int rule) { + m_attrRule = rule; + } + + /** + * Set the rule for processing associations + * + * @param rule the new processing rule + */ + public void setAssociationRule(int rule) { + m_assocRule = rule; + } + + /** + * Add a property to the attribute property set. + * + * @param path the full path to the property + */ + public void addAttributeProperty(String prop) { + m_attr.add(prop); + } + + /** + * Add a property to the association property set. + * + * @param path the full path to the property + */ + public void addAssociationProperty(String prop) { + m_assoc.add(prop); + } + + /** + * Determines whether or not to allow processing + * of a property, based on the property set and + * the processing rule + */ + public boolean processProperty(ObjectType obj, + String path, + Property prop) { + if (prop.isAttribute()) { + boolean result = m_attr.contains(path); + s_log.debug("Check attr " + path + " contains " + + result + " " + m_attrRule); + if (!result && m_parent != null) { + s_log.debug("No explicit rule, delegating to parent"); + return m_parent.processProperty(obj, path, prop); + } + return m_attrRule == RULE_INCLUDE ? result : !result; + } else { + boolean result = m_assoc.contains(path); + s_log.debug("Check assoc " + path + " contains " + + result + " " + m_attrRule); + if (!result && m_parent != null) { + s_log.debug("No explicit rule, delegating to parent"); + return m_parent.processProperty(obj, path, prop); + } + return m_assocRule == RULE_INCLUDE ? result : !result; + } + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/WebAppPatternGenerator.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/WebAppPatternGenerator.java new file mode 100644 index 000000000..824a1eeed --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/WebAppPatternGenerator.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + + +import com.arsdigita.web.Application; +import com.arsdigita.web.Web; +import com.arsdigita.templating.PatternGenerator; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; + + +/** + * Generates a set of patterns corresponding to the current + * web application prefix + */ +public class WebAppPatternGenerator implements PatternGenerator { + + private static final Logger s_log = + Logger.getLogger(WebAppPatternGenerator.class); + + public String[] generateValues(String key, + HttpServletRequest req) { + Application app = Web.getContext().getApplication(); + String ctx = app == null ? null : app.getContextPath(); + + if (app == null || + ctx == null || + "".equals(ctx)) { + return new String[] { Web.ROOT_WEBAPP }; + } + + if (ctx.startsWith("/")) { + ctx = ctx.substring(1); + } + + return new String[] { ctx }; + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/ACSObjectCategoryPicker.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/ACSObjectCategoryPicker.java new file mode 100644 index 000000000..4a355a9c1 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/ACSObjectCategoryPicker.java @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.aplaws.Aplaws; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.london.terms.Term; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.categorization.ui.ACSObjectCategoryForm; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ui.authoring.ItemCategoryForm; + +import java.util.Collection; +import java.util.List; +import java.util.LinkedList; +import java.util.Iterator; + +import org.apache.log4j.Logger; + +/** + * abstracted from original version of ItemCategoryPicker r1297 + * chris gilbert + */ +public abstract class ACSObjectCategoryPicker extends SimpleContainer { + private static final Logger s_log = Logger.getLogger(ItemCategoryPicker.class); + + private ACSObjectCategoryForm m_form; + private BigDecimalParameter m_root; + + public ACSObjectCategoryPicker(BigDecimalParameter root, + StringParameter mode) { + + m_form = getForm(root, mode); + m_root = root; + + add(m_form); + m_form.addCompletionListener(new ItemCategoryFormCompletion()); + } + + protected abstract ACSObjectCategoryForm getForm(BigDecimalParameter root, StringParameter mode); + + protected abstract ACSObject getObject(PageState state); + + + + + private class ItemCategoryFormCompletion implements ActionListener { + public void actionPerformed(ActionEvent ev) { + + PageState state = ev.getPageState(); + Domain domain = getDomain(state); + String domainKey = domain.getKey(); + + if (s_log.isDebugEnabled()) { + s_log.debug("Saving categories in: " + domainKey); + } + + ACSObject object = getObject(state); + + if ("LGCL".equals(domainKey)) { + lgclSelected(domain, object); + } + + else if ("LGDL".equals(domainKey)) { + lgdlSelected(domain, object); + } + + fireCompletionEvent(state); + } + + private void lgclSelected(Domain domain, ACSObject object) { + List lgclTerms = getCurrentCategories(domain, object); + + Domain gcl = Domain.retrieve("GCL"); + Collection gclTerms = getRelatedTerms(lgclTerms, gcl); + clearTerms(gcl, object); + assignTerms(gclTerms, object); + + // The assignment below is removed to satisfy requirement 4.1, + // use case 1 of the document "Metadata Improvements" version 1 + // by Camden, dated 23/01/05. + //Domain lgsl = Domain.retrieve("LGSL"); + //Collection lgslTerms = getRelatedTerms(lgclTerms, lgsl); + //clearTerms(lgsl, object); + //assignTerms(lgslTerms, object); + + // adding processing or mapping from LGCL to APLAWS-NAV too +// boolean lgclOverrideAnav = Aplaws.getAplawsConfig().getOverrideAnavFromLGCLMappings().booleanValue(); +// if (lgclOverrideAnav) { +// Domain aplawsNav = Domain.retrieve("APLAWS-NAV"); +// Collection aplawsNavTerms = getRelatedTerms(lgclTerms, aplawsNav); +// clearTerms(aplawsNav, object); +// assignTerms(aplawsNavTerms, object); +// } + } + + // User has selected a term in the LGDL hierarchy, which includes + // terms from the LGSL. We're only interested in LGSL terms here. + private void lgdlSelected(Domain domain, ACSObject object) { + Domain lgsl = Domain.retrieve("LGSL"); + Domain gcl = Domain.retrieve("GCL"); + Domain lgcl = Domain.retrieve("LGCL"); + + // We have a mapping LGSL -> LGCL based on the reverse of a + // published mapping. We don't have a mapping LGSL -> GCL, so we + // do LGSL -> LGCL -> GCL instead. + + List lgslTerms = getCurrentCategories(lgsl, object); + Collection lgclTerms = getRelatedTerms(lgslTerms, lgcl); + + LinkedList lgclIDs = new LinkedList(); + Iterator i = lgclTerms.iterator(); + while (i.hasNext()) { + Term term = (Term) i.next(); + lgclIDs.add(term.getModel().getID()); + } + + Collection gclTerms = getRelatedTerms(lgclIDs, gcl); + + clearTerms(lgcl, object); + assignTerms(lgclTerms, object); + + clearTerms(gcl, object); + assignTerms(gclTerms, object); + } + } + + protected List getCurrentCategories(Domain domain, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting terms from " + domain + " to " + object); + } + DomainCollection terms = domain.getTerms(); + terms.addEqualsFilter("model.childObjects.id", object.getID()); + terms.addPath("model.id"); + + List current = new LinkedList(); + while (terms.next()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Got term " + terms.get("model.id")); + } + current.add(terms.get("model.id")); + } + return current; + } + + // TODO move out of UI code + public static Collection getCurrentTerms(Domain domain, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting terms from " + domain + " to " + object); + } + Collection current = new LinkedList(); + DomainCollection terms = domain.getTerms(); + terms.addEqualsFilter("model.childObjects.id", object.getID()); + terms.addPath("model.id"); + while (terms.next()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Got term " + terms.get("model.id")); + } + current.add(terms.getDomainObject()); + } + return current; + } + + // TODO move out of UI code + public static Collection getRelatedTerms(Collection src, + Domain domain) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting related terms to " + domain); + + } + if (src.isEmpty()) { + // this is a hack, it would be better not to use a completion event listener as + // this is called even when the form is cancelled... + return new LinkedList(); + } + DomainCollection terms = domain.getTerms(); + // these next two lines build the query + terms.addEqualsFilter("model.parents.link.relationType", "related"); + terms.addFilter("model.parents.id in :ids").set("ids", src); + + Collection related = new LinkedList(); + while (terms.next()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Got term " + terms.getDomainObject()); + } + related.add(terms.getDomainObject()); + } + return related; + } + + protected void clearTerms(Domain domain, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Removing terms from " + domain + " to " + object); + } + Iterator terms = getCurrentTerms(domain, object).iterator(); + while (terms.hasNext()) { + Term term = (Term)terms.next(); + if (s_log.isDebugEnabled()) { + s_log.debug("Removing term " + term + " from " + object); + } + term.removeObject(object); + } + } + + + // TODO move out of UI code + public static void assignTerms(Collection terms, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Assigning terms to " + object); + } + Iterator i = terms.iterator(); + while (i.hasNext()) { + Term term = (Term)i.next(); + if (s_log.isDebugEnabled()) { + s_log.debug("Assigning term " + term + " to " + object); + } + term.addObject(object); + } + } + + protected Domain getDomain(PageState state) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting domain for " + state.getValue(m_root)); + } + + DataCollection domains = SessionManager.getSession() + .retrieve(Domain.BASE_DATA_OBJECT_TYPE); + domains.addEqualsFilter("model.id", + state.getValue(m_root)); + + if (domains.next()) { + Domain domain = (Domain)DomainObjectFactory + .newInstance(domains.getDataObject()); + if (s_log.isDebugEnabled()) { + s_log.debug("Got domain " + domain); + } + domains.close(); + return domain; + } + if (s_log.isDebugEnabled()) { + s_log.debug("No domain found"); + } + return null; + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/AssignedIndexItemTerms.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/AssignedIndexItemTerms.java new file mode 100644 index 000000000..38efa6beb --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/AssignedIndexItemTerms.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2005 Runtime Collective Ltd. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentBundle; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.london.terms.ui.AbstractAssignedTerms; + +import org.apache.log4j.Logger; + +public class AssignedIndexItemTerms extends AbstractAssignedTerms { + + private static final Logger s_log = Logger.getLogger(AssignedIndexItemTerms.class); + + protected ACSObject getObject(PageState state) { + + ACSObject obj = Navigation.getConfig().getDefaultModel().getObject(); + + if (s_log.isDebugEnabled()) { + s_log.debug("Dealing with item " + obj); + } + + return obj; + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/AssignedItemTerms.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/AssignedItemTerms.java new file mode 100644 index 000000000..1718892d8 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/AssignedItemTerms.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.CMS; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.london.terms.ui.AbstractAssignedTerms; + +public class AssignedItemTerms extends AbstractAssignedTerms { + + protected ACSObject getObject(PageState state) { + return CMS.getContext().getContentItem().getParent(); + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategoryPortalSelectionModel.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategoryPortalSelectionModel.java new file mode 100644 index 000000000..df6e2aec4 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategoryPortalSelectionModel.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.london.navigation.NavigationModel; + +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.persistence.DataCollection; + +import com.arsdigita.domain.DomainObjectFactory; + +import com.arsdigita.categorization.Category; +import com.arsdigita.util.Assert; +import com.arsdigita.bebop.PageState; + +import com.arsdigita.london.portal.Workspace; +import com.arsdigita.london.portal.ui.WorkspaceSelectionModel; + +public class CategoryPortalSelectionModel extends WorkspaceSelectionModel { + + protected Workspace getDefaultWorkspace(PageState state) { + NavigationModel model = Navigation.getConfig().getDefaultModel(); + Category cat = model.getCategory(); + Assert.exists(cat); + + DataCollection workspaces + = SessionManager.getSession().retrieve( + Workspace.BASE_DATA_OBJECT_TYPE); + workspaces.addEqualsFilter("categories.id", cat.getID()); + + if (workspaces.next()) { + Workspace wk = (Workspace)DomainObjectFactory + .newInstance(workspaces.getDataObject()); + workspaces.close(); + return wk; + } + + return null; + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategorySubtree.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategorySubtree.java new file mode 100644 index 000000000..e8660d49b --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategorySubtree.java @@ -0,0 +1,49 @@ +package com.arsdigita.aplaws.ui; + +import java.math.BigDecimal; +import java.util.Iterator; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SimpleComponent; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.categorization.Category; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.OID; +import com.arsdigita.xml.Element; + +/** + * Generate part of the category tree. Used by Assign Category authoring step. + * + * @author Alan Pevec + */ +public class CategorySubtree extends SimpleComponent { + + StringParameter nodeIDparam = new StringParameter("nodeID"); + + private static Logger s_log = Logger.getLogger(CategorySubtree.class); + public void register(Page p) { + super.register(p); + p.addGlobalStateParam(nodeIDparam); + + } + + public void generateXML(PageState state, Element p) { + + String node = (String)state.getValue(nodeIDparam); + s_log.debug("selected node = " + node); + String[] pathElements = StringUtils.split(node, "-"); + + Category root = (Category) DomainObjectFactory.newInstance(new OID( + Category.BASE_DATA_OBJECT_TYPE, new BigDecimal(pathElements[pathElements.length - 1]))); + s_log.debug("generating subtree for cat " + root.getID()); + TermWidget.generateSubtree(p, root); + } + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategoryTermDetails.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategoryTermDetails.java new file mode 100644 index 000000000..4c8bf00ff --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/CategoryTermDetails.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.london.terms.Term; +import com.arsdigita.london.terms.ui.AbstractTermDetails; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.categorization.Category; +import com.arsdigita.bebop.PageState; +import com.arsdigita.domain.DomainObjectFactory; + +import org.apache.log4j.Logger; + +public class CategoryTermDetails extends AbstractTermDetails { + + private static final Logger s_log = Logger.getLogger(CategoryTermDetails.class); + + protected Term getTerm(PageState state) { + Category cat = Navigation.getConfig().getDefaultModel() + .getCategory(); + + if (cat == null) { + s_log.debug("No category found, skiping term"); + return null; + } + + DataCollection terms = SessionManager.getSession() + .retrieve(Term.BASE_DATA_OBJECT_TYPE); + terms.addEqualsFilter(Term.MODEL + "." + Category.ID, + cat.getID()); + + if (terms.next()) { + Term term = (Term)DomainObjectFactory + .newInstance(terms.getDataObject()); + terms.close(); + if (s_log.isInfoEnabled()) { + s_log.info("Found term " + term + " for category " + cat); + } + return term; + } + + if (s_log.isDebugEnabled()) { + s_log.debug("No term found for category " + cat); + } + return null; + } + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepagePortalSelectionModel.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepagePortalSelectionModel.java new file mode 100644 index 000000000..5de5558c4 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepagePortalSelectionModel.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved. + * + * The contents of this file are subject to the ArsDigita Public + * License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of + * the License at http://www.arsdigita.com/ADPL.txt + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.AbstractSingleSelectionModel; +import com.arsdigita.london.portal.ui.PortalSelectionModel; +import com.arsdigita.london.portal.WorkspacePage; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.domain.DomainObject; + +public class HomepagePortalSelectionModel extends AbstractSingleSelectionModel + implements PortalSelectionModel { + + private HomepageWorkspaceSelectionModel m_workspace; + private int m_column; + + public HomepagePortalSelectionModel(HomepageWorkspaceSelectionModel workspace, + int column) { + m_workspace = workspace; + m_column = column; + } + + public void onCustomize(PageState state) { + m_workspace.onCustomize(state, m_column); + } + + public void onReset(PageState state) { + m_workspace.onReset(state, m_column); + } + + public HomepageWorkspaceSelectionModel getWorkspaceModel() { + return m_workspace; + } + + public Object getSelectedKey(PageState state) { + return getSelectedPortal(state).getID(); + } + + public void setSelectedKey(PageState state, + Object key) { + throw new UnsupportedOperationException("cannot set key"); + } + + public void setSelectedObject(PageState state, + DomainObject key) { + throw new UnsupportedOperationException("cannot set object"); + } + + public ParameterModel getStateParameter() { + throw new UnsupportedOperationException("not state param"); + } + + + public DomainObject getSelectedObject(PageState state) { + return getSelectedPortal(state); + } + + public WorkspacePage getSelectedPortal(PageState state) { + return m_workspace.getPortal(state, m_column); + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspace.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspace.java new file mode 100644 index 000000000..e4c44173b --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspace.java @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved. + * + * The contents of this file are subject to the ArsDigita Public + * License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of + * the License at http://www.arsdigita.com/ADPL.txt + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.ActionLink; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.london.portal.ui.PersistentPortal; +import com.arsdigita.london.portal.Workspace; +import com.arsdigita.bebop.PageState; +import com.arsdigita.xml.Element; +import com.arsdigita.london.portal.ui.PortalConstants; +import com.arsdigita.kernel.permissions.PermissionService; +import com.arsdigita.kernel.permissions.PermissionDescriptor; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.Kernel; + + +public class HomepageWorkspace extends SimpleContainer { + + private HomepagePortalSelectionModel m_model; + private ActionLink m_reset; + private ActionLink m_browse; + private ActionLink m_edit; + private PersistentPortal m_browser; + private PersistentPortal m_editor; + private boolean m_customizable; + private boolean m_readOnly; + private String m_name; + + public HomepageWorkspace() { + super("portal:homepageWorkspace", PortalConstants.PORTAL_XML_NS); + m_customizable = false; + } + + public void setModel(HomepagePortalSelectionModel model) { + m_model = model; + } + + public void setCustomizable(boolean customizable) { + m_customizable = customizable; + } + + public void setReadOnly(boolean readOnly) { + m_readOnly = readOnly; + } + + public void setName(String name) { + m_name = name; + } + + public void addWidgets() { + m_edit = new ActionLink("customize"); + m_browse = new ActionLink("browse"); + m_reset = new ActionLink("reset"); + m_reset.setConfirmation("Are you sure you wish to reset this column? " + + "This will permanently remove all portlets."); + + m_browser = new PersistentPortal(m_model, + m_name, + PortalConstants.MODE_DISPLAY); + m_editor = new PersistentPortal(m_model, + m_name, + PortalConstants.MODE_EDITOR); + + m_edit.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + setDisplayMode(state, false); + + m_model.onCustomize(state); + } + }); + m_browse.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + setDisplayMode(state, true); + } + }); + m_reset.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + setDisplayMode(state, true); + + m_model.onReset(state); + } + }); + + add(m_edit); + add(m_browse); + add(m_reset); + add(m_editor); + add(m_browser); + } + + public void setDisplayMode(PageState state, + boolean browse) { + if (m_readOnly) { + return; + } + m_browse.setVisible(state, !browse); + m_reset.setVisible(state, !browse); + m_edit.setVisible(state, browse); + m_browser.setVisible(state, browse); + m_editor.setVisible(state, !browse); + } + + public void register(Page page) { + super.register(page); + + page.setVisibleDefault(m_browse, false); + page.setVisibleDefault(m_reset, false); + page.setVisibleDefault(m_edit, !m_readOnly); + page.setVisibleDefault(m_browser, true); + page.setVisibleDefault(m_editor, false); + } + + public void generateXML(PageState state, + Element parent) { + Party party = Kernel.getContext().getParty(); + Workspace global = m_model.getWorkspaceModel().getGlobalWorkspace(state); + PermissionDescriptor admin = + new PermissionDescriptor(PrivilegeDescriptor.ADMIN, + global, + party); + boolean hasAdmin = PermissionService.checkPermission(admin); + boolean userWorkspaces = Workspace.getConfig().getCreateUserWorkspaces(); + + if (party == null || m_readOnly || + (!hasAdmin && !m_customizable) || (!hasAdmin && !userWorkspaces)) { + m_reset.setVisible(state, false); + m_browse.setVisible(state, false); + m_edit.setVisible(state, false); + } + + super.generateXML(state, parent); + } + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspaceSelectionModel.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspaceSelectionModel.java new file mode 100644 index 000000000..ca8201159 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspaceSelectionModel.java @@ -0,0 +1,287 @@ +/* + * Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved. + * + * The contents of this file are subject to the ArsDigita Public + * License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of + * the License at http://www.arsdigita.com/ADPL.txt + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ + +package com.arsdigita.aplaws.ui; + + +import com.arsdigita.bebop.RequestLocal; +import com.arsdigita.bebop.PageState; + + +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.User; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.kernel.permissions.PermissionService; +import com.arsdigita.kernel.permissions.PermissionDescriptor; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; + +import com.arsdigita.london.portal.Workspace; +import com.arsdigita.london.portal.WorkspacePage; +import com.arsdigita.london.portal.WorkspacePageCollection; + +import com.arsdigita.london.subsite.Subsite; + +import com.arsdigita.util.Assert; +import com.arsdigita.util.UncheckedWrapperException; + +import com.arsdigita.domain.DataObjectNotFoundException; + +import org.apache.log4j.Logger; + + +public class HomepageWorkspaceSelectionModel { + private RequestLocal m_loaded = new RequestLocal(); + private RequestLocal m_global = new RequestLocal(); + private RequestLocal m_personal = new RequestLocal(); + private RequestLocal m_left = new RequestLocal(); + private RequestLocal m_middle = new RequestLocal(); + private RequestLocal m_right = new RequestLocal(); + private RequestLocal m_custom = new RequestLocal(); + + private static Logger s_log = Logger.getLogger + (HomepageWorkspaceSelectionModel.class.getName()); + + public WorkspacePage getPortal(PageState state, + int column) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + if (column == 0) { // Always global portal + return (WorkspacePage)m_left.get(state); + } else if (column == 1) { // Always global portal + return (WorkspacePage)m_middle.get(state); + } else if (column == 2) { // Personal portal, fallback on global + Party party = (Party)Kernel.getContext().getParty(); + WorkspacePage right = (WorkspacePage)m_right.get(state); + PermissionDescriptor admin = + new PermissionDescriptor(PrivilegeDescriptor.ADMIN, + right, + party); + // Always ensure admin gets global portal + // don't use custom portals if asked not to + if (m_custom.get(state) == null || + PermissionService.checkPermission(admin) || + !Workspace.getConfig().getCreateUserWorkspaces()) { + s_log.debug("Returning global portal"); + return (WorkspacePage)m_right.get(state); + } else { + s_log.debug("Returning personal portal"); + return (WorkspacePage)m_custom.get(state); + } + } + + throw new UncheckedWrapperException("column out of range (0..2)"); + } + + public void onCustomize(PageState state, + int column) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + Party party = (Party)Kernel.getContext().getParty(); + + Assert.exists(party, Party.class); + + // When customizing right column, may need to clone + // for a personal portal + // don't use custom portals if asked not to + if (column == 2 && + Workspace.getConfig().getCreateUserWorkspaces()) { + Workspace global = getTopWorkspace(); + + WorkspacePage right = (WorkspacePage)m_right.get(state); + PermissionDescriptor admin = + new PermissionDescriptor(PrivilegeDescriptor.ADMIN, + right, + party); + if (PermissionService.checkPermission(admin)) { + s_log.debug("Party has admin on global portal"); + return; + } + + if (m_custom.get(state) != null) { + s_log.debug("Party has custom portal already"); + return; + } + + s_log.debug("Looking for custom column 2"); + + Workspace custom = null; + try { + custom = global.retrieveSubworkspaceForParty(party); + s_log.debug("Found exsting personal workspce"); + } catch (DataObjectNotFoundException ex) { + s_log.debug("Created new personal workspace"); + custom = Workspace.createWorkspace( + "personal-" + party.getID(), + "Personal Workspace for " + party.getDisplayName(), + global, + (User)party + ); + } + s_log.debug("Looking for portal"); + m_personal.set(state, custom); + WorkspacePageCollection portals = custom.getPages(); + portals.addOrder(WorkspacePage.SORT_KEY); + WorkspacePage portal; + if (portals.next()) { + s_log.debug("Found portal"); + portal = portals.getPage(); + portals.close(); + } else { + s_log.debug("Create portal"); + portal = custom.addPage("Custom", "Custom page"); + } + m_custom.set(state, portal); + } + } + + + public void onReset(PageState state, + int column) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + Party party = Kernel.getContext().getParty(); + + Assert.exists(party, Party.class); + + WorkspacePage clear = null; + + // don't use custom portals if asked not to + if (column == 2 && + Workspace.getConfig().getCreateUserWorkspaces()) { + // If we find a custom workspace, then delete it, + // otherwise just clear the portlets. + Workspace global = getTopWorkspace(); + Workspace custom = null; + try { + custom = global.retrieveSubworkspaceForParty(party); + Assert.truth(custom.getParty() != null && + custom.getParty().equals(party), + "party is not null and not admin"); + s_log.debug("Found exsting personal workspce"); + custom.delete(); + m_custom.set(state, null); + } catch (DataObjectNotFoundException ex) { + clear = (WorkspacePage)m_right.get(state); + } + } else if (column == 1) { + clear = (WorkspacePage)m_middle.get(state); + } else if (column == 0) { + clear = (WorkspacePage)m_left.get(state); + } + + if (clear != null) { + clear.clearPortlets(); + } + } + + + public Workspace getGlobalWorkspace(PageState state) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + return (Workspace)m_global.get(state); + } + + public Workspace getPersonalWorkspace(PageState state) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + return (Workspace)m_personal.get(state); + } + + private void loadWorkspacePages(PageState state) { + Workspace global = getTopWorkspace(); + m_global.set(state, global); + + WorkspacePage left = null; + WorkspacePage middle = null; + WorkspacePage right = null; + + WorkspacePageCollection portals = global.getPages(); + portals.addOrder(WorkspacePage.SORT_KEY); + while (portals.next()) { + WorkspacePage portal = portals.getPage(); + + if (portal.getSortKey() == 0) { + left = portal; + } else if (portal.getSortKey() == 1) { + middle = portal; + } else if (portal.getSortKey() == 2) { + right = portal; + } + } + + if (left == null) { + left = global.addPage("Left", "Left hand page"); + } + if (middle == null) { + middle = global.addPage("Middle", "Middle page"); + } + if (right == null) { + right = global.addPage("Right", "Right hand page"); + } + m_left.set(state, left); + m_middle.set(state, middle); + m_right.set(state, right); + + + Party party = (Party)Kernel.getContext().getParty(); + m_custom.set(state, null); + if (party != null) { + Workspace custom = null; + try { + custom = global.retrieveSubworkspaceForParty(party); + } catch (DataObjectNotFoundException ex) { + // nada + } + if (custom != null) { + portals = custom.getPages(); + portals.addOrder(WorkspacePage.SORT_KEY); + if (portals.next()) { + WorkspacePage portal = portals.getPage(); + m_custom.set(state, portal); + } + portals.close(); + } + s_log.debug("Is there a custom portal ?" + custom + + " - " + m_custom.get(state)); + m_personal.set(state, custom); + } + + m_loaded.set(state, Boolean.TRUE); + } + + protected Workspace getTopWorkspace() { + if (Subsite.getContext().hasSite()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Return a subsite front page"); + } + return (Workspace)Subsite.getContext().getSite().getFrontPage(); + } else { + if (s_log.isDebugEnabled()) { + s_log.debug("Return the main front page"); + } + return (Workspace)Kernel.getContext().getResource(); + } + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java new file mode 100644 index 000000000..007c269d3 --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import org.apache.log4j.Logger; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.categorization.ui.ACSObjectCategoryForm; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ui.authoring.*; +import com.arsdigita.kernel.ACSObject; + +/** + *

cms specific Concrete implementation of + * com.arsdigita.aplaws.ui.ACSObjectCategoryPicker.

+ * + * + * + *

Activated by pointing the parameter + * com.arsdigita.cms.category_authoring_add_form< to it.

+ */ + + +public class ItemCategoryPicker extends ACSObjectCategoryPicker { + private static final Logger s_log = Logger.getLogger(ItemCategoryPicker.class); + + + public ItemCategoryPicker(BigDecimalParameter root, + StringParameter mode) { + super(root, mode); + s_log.debug("instantiating ItemCategoryPicker"); + + } + + + /* + * @see com.arsdigita.aplaws.ui.ACSObjectCategoryPicker#getForm( + com.arsdigita.bebop.parameters.BigDecimalParameter, + com.arsdigita.bebop.parameters.StringParameter) + */ + protected ACSObjectCategoryForm getForm(BigDecimalParameter root, StringParameter mode) { + s_log.debug("getForm"); + return new ItemCategoryForm(root, mode, new TermWidget(mode, this)); + } + + + /* + * @see com.arsdigita.aplaws.ui.ACSObjectCategoryPicker#getObject() + */ + protected ACSObject getObject(PageState state) { + ContentItem item = CMS.getContext().getContentItem(); + return item.getParent(); + + } + + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/SimplePage.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/SimplePage.java new file mode 100644 index 000000000..bafa8be3c --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/SimplePage.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Label; +import com.arsdigita.dispatcher.DispatcherHelper; +import com.arsdigita.xml.Document; +import com.arsdigita.xml.Element; +import com.arsdigita.web.Web; + +/** + *

+ * Special implementation of com.arsdigita.ui.SimplePage as + * the base page to serve bebop pages.

+ * + *

Activated by pointing the parameter waf.bebop.base_page + * to it.

+ */ +public class SimplePage extends com.arsdigita.ui.SimplePage { + + public SimplePage(String application, + Label title, + String id) { + super(application, title, id); + } + + + public Element generateXMLHelper(PageState state, + Document parent) { + Element page = super.generateXMLHelper(state, parent); + + /* + * TODO: What specific funcionality is added here and what is + * its purpose and why is the bebop standard implementation + * insufficient. + * + * Two xml attributes are added in addition to the bebop standard + * implementation. + */ + if (Web.getContext().getRequestURL() != null) { + page.addAttribute("url", Web.getContext().getRequestURL().toString()); + + page.addAttribute("textOnly", "/text".equals( + DispatcherHelper + .getDispatcherPrefix(state.getRequest())) + ? "1" : "0" + ); + } + + return page; + } +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/TermItemSummary.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/TermItemSummary.java new file mode 100644 index 000000000..f6aee2e6e --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/TermItemSummary.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.london.terms.Domain; +import com.arsdigita.london.terms.ui.AbstractTermItemSummary; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.parameters.StringParameter; + +public class TermItemSummary extends AbstractTermItemSummary { + + private StringParameter m_key; + private String m_defaultKey = "LGSL"; + + public TermItemSummary() { + m_key = new StringParameter("key"); + } + + public void register(Page p) { + super.register(p); + + p.addGlobalStateParam(m_key); + } + + public void setDefaultDomain(String key) { + m_defaultKey = key; + } + + protected Domain getDomain(PageState state) { + String key = (String)state.getValue(m_key); + + if (key == null) { + key = m_defaultKey; + } + + return Domain.retrieve(key); + } + +} diff --git a/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/TermWidget.java b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/TermWidget.java new file mode 100644 index 000000000..028ae2edd --- /dev/null +++ b/ccm-iaw-aplaws/src/com/arsdigita/aplaws/ui/TermWidget.java @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +package com.arsdigita.aplaws.ui; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.arsdigita.aplaws.Aplaws; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.ArrayParameter; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.categorization.Category; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.london.terms.Term; +import com.arsdigita.london.terms.indexing.Indexer; +import com.arsdigita.london.terms.indexing.RankedTerm; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.xml.Element; +import com.arsdigita.xml.XML; + +/** + * A Widget for selecting Terms. Based heavily on CategoryWidget. + * + * @author mbooth@redhat.com + * + * Chris Gilbert - updated to identify each node uniquely (correct behaviour + * for polyhierarchical trees) - also, allow ajax update on all branches or + * just top level branch + * + * nb - widget applies to allocation of categories to any ACSObject hence + * xml prefix should be more generic eg bebop rather than cms. cms retained + * for compatibility with existing stylesheets + */ +public class TermWidget extends Widget { + private StringParameter m_mode; + private ACSObjectCategoryPicker m_picker; + + public TermWidget(StringParameter mode, ACSObjectCategoryPicker picker) { + super(new ArrayParameter(new BigDecimalParameter("category"))); + + m_mode = mode; + m_picker = picker; + + } + + + + protected String getType() { + return "category"; + } + + public boolean isCompound() { + return false; + } + + protected void generateWidget(PageState state, + Element parent) { + Domain domain = m_picker.getDomain(state); + + Element widget = parent.newChildElement("cms:categoryWidget", + CMS.CMS_XML_NS); + exportAttributes(widget); + + widget.addAttribute("mode", (String)state.getValue(m_mode)); + widget.addAttribute("name", getName()); + + Set ids = new HashSet(); + + BigDecimal[] values = (BigDecimal[])getValue(state); + if (values != null) { + for (int i = 0 ; i < values.length ; i++) { + ids.add(values[i]); + } + } + + // only root terms at first, the rest is loaded on-demand via AJAX + DomainCollection terms = domain.getRootTerms(); + terms.addPath("model.parents.link.sortKey"); + terms.addPath("model.parents.id"); + terms.addPath("domain.key"); + + // Pull out everything related to the category, otherwise + // another query per row is executed when doing term.getModel(); + terms.addPath("model.objectType"); + terms.addPath("model.displayName"); + terms.addPath("model.defaultDomainClass"); + terms.addPath("model.name"); + terms.addPath("model.description"); + terms.addPath("model.url"); + terms.addPath("model.isEnabled"); + terms.addPath("model.isAbstract"); + terms.addPath("model.defaultAncestors"); + + List roots = new LinkedList(); + while (terms.next()) { + Term term = (Term) terms.getDomainObject(); + roots.add(new TermSortKeyPair + (term,(BigDecimal)terms.get("model.parents.link.sortKey"))); + } + + Element el = generateCategory(widget, domain.getModel(), ids, null); + + /** + * Used by kea based keyphrase extraction facility. + * (Added r1885) + * + * @Author: terry_permeance + */ + Indexer indexer = Indexer.retrieve(domain); + if (indexer != null) { + ContentItem item = CMS.getContext().getContentItem(); + List autoTerms = indexer.index(item, 16); + Element autoCategories = widget.newChildElement("cms:autoCategories", CMS.CMS_XML_NS); + for (Iterator i = autoTerms.iterator(); i.hasNext(); ) { + RankedTerm nextRankedTerm = i.next(); + Category cat = nextRankedTerm.getTerm().getModel(); + if (!ids.contains(cat.getID())) { + String fullname = cat.getQualifiedName(" > ", false); + if (fullname != null) { + Element catEl = autoCategories.newChildElement("cms:category", CMS.CMS_XML_NS); + catEl.addAttribute("id", XML.format(cat.getID())); + catEl.addAttribute("name", cat.getName()); + catEl.addAttribute("description", cat.getDescription()); + catEl.addAttribute("isAbstract", cat.isAbstract() ? "1" : "0"); + catEl.addAttribute("isEnabled", cat.isEnabled() ? "1" : "0"); + catEl.addAttribute("sortKey", nextRankedTerm.getRanking().toString()); + catEl.addAttribute("fullname", fullname); + } + } + } + } + + if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) { + // add attribute to the parent node, so that in stylesheet + // we can look for any ancestor with this attribute (can't + // add attribute to categoryWidget element as that is not + // visible when subbranches are transformed) + el.addAttribute("expand", "all" ); + } + + for (Iterator i=roots.iterator(); i.hasNext(); ) { + TermSortKeyPair pair = (TermSortKeyPair) i.next(); + Term term = pair.getTerm(); + BigDecimal sortKey = pair.getSortKey(); + + generateRootTerm(el, term, ids, sortKey); + } + } + + public static Element generateCategory(Element parent, + Category cat, + Set selected, + BigDecimal sortKey) { + Element el = parent.newChildElement("cms:category", CMS.CMS_XML_NS); + + el.addAttribute("id", XML.format(cat.getID())); + el.addAttribute("name", cat.getName()); + el.addAttribute("description", cat.getDescription()); + el.addAttribute("isSelected", selected.contains(cat.getID()) ? "1" : "0"); + el.addAttribute("isAbstract", cat.isAbstract() ? "1" : "0"); + el.addAttribute("isEnabled", cat.isEnabled() ? "1" : "0"); + if (sortKey != null) { + el.addAttribute("sortKey", sortKey.toString()); + } + // sort order attribute added to every node so that we can + // correctly transform xml fragments returned by ajax + el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder()); + + StringBuffer path = new StringBuffer(parent.getAttribute("fullname")); + if (path.length() > 0) path.append(" > "); + path.append(cat.getName()); + el.addAttribute("fullname", path.toString()); + + // need to uniquely identify each node in polyhierarchical trees + // so that expand/contract is applied to the correct node by + // javascript getElementByID function + StringBuffer nodeID = new StringBuffer(parent.getAttribute("node-id")); + if (nodeID.length() > 0) nodeID.append("-"); + nodeID.append(cat.getID()); + el.addAttribute("node-id", nodeID.toString()); + + return el; + } + + public static Element generateTerm(Element parent, + Term term, + Set selected, + BigDecimal sortKey) { + Category cat = term.getModel(); + Element el = generateCategory(parent, cat, selected, sortKey); + + el.addAttribute("pid", term.getUniqueID().toString()); + el.addAttribute("domain", term.getDomain().getKey()); + return el; + } + + private static void generateRootTerm(Element parent, + Term term, + Set selected, + BigDecimal sortKey) { + Element el = generateTerm(parent, term, selected, sortKey); + el.addAttribute("root","1"); + } + + public static void generateSubtree(Element parent, Category root) { + DataCollection terms = SessionManager.getSession().retrieve( + Term.BASE_DATA_OBJECT_TYPE); + terms.addEqualsFilter("model.roTransParents.id", root.getID()); + terms.addEqualsFilter("model.parents.link.relationType", "child"); + + Map children = new HashMap(); + while (terms.next()) { + Term term = (Term) DomainObjectFactory.newInstance(terms + .getDataObject()); + BigDecimal parentID = (BigDecimal) terms.get("model.parents.id"); + + List childList = (List) children.get(parentID); + if (childList == null) { + childList = new LinkedList(); + children.put(parentID, childList); + } + + childList.add(new TermSortKeyPair(term, (BigDecimal) terms + .get("model.parents.link.sortKey"))); + } + + // XXX for isSelected + Set ids = new HashSet(); + + Element el = generateCategory(parent, root, ids, null); + el.addAttribute("fullname", root.getName()); + el.addAttribute("node-id", root.getID().toString()); + el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder()); + if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) { + // recognisable attribute has to be in the XML for each snippet that is transformed, + // hence add it to the parent + el.addAttribute("expand", "all" ); + } + + List roots = (List) children.get(root.getID()); + if (null != roots) { + Iterator i = roots.iterator(); + while (i.hasNext()) { + TermSortKeyPair pair = (TermSortKeyPair) i.next(); + Term term = pair.getTerm(); + BigDecimal sortKey = pair.getSortKey(); + + generateTermWithChildren(el, term, ids, sortKey, children); + } + } + } + + private static void generateTermWithChildren(Element parent, + Term term, + Set selected, + BigDecimal sortKey, + Map children) { + Category cat = term.getModel(); + Element el = generateCategory(parent, cat, selected, sortKey); + + el.addAttribute("pid", term.getUniqueID().toString()); + el.addAttribute("domain", term.getDomain().getKey()); + + List c = (List) children.get(cat.getID()); + if (c != null) { + Iterator i = c.iterator(); + while (i.hasNext()) { + TermSortKeyPair pair = (TermSortKeyPair) i.next(); + Term child = pair.getTerm(); + BigDecimal childSortKey = pair.getSortKey(); + + // either generate next level down, or get all levels below current + + if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) { + generateTerm(el, child, selected, childSortKey); + + } else { + generateTermWithChildren(el, child, selected, childSortKey, + children); + } + + + + } + } + } + + private static class TermSortKeyPair { + private Term m_term; + private BigDecimal m_sortKey; + + public TermSortKeyPair(Term term, BigDecimal sortKey) { + m_term = term; + m_sortKey = sortKey; + } + public Term getTerm() { + return m_term; + } + public BigDecimal getSortKey() { + return m_sortKey; + } + } +} diff --git a/ccm-iaw-aplaws/web/WEB-INF/web.xml-aplaws b/ccm-iaw-aplaws/web/WEB-INF/web.xml-aplaws new file mode 100644 index 000000000..be52545f1 --- /dev/null +++ b/ccm-iaw-aplaws/web/WEB-INF/web.xml-aplaws @@ -0,0 +1,566 @@ + + + + + CCM ZeS + Content and Collaboration Management + + + + log4j-conf-file + WEB-INF/conf/log4j.properties + + + + + + + + + shortcuts + com.arsdigita.london.shortcuts.ShortcutFilter + + + + subsite + com.arsdigita.london.subsite.SubsiteFilter + + + + + + + + subsite + /ccm/* + + + + + shortcuts + /* + + + + + com.arsdigita.web.CCMApplicationContextListener + + + + + + reg + com.arsdigita.web.ContextRegistrationServlet + + uri + / + + 1 + + + + legacy-dispatcher + com.arsdigita.sitenode.SiteNodeDispatcher + 3 + + + + ccm-dispatcher + com.arsdigita.web.DispatcherServlet + + fallback-servlet + legacy-dispatcher + + 2 + + + + legacy-adapter + com.arsdigita.web.LegacyAdapterServlet + + + + cache-manager + com.arsdigita.caching.CacheServlet + + + + db-test + com.arsdigita.web.monitoring.DBTestServlet + + + + versioning-log + com.arsdigita.versioning.VersioningServlet + + + + oid-redirect + com.arsdigita.web.OIDRedirectServlet + + + + resource-resolver + com.arsdigita.web.ResourceServlet + + + + + + content-section + com.arsdigita.cms.ContentSectionServlet + + + + content-type-xsl + com.arsdigita.cms.dispatcher.ContentTypeXSLServlet + + + + content-item-xsl + com.arsdigita.cms.dispatcher.ContentItemXSLServlet + + + + template-xsl + com.arsdigita.cms.dispatcher.TemplateXSLServlet + + + + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + + + + + + + + + forum-main + com.arsdigita.forum.ForumServlet + + + + + portal-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-portal + + + + + navigation-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-navigation + + + file-resolver + com.arsdigita.london.navigation.NavigationFileResolver + + + + + portlet-type-xsl + com.arsdigita.dispatcher.PortletTypeXSLServlet + + + + + rss-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-rss + + + file-resolver + com.arsdigita.london.rss.RSSFileResolver + + + + + + + worker + com.arsdigita.london.search.SearchWorkerServlet + 4 + + + + search-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-search + + + + + AxisServlet + Apache-Axis Servlet + + org.apache.axis.transport.http.AxisServlet + + + + + + + shortcuts-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-shortcuts + + + + + + subsite-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-subsite + + + + + + + terms-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-terms + + + + + + + theme-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-theme + + + + + ThemeDownload + com.arsdigita.london.theme.dispatcher.ThemeDownloadServlet + + + + ThemePreviewServlet + Servlet to allow admins to preview look/feel + + com.arsdigita.london.theme.dispatcher.InternalThemePrefixerServlet + + + prefix + /theme + + + + + + + + + + + forum-main + /forum-main/main/* + + + + + portlet-type-xsl + /__ccm__/servlet/portlet-type/* + + + + portal-files + /ccm-ldn-portal/files/* + + + + navigation-files + /ccm-ldn-navigation/files/* + + + + + rss-files + /ccm-ldn-rss/files/* + + + + + search-files + /ccm-ldn-search/files/* + + + + AxisServlet + /services/* + + + + + + shortcuts-files + /ccm-ldn-shortcuts/files/* + + + + + subsite-files + /ccm-ldn-subsite/files/* + + + + + + terms-files + /ccm-ldn-terms/files/* + + + + + + theme-files + /theme-files/* + + + + ThemeDownload + /theme-files/download/* + + + + ThemePreviewServlet + /theme/* + + + + + + + + reg + /__ccm__/null/reg/* + + + + ccm-dispatcher + /ccm/* + + + + legacy-adapter + /__ccm__/servlet/legacy-adapter/* + + + + cache-manager + /expireCache/* + + + + db-test + /dbtest + + + + versioning-log + /versioning/* + + + + oid-redirect + /redirect/* + + + + resource-resolver + /resource/* + + + + + + content-section + /__ccm__/servlet/content-section/* + + + + content-item-xsl + /__ccm__/servlet/content-item/* + + + + content-type-xsl + /__ccm__/servlet/content-type/* + + + + template-xsl + /__ccm__/servlet/template/* + + + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + + + + + + com.arsdigita.dispatcher.AccessDeniedException + /error/access-denied.jsp + + + + com.arsdigita.dispatcher.ObjectNotFoundException + /error/object-not-found.jsp + + + + com.arsdigita.kernel.permissions.PermissionException + /error/permission-denied.jsp + + + + com.arsdigita.persistence.DbNotAvailableException + /error/db-not-available.jsp + + + + com.arsdigita.db.DbNotAvailableException + /error/db-not-available.jsp + + + + java.lang.Exception + /error/general.jsp + + + + java.lang.Error + /error/general.jsp + + + + + + /WEB-INF/bebop-show.tld + /WEB-INF/bebop-show.tld + + + + /WEB-INF/bebop-define.tld + /WEB-INF/bebop-define.tld + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.xsl new file mode 100644 index 000000000..2d9d2dcc5 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.xsl @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.css.NotUsedForNow b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.css.NotUsedForNow new file mode 100644 index 000000000..54c8c5bc3 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.css.NotUsedForNow @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/static/atoz/atoz.css"); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.xsl.NotUsedForNow b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.xsl.NotUsedForNow new file mode 100644 index 000000000..c5ca40b98 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.xsl.NotUsedForNow @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.css.NotUsedForNow b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.css.NotUsedForNow new file mode 100644 index 000000000..54c8c5bc3 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.css.NotUsedForNow @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/static/atoz/atoz.css"); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.xsl.NotUsedForNow b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.xsl.NotUsedForNow new file mode 100644 index 000000000..bc76dcdc2 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.xsl.NotUsedForNow @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + APLAWS+: A to Z + + + + + + Skip over navigation + | + + + + + + + + + + + +
+ + + + + + + + +
+ + + + +

A to Z List

+
+ | + + + | + + +
+ + + + + + + + + + + +
+

+home +&gt; +A to Z +

+
+
+ + + + + + + + + + +Skip to A-Z results + +
Browse the alphabetically listed information and services below
+
+
+ + + ?letter= + + | + +
+
Categories starting with the letter
+
+ + +
+
+ + + + + + + + +
+

[]

+ +
+ +
+
+
+
+
+ + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/category-step.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/category-step.xsl new file mode 100644 index 000000000..693fd7c38 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/category-step.xsl @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/consultations-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/consultations-index.xsl new file mode 100644 index 000000000..40ca23cd0 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/consultations-index.xsl @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + bebop:dimensionalNavbar + + + + + + +  >  + + + + + + + /bebop:dimensionalNavbar + + + + + + + +
+ + + + + + + post + + + + + + +
+
+ + + + + + + + + + + + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-center-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-center-index.xsl new file mode 100644 index 000000000..8ff5c3798 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-center-index.xsl @@ -0,0 +1,69 @@ + + + + + + + + + /cms/admin/page + + + + + + <xsl:value-of select="bebop:title"/> + + + + + + + + + + + + + +
+ + + +
+ + +
+
+ + +
+ + +
+
+ +
+
+
+ + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-section-admin.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-section-admin.xsl new file mode 100644 index 000000000..5c22541fa --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-section-admin.xsl @@ -0,0 +1,79 @@ + + + + + + + + + + + /cms/admin/page + + + + + + () + + + + + + + + <xsl:value-of select="bebop:title"/> + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-section-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-section-index.xsl new file mode 100644 index 000000000..9797efa5a --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/content-section-index.xsl @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + APLAWS+: <xsl:call-template name="Title"/> + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

+
+ | + + + | + + + +
+ + + + + + + +
+ +
+ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/css/main.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/css/main.css new file mode 100644 index 000000000..8ba53c820 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/css/main.css @@ -0,0 +1,1066 @@ +/* Uncomment to debug box model */ +/* +* { + border: 1px solid black !important; + margin: 2px !important; + padding: 2px !important; +} +*/ + +body { +margin: 0; +background-color: #FFF; +color: #000; +font-family: Verdana, Arial, Helvetica, sans-serif; +} + +a { + color: #333; + text-decoration: underline; +} + +a:hover { + text-decoration: underline; +} + +#startcontent { +text-decoration: none !important; +} + +.intLink { +text-decoration: none !important; +} + +.topLink { +color: #69C !important; +text-decoration: none !important; +} + + +img,a img { +border: none; +} + +.hide {display:none} + +.navHide { + position: absolute; + left: -1000px; + width: 990px; + font-size:1px; +} + + + + + + + +#header { +clear: both; +width: 100%; +background-color: #036; +margin: 0px; +border-top: 4px solid #036; +border-bottom: 1px solid #999; +} + +#logo { +float: left; +margin: 0px; +} + +#utils { +float: left; +width: 50%; +margin: 7px 0 0 0; +text-align: right; +font-size: 0.7em; +font-weight: normal; +color: #FFF; +} + +#utils a:link { +color: #FFF; +text-decoration: underline; +} +#utils a:visited { +color: #FFF; +text-decoration: underline; +} +#utils a:hover { +color: #FFF; +text-decoration: underline; +} +#utils a:active { +color: #FFF; +text-decoration: underline; +} + +#search { +float: right; +text-align: right; +margin: 0px 10px 0 0; +font-weight: bold; +color: #000; +background-color: #999; +border-top: 3px solid #999; +border-bottom: 3px solid #999; +} + +#search form { +margin: 0; +} + +#search label { +display: none; +position: absolute; +} + +.searchBox { +font-size: 0.7em; +font-weight: normal; +margin-left: 20px; +} + +.go { +font-size: 0.7em; +font-weight: normal; +margin-right: 10px; +padding: 0px; +} + +#clear { + clear: both; +} + +#tlcNav { +clear: both; +position: relative; +width: 100%; +font-size: 0.6em; +font-weight: normal; +color: #666; +background-color: #CCC; +border-top: 1px solid #9CF; +border-bottom: 1px solid #9CF; +text-transform: uppercase; +} + +#tlcNav p{ +margin: 0 2px 0 3px; +} + + +#tlcNav a{ +color: #036; +text-transform: uppercase; +text-decoration: none; +} + +#tlcNav a:hover{ +color: #FFF; +text-transform: uppercase; +text-decoration: underline; +} + +#bread { +clear: both; +position: relative; +width: 100%; +font-size: 0.7em; +border-top: 1px solid #036; +border-bottom: 1px solid #333; +background-color: #EEE; +text-transform: lowercase; +} + +#bread p { +margin: 1px 0 1px 3px; +} + +#bread a { +color: #333 !important; +text-decoration: none; +} + +#bread a:hover { +color: #000; +text-decoration: underline; +} + +#LHS{ +text-transform: capitalize; +} + +#nav{ +padding-top: 1em; +margin: 0 0 0px 2px; +} + +.navUp { +margin-top: 5px; +font-size: 0.7em; +border-bottom: 1px solid #333; +} + +.navUp a{ +text-decoration: none; +} + +.navHere { +font-size: 0.7em; +font-weight: normal; +color: #000; +background-color: #CCC; +border-bottom: 1px solid #333; +} + +.navHere p { +margin: 0 0 0 1.4em; +} + +.navHere a { +text-decoration: none; +} + +.navChild { +display: block; +font-size: 0.7em; +font-weight: normal; +color: #000; +margin: 0.2em 0 0.2em 1.4em; +border-bottom: 1px solid #9CF; +text-decoration: none; +} + +.navChild:hover { +background-color: #DDD; +text-decoration: none; +} + +#title { +padding-top: 1em; +} + +#title h1{ +font-size: 0.7em; +font-weight: bold; +margin: 5px 0 0 15px; +border-bottom: 1px solid #CCC; +} + +#greeting { +margin: 1em 1em 2em 15px; +} + +#greeting img{ +margin: 0 0 0 1em; +} + +#greeting { +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#greeting ul{ +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#contentLinks{ +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +border-bottom: 20px solid #FFF; +} + +#contentLinks a { +display: block; +font-size: 0.7em; +font-weight: normal; +padding: 0.2em 0 0.2em 0; +color: #000; +text-decoration: underline; +} + +#contentLinks a:hover { +text-decoration: underline; +} + +#lead { +font-weight: bold; +} + +#leadDetails { +font-weight: normal; +} + +#leadDetails .bold { +display: block; +font-weight: bold; +} + +#details { +clear: both; +position: relative; +margin: 2em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#details p{ +margin: 0 0 0.3em 0; +} + +#details .bold{ +padding: 0 0.5em 0 0; +font-weight:bold; +} + +#newsDate { +text-align: right; +} + +.caption { +text-align: right; +} + +#R_image { +float: right; +margin: 0 0 1em 2em; +padding: 0 0 0 0.8em; +text-align: left; +} + +#mainBody { +clear: both; +position: relative; +margin: 2em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#mainBody ul { +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#mainBody ol { +list-style: decimal; +margin-left: 22px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#mainBody .bold { +font-weight: bold; +} + +.attachment { +clear: both; +position: relative; +margin: 2em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +.attachment h2{ +font-size: 1em; +font-weight: bold; +border-bottom: 1px solid #CCC; +} + +.attachment ul { +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#sectionList { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#sectionList .bold { +display: block; +font-weight: bold; +} + +#sectionList a { +color: #69C; +} + +.section { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +.section img{ +margin: 0 0 0 1em; +} + +.section ul { +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +.section ol { +list-style: decimal; +margin-left: 22px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +.section .bold { +float: left; +display: block; +font-weight: bold; +font-size: 1em; +color: #000; +} + +#mpaDirection { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#mpaDirection a { +color: #000; +font-weight: bold; +text-decoration: none; +} + +#related{ +margin: 1em 2px 0 0; +border-left: 1px solid #9CF; +} + +#related h2{ +font-size: 0.7em; +font-weight: bold; +padding-left: 1em; +} + +#related a { +display: block; +width: 100%; +font-size: 0.7em; +font-weight: normal; +color: #000; +padding: 0.2em 0 0.2em 1.1em; +text-decoration: none; +} + +#related a:hover { +text-decoration: underline; +} + +#footer { +text-align: center; +border-top: 1px solid #036; +padding-top: 0.3em; +} + +#foottlc { +font-size: 0.7em; +font-weight: normal; +color: #333; +margin: 0 10%; +} + +#foottlc a{ +color: #333; +text-transform: lowercase; +} + +#legal { +border-top: 1px solid #999; +font-size: 0.65em; +font-weight: normal; +color: #666; +margin: 1em 0 0 0;} + +#legal a{ +color: #666; +} + +#compliance{ +} + +#compliance a { +} + +#compliance img { +border: 0; +} + +#searchArea { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +background-color: #CCC; +color: #333; +} + +.searchLabel { +position: absolute; +left: -1000px; +width: 990px; +font-size:1px; +} + + + + + +.searchExplanation { +margin: 1em 0 2em 3px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-top: 1px solid #999; +} + +#advGo { +text-align: right; +border-top: 1px solid #9CF; +} + +.adgo { +font-size: 0.7em; +font-weight: normal; +height: 1.6em; +background-color: #9CF; +} + +.searchAgain { +padding-left: 0.3em; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#resultsInfo { +clear: both; +position: relative; +margin: 1em 0 1em 0.3em; +border-bottom: 1px solid #FFF; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#resultsList { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-bottom: 20px solid #FFF; +} + +.searchResult { +clear: both; +position: relative; +margin: 1em 0 1em 0; +font-weight: normal; +color: #000 !important; +} + +.searchResult a{ +display: block; +font-weight: bold; +color: #333; +} + +#resultsPage { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-top: 1px solid #CCC; +} + +#pLeft { +float: left; +text-align: left; +border-top: 1px solid #CCC; +margin-top: -1px; +} + +#pRight { +float: right; +text-align: right; +border-top: 1px solid #CCC; +margin-top: -1px; +} + +#resultsPage a { +color: #333; +} + +.searchFilter { +margin: 0; +color: #333; +font-size: 0.7em; +} + +#advancedS { +width: 255px !important; +margin-top: 8px; +font-size: 0.7em; +border: 1px solid #666; +} + +#advlisthead { +color: #FFF; +background-color: #9CF; +} + +#remoteS { +width: 255px !important; +margin-top: 8px; +font-size: 0.7em; +border: 1px solid #666; +} + +#remotelisthead { +color: #FFF; +background-color: #9CF; +} + +#sLinks{ +margin: 3em 2px 0 0; +border-left: 1px solid #333; +} + +#sLinks h2{ +color: #000; +font-size: 0.7em; +font-weight: bold; +padding-left: 1em; +} + +.sLink { +width: 100%; +font-size: 0.7em ; +font-weight: normal; +color: #000; +padding: 1em 0 0.2em 1.1em; +} + +.sLink a { +display: block; +font-weight: bold; +color: #9CF !important; +text-decoration: none; +} + +.sLink a:hover { +text-decoration: underline; +} + + + + +#azArea { +clear: both; +position: relative; +margin: 1em 1em 1em 15px; +background-color: #CCC; +padding-bottom: 0.3em; +} + +#azSub { +clear: both; +position: relative; +margin: 2em 0 0 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#azInfo { +clear: both; +position: relative; +margin: 1em 0 1em 0; +border-bottom: 1px solid #FFF; +padding-bottom: 0.2em; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#azPlace { +clear: both; +position: relative; +margin: 2em 0 0 0; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#azList { +clear: both; +position: relative; +margin: 1em 1em 1em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-bottom: 20px solid #FFF; +} + +.letterSelected { +font-weight: bold !important; +text-transform: uppercase; +} + +#azList h2{ +font-size: 1em; +} + +.azTitleDescription { +font-weight: normal !important; +margin: 0 0 0 1em; +} + +.azResult { +clear: both; +position: relative; +margin: 1em 0; +font-weight: normal; +color: #000 !important; +} + +.azResult a{ +display: block; +font-weight: normal; +color: #333; +} + +#siteArea { +clear: both; +position: relative; +margin: 1em 1em 1em 15px; +background-color: #CCC; +padding-bottom: 1em; +} + +#siteInfo { +clear: both; +position: relative; +margin: 1em 0 1em 0.3em; +border-bottom: 1px solid #FFF; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#topSiteList { +clear: both; +position: relative; +margin: 1em 0 0em 0.3em; +font-size: 0.7em; +font-weight: bold; +color: #000; +} + +#topSiteList a{ +display: block; +} + +.anchor { +text-decoration: none !important; +} + +#siteList { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-bottom: 20px solid #FFF; +} + +#siteList ul { +list-style: none; +} + +.L1 { +margin: 0 !important; +} + +.L2 { +margin: 0 !important; +} + +.L3 { +margin: 0 !important; +} + +.L4 { +margin: 0 !important; +} + +.cat1 { +margin: 1em 0 1em 0; +border-top: 1px solid #9CF; +} + +.cat1 a { +font-weight: bold; +text-decoration: underline; +} + +.cat1 a:hover { +font-weight: bold; +text-decoration: underline !important; +} + +.cat2 { +margin: 1em 0 2em 2em; +border-top: 1px solid #CCC; +} + +.cat2 a { +font-weight: bold; +text-decoration: none; +} + +.cat2 a:hover { +font-weight: bold; +text-decoration: underline; +} + +.cat3 { +font-weight: normal; +margin: 0em 0 0em 0; +} + +.cat3 a { +font-weight: bold; +text-decoration: none; +} + +.cat4 { +font-weight: normal; +margin: 0em 0 0em 2em; +} + +.item { +font-weight: normal !important; +padding-left: 1em; +background-image: url("../images/arrowSitemap.gif") !important; +background-position: 0px 5px; +background-repeat: no-repeat; +} + +.toTop { +margin: 1em 0 5em 0; +} + +#dirBox { +clear: both; +position: relative; +margin: 0.5em 0 0 0 ; +padding: 0.3em; +border-top: 4px solid #CCC; +} + +#dirBox h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +} + +.RSS { +padding: 0.5em 0em 0.5em 0em ; +margin: 0; +font-size: 1em; +font-weight: normal; +color: #000; +background-color: #9CF; +} + +.RSS h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +border-bottom: 1px solid #666; +} + +.RSS a { +display: block; +font-weight: normal; +color: #333; +} + +.RSS a:hover { +color: #000; +} + +#poll { +clear: both; +position: relative; +margin: 0; +padding: 0.3em; +font-size: 0.7em; +font-weight: normal; +color: #000; +background-color: #CCC; +border-top: 2px solid #666; +border-bottom: 1px solid #9CF; +} + +#poll h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +border-top: 1px solid #9CF; +} + +.pollQ { +border-bottom: 1px solid #FFF; +} + +.pollSend { +border-top: 1px solid #FFF; +text-align: right; +font-size: 1em; +} + +.pollSend input{ +border-top: 1px solid #FFF; +text-align: center; +font-size: 1em; +} + +.CI { +clear: both; +position: relative; +margin: 0em 0em 1em 0; +} + +.CI h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +} + +#loginBox { +clear: both; +position: relative; +margin: 0 ; +padding: 0.3em; +font-size: 1em; +font-weight: normal; +color: #000; +background-color: #CCC; +border-top: 2px solid #666; +border-bottom: 1px solid #9CF; +} + +#loginBox h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +} + +#loginBox ul { +list-style: none; +margin: 1em 0; +} + +#registerB { +font-weight: bold; +text-align: right; +} + +#portalTitle h1{ +font-size: 0.7em; +font-weight: bold; +margin: 5px 0 0 0px; +border-bottom: 1px solid #CCC; +} + +#portalLHS { +padding-top: 0em; +} + +.portalWrap { +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +.portletWrap { +width: 100%; +} + +.dirCat { +margin-top: 5px; +border-top: 1px solid #9CF; +} + +.custLink { +margin-top: 1em; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-top: 1px solid #CCC; +background-color: #EEE; +} + +.custLink a { +padding-right: 1em; +} + +.directoryEntryLink { +font-weight: bold; +} + +.logbx { +width: 100px; +font-size: 1em; +} + +.logSubmit { +text-align: right; +border-top: 1px solid #9CF; +} + +.loggo { +font-size: 1em; +font-weight: normal; +height: 1.6em; +background-color: #9CF; +} diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/css/wysiwyg.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/css/wysiwyg.css new file mode 100644 index 000000000..2b9fd37ca --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/css/wysiwyg.css @@ -0,0 +1,17 @@ + +.main { +color: #333 !important; +} + +.light { +color: #CCC !important; +} + +.medium { +color: #6F3 !important; +} + +.dark { +color: #336 !important; +font-style: bold !important; +} diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-categories.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-categories.xsl new file mode 100644 index 000000000..c53df6013 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-categories.xsl @@ -0,0 +1,308 @@ + + + + + + + + + + + +
+ +

Assign Categories

+
+ + + + + +
+
+ + + + + + + + +   + + Add categories + + + + + + +
+ There are no categories assigned in this context +
+
+ +
    + + +
  • +   + + +   + Remove + +
  • +
    +
+
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + +
+
+
+

Selected Categories

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + catSelect('', ' + + ', '') + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + ' + \' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-index.xsl new file mode 100644 index 000000000..ad7703bd7 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-index.xsl @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Forum + + + + + + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + | + + + + | + +
+

+
+
+ +
+
+
+ + + + + + + + + + postOdd + + + postEven + + + + + + + + + + + + + + + + + + + + + + + +
Thread:
+ + +
+ +
+
+
+
+ + + ( + + ) + +
+ + +
+ + + Approve + + +   + + + + + Reject + + +   + + + + Edit + + +   + + + + Delete + + +   + + +   +   +   + + Reply + +   + Reply +   + +
+
+
+ +
+ Posted:  + +  by  + + + +
+ +
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ + +
+ {./description} +
+
+
+
+
+ + + + + + +
+ +
+
+ + + +
+
+ + + + + + + + + + <<< Previous + +   +   + + Page  +   + of  +   + +   +   + + + + + + + + + Next >>> + + +
+
+
+ + + +
+
+ +
+
Filter by topic:
+ +
+ +
+
+
+
+
+
+ + +
+
+
Thread
+
Author
+
Replies
+
Last Post
+
+ +
No messages have been posted yet
+
+ + +
+ + + + odd + + + even + + + + + +
+ + + +
+
+ +
+
+ +
+
+ +
+ +
+
+
+ + + +
+ + +
+
+
Subject
+
Replies
+
Author
+
Last Post
+
Status
+
Delete
+
+
+ +
+ You are not subscribed to any threads +
+
+ + + + + postOdd + + + postEven + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + +
+ + + + false + + + +
+
+ + + + +
+
+
Topic
+
Threads
+
Last Post
+
+ + + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+ + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + None + + + + None + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+
+
+ + +
+
Forum Alerts
+
+ +
+
+ + + + +
+
Thread Alerts
+
+ +
+
+ + + +
+ + + + +
+ + + + +
+
+
+   +
+
+
+
+ + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + forum member list +
+
+ + + +
+
+
+
+ + + +
+ +
+
+   +
+
+ + +
+ +
+
+   +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + post + + + + + + + +
+

+ +
+ +
+
+ + + + + +
+
+ +
+
+ +
+
+
+ + + + +
+
+
+
+
+ +
+ + + + +
+
Subject:
+
+ +
+ +
+
+
+
+
Message:
+
+ +
+ +
+
+
+ + + +
+
Topic:
+
+ +
+
+
+ +
+ Original Message: +
+
+
+ +
+
+
+
+ +
+ + + + + + +
+
+ + + +
+
+ +
+ Posted + +
+
+
+ +
+
+
+ + + + + + + + + + + + +
+
Image:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + + + +
+ No images attached to this post +
+
+ + + + + + + postOdd + + + postEven + + + +
+
+
+ {@caption} +
+
+ +
+
+ Remove +
+
+
+
+
+
+
+ + + + + + +
+ +
+ +
+
File:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + +
+ No files attached to this post +
+
+ +
+ + + + + + + + + + + + +
File
Description
+
+ + + + + + + + + + + Remove
+
+
+
+ +
+ +
+ + +
+ +
+
+ + + + + + + Post New Message + + + Add Images (optional) + + + Add Files (optional) + + + Preview New Message + + + + + + + + + + + + Edit Message + + + Edit Images + + + Edit Files + + + Preview Changes + + + + + + + + + + + + Post reply + + + Add Images (optional) + + + Add Files (optional) + + + Preview Reply + + + + + + + + +
+
+ + + +
+

+
+
+ +
+
Name:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ +
+
+ + + + +
+ + + + + +
+

+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ + +
+ + + + + +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ + +
+
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
+
+ +
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + +
+ You are watching this thread. To stop watching this thread, click "Stop Watching Thread" below. +
+ +
+ + + + + + + + + + + +
+ + + + +
+ + + +
+
+
+ + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.css new file mode 100644 index 000000000..31ac138af --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.css @@ -0,0 +1,402 @@ +@import url("css/main.css"); +<--@import url("/css/acs-master.css");--> +<--@import url("/css/tabbed-pane/tabbed-pane.css");--> + + +body { + margin: 0; + background-color: #FFF; + color: #000; + font-family: Verdana, Arial, Helvetica, sans-serif; +} + +.forum { + font-size: 0.8em; + margin: 8px 0 10px 2px; +} + +.content { + margin-left: 10px; +} + + +/*form submission*/ + +.forumSelect { + margin-top: 0.2em; + float:left; +} +.forumButton input { + float:left; + margin-top: 0.2em; + margin-right: 5px; + padding-left: 2px; + padding-right: 2px; + color: #000; + background-color: #CCC; + vertical-align: middle; + border: 1px solid #000; + +} + +.submit { + clear: both; + margin-left: 100px; +} + +/* +view all threads + +*/ + +#selectLabel { + float:left; + color: white; + padding-top: 0.2em; + padding-left: 0.2em; +} +#selectCategory { + background-color: #999; + height: 2.2em; + +} + +#threadHead { + background-color: #E5F3FC; + font-weight: bold; + height: 1.5em; + padding-left: 0.2em; + margin-bottom: 0.3em; + +} +#noMessages { + clear:both; + float:left; + width: 100%; + +} +.subject { + clear: both; + float:left; + width: 190px; + padding: 4px 0 4px 22px; + background-position: 4px 0.7em; + background-repeat: no-repeat; + background-image: url("images/forum/read.gif"); +} + +.topic { + clear:both; + float:left; + width: 212px; + padding: 4px 0 4px 0px; +} + +.threadSubject { + clear:both; + float:left; + width: 140px; + padding: 4px 0 4px 0px; +} + +.author { + float:left; + width: 100px; + padding: 4px 0 4px 0px; + text-align: center; +} + +.replies { + float:left; + text-align: center; + width: 60px; + padding: 4px 0 4px 0px; +} + +.threads { + float:left; + text-align: center; + width: 75px; + padding: 4px 0 4px 0px; +} + +.status { + float:left; + width: 75px; + padding: 4px 0 4px 0px; +} + +.delete { + float:left; + text-align: center; + width: 50px; + padding: 4px 0 4px 0px; +} + +.lastPost { + float: left; + text-align: center; + width: 150px; + padding: 4px 0 4px 0px; +} + +#newTopicLink a { + padding: 4px 0 4px 22px; + background-position: 0px 0.3em; + background-repeat: no-repeat; + background-image: url("images/forum/post-16x16.gif"); +} + +#viewAllTopicsLink a { + float: left; + padding: 4px 15px 4px 22px; + background-position: 0px 0.3em; + background-repeat: no-repeat; + background-image: url("images/forum/back-to-16x16.gif"); + +} + +#watchTopicLink a { + float: left; + padding: 4px 0 4px 22px; + background-position: 0px 0.3em; + background-repeat: no-repeat; + background-image: url("images/forum/watch-16x16.gif"); + margin-left: 0.8em; + margin-bottom: 0.8em; +} + +#info { + clear:both; + padding: 4px 0 4px 22px; + background-position: 0px 0.6em; + background-repeat: no-repeat; + background-image: url("images/forum/info-16x16.gif"); + color: green; + margin-left: 0.8em; +} + +.post { + clear: both; + margin-bottom: 0.8em; + font-size: 1em; +} + +.postOdd { + background-color: #EFEFEF; + +} + +.postEven { + background-color: #FFFFFF; +} + +#topic { + margin-bottom: 0.8em; + font-weight: bold; +} + +.actions { + float: right; + margin-right: 0.3em; +} + +.header { + float: left; + margin-left: 0.3em; + font-weight: bold; +} + +.message { + clear: both; + float: left; + width:98%; + margin-left: 0.3em; + margin-bottom: 0.5em; +} + +.postDetails { + clear: both; + float: left; + margin-bottom: 0.5em; + margin-left: 0.3em; +} + +.bar { + clear:both; + float:left; + width: 98%; + padding-left: 0.3em; + padding-right: 0.3em; + padding-top: 0.5em; + padding-bottom: 0.5em; +} + +.replyBar { + clear:both; + padding-right: 0.3em; + padding-top: 0.5em; + padding-bottom: 0.5em; +} + + +.clearGroup { + clear:both; + margin-bottom: 0.5em; +} + +.columnOne { + float: left; + width: 100px; + font-size: 1em; +} + +.columnOneWide { + float: left; + width: 130px; + font-size: 1em; +} + +.columnTwo { + display: inline; + font-size: 1em; + margin: 0; +} + + +.columnTwo input { + width: 300px; +} + +.columnTwo select { + width: 300px; +} + + +.columnTwo textArea { + width: 300px; +} + +.columnThree { + font-size: 1em; +} + +#title { + float:left; + width: 100%; + + font-size: 1.2em; +} + + +fieldset { + padding: 0.3em 0.3em 0.3em 0.3em; +} + +.fileLink { + margin-left: 0.5em; + clear: both; + float:left; +} + + +textarea { + width: 450px; +} + +.validationError { + color: red; + margin-left: 100px; +} + +#images { + clear: both; + float:left; + margin-left: 0.3em; +} + +#plainText { + clear: both; + font-size: 1em; + margin-bottom: 0.5em; +} + +li { + list-style-position: inside; +} + +.expiry input { + width: 50px; +} + +.fileTable { + width: 100%; +} + + +pre { + + font-size: 1em; +} + + +/* Contents of tabbed-pane.css - forum tabs */ + +div.tabbed-pane div, div.tabbed-pane table.tab-set, div.tabbed-pane table.tab-set td { + margin: 0; + border: 0; + padding: 0; +} + +div.tabbed-pane table { + border-collapse: collapse; +} + +div.tabbed-pane table.tab-set { + margin-left: 10px; +} + +div.tabbed-pane table.tab-set a { + text-decoration: none; + color: rgb(63,63,63); +} + +div.tabbed-pane table.tab-set td.tab-label { + margin-left: 4px; + padding: 5px 0 3px 10px; + + background: rgb(225,225,225) url(/css/tabbed-pane/tab-unselected.png) no-repeat; +} + +div.tabbed-pane table.tab-set td.tab-end { + width: 10px; + background: url(/css/tabbed-pane/tab-unselected-end.png) no-repeat; +} + +div.tabbed-pane table.tab-set td.current-tab-label { + margin-left: 4px; + padding: 5px 0 3px 10px; + background: rgb(162,30,30) url(/css/tabbed-pane/tab-selected.png) no-repeat; + color: white; +} + +div.tabbed-pane table.tab-set td.current-tab-end { + width: 10px; + background: url(/css/tabbed-pane/tab-selected-end.png) no-repeat; +} + +div.tabbed-pane table.tab-set td.tab-spacer { + width: 4px; +} + +div.tabbed-pane table.rule { + margin-left: 10px; + width: 100%; + background: rgb(162,30,30) url(/css/tabbed-pane/tab-bar.png) repeat-x; + height: 10px; +} + +div.tabbed-pane div.current-pane { + width: 100%; +} + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.xsl new file mode 100644 index 000000000..86e99e146 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.xsl @@ -0,0 +1,1308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Forum + + + + + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + | + + + + | + +
+

+
+
+ +
+
+
+ + + + + + + + + + postOdd + + + postEven + + + + + + + + + + + + + + + + + + + + + + + +
Thread:
+ + +
+ +
+
+
+
+ + + ( + + ) + +
+ + +
+ + + Approve + + +   + + + + + Reject + + +   + + + + Edit + + +   + + + + Delete + + +   + + +   +   +   + + Reply + +   + Reply +   + +
+
+
+ +
+ Posted:  + +  by  + + + +
+ +
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ + +
+ {./description} +
+
+
+
+
+ + + + + + +
+ +
+
+ + + +
+
+ + + + + + + + + + <<< Previous + +   +   + + Page  +   + of  +   + +   +   + + + + + + + + + Next >>> + + +
+
+
+ + + +
+
+ +
+
Filter by topic:
+ +
+ +
+
+
+
+
+
+ + +
+
+
Thread
+
Author
+
Replies
+
Last Post
+
+ +
No messages have been posted yet
+
+ + +
+ + + + odd + + + even + + + + + +
+ + + +
+
+ +
+
+ +
+
+ +
+ +
+
+
+ + + +
+ + +
+
+
Subject
+
Replies
+
Author
+
Last Post
+
Status
+
Delete
+
+
+ +
+ You are not subscribed to any threads +
+
+ + + + + postOdd + + + postEven + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + +
+ + + + false + + + +
+
+ + + + +
+
+
Topic
+
Threads
+
Last Post
+
+ + + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+ + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + None + + + + None + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+
+
+ + +
+
Forum Alerts
+
+ +
+
+ + + + +
+
Thread Alerts
+
+ +
+
+ + + +
+ + + + +
+ + + + +
+
+
+   +
+
+
+
+ + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + forum member list +
+
+ + + +
+
+
+
+ + + +
+ +
+
+   +
+
+ + +
+ +
+
+   +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + post + + + + + + + +
+

+ +
+ +
+
+ + + + + +
+
+ +
+
+ +
+
+
+ + + + +
+
+
+
+
+ +
+ + + + +
+
Subject:
+
+ +
+ +
+
+
+
+
Message:
+
+ +
+ +
+
+
+ + + +
+
Topic:
+
+ +
+
+
+ +
+ Original Message: +
+
+
+ +
+
+
+
+ +
+ + + + + + +
+
+ + + +
+
+ +
+ Posted + +
+
+
+ +
+
+
+ + + + + + + + + + + + +
+
Image:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + + + +
+ No images attached to this post +
+
+ + + + + + + postOdd + + + postEven + + + +
+
+
+ {@caption} +
+
+ +
+
+ Remove +
+
+
+
+
+
+
+ + + + + + +
+ +
+ +
+
File:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + +
+ No files attached to this post +
+
+ +
+ + + + + + + + + + + + +
File
Description
+
+ + + + + + + + + + + Remove
+
+
+
+ +
+ +
+ + +
+ +
+
+ + + + + + + Post New Message + + + Add Images (optional) + + + Add Files (optional) + + + Preview New Message + + + + + + + + + + + + Edit Message + + + Edit Images + + + Edit Files + + + Preview Changes + + + + + + + + + + + + Post reply + + + Add Images (optional) + + + Add Files (optional) + + + Preview Reply + + + + + + + + +
+
+ + + +
+

+
+
+ +
+
Name:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ +
+
+ + + + +
+ + + + + +
+

+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ + +
+ + + + + +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ + +
+
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
+
+ +
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + +
+ You are watching this thread. To stop watching this thread, click "Stop Watching Thread" below. +
+ +
+ + + + + + + + + + + +
+ + + + +
+ + + +
+
+
+ + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/archived-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/archived-16x16.gif new file mode 100644 index 000000000..2d3db34c2 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/archived-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/back-to-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/back-to-16x16.gif new file mode 100644 index 000000000..95d374a32 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/back-to-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/delete-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/delete-16x16.gif new file mode 100644 index 000000000..867d48eee Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/delete-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/edit-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/edit-16x16.gif new file mode 100644 index 000000000..3e9a90a47 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/edit-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/info-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/info-16x16.gif new file mode 100644 index 000000000..5acb95064 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/info-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/post-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/post-16x16.gif new file mode 100644 index 000000000..07b98d107 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/post-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/read.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/read.gif new file mode 100644 index 000000000..26d0d6fb5 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/read.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/reply-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/reply-16x16.gif new file mode 100644 index 000000000..0395fca0f Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/reply-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/watch-16x16.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/watch-16x16.gif new file mode 100644 index 000000000..01e001924 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/watch-16x16.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.css new file mode 100644 index 000000000..132b7d723 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.css @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/static/forum/forum.css"); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.xsl new file mode 100644 index 000000000..b7b067338 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo-small.png b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo-small.png new file mode 100644 index 000000000..3280df920 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo-small.png differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo.gif new file mode 100644 index 000000000..e0fa5a9ee Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplawsplus.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplawsplus.gif new file mode 100644 index 000000000..576719675 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/aplawsplus.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/arrowSitemap.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/arrowSitemap.gif new file mode 100644 index 000000000..278673f15 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/arrowSitemap.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/spacer.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/spacer.gif new file mode 100644 index 000000000..5bfd67a2d Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/spacer.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow-s.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow-s.gif new file mode 100644 index 000000000..9be407815 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow-s.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow.gif b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow.gif new file mode 100644 index 000000000..8230bf333 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow.gif differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.bmp b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.bmp new file mode 100644 index 000000000..7f7cf9381 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.bmp differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.png b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.png new file mode 100644 index 000000000..020c75a73 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.png differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.bmp b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.bmp new file mode 100644 index 000000000..e0328dc6f Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.bmp differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.png b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.png new file mode 100644 index 000000000..3855210c6 Binary files /dev/null and b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.png differ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/body.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/body.xsl new file mode 100644 index 000000000..0c1921625 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/body.xsl @@ -0,0 +1,48 @@ + + + + + + + + +
+ +
+
+ + +
+ APLAWS> +
+
+ + +

+
+ +
+
+ + +
+ +
+
+ + +
+ + +
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/head.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/head.xsl new file mode 100644 index 000000000..d92c8db7e --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/head.xsl @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/header.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/header.xsl new file mode 100644 index 000000000..65a6df7d4 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/header.xsl @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/leftNav.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/leftNav.xsl new file mode 100644 index 000000000..14fb8bf89 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/leftNav.xsl @@ -0,0 +1,86 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl new file mode 100644 index 000000000..fec9b385d --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +| +
+

+ +home&nbsp;&gt;&nbsp; +| + + + + + + + + +| +&nbsp;&gt;&nbsp; + + + + + + +

+| +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Data Protection and Information Sharing notice. No personal information you have given us will be passed on to third parties for commercial purposes. The Council's policy is that all information will be shared among officers and other agencies where the legal framework allows it, if this will help to improve the service you receive and to develop other services. If you do not wish certain information about you to be exchanged within the Council, you can request that this does not happen. + + + + + + + + + + + + + + + + + + + + + + + +A to Z + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + /cms-service/stream/image/?image_id= + + +
+
+

+ +

+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Dated Links + + + + + + + + + + + +
+

Related Files:

+ +
+
+
+ + + + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ +  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ + + + !'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ + + 0123456789ABCDEF + + + + + + + + + + + + + + + + + + + Warning: string contains a character that is out of range! Substituting "?". + 63 + + + + + + + + + + + + + + + + + + + +
+

Associated Links:

+ +
+
+
+ + + + +

Related Items

+ + + + | +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +APLAWS+: + + + + + + + + + + + + + +20 + - + + + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + + - + + + + + + +
+ + +
+
+ + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl~ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl~ new file mode 100644 index 000000000..ad362ffde --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl~ @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +| +
+

+ +home&nbsp;&gt;&nbsp; +| + + + + + + + + +| +&nbsp;&gt;&nbsp; + + + + + + +

+| +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Data Protection and Information Sharing notice. No personal information you have given us will be passed on to third parties for commercial purposes. The Council's policy is that all information will be shared among officers and other agencies where the legal framework allows it, if this will help to improve the service you receive and to develop other services. If you do not wish certain information about you to be exchanged within the Council, you can request that this does not happen. + + + + + + + + + + + + + + + + + + + + + + + +A to Z + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + /cms-service/stream/image/?image_id= + + +
+
+

+ +

+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Dated Links + + + + + + + + + + + +
+

Related Files:

+ +
+
+
+ + + + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ +  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ + + + !'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ + + 0123456789ABCDEF + + + + + + + + + + + + + + + + + + + Warning: string contains a character that is out of range! Substituting "?". + 63 + + + + + + + + + + + + + + + + + + + +
+

Associated Links:

+ +
+
+
+ + + + +

Related Items

+ + + + | +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +APLAWS+: + + + + + + + + + + + + + +20 + - + + + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + + - + + + + + + +
+ + +
+
+ + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/page.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/page.xsl new file mode 100644 index 000000000..1f8f422cc --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/page.xsl @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + <xsl:call-template name="aplaws:pageTitle"/> + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/user-banner.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/user-banner.xsl new file mode 100644 index 000000000..1e9b0bb8d --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/lib/user-banner.xsl @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + +
       + + + + +
+ +   + +   + + +
+
+ + + + + + + + +
+
+
+ + + + + + + + + +
       + + + + +
+ You are not currently logged in +
+
+ + + + + Login + +
+
+
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.css new file mode 100644 index 000000000..278ecd8e6 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.css @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/apps/navigation/xsl/admin.css"); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.xsl new file mode 100644 index 000000000..6233f0d7a --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.xsl @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-directory.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-directory.xsl new file mode 100644 index 000000000..6a8c818af --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-directory.xsl @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-index.xsl new file mode 100644 index 000000000..b18a3896b --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-index.xsl @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-services.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-services.xsl new file mode 100644 index 000000000..6a8c818af --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-services.xsl @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-sitemap.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-sitemap.xsl new file mode 100644 index 000000000..aae53c18b --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-sitemap.xsl @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + APLAWS+: Site Map + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Site Map

+
+ | + + + | + + + +
+ +
+ + + + + + + + + +
+

+home +&gt; +Site Map +

+
+
+ + + + + + + + + + + + + + + + +
+ +
Select an area to view
+ +
+ + | + +
+
+ + + +
+ + + + + + + +
+ + +
    + +
  • + +
      + +
    • + +
        + +
      • + + +
          + +
        • +
          +
        +
        + +
      • +
        +
      + +
    • +
      +
    +
  • + +
  • top
  • +
    +
+
+ + + + + +
+
+ + + + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-summary.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-summary.xsl new file mode 100644 index 000000000..f88dd0c97 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/navigation-summary.xsl @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PIDTerm# items
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/application-directory-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/application-directory-portlet.xsl new file mode 100644 index 000000000..d3ec401c9 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/application-directory-portlet.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + +
+ + + + +
+
+ + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-item-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-item-portlet.xsl new file mode 100644 index 000000000..5dd4f948d --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-item-portlet.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-sections-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-sections-portlet.xsl new file mode 100644 index 000000000..a38288f70 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-sections-portlet.xsl @@ -0,0 +1,41 @@ + + + + + + + +
+ + + +
+
+ + admin + + admin +
+
+ + + +
+ + + table_row_odd + table_row_even + + + +
+
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/directory-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/directory-portlet.xsl new file mode 100644 index 000000000..6aab1c230 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/directory-portlet.xsl @@ -0,0 +1,40 @@ + + + + + + +
+

+ +
+
+ + + + + +
+
+ + + + | + + +
+
+ + + + + + + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/freeform-html-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/freeform-html-portlet.xsl new file mode 100644 index 000000000..317ee6eab --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/freeform-html-portlet.xsl @@ -0,0 +1,16 @@ + + + + +
+ +
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/lib.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/lib.xsl new file mode 100644 index 000000000..856679e83 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/lib.xsl @@ -0,0 +1,53 @@ + + + + + + + + + + + + Move Down + + + Move Up + + + Configure + + + Delete + + + + + + {$title} + + + + + + + + + + +
+
+ + +
+ +
+
+ +
+ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/login-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/login-portlet.xsl new file mode 100644 index 000000000..3b982ff14 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/login-portlet.xsl @@ -0,0 +1,48 @@ + + + + + + + +
+
+ + + + +

+ Welcome   + +| + + +
+ + +

Site Login

+ +
+
Email:
+
Password:
+
+ +
+
+ + +
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/portlets.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/portlets.xsl new file mode 100644 index 000000000..7af695964 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/portlets.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/rss-feed-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/rss-feed-portlet.xsl new file mode 100644 index 000000000..d2fd5570e --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/rss-feed-portlet.xsl @@ -0,0 +1,95 @@ + + + + + +
+

+ + + + +
+
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + +
+ +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + +
+ +
+
+
+ + +
+ +
+
+ +
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/tasklist-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/tasklist-portlet.xsl new file mode 100644 index 000000000..720efab26 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/tasklist-portlet.xsl @@ -0,0 +1,62 @@ + + + + + + +
+ + + +
+
+ + + +
+
+ +
+
+ , + + No assigned users + + + 1 assigned user + + + assigned users + +
+
+ + + +

No tasks to display.

+
+ + + + + + + + table_row_odd + table_row_even + + + + + +
Item TitleActionDue DateStatus
+
+
+ +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/time-of-day-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/time-of-day-portlet.xsl new file mode 100644 index 000000000..1d4dd4075 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/time-of-day-portlet.xsl @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/workspace-directory-portlet.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/workspace-directory-portlet.xsl new file mode 100644 index 000000000..1e533ace5 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/portal/workspace-directory-portlet.xsl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/search-admin.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/search-admin.xsl new file mode 100644 index 000000000..1d143a00e --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/search-admin.xsl @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/search-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/search-index.xsl new file mode 100644 index 000000000..ba76bc478 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/search-index.xsl @@ -0,0 +1,590 @@ + + + + + + + + + + + + + + + + + + + + + + APLAWS+: Search + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + +
+ + + + +

Search

+
+ | + + + + | + + + + + + +
+ + +
+ + + + + +
+

+ home + &gt; + + + Search + Advanced Search + Remote Search + + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + Explanation of Search + +
+ +
+ Type your query: + + + + +
+ + +
+ + +
+
+ +
+ + + + +
+
+ + + Explanation of Advanced Search + +
+ +
+ Type your query: + + + + + +
Select the content types you would like to search
+ + + + + + +
+ + +
+ + +
+
+ +
+ + + + +
+
+ + + Explanation of Remote Search + +
+ +
+ Type your query: + + + + + +
Select the connected websites you would like to search
+ + + + + + + + + + +
+ + +
+ + +
+
+ +
+ + + + + + + + + + + + + +
+
+ +
+ + + + +
+ | +
+
+ +
+
+ + + + + +You searched for &gt; + + + There were no results for your search + + + + results found + + + + + + + + + + + +
+ + + There were no results for your search + + + + displaying results + + to + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Displaying page + + of + + (maximum of + + results per page) +
+
+
+ + + + + + + + + + + + + + + + + + odd + even + + + + + +
ScoreTitleSummary
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + Query: + + + + + + + + + Types: + + + + + + + + + Categories: + + + + + + + + + + + hidden + + + + + + + + +
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.xsl new file mode 100644 index 000000000..a4e103c89 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.xsl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.xsl new file mode 100644 index 000000000..cb04a688c --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.css new file mode 100644 index 000000000..15fd56956 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.css @@ -0,0 +1,6 @@ +@import url(/css/acs-master.css); +/* Following import is valid if terms is executed in its own */ +/* web application context (ccm-ldn-terms) */ +/* @import url(/ccm-ldn-terms/__ccm__/apps/terms/xsl/index.css); */ +/* import if installed in the main (common) web context */ +@import url(/__ccm__/apps/terms/xsl/index.css); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.xsl new file mode 100644 index 000000000..0ee053d22 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.xsl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.css b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.xsl new file mode 100644 index 000000000..44121cbda --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Address.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Address.xsl new file mode 100644 index 000000000..70f9f4de5 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Address.xsl @@ -0,0 +1,65 @@ + + + + + + + + +
+ +

+Address: +

+
+ +

+Post Code: +

+
+ +

+Country: +

+
+ +

+Phone: +

+
+ +

+Mobile: +

+
+ +

+Fax: +

+
+ +

+Email: +

+
+ +

+Notes: +

+
+
+ + +
+

+ +

+ +
+ +
+
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Agenda.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Agenda.xsl new file mode 100644 index 000000000..17c62d363 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Agenda.xsl @@ -0,0 +1,98 @@ + +]> + + + + + + +
+

+Date: +

+

+Location: +

+

+Attendees: +

+

+Contact Info: +

+
+ +
+

+Subject Items: + +

+

+Summary: + +

+ +
+
+ + + + + + + + +&nbsp; + + + + + + +Mon +Tue +Wed +Thu +Fri +Sat +Sun + + +&nbsp; + + +st +nd +rd +th + +&nbsp; + + +Jan +Feb +Mar +Apr +May +Jun +Jul +Aug +Sep +Oct +Nov +Dec + + +&nbsp; +20 +&nbsp; + + + + + +
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Article.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Article.xsl new file mode 100644 index 000000000..5053ca2d6 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Article.xsl @@ -0,0 +1,36 @@ + +]> + + + + + + + +
+ +
+ +/cms-service/stream/image/?image_id= + + +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/ContentTypes.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/ContentTypes.xsl new file mode 100644 index 000000000..e385d8209 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/ContentTypes.xsl @@ -0,0 +1,77 @@ + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Event.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Event.xsl new file mode 100644 index 000000000..9a25fec03 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Event.xsl @@ -0,0 +1,60 @@ + +]> + + + + + +
+

+Event Type: +

+

+Event Date: + +

+

+Start Date: + +

+

+Start Time: + +

+

+End Date: + +

+

+End Time: + +

+

+Contributor: +

+

+Location: +

+

+Map: + +View map + +

+

+Cost: +

+
+
+

+ +

+ +
+
+
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/FileStorageItem.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/FileStorageItem.xsl new file mode 100644 index 000000000..af6319ba7 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/FileStorageItem.xsl @@ -0,0 +1,25 @@ + + + + + + + + + +
+ +
+ +
+View in browser +&nbsp;|&nbsp; +Save to disk +
+ +
+
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/InlineSite.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/InlineSite.xsl new file mode 100644 index 000000000..e87f28ef8 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/InlineSite.xsl @@ -0,0 +1,29 @@ + +]> + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Job.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Job.xsl new file mode 100644 index 000000000..b6e1c034d --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Job.xsl @@ -0,0 +1,46 @@ + +]> + + + + + + +
+

+Grade: +

+

+Department: +

+

+Salary: +

+

+Ref: +

+

+Closing Date: +

+

+Contact: +

+
+
+

+Job Description: + +

+

+Person Specification: + +

+ +
+
+
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/LegalNotice.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/LegalNotice.xsl new file mode 100644 index 000000000..4a6bfe587 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/LegalNotice.xsl @@ -0,0 +1,23 @@ + +]> + + + + + + +
+

+UID: +

+
+
+ +
+
+
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Minutes.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Minutes.xsl new file mode 100644 index 000000000..43360a7ae --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Minutes.xsl @@ -0,0 +1,34 @@ + +]> + + + + + +
+

+Description of Minutes: +

+

+Minutes ID Number: +

+

+Attendees At Meeting: +

+
+
+

+ +

+

+Action Item: +

+ +
+
+
diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/MultiPartArticle.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/MultiPartArticle.xsl new file mode 100644 index 000000000..c37146903 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/MultiPartArticle.xsl @@ -0,0 +1,151 @@ + +]> + + + + + +
+
+ +
+
+ + | + + + + + + + + + + + +
+ + + + + + + + + + + + + + + | + + + + + + + +
+ +
+ + + + + +
+ + + + /cms-service/stream/image/?image_id= + + + + + + + + +
:
+
+ + + + +
+ + + + + +
+ +
+ +
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/NewsItem.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/NewsItem.xsl new file mode 100644 index 000000000..8a7030c51 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/NewsItem.xsl @@ -0,0 +1,41 @@ + +]> + + + + + + +
+ +
+ +
+ + +
+ +/cms-service/stream/image/?image_id= + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ + +
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/PressRelease.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/PressRelease.xsl new file mode 100644 index 000000000..a25dd2dc5 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/PressRelease.xsl @@ -0,0 +1,30 @@ + +]> + + + + + +
+

+Ref Code: +

+

+Contact: +

+
+ +
+

+

+ +
+ +
+ +
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Service.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Service.xsl new file mode 100644 index 000000000..2758df8a3 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/Service.xsl @@ -0,0 +1,40 @@ + +]> + + + + + + +
+

+Opening Times: +

+

+Contact: +

+

+Address: +

+
+ +
+

+Services Provided: + +

+

+Summary: + +

+ +
+ +
+ +
\ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/SiteProxy.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/SiteProxy.xsl new file mode 100644 index 000000000..2d4aa9b97 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/types/SiteProxy.xsl @@ -0,0 +1,21 @@ + +]> + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/workspace-admin.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/workspace-admin.xsl new file mode 100644 index 000000000..30d9905c6 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/workspace-admin.xsl @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + diff --git a/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/workspace-index.xsl b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/workspace-index.xsl new file mode 100644 index 000000000..e76ed6279 --- /dev/null +++ b/ccm-iaw-aplaws/web/__ccm__/themes/aplaws-generic/workspace-index.xsl @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + APLAWS+: <xsl:call-template name="Title"/> + + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + + +
+

+home +

+
+
+ + + + + + + + + + + + + + +
+ + + +

APLAWS+ Plus

+
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +back to user's view +delete area +customise area + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ diff --git a/ccm-iaw-aplaws/web/aplaws/schema.jsp b/ccm-iaw-aplaws/web/aplaws/schema.jsp new file mode 100644 index 000000000..2b463c183 --- /dev/null +++ b/ccm-iaw-aplaws/web/aplaws/schema.jsp @@ -0,0 +1,56 @@ + + + + + + + + + + StringParameter typeParam = new StringParameter("type"); + String type = (String)typeParam.transformValue(request); + + StringParameter contextParam = new StringParameter("context"); + String context = (String)contextParam.transformValue(request); + + BooleanParameter wrapAttrParam = new BooleanParameter("wrapAttr"); + Boolean wrapAttr = (Boolean)wrapAttrParam.transformValue(request); + + BooleanParameter wrapRootParam = new BooleanParameter("wrapRoot"); + Boolean wrapRoot = (Boolean)wrapRootParam.transformValue(request); + + BooleanParameter wrapObjectParam = new BooleanParameter("wrapObject"); + Boolean wrapObject = (Boolean)wrapObjectParam.transformValue(request); + + String ns = type.replace('.', '/'); + + ObjectTypeSchemaGenerator gen = new ObjectTypeSchemaGenerator("object", + "http://aplaws.org/schemas/content-types/" + ns); + if (Boolean.TRUE.equals(wrapObject)) { + gen.setWrapObjects(true); + } else if (Boolean.FALSE.equals(wrapObject)) { + gen.setWrapObjects(false); + } + if (Boolean.TRUE.equals(wrapAttr)) { + gen.setWrapAttributes(true); + } else if (Boolean.FALSE.equals(wrapAttr)) { + gen.setWrapAttributes(false); + } + if (Boolean.TRUE.equals(wrapRoot)) { + gen.setWrapRoot(true); + } else if (Boolean.FALSE.equals(wrapRoot)) { + gen.setWrapRoot(false); + } + gen.walk(type, context); + + Document doc = new Document(gen.getRoot()); + + response.setContentType("text/plain; charset=UTF-8"); + Writer writer = response.getWriter(); + writer.write(doc.toString()); + + diff --git a/ccm-iaw-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.js b/ccm-iaw-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.js new file mode 100644 index 000000000..fe045f7ce --- /dev/null +++ b/ccm-iaw-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.js @@ -0,0 +1,137 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2005 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * File Name: fckconfigOpenCCM.js + * Editor configuration settings for use in admin interface in APLAWS/OpenCCM. + * This configuration is designed to match the following goals: + * - Easy useage of the editor + * - Clean HTML output, this means for example that no deprected elements are useable from the editor + * + * This file is organized in the same way as the page of the FCKEditor documentation showing all config options. + * The page can be found here: http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options + * + * - Semantic HTML output. This means that elements like are prefered against such as + * This config is loaded from the Javascript in the calling page using AFTER the + * default fckconfig.js is loaded. + * + * File Authors: + * Chris Burnett (orginale fckeditordefaultstyle.js for APLAWS) + * Jens Pelzetter + */ + +/* **************************************************************************************************************** */ + + +/* Editor Behavior + --------------- */ + +FCKConfig.AutoDetectPasteFromWord = false ; //Paste Word text directly to the editor (only IE) +FCKConfig.CleanWordKeepsStructure = true ; //Prefer to keep HTML structure, not layout +FCKConfig.DocType = '' ; +FCKConfig.ForcePasteAsPlainText = true ; //Text pasted in from another app will appear as plain text + + +/* Styles + ------ */ + +FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'config/fckconfigOpenCCM.xml' ; //Some styles + +/* HTML Output + ----------- */ + +FCKConfig.FormatOutput = true ; //Format output code +FCKConfig.FormatSource = true ; + +/* User interface + -------------- */ + +FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ; +FCKConfig.ImageDlgHideLink = true ; +FCKConfig.ImageDlgHideAdvanced = true ; +FCKConfig.ShowDropDialog = true ; +FCKConfig.ToolbarSets["AplawsBasic"] = [ + ['Style','-','OrderedList','UnorderedList','Subscript', 'Superscript', '-','SpellCheck','Link','Unlink','RemoveFormat','-','ImageButton', '-', 'AdvToolbar', 'About'] +] ; + +FCKConfig.ToolbarSets["AplawsAdvanced"] = [ + ['Style','-','OrderedList','UnorderedList','Subscript', 'Superscript'], + ['Cut','Copy','Paste','PasteText','PasteWord','Undo','Redo','RemoveFormat'], + ['Find','Replace','SelectAll', '-','SpellCheck'], + '/', + ['Link','Unlink','Anchor','-','Source'], + ['SimpleToolbar'] +] ; + + +// Replace the Advanced toolbar with AplawsAdvanced & setup the Basic toolbar to use the AplawsBasic toolbar +// The two toolbars are used to support the dynamic toolbar switching plugin. +// Set the Default to be the Basic version so that the editor loads the basic toolbar on startup. + +FCKConfig.ToolbarSets["Advanced"] = FCKConfig.ToolbarSets["AplawsAdvanced"] ; +FCKConfig.ToolbarSets["Basic"] = FCKConfig.ToolbarSets["AplawsBasic"] ; +FCKConfig.ToolbarSets["Default"] = FCKConfig.ToolbarSets["Basic"] ; + +/* Advanced + -------- */ +FCKConfig.FirefoxSpellChecker = true ; +FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages' +FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ; + +/* File Browser and Updoader + ------------------------- */ + +FCKConfig.LinkBrowser = true ; +FCKConfig.LinkBrowserURL = "/ccm/content/admin/search.jsp?useURL=true&widget=getElementById('txtUrl')" ; +FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% +FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% + + +/* +FCKConfig.ToolbarSets["AplawsBasic"] = [ + ['Style','-','Bold','OrderedList','UnorderedList','-','SpellCheck','Link','Unlink','RemoveFormat','-','AdvToolbar'] +] ; + +FCKConfig.ToolbarSets["AplawsAdvanced"] = [ + ['Style','-','Bold','OrderedList','UnorderedList'], + ['Cut','Copy','Paste','PasteText','PasteWord','Undo','Redo','RemoveFormat'], + ['Find','Replace','SelectAll', '-','SpellCheck'], + '/', + ['UniversalKey'], + ['Link','Unlink','Anchor','-','Source'], + ['SimpleToolbar'] +] ; + + +// Replace the Advanced toolbar with AplawsAdvanced & setup the Basic toolbar to use the AplawsBasic toolbar +// The two toolbars are used to support the dynamic toolbar switching plugin. +// Set the Default to be the Basic version so that the editor loads the basic toolbar on startup. + +FCKConfig.ToolbarSets["Advanced"] = FCKConfig.ToolbarSets["AplawsAdvanced"] ; +FCKConfig.ToolbarSets["Basic"] = FCKConfig.ToolbarSets["AplawsBasic"] ; +FCKConfig.ToolbarSets["Default"] = FCKConfig.ToolbarSets["Basic"] ; + + +FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'config/fckconfigstyledefault.xml' ; +FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ; + +FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages' +FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ; + +FCKConfig.ImageDlgHideLink = true ; +FCKConfig.ImageDlgHideAdvanced = true ; + +FCKConfig.FlashDlgHideAdvanced = true ; + +FCKConfig.LinkBrowser = true ; +FCKConfig.LinkBrowserURL = "/ccm/content/admin/search.jsp?useURL=true&widget=getElementById('txtUrl')" ; +FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% +FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% +*/ + diff --git a/ccm-iaw-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.xml b/ccm-iaw-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.xml new file mode 100644 index 000000000..c5ebd5667 --- /dev/null +++ b/ccm-iaw-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.xml @@ -0,0 +1,12 @@ + + + + +