Zweiter Teil subsite, diverse Fehlerkorrekturen, Update Script.

git-svn-id: https://svn.libreccm.org/ccm/trunk@1331 8810af33-2d31-482b-a856-94f89814c4df
master
pb 2011-12-11 13:25:59 +00:00
parent 4d624f4d88
commit ea417ba2f7
26 changed files with 522 additions and 84 deletions

View File

@ -2,14 +2,14 @@
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project" <ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
name="ccm-subsite" name="ccm-subsite"
prettyName="Subsite" prettyName="Subsite"
version="6.6.0" version="6.6.1"
release="1" release="1"
webapp="ROOT"> webapp="ROOT">
<ccm:dependencies> <ccm:dependencies>
<ccm:requires name="ccm-core" version="6.6.0" relation="ge"/> <ccm:requires name="ccm-core" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-cms" version="6.6.0" relation="ge"/> <ccm:requires name="ccm-cms" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-ldn-util" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-navigation" version="6.6.0" relation="ge"/> <ccm:requires name="ccm-navigation" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-ldn-util" version="6.6.0" relation="ge"/>
</ccm:dependencies> </ccm:dependencies>
<ccm:contacts> <ccm:contacts>
<ccm:contact uri="http://www.redhat.com/software/rhea" type="website"/> <ccm:contact uri="http://www.redhat.com/software/rhea" type="website"/>

View File

@ -4,11 +4,13 @@ application context: [webapps]/ccm-ldn-subsite.
Now it is installed inside the main APLAWS application context along Now it is installed inside the main APLAWS application context along
with all other applications. with all other applications.
Also, ccm-ldn-subsite is renamed to ccm-subsite.
If shortcuts should be installed as its own web context again following If shortcuts should be installed as its own web context again following
modifications are necessary: modifications are necessary:
1. remove webapp="xxx" from application.xml 1. remove webapp="xxx" from application.xml
2. move the files in this dir to WEB-INF/ 2. move the files in this dir to WEB-INF/
3. change src/com/ad/london/subsite/Subsite.java 3. change src/com/ad/subsite/Subsite.java
method getServletContext() as back to "/files" method getServletContext() as back to "/files"
4. edit __ccm__/.../xsl/index.xsl according the comment 4. edit __ccm__/.../xsl/index.xsl according the comment
5. edit in ccm-ldn-aplaws /web/__ccm__/themes/aplaws/subsite.xml 5. edit in ccm-ldn-aplaws /web/__ccm__/themes/aplaws/subsite.xml

View File

@ -24,16 +24,16 @@ import com.arsdigita.cms.TemplateContext;
object type Site extends ACSObject { object type Site extends ACSObject {
String[1..1] title = subsite_site.title VARCHAR(100); String[1..1] title = subsite_sites.title VARCHAR(100);
String[0..1] description = subsite_site.description VARCHAR(4000); String[0..1] description = subsite_sites.description VARCHAR(4000);
unique String[1..1] hostname = subsite_site.hostname VARCHAR(250); unique String[1..1] hostname = subsite_sites.hostname VARCHAR(250);
String[0..1] styleDirectory = subsite_site.style_dir VARCHAR(50); String[0..1] styleDirectory = subsite_sites.style_dir VARCHAR(50);
Application[1..1] frontPage = join subsite_site.front_page_id Application[1..1] frontPage = join subsite_sites.front_page_id
to applications.application_id; to applications.application_id;
component TemplateContext[1..1] templateContext = join subsite_site.template_context component TemplateContext[1..1] templateContext = join subsite_sites.template_context
to cms_template_use_contexts.use_context; to cms_template_use_contexts.use_context;
reference key (subsite_site.site_id); reference key (subsite_sites.site_id);
} }

View File

@ -14,11 +14,14 @@
// You should have received a copy of the GNU Lesser General Public // You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software // License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// $Id: Subsite.pdl pboy $
model com.arsdigita.subsite; model com.arsdigita.subsite;
import com.arsdigita.web.Application; import com.arsdigita.web.Application;
object type Subsite extends Application { object type Subsite extends Application {
reference key (subsite_app.application_id); // nothing to persist
// reference key (subsite_app.application_id);
} }

View File

@ -0,0 +1,23 @@
--
-- Copyright (C) 2011 Peter Boy 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
--
-- $Id: drop_app_table.sql pboy $
-- drops table subsite_app which just contained application type id and is
-- never used for any action.
drop table subsite_app ;

View File

@ -0,0 +1,131 @@
--
-- Copyright (C) 2011 Peter Boy. 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
--
-- $Id: remove_legacy_entries.sql $
-- Subsite is now initialized as a legacy free type of application so
-- entries in tables apm_package_types are no longer needed.
-- in case there may be several application instances!
-- delete from object_context all entries referring to node_id in site_nodes
delete from object_context
where object_id in
(select node_id from site_nodes object_id where object_id in
( select package_id from applications where application_type_id =
(select application_type_id from application_types
where object_type
like '%subsite.Subsite%')
)
);
-- delete from acs_objects all entries referring to node_id in site_nodes
alter table site_nodes drop constraint site_nodes_node_id_f_n1m2y ;
delete from acs_objects
where object_id in
(select node_id from site_nodes where object_id in
( select package_id from applications where application_type_id =
(select application_type_id from application_types
where object_type
like '%subsite.Subsite%')
)
);
-- delete all entries in site_nodes referring to a subsite instance
delete from site_nodes
where object_id in
(select package_id from applications where application_type_id =
(select application_type_id from application_types
where object_type
like '%subsite.Subsite%')
);
alter table site_nodes add constraint site_nodes_node_id_f_n1m2y
FOREIGN KEY (node_id)
REFERENCES acs_objects (object_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ;
-- delete from object_context all entries referring to package_id in apm_packages
delete from object_context
where object_id in
(select package_id from apm_packages where package_type_id =
(select package_type_id from application_types
where object_type
like 'com.arsdigita.subsite.Subsite')
);
-- delete from acs_objects all entries referring to package_id in apm_packages
alter table apm_packages drop constraint apm_package_package_id_f_46may ;
alter table applications drop constraint application_package_id_f_cdaho ;
delete from acs_objects
where object_id in
(select package_id from apm_packages where package_type_id =
(select package_type_id from application_types
where object_type
like 'com.arsdigita.subsite.Subsite')
);
-- delete all entries for subsite instances in apm_packages
-- identified by package_type_id in application_types
delete from apm_packages
where package_type_id =
(select package_type_id from application_types
where object_type
like 'com.arsdigita.subsite.Subsite') ;
-- there seem to be no intries for a apm_packages_types entry (row) in
-- acs_objects or object_context!
-- delete all entries for subsite in apm_package_types identified by
-- package_type_id in application_types
alter table application_types drop constraint applica_typ_pac_typ_id_f_v80ma ;
delete from apm_package_types
where package_type_id =
(select package_type_id from application_types
where object_type
like 'com.arsdigita.subsite.Subsite') ;
-- set package_id to null for all entries referring to a subsite instance
-- (indicating a new legacy free application)
update applications
set package_id = null
where application_type_id =
(select application_type_id from application_types
where object_type
like 'com.arsdigita.subsite.Subsite') ;
-- set package_id to null for all entries referring to a subsite instance
-- (indicating a new legacy free application)
update application_types
set package_type_id = null
where object_type like 'com.arsdigita.subsite.Subsite' ;
alter table application_types add constraint applica_typ_pac_typ_id_f_v80ma
FOREIGN KEY (package_type_id)
REFERENCES apm_package_types (package_type_id)
MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ;
alter table applications add constraint application_package_id_f_cdaho
FOREIGN KEY (package_id)
REFERENCES apm_packages (package_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ;
alter table apm_packages add constraint apm_package_package_id_f_46may
FOREIGN KEY (package_id)
REFERENCES acs_objects (object_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ;

View File

@ -0,0 +1,49 @@
--
-- Copyright (C) 2011 Peter Boy 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
--
-- $Id: ren_sites_table.sql pboy $
-- rename table subsite_site to subsite_sites following ccm naming conventions
-- to make maintenance tasks easier
alter table subsite_site drop constraint subsite_site_site_id_p_rz022 ;
alter table subsite_site drop constraint subs_sit_templ_context_f_6wdu3 ;
alter table subsite_site drop constraint subsit_sit_fron_pag_id_f_4agqx ;
alter table subsite_site drop constraint subsite_site_site_id_f_rntkc ;
alter table subsite_site drop constraint subsite_site_hostname_u_uy5xf ;
alter table subsite_site RENAME TO subsite_sites ;
alter table subsite_sites
add constraint subsite_sites_site_id_p_wl5ul PRIMARY KEY (site_id) ;
alter table subsite_sites
add constraint subs_sit_templ_context_f_mpg0d FOREIGN KEY (template_context)
REFERENCES cms_template_use_contexts (use_context)
MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ;
alter table subsite_sites
add constraint subsi_site_fron_pag_id_f_p5cc6 FOREIGN KEY (front_page_id)
REFERENCES applications (application_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ;
alter table subsite_sites
add constraint subsite_sites_site_id_f_nrcet FOREIGN KEY (site_id)
REFERENCES acs_objects (object_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ;
alter table subsite_sites
add constraint subsite_sites_hostname_u_hrgra UNIQUE (hostname) ;

View File

@ -0,0 +1,66 @@
--
-- Copyright (C) 2011 Peter Boy 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
--
-- $Id: upd_system_tables.sql pboy $
-- adjust various system tables to the new name of application subsite
alter table init_requirements drop constraint init_requirements_init_f_cmmdn ;
alter table init_requirements drop constraint init_require_requ_init_f_i6rgg ;
update inits
set class_name=replace(class_name,'london.subsite', 'subsite')
where class_name like '%london.subsite%' ;
update init_requirements
set init=replace(init,'london.subsite', 'subsite')
where init like '%london.subsite%' ;
update init_requirements
set required_init=replace(required_init,'london.subsite', 'subsie')
where required_init like '%london.subsite%' ;
ALTER TABLE ONLY init_requirements
ADD CONSTRAINT init_requirements_init_f_cmmdn FOREIGN KEY (init)
REFERENCES inits (class_name) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE init_requirements
ADD CONSTRAINT init_require_requ_init_f_i6rgg FOREIGN KEY (required_init)
REFERENCES inits (class_name) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION;
update application_types
set object_type=replace(object_type,'london.subsite', 'subsite')
where object_type like '%london.subsite%' ;
-- table applications doesn't require an update
-- table apm_package_types doesn't require an update
-- table apm_packages doesn't require an update either
-- table site_nodes doesn't require an update either
-- update application type in acs_objects
update acs_objects
set (object_type,default_domain_class) =
(replace(object_type,'london.subsite', 'subsite') ,
replace(default_domain_class,'london.subsite', 'subsite') )
where object_type like '%london.subsite%' ;

View File

@ -0,0 +1,22 @@
--
-- Copyright (C) 2011 Peter Boy 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
--
-- $DateTime: 2011/03/27 23:15:09 $
-- $Id: oracle-se-6.6.0-6.6.1 pboy $
@@ default/6.6.0-6.6.1/upd_theme_app_table.sql
@@ default/6.6.0-6.6.1/upd_system_tables.sql

View File

@ -0,0 +1,36 @@
--
-- Copyright (C) 2011 Peter Boy 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
--
-- $DateTime: 2010/11/10 23:15:09 $
\echo Red Hat Enterprise ccm-subsite 6.6.0 -> 6.6.1 Upgrade Script (PostgreSQL)
begin;
-- drop table subsite_app - not needed anyway
\i default/6.6.0-6.6.1/drop_app_table.sql
-- rename table containing defined subsites following ccm naming conventions
\i default/6.6.0-6.6.1/ren_sites_table.sql
-- rename application from london.subsite to subsite
\i default/6.6.0-6.6.1/upd_system_tables.sql
-- remove legacy compatible bits
\i default/6.6.0-6.6.1/remove_legacy_entries.sql
commit;

View File

@ -0,0 +1,5 @@
<upgrade>
<version from="6.6.0" to="6.6.1">
<script sql="ccm-subsite/upgrade/::database::-6.6.0-6.6.1.sql"/>
</version>
</upgrade>

View File

@ -39,7 +39,7 @@ import com.arsdigita.templating.PatternStylesheetResolver;
import com.arsdigita.xml.XML; import com.arsdigita.xml.XML;
/** /**
* Initializes the Subsite system * Executes recurring at each system startup and initializes the Subsite system.
* @version $Id: Initializer.java 287 2005-02-22 00:29:02Z sskracic $ * @version $Id: Initializer.java 287 2005-02-22 00:29:02Z sskracic $
*/ */
public class Initializer extends CompoundInitializer { public class Initializer extends CompoundInitializer {
@ -76,17 +76,4 @@ public class Initializer extends CompoundInitializer {
} }
// TODO - once the core initializers are ported this should be moved
// to be a DomainEvent instead of a LegacyInitEvent
// public void init(LegacyInitEvent evt) {
// super.init(evt);
// XML.parse(Subsite.getConfig().getTraversalAdapters(),
// new TraversalHandler());
// PatternStylesheetResolver.registerPatternGenerator(
// "subsite", new SubsitePatternGenerator()
// );
// }
} }

View File

@ -31,9 +31,11 @@ import com.arsdigita.web.Application;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* Loads the subsite application and type * Executes nonrecurring at install time and loads (installs and initializes)
* the ccm-subsite module persistently into database.
* *
* @author Daniel Berrange * @author Daniel Berrange
* @author Peter Boy &lt;pboy@barkhof.uni-bremen.de&gt;
* @version $Id: Loader.java 287 2005-02-22 00:29:02Z sskracic $ * @version $Id: Loader.java 287 2005-02-22 00:29:02Z sskracic $
*/ */
public class Loader extends PackageLoader { public class Loader extends PackageLoader {
@ -51,21 +53,37 @@ public class Loader extends PackageLoader {
} }
/** /**
* This creates and initializes the subsite admin application * Creates ccm-subsite as a legacy-free application type and initializes
* an administration instance. Subsite itself is a filter servlet activated
* in web applications web.xml.
*/ */
private void createApplication() { private void createApplication() {
ApplicationType type = ApplicationType
.createApplicationType("subsite", /* Create new application type, legacy free application type
"CCM Subsite Admin", *
Subsite.BASE_DATA_OBJECT_TYPE); * NOTE: The wording in the title parameter of ApplicationType (first
* parameter) determines the name of the subdirectory for the
* XSL stylesheets. It gets "urlized", i.e. trimming leading and
* trailing blanks and replacing blanks between words and illegal
* characters with an hyphen and converted to lower case.
* Example: "Subsite" will become "subsite".
*/
ApplicationType type = new ApplicationType
("Subsite",
Subsite.BASE_DATA_OBJECT_TYPE);
type.setDescription("CCM subsite administration"); type.setDescription("CCM subsite administration");
Application admin = Application.retrieveApplicationForPath("/admin/"); Application admin = Application.retrieveApplicationForPath("/admin/");
Application app = /* Create an application instance as a legacy free app.
Application.createApplication(type, * Whether a legacy compatible or a legacy free application is
"subsite", * created depends on the type of ApplicationType above. No need to
"CCM Subsite Admin", * modify anything here */
admin); Application app = Application
.createApplication(type,
"subsite",
"Subsite Administration",
admin);
app.setDescription("CCM subsite administration GUI");
} }
} }

View File

@ -41,9 +41,13 @@ public class Site extends ACSObject {
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.subsite.Site"; "com.arsdigita.subsite.Site";
/** Title for a subsite, text field. */
public static final String TITLE = "title"; public static final String TITLE = "title";
/** Description for a subsite, text field. */
public static final String DESCRIPTION = "description"; public static final String DESCRIPTION = "description";
/** Subsite host name, text field, must be unique. */
public static final String HOSTNAME = "hostname"; public static final String HOSTNAME = "hostname";
/** Directory containin the theme to be used for the subsite. */
public static final String STYLE_DIRECTORY = "styleDirectory"; public static final String STYLE_DIRECTORY = "styleDirectory";
public static final String FRONT_PAGE = "frontPage"; public static final String FRONT_PAGE = "frontPage";
public static final String TEMPLATE_CONTEXT = "templateContext"; public static final String TEMPLATE_CONTEXT = "templateContext";

View File

@ -31,22 +31,19 @@ import org.apache.log4j.Logger;
*/ */
public class Subsite extends Application { public class Subsite extends Application {
/** A logger instance to assist debugging. */
private static final Logger s_log = Logger.getLogger(Subsite.class); private static final Logger s_log = Logger.getLogger(Subsite.class);
// pdl stuff (constants)
public static final String BASE_DATA_OBJECT_TYPE public static final String BASE_DATA_OBJECT_TYPE
= "com.arsdigita.subsite.Subsite"; = "com.arsdigita.subsite.Subsite";
public static final String SUBSITE_XML_NS
= "http://ccm.redhat.com/subsite/1.0";
public static final String SUBSITE_XML_PREFIX
= "subsite:";
private static final SubsiteConfig s_config = new SubsiteConfig(); public static final String SUBSITE_XML_NS = "http://ccm.redhat.com/subsite/1.0";
static { public static final String SUBSITE_XML_PREFIX = "subsite:";
s_log.debug("Static initalizer starting...");
s_config.load(); /** Config object containing various parameter */
s_log.debug("Static initalizer finished."); private static final SubsiteConfig s_config = SubsiteConfig.getConfig();
}
private static final SubsiteContext s_context = new SubsiteContext(); private static final SubsiteContext s_context = new SubsiteContext();
@ -55,33 +52,44 @@ public class Subsite extends Application {
* *
* @post return != null * @post return != null
*/ */
public static final SubsiteContext getContext() { public static SubsiteContext getContext() {
return s_context; return s_context;
} }
public static final SubsiteConfig getConfig() { /** Service method to provide clients access to configuration. */
public static SubsiteConfig getConfig() {
return s_config; return s_config;
} }
/**
*
* @param obj
*/
public Subsite(DataObject obj) { public Subsite(DataObject obj) {
super(obj); super(obj);
} }
/**
* Constructor retrieving subsite from the database usings its OID.
*
* @param oid the OID of the subsite
* @throws DataObjectNotFoundException
*/
public Subsite(OID oid) public Subsite(OID oid)
throws DataObjectNotFoundException { throws DataObjectNotFoundException {
super(oid); super(oid);
} }
// /* // /*
// * Application specific method only required if installed in its own // * Application specific method only required if installed in its own
// * web application context // * web application context
// */ // */
// public String getContextPath() { // public String getContextPath() {
// return "/ccm-ldn-subsite"; // return "/ccm-ldn-subsite";
// } // }
/** /**
* Returns the path name of the location of the applications servlet/JSP. * Returns the path name of the location of the applications servlet/JSP.
@ -110,6 +118,7 @@ public class Subsite extends Application {
* *
* @return path name to the applications servlet/JSP * @return path name to the applications servlet/JSP
*/ */
@Override
public String getServletPath() { public String getServletPath() {
// return "/files"; // return "/files";
return "/ccm-subsite/files"; return "/ccm-subsite/files";

View File

@ -24,12 +24,9 @@ import com.arsdigita.util.parameter.ClassParameter;
import com.arsdigita.util.parameter.Parameter; import com.arsdigita.util.parameter.Parameter;
import com.arsdigita.util.parameter.ResourceParameter; import com.arsdigita.util.parameter.ResourceParameter;
import com.arsdigita.util.parameter.StringParameter; import com.arsdigita.util.parameter.StringParameter;
// import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.london.util.ui.ApplicationCategoryPicker; import com.arsdigita.london.util.ui.ApplicationCategoryPicker;
import java.io.InputStream; import java.io.InputStream;
// import java.io.IOException;
// import java.net.URL;
// import java.net.MalformedURLException;
import java.util.Map; import java.util.Map;
import java.util.HashMap; import java.util.HashMap;
@ -38,10 +35,34 @@ import org.apache.log4j.Logger;
public class SubsiteConfig extends AbstractConfig { public class SubsiteConfig extends AbstractConfig {
/** A logger instance to assist debugging. */
private static final Logger s_log = Logger.getLogger(SubsiteConfig.class); private static final Logger s_log = Logger.getLogger(SubsiteConfig.class);
/** Singelton config object. */
private static SubsiteConfig s_conf;
/**
* Gain a SubsiteConfig object.
*
* Singelton pattern, don't instantiate a config object using the
* constructor directly!
* @return
*/
public static synchronized SubsiteConfig getConfig() {
if (s_conf == null) {
s_conf = new SubsiteConfig();
s_conf.load();
}
return s_conf;
}
/** */
private Map m_themes = new HashMap(); private Map m_themes = new HashMap();
// ////////////////////////////////////////////////////////////////////////
// Set of configuration parameters
/** /**
* *
*/ */

View File

@ -47,6 +47,7 @@ import org.apache.log4j.Logger;
*/ */
public final class SubsiteContext { public final class SubsiteContext {
/** A logger instance, primarly to assist debugging . */
private static final Logger s_log = Logger.getLogger(SubsiteContext.class); private static final Logger s_log = Logger.getLogger(SubsiteContext.class);
public static final String SITE_REQUEST_ATTRIBUTE = Site.class.getName(); public static final String SITE_REQUEST_ATTRIBUTE = Site.class.getName();

View File

@ -18,8 +18,6 @@
*/ */
package com.arsdigita.subsite; package com.arsdigita.subsite;
// import com.arsdigita.subsite.Subsite;
// import com.arsdigita.util.servlet.HttpHost;
import com.arsdigita.web.ServerDynamicHostProvider; import com.arsdigita.web.ServerDynamicHostProvider;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -29,7 +27,9 @@ import java.net.MalformedURLException;
public class SubsiteDynamicHostProvider extends ServerDynamicHostProvider { public class SubsiteDynamicHostProvider extends ServerDynamicHostProvider {
private static final Logger s_log = Logger.getLogger(SubsiteDynamicHostProvider.class); /** A logger instance, primarily to assist debugging . */
private static final Logger s_log =
Logger.getLogger(SubsiteDynamicHostProvider.class);
public SubsiteDynamicHostProvider() { public SubsiteDynamicHostProvider() {
super(); super();

View File

@ -49,6 +49,7 @@ import org.apache.log4j.Logger;
*/ */
public class SubsiteFilter extends BaseFilter { public class SubsiteFilter extends BaseFilter {
/** A logger instance, primarily to assist debugging . */
private static final Logger s_log = Logger.getLogger(SubsiteFilter.class); private static final Logger s_log = Logger.getLogger(SubsiteFilter.class);
/** /**

View File

@ -18,10 +18,13 @@
package com.arsdigita.subsite; package com.arsdigita.subsite;
// import com.arsdigita.subsite.Subsite;
import com.arsdigita.templating.PatternGenerator; import com.arsdigita.templating.PatternGenerator;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
/**
*
* @author pb
*/
public class SubsitePatternGenerator implements PatternGenerator { public class SubsitePatternGenerator implements PatternGenerator {
public String[] generateValues(String key, public String[] generateValues(String key,

View File

@ -35,12 +35,31 @@ import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/**
* Service class for content cneter (CMS) application.
*
* This class extends the CMS default resolver class and adds subsite
* specific functionality.
*
* Usage: Set CMS parameter
* com.arsdigita.cms.default_template_resolver_class = ...
* to this class.
*/
public class SubsiteItemTemplateResolver extends DefaultTemplateResolver { public class SubsiteItemTemplateResolver extends DefaultTemplateResolver {
/** A logger instance, primarily to assist debugging . */
private static final Logger s_log = private static final Logger s_log =
Logger.getLogger(SubsiteItemTemplateResolver.class); Logger.getLogger(SubsiteItemTemplateResolver.class);
/**
*
* @param section
* @param item
* @param request
* @return
*/
@Override
protected String getDefaultTemplate(ContentSection section, protected String getDefaultTemplate(ContentSection section,
ContentItem item, ContentItem item,
HttpServletRequest request) { HttpServletRequest request) {
@ -77,6 +96,11 @@ public class SubsiteItemTemplateResolver extends DefaultTemplateResolver {
return super.getDefaultTemplate(section, item, request); return super.getDefaultTemplate(section, item, request);
} }
/**
*
* @param name
* @return
*/
protected boolean templateExists(String name) { protected boolean templateExists(String name) {
String fullpath = ContentSection.getConfig().getTemplateRoot() String fullpath = ContentSection.getConfig().getTemplateRoot()
+ "/" + name; + "/" + name;
@ -89,6 +113,12 @@ public class SubsiteItemTemplateResolver extends DefaultTemplateResolver {
return exists; return exists;
} }
/**
*
* @param request
* @return
*/
@Override
public String getTemplateContext(HttpServletRequest request) { public String getTemplateContext(HttpServletRequest request) {
String context = (String) request.getAttribute("templateContext"); String context = (String) request.getAttribute("templateContext");

View File

@ -5,7 +5,7 @@ and open the template in the editor.
--> -->
<html> <html>
<head> <head>
<title>Package com.arsdigita.london.subsite</title> <title>Package com.arsdigita.subsite</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head> </head>
<body> <body>

View File

@ -21,10 +21,18 @@ package com.arsdigita.subsite.ui;
import com.arsdigita.subsite.Subsite; import com.arsdigita.subsite.Subsite;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
/**
*
*
*/
public class ControlCenterPanel extends SimpleContainer { public class ControlCenterPanel extends SimpleContainer {
private SiteSelectionModel m_site; private SiteSelectionModel m_site;
/**
*
* @param site
*/
public ControlCenterPanel(SiteSelectionModel site) { public ControlCenterPanel(SiteSelectionModel site) {
super(Subsite.SUBSITE_XML_PREFIX + "controlCenter", super(Subsite.SUBSITE_XML_PREFIX + "controlCenter",
Subsite.SUBSITE_XML_NS); Subsite.SUBSITE_XML_NS);

View File

@ -18,11 +18,6 @@
package com.arsdigita.subsite.ui; package com.arsdigita.subsite.ui;
import com.arsdigita.subsite.Site;
import com.arsdigita.subsite.Subsite;
import com.arsdigita.london.util.ui.CategoryPicker;
import com.arsdigita.categorization.Category;
import com.arsdigita.util.StringUtils;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.SaveCancelSection;
@ -47,22 +42,34 @@ import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.parameters.ParameterData; import com.arsdigita.bebop.parameters.ParameterData;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.web.Application; import com.arsdigita.categorization.Category;
import com.arsdigita.web.ApplicationType; import com.arsdigita.london.util.ui.CategoryPicker;
import com.arsdigita.util.Assert;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.subsite.Site;
import com.arsdigita.subsite.Subsite;
import com.arsdigita.util.StringUtils;
import com.arsdigita.util.Assert;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.util.Classes; import com.arsdigita.util.Classes;
import com.arsdigita.web.Application;
import com.arsdigita.web.ApplicationType;
import java.util.TooManyListenersException; import java.util.TooManyListenersException;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.Iterator; import java.util.Iterator;
/**
* Class creates the administration input form.
*
*/
public class SiteForm extends Form { public class SiteForm extends Form {
private SiteSelectionModel m_site; private SiteSelectionModel m_site;
/** Input field subsite title */
private TextField m_title; private TextField m_title;
private TextField m_hostname; private TextField m_hostname;
private TextArea m_description; private TextArea m_description;
@ -79,6 +86,7 @@ public class SiteForm extends Form {
private final static String OTHER_STYLE_LABEL = "Other (type in box below)"; private final static String OTHER_STYLE_LABEL = "Other (type in box below)";
/** /**
* Constructor create input widgets and adds them to form.
* *
* @param name * @param name
* @param site * @param site
@ -91,33 +99,35 @@ public class SiteForm extends Form {
m_site = site; m_site = site;
/* Setup text input field for subsite title property */
m_title = new TextField(new StringParameter("title")); m_title = new TextField(new StringParameter("title"));
m_title.addValidationListener(new NotNullValidationListener()); m_title.addValidationListener(new NotNullValidationListener());
m_title.setMetaDataAttribute("title", "Title"); m_title.setMetaDataAttribute("title", "Title");
m_title.setHint("Enter the title of the subsite, upto 80 characters"); m_title.setHint("Enter the title of the subsite, upto 80 characters");
m_title.setSize(40); m_title.setSize(40);
add(m_title); add(m_title); // adds title input field to form
/* Setup text input field for hostname */ /* Setup text input field for hostname property */
m_hostname = new TextField(new StringParameter("hostname")); m_hostname = new TextField(new StringParameter("hostname"));
m_hostname.addValidationListener(new NotNullValidationListener()); m_hostname.addValidationListener(new NotNullValidationListener());
m_hostname.addValidationListener(new HostNameValidationListener()); m_hostname.addValidationListener(new HostNameValidationListener());
m_hostname.setMetaDataAttribute("title", "Hostname"); m_hostname.setMetaDataAttribute("title", "Hostname");
m_hostname.setSize(35); m_hostname.setSize(40);
m_hostname.setHint( m_hostname.setHint(
"Enter the hostname for the subsite, eg business.example.com" "Enter the hostname for the subsite, eg business.example.com"
); );
add(m_hostname); // adds hostname input field to form add(m_hostname); // adds hostname input field to form
/* Setup text input area for description property */
m_description = new TextArea(new StringParameter("description")); m_description = new TextArea(new StringParameter("description"));
m_description.addValidationListener(new NotNullValidationListener()); m_description.addValidationListener(new NotNullValidationListener());
m_description.setMetaDataAttribute("title", "Description"); m_description.setMetaDataAttribute("title", "Description");
m_description.setCols(40); m_description.setCols(45);
m_description.setRows(4); m_description.setRows(4);
m_description.setHint( m_description.setHint(
"Enter a short description for the subsite, upto 4000 characters" "Enter a short description for the subsite, upto 4000 characters"
); );
add(m_description); add(m_description); // adds description input field to form
/* Setup Radio selection group for subsite start page (front page) */ /* Setup Radio selection group for subsite start page (front page) */
m_customHomepage = new RadioGroup("customHome"); m_customHomepage = new RadioGroup("customHome");
@ -143,6 +153,7 @@ public class SiteForm extends Form {
} }
add(m_customHomepage); // adds Radio group start page to form add(m_customHomepage); // adds Radio group start page to form
/* Setup text inpout field for subsite start page (front page) */
m_customHomepage_url = new TextField( m_customHomepage_url = new TextField(
new StringParameter("customHomepage_url")); new StringParameter("customHomepage_url"));
m_customHomepage_url.setMetaDataAttribute("title", m_customHomepage_url.setMetaDataAttribute("title",
@ -168,6 +179,7 @@ public class SiteForm extends Form {
} }
add(m_themes); // adds themes selection box to form add(m_themes); // adds themes selection box to form
/* Setup text input field to manually enter a style direcotry */
m_styleDir = new TextField(new StringParameter("styleDir")); m_styleDir = new TextField(new StringParameter("styleDir"));
m_styleDir.setMetaDataAttribute("title", "XSLT Directory (Other)"); m_styleDir.setMetaDataAttribute("title", "XSLT Directory (Other)");
m_styleDir.setSize(40); m_styleDir.setSize(40);
@ -175,8 +187,9 @@ public class SiteForm extends Form {
"Enter the directory for the custom XSLT styles, " + "Enter the directory for the custom XSLT styles, " +
"or leave blank for the default styling" "or leave blank for the default styling"
); );
add(m_styleDir); add(m_styleDir); // adds inputfield style dir to form
/* Setup selection box for cagtegory domain */
m_rootCategory = (CategoryPicker)Classes.newInstance( m_rootCategory = (CategoryPicker)Classes.newInstance(
Subsite.getConfig().getRootCategoryPicker(), Subsite.getConfig().getRootCategoryPicker(),
new Class[] { String.class }, new Class[] { String.class },
@ -187,7 +200,7 @@ public class SiteForm extends Form {
((Widget)m_rootCategory) ((Widget)m_rootCategory)
.setHint("Select a root navigation category"); .setHint("Select a root navigation category");
} }
add(m_rootCategory); add(m_rootCategory); // adds domain category selection box to form
m_buttons = new SaveCancelSection(); m_buttons = new SaveCancelSection();
m_buttons.getSaveButton().setHint("Save the details in the form"); m_buttons.getSaveButton().setHint("Save the details in the form");
@ -341,6 +354,7 @@ public class SiteForm extends Form {
* *
*/ */
private class SiteProcessListener implements FormProcessListener { private class SiteProcessListener implements FormProcessListener {
public void process(FormSectionEvent e) public void process(FormSectionEvent e)
throws FormProcessException { throws FormProcessException {
PageState state = e.getPageState(); PageState state = e.getPageState();

View File

@ -29,6 +29,10 @@ import com.arsdigita.persistence.SessionManager;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
/**
*
*
*/
public class SiteListing extends SimpleComponent { public class SiteListing extends SimpleComponent {
private SiteSelectionModel m_site; private SiteSelectionModel m_site;
@ -37,6 +41,7 @@ public class SiteListing extends SimpleComponent {
m_site = site; m_site = site;
} }
@Override
public void generateXML(PageState state, public void generateXML(PageState state,
Element parent) { Element parent) {
Element content = parent.newChildElement( Element content = parent.newChildElement(

View File

@ -13,8 +13,8 @@
<!-- IMPORT DEFINITIONS ccm-ldn-shortcuts installed into the main CCM webapp <!-- IMPORT DEFINITIONS ccm-ldn-shortcuts installed into the main CCM webapp
--> -->
<xsl:import href="../../../../packages/bebop/xsl/bebop.xsl"/> <xsl:import href="../../../packages/bebop/xsl/bebop.xsl"/>
<xsl:import href="../../../../packages/ui/xsl/ui.xsl"/> <xsl:import href="../../../packages/ui/xsl/ui.xsl"/>
<xsl:param name="dispatcher-prefix"/> <xsl:param name="dispatcher-prefix"/>