Erste Fassung update script

git-svn-id: https://svn.libreccm.org/ccm/trunk@1460 8810af33-2d31-482b-a856-94f89814c4df
master
pb 2012-01-19 23:37:32 +00:00
parent 83926267ac
commit fdfbfe733c
37 changed files with 770 additions and 195 deletions

View File

@ -1,8 +1,8 @@
<?xml version="1.0"?>
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
name="ccm-rssfeed"
prettyName="RSS"
version="6.6.0"
prettyName="RSS Feed"
version="6.6.1"
release="1"
webapp="ROOT">
<ccm:dependencies>

View File

@ -1,28 +1,31 @@
//
// Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
// Copyright (C) 2001-2004 Red Hat Inc. 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
// 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.
//
// 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.
// 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
model com.arsdigita.london.rss;
model com.arsdigita.rssfeed;
import com.arsdigita.kernel.*;
import com.arsdigita.cms.*;
object type Feed extends ACSObject {
String[1..1] title = rss_feeds.title VARCHAR(50);
unique String[1..1] url = rss_feeds.url VARCHAR(250);
String[1..1] description = rss_feeds.description VARCHAR(500);
Boolean[1..1] isProvider = rss_feeds.is_provider BIT;
String[1..1] title = rssfeed_feeds.title VARCHAR(50);
unique String[1..1] url = rssfeed_feeds.url VARCHAR(250);
String[1..1] description = rssfeed_feeds.description VARCHAR(500);
Boolean[1..1] isProvider = rssfeed_feeds.is_provider BIT;
reference key( rss_feeds.feed_id );
reference key( rssfeed_feeds.feed_id );
}

View File

@ -15,10 +15,13 @@
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
model com.arsdigita.london.rss;
model com.arsdigita.rssfeed;
import com.arsdigita.web.Application;
object type RSS extends Application {
reference key (rss_app.application_id);
object type RSSFeed extends Application {
// nothing to persist yet
// there is only one instance of RSSFeed and
// no instance specific settings about to be persisted.
// reference key (rssfeed_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 rss_app which just contained application type id and is
-- never used for any action.
drop table rss_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 $
-- RSFeed 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 '%rssfeed.RSSFeed%')
)
);
-- 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 '%rssfeed.RSSFeed%')
)
);
-- 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 '%rssfeed.RSSFeed%')
);
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.rssfeed.RSSFeed')
);
-- 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.rssfeed.RSSFeed')
);
-- 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.rssfeed.RSSFeed') ;
-- 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.rssfeed.RSSFeed') ;
-- 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.rssfeed.RSSFeed') ;
-- 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.rssfeed.RSSFeed' ;
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,38 @@
--
-- 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 rss_feeds drop constraint rss_feeds_feed_id_p_rm_i5 ;
alter table rss_feeds drop constraint rss_feeds_feed_id_f_2lk3l ;
alter table rss_feeds drop constraint rss_feeds_url_u_3ul6f ;
alter table rss_feeds RENAME TO rssfeed_feeds ;
alter table rssfeed_feeds
add constraint rssfeed_feeds_feed_id_p_493us PRIMARY KEY (feed_id) ;
alter table rssfeed_feeds
add constraint rssfeed_feeds_feed_id_f_i4i5z FOREIGN KEY (feed_id)
REFERENCES acs_objects (object_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION;
alter table rssfeed_feeds
add constraint rssfeed_feeds_url_u_6xy5m UNIQUE(url) ;

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.rss', 'rssfeed')
where class_name like '%london.rss%' ;
update init_requirements
set init=replace(init,'london.rss', 'rssfeed')
where init like '%london.rss%' ;
update init_requirements
set required_init=replace(required_init,'london.rss', 'rssfeed')
where required_init like '%london.rss%' ;
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.rss', 'rssfeed')
where object_type like '%london.rss%' ;
-- 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.rss', 'rssfeed') ,
replace(default_domain_class,'london.rss', 'rssfeed') )
where object_type like '%london.rss%' ;

View File

@ -0,0 +1,30 @@
--
-- 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 $
-- drop table subsite_app - not needed anyway
@@ default/6.6.0-6.6.1/drop_app_table.sql
-- rename table containing defined subsites following ccm naming conventions
@@ default/6.6.0-6.6.1/ren_sites_table.sql
-- rename application from london.subsite to subsite
@@ default/6.6.0-6.6.1/upd_system_tables.sql
-- remove legacy compatible bits
@@ default/6.6.0-6.6.1/remove_legacy_entries.sql
-- adjust class name in content_sections table
@@ default/6.6.0-6.6.1/upd_cms_tables.sql

View File

@ -0,0 +1,37 @@
--
-- 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 rss_app - not needed anyway
\i default/6.6.0-6.6.1/drop_app_table.sql
-- rename table containing defined feeds 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

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<registry>
<config class="com.arsdigita.rssfeed.RSSConfig"
<config class="com.arsdigita.rssfeed.RSSFeedConfig"
storage="ccm-rssfeed/rss.properties"/>
</registry>

View File

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

View File

@ -1,3 +1,21 @@
/*
* 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.rssfeed;
import com.arsdigita.domain.DataObjectNotFoundException;
@ -18,7 +36,7 @@ import com.arsdigita.persistence.DataCollection;
public class Feed extends ACSObject {
public static final String BASE_DATA_OBJECT_TYPE
= "com.arsdigita.london.rss.Feed";
= "com.arsdigita.rssfeed.Feed";
// Attributes
public static final String TITLE = "title";
@ -26,24 +44,44 @@ public class Feed extends ACSObject {
public static final String DESCRIPTION = "description";
public static final String IS_PROVIDER = "isProvider";
/**
* Constructor
*/
public Feed() {
super(BASE_DATA_OBJECT_TYPE);
}
/**
* Constructor
*/
public Feed(BigDecimal id)
throws DataObjectNotFoundException {
this(new OID(BASE_DATA_OBJECT_TYPE, id));
}
/**
* Constructor
*/
public Feed(DataObject obj) {
super(obj);
}
/**
* Constructor
*/
public Feed(OID oid)
throws DataObjectNotFoundException {
super(oid);
}
/**
*
* @param url
* @param title
* @param desc
* @param provider
* @return
*/
public static Feed create(String url,
String title,
String desc,
@ -58,6 +96,12 @@ public class Feed extends ACSObject {
return feed;
}
/**
*
* @param id
* @return
* @throws DataObjectNotFoundException
*/
public static Feed retrieve(BigDecimal id)
throws DataObjectNotFoundException {
@ -75,8 +119,15 @@ public class Feed extends ACSObject {
throw new DataObjectNotFoundException("cannot find feed " + id);
}
/**
*
* @param url
* @return
* @throws DataObjectNotFoundException
*/
public static Feed retrieve(String url)
throws DataObjectNotFoundException {
throws DataObjectNotFoundException {
Session session = SessionManager.getSession();
DataCollection feed = session.retrieve(BASE_DATA_OBJECT_TYPE);
@ -92,6 +143,11 @@ public class Feed extends ACSObject {
throw new DataObjectNotFoundException("cannot find feed" + url);
}
/**
*
*
* @return
*/
public static FeedCollection retrieveAll() {
Session session = SessionManager.getSession();
DataCollection feeds = session.retrieve(BASE_DATA_OBJECT_TYPE);
@ -103,6 +159,7 @@ public class Feed extends ACSObject {
* Accessor to the base object type.
* @return The fully qualified name of the supporting data object.
*/
@Override
public String getBaseDataObjectType() {
return BASE_DATA_OBJECT_TYPE;
}

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
* Copyright (C) 2001-2004 Red Hat Inc. 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
* 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.
*
* 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.
* 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.rssfeed;
@ -28,8 +31,12 @@ import java.math.BigDecimal;
* @version $Id: FeedCollection.java 287 2005-02-22 00:29:02Z sskracic $
*/
public class FeedCollection extends DomainCollection {
public static final String versionId = "$Id: FeedCollection.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2003/10/22 07:27:00 $";
/**
* Constructor
*
* @param dataCollection
*/
protected FeedCollection(DataCollection dataCollection) {
super(dataCollection);
}
@ -54,6 +61,7 @@ public class FeedCollection extends DomainCollection {
* @return the domain object for the current row.
* @post return != null
*/
@Override
public DomainObject getDomainObject() {
DomainObject domainObject = getFeed();
@ -78,6 +86,10 @@ public class FeedCollection extends DomainCollection {
return portal;
}
/**
*
* @param filter
*/
public void filterACSJFeeds(boolean filter) {
m_dataCollection.addEqualsFilter(Feed.IS_PROVIDER, new Boolean(filter));
}

View File

@ -37,7 +37,7 @@ import com.arsdigita.rssfeed.portlet.WorkspaceDirectoryPortlet;
/**
* The RSS initializer.
* Initializes the RSSFeed application
*
* @author Justin Ross &lt;jross@redhat.com&gt;
* @version $Id: Initializer.java 758 2005-09-02 14:26:56Z sskracic $
@ -50,10 +50,9 @@ public class Initializer extends CompoundInitializer {
add(new PDLInitializer
(new ManifestSource
("ccm-ldn-rss.pdl.mf",
("ccm-rssfeed.pdl.mf",
new NameFilter(DbHelper.getDatabaseSuffix(database), "pdl"))));
// add(new LegacyInitializer("com/arsdigita/london/rss/enterprise.init"));
}
/**
@ -62,15 +61,14 @@ public class Initializer extends CompoundInitializer {
*/
@Override
public void init(DomainInitEvent e) {
super.init(e);
// Prerequisite to access a RSS channel instance
// Prerequisite to access a RSSFeed channel instance
DomainObjectFactory.registerInstantiator(
RSS.BASE_DATA_OBJECT_TYPE, new ACSObjectInstantiator() {
RSSFeed.BASE_DATA_OBJECT_TYPE, new ACSObjectInstantiator() {
@Override
public DomainObject doNewInstance(DataObject dataObject) {
return new RSS(dataObject);
return new RSSFeed(dataObject);
}
}
);

View File

@ -37,15 +37,22 @@ import com.arsdigita.web.URL;
import org.apache.log4j.Logger;
/**
* Loader.
* Executes nonrecurring at install time and loads (installs and initializes)
* the ccm-rssfeed package persistently into database.
*
* @author Justin Ross &lt;jross@redhat.com&gt;
* @author Peter Boy &lt;pboy@barkhof.uni-bremen.de&gt;
* @version $Id: Loader.java 758 2005-09-02 14:26:56Z sskracic $
*/
public class Loader extends PackageLoader {
private static final Logger s_log = Logger.getLogger(Loader.class);
/**
* Run script invoked by com.arsdigita.packing loader script.
*
* @param ctx
*/
public void run(final ScriptContext ctx) {
new KernelExcursion() {
@ -54,7 +61,7 @@ public class Loader extends PackageLoader {
// CatgegoryPurpose is deprecated and replaced by terms in
// some way. So this step may be ommitted.
String catKey = RSS.getConfig().getCategoryKey();
String catKey = RSSFeed.getConfig().getCategoryKey();
s_log.info("Setting RSS Category Key to " + catKey + ".");
if (!CategoryPurpose.purposeExists(catKey)) {
(new CategoryPurpose(catKey, "RSS Feed")).save();
@ -79,37 +86,53 @@ public class Loader extends PackageLoader {
*/
public void setupChannelControlCenter() {
/*
ApplicationSetup setup = new ApplicationSetup(s_log);
// Old way to setup of a new style legacy compatible application.
// Kept until transistion to new style legacy free application is
// completed for easy reference and debugging. Delete thereafter!
/* ApplicationSetup setup = new ApplicationSetup(s_log);
setup.setApplicationObjectType(RSS.BASE_DATA_OBJECT_TYPE);
setup.setApplicationObjectType(RSSFeed.BASE_DATA_OBJECT_TYPE);
setup.setKey("rss");
setup.setTitle("RSS Channels");
setup.setDescription("RSS Channels");
setup.setTitle("RSSFeed Channels");
setup.setDescription("RSSFeed Channels");
setup.setSingleton(true);
setup.setInstantiator(new ACSObjectInstantiator() {
@Override
public DomainObject doNewInstance(DataObject dataObject) {
return new RSS(dataObject);
return new RSSFeed(dataObject);
}
});
ApplicationType type = setup.run();
type.save();
*/
ApplicationType type = ApplicationType.createApplicationType(
type.save(); */
// Old way to setup of a new style legacy compatible application.
// Kept until transistion to new style legacy free application is
// completed for easy reference and debugging. Delete thereafter!
/* ApplicationType type = ApplicationType.createApplicationType(
"rss",
"RSS Channels",
RSS.BASE_DATA_OBJECT_TYPE);
type.setDescription("RSS Channels");
RSSFeed.BASE_DATA_OBJECT_TYPE);
type.setDescription("RSS Channels"); */
/* Create legacy-free application type
* NOTE: The wording in the title parameter of ApplicationType
* 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.
* "RSSFeed" will become "rssfeed". */
ApplicationType type = new ApplicationType(
"RSSFeed",
RSSFeed.BASE_DATA_OBJECT_TYPE );
type.setDescription("CCM RSS Feed");
if (!Application.isInstalled(RSS.BASE_DATA_OBJECT_TYPE,
if (!Application.isInstalled(RSSFeed.BASE_DATA_OBJECT_TYPE,
"/channels/")) {
Application app =
Application.createApplication(type,
"channels",
"RSS",
null);
Application app = Application
.createApplication(type,
"channels",
"RSS",
null);
app.save();
}
}

View File

@ -25,39 +25,37 @@ import com.arsdigita.web.Application;
import org.apache.log4j.Logger;
/**
* Base class of the RSS application (module).
* Base class of the RSSFeed application (module).
*
*/
public class RSS extends Application {
public class RSSFeed extends Application {
private static final Logger logger = Logger.getLogger(RSS.class);
/** A logger instance to assist debugging. */
private static final Logger logger = Logger.getLogger(RSSFeed.class);
// pdl stuff (constants)
public static final String BASE_DATA_OBJECT_TYPE
= "com.arsdigita.london.rss.RSS";
= "com.arsdigita.rssfeed.RSSFeed";
private static final RSSConfig s_config = new RSSConfig();
/** Config object containing various parameter */
private static final RSSFeedConfig s_config = RSSFeedConfig.getConfig();
static {
logger.debug("Static initalizer starting...");
s_config.load();
logger.debug("Static initalizer finished.");
}
/**
* Gets the configuration record for code in the rss package.
* Provides the configuration record for client classes.
*
* @return A <code>RSSConfig</code> configuration record; it
* @return A <code>RSSFeedConfig</code> configuration record; it
* cannot be null
*/
public static final RSSConfig getConfig() {
public static RSSFeedConfig getConfig() {
return s_config;
}
public RSS(DataObject obj) {
public RSSFeed(DataObject obj) {
super(obj);
}
public RSS(OID oid) {
public RSSFeed(OID oid) {
super(oid);
}
@ -66,7 +64,7 @@ public class RSS extends Application {
// * web application context
// */
// public String getContextPath() {
// return "/ccm-ldn-rss";
// return "/ccm-rssfeed";
// }
/**
@ -85,14 +83,15 @@ public class RSS extends Application {
* <servlet-name>rss-files</servlet-name>
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
* <init-param>
* <!-- where to find the jsp files -->
* <param-name>template-path</param-name>
* <param-value>/templates/ccm-ldn-rss</param-value>
* <param-value>/templates/ccm-rssfeed</param-value>
* </init-param>
* </servlet>
*
* <servlet-mapping>
* <servlet-name>rss-files</servlet-name>
* <url-pattern>/ccm-ldn-rss/files/*</url-pattern>
* <servlet-name>rssfeed-files</servlet-name>
* <url-pattern>/ccm-rssfeed/files/*</url-pattern>
* </servlet-mapping>
*
* @return path name to the applications servlet/JSP
@ -100,6 +99,6 @@ public class RSS extends Application {
public String getServletPath() {
// sufficient if execute in its own web context
// return "/files";
return "/ccm-ldn-rss/files";
return "/ccm-rssfeed/files";
}
}

View File

@ -27,22 +27,49 @@ import org.apache.log4j.Logger;
/**
* The file that contains all configuration information for
* the RSS application.
* @version $Id: RSSConfig.java 1319 2006-09-15 10:52:49Z apevec $
* the RSSFeed application.
* @version $Id: RSSFeedConfig.java 1319 2006-09-15 10:52:49Z apevec $
*/
public final class RSSConfig extends AbstractConfig {
public final class RSSFeedConfig extends AbstractConfig {
private static final Logger s_log = Logger.getLogger(RSSConfig.class);
/** A logger instance to assist debugging. */
private static final Logger s_log = Logger.getLogger(RSSFeedConfig.class);
/** Singelton config object. */
private static RSSFeedConfig s_conf;
/**
* Gain a RSSFeedConfig object.
*
* Singelton pattern, don't instantiate a config object using the
* constructor directly!
* use RSSFeedConfig.getConfig(); instead
* @return
*/
public static synchronized RSSFeedConfig getConfig() {
if (s_conf == null) {
s_conf = new RSSFeedConfig();
s_conf.load();
}
return s_conf;
}
// ////////////////////////////////////////////////////////////////////////
// Set of configuration parameters
/** */
private final Parameter m_categoryKey= new RSSCategoryKeyParameter
("com.arsdigita.london.rss.categoryKey", Parameter.REQUIRED, "RSS");
("com.arsdigita.rssfeed.categoryKey", Parameter.REQUIRED, "RSS");
/** */
private final Parameter m_processingInstruction_xslt= new StringParameter
("com.arsdigita.london.rss.processingInstruction_xslt",
("com.arsdigita.rssfeed.processingInstruction_xslt",
Parameter.OPTIONAL, null);
public RSSConfig() {
/**
* Constructor initializes class.
*/
public RSSFeedConfig() {
register(m_categoryKey);
register(m_processingInstruction_xslt);
@ -67,6 +94,7 @@ public final class RSSConfig extends AbstractConfig {
super(name, multiplicity, defaalt);
}
@Override
public void doValidate(final Object value, final ErrorList errors) {
if (value != null) {
String key = (String)value;

View File

@ -33,13 +33,22 @@ import org.apache.log4j.Logger;
public class RSSFileResolver extends DefaultApplicationFileResolver {
private static final Logger s_log =
Logger.getLogger(RSSFileResolver.class);
private static final Logger s_log = Logger.getLogger(RSSFileResolver.class);
/**
*
* @param templatePath
* @param sreq
* @param sresp
* @param app
* @return
*/
@Override
public RequestDispatcher resolve(String templatePath,
HttpServletRequest sreq,
HttpServletResponse sresp,
Application app) {
String[] webapps = new String[] {
app.getContextPath(), "ROOT"
};

View File

@ -28,11 +28,17 @@ import com.arsdigita.util.UncheckedWrapperException;
* change, possibly beyond all recognition.
*/
public class RSSRenderer {
public final static org.jdom.Namespace s_rdfNS = org.jdom.Namespace.getNamespace
( "rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#" );
public final static org.jdom.Namespace s_rssNS = org.jdom.Namespace.getNamespace
( "http://purl.org/rss/1.0/" );
/**
*
* @param channel
* @return
*/
public static org.jdom.Element generateJDOM(RSSChannel channel) {
// rdf is the root element
org.jdom.Element rdfEl = new org.jdom.Element( "RDF", "rdf", s_rdfNS.getURI() );
@ -120,6 +126,11 @@ public class RSSRenderer {
return rdfEl;
}
/**
*
* @param channel
* @return
*/
public static org.w3c.dom.Element generateDOM(RSSChannel channel) {
org.jdom.Element jdomContent = RSSRenderer.generateJDOM(channel);
org.jdom.output.DOMOutputter convertor = new org.jdom.output.DOMOutputter();
@ -135,16 +146,30 @@ public class RSSRenderer {
return domContent;
}
/**
*
* @param channel
* @return
*/
public static Element generateXML(RSSChannel channel) {
org.w3c.dom.Element domContent = generateDOM(channel);
return new WrapperElement(domContent);
}
/**
*
*/
private static class WrapperElement extends Element {
/**
*
* @param element
*/
public WrapperElement(org.w3c.dom.Element element) {
m_element = element;
}
}
}

View File

@ -50,6 +50,8 @@ import org.jdom.Namespace;
import org.jdom.output.XMLOutputter;
import org.jdom.ProcessingInstruction;
import com.arsdigita.kernel.User;
/**
* Methods for generating RSS Channels &amp; Items.
*
@ -63,18 +65,13 @@ import com.arsdigita.kernel.User;
* @version $Revision: #17 $, $Date: 2004/03/29 $
*/
public class RSSService {
private static org.apache.log4j.Logger s_log =
org.apache.log4j.Logger.getLogger(RSSService.class);
private static final RSSConfig s_config = new RSSConfig();
private static final RSSFeedConfig s_config = RSSFeedConfig.getConfig();
static {
s_log.debug("Static initalizer starting...");
s_config.load();
s_log.debug("Static initalizer finished.");
}
public static RSSConfig getConfig() {
public static RSSFeedConfig getConfig() {
return s_config;
}

View File

@ -30,6 +30,14 @@ public class SimpleRSSChannel implements RSSChannel {
private RSSImage m_image;
private RSSItemCollection m_items;
/**
*
* @param title
* @param link
* @param description
* @param image
* @param items
*/
public SimpleRSSChannel(String title,
String link,
String description,
@ -42,22 +50,42 @@ public class SimpleRSSChannel implements RSSChannel {
m_items = items;
}
/**
*
* @return
*/
public String getTitle() {
return m_title;
}
/**
*
* @return
*/
public String getLink() {
return m_link;
}
/**
*
* @return
*/
public String getDescription() {
return m_description;
}
/**
*
* @return
*/
public RSSImage getImage() {
return m_image;
}
/**
*
* @return
*/
public RSSItemCollection getItems() {
return m_items;
}

View File

@ -22,14 +22,17 @@ import com.arsdigita.util.UncheckedWrapperException;
* @version $Revision: #6 $, $Date: 2004/01/21 $
*/
public class ChannelIndex implements com.arsdigita.dispatcher.Dispatcher {
private static Logger s_log =
Logger.getLogger(ChannelIndex.class);
private static Logger s_log = Logger.getLogger(ChannelIndex.class);
private BigDecimal m_catId;
/**
* Create an index of RSS Channels available for the specified category
* and its children.
*/
*/
public ChannelIndex() {
}
/**

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
* Copyright (C) 2001-2004 Red Hat Inc. 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
* 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.
*
* 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.
* 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.rssfeed.ui;
@ -35,6 +38,7 @@ public abstract class RSSComponent extends SimpleComponent {
protected abstract RSSChannel getChannel(PageState state);
@Override
public void generateXML(PageState state,
Element parent) {
Element content = parent.newChildElement(m_element,

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
* Copyright (C) 2001-2004 Red Hat Inc. 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
* 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.
*
* 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.
* 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.rssfeed.ui;
@ -23,15 +26,27 @@ import com.arsdigita.rssfeed.RSSChannel;
// import com.arsdigita.london.rss.ui.RSSComponent;
import com.arsdigita.web.Application;
/**
*
*
*/
public class WorkspaceDirectoryComponent extends RSSComponent {
public static final String PORTAL_XML_NS = "http://www.uk.arsdigita.com/portal/1.0";
public WorkspaceDirectoryComponent() {
/**
*
*/
public WorkspaceDirectoryComponent() {
super("portal:workspaceDirectory", PORTAL_XML_NS);
}
protected RSSChannel getChannel(PageState pageState) {
/**
*
* @param pageState
* @return
*/
protected RSSChannel getChannel(PageState pageState) {
Application current = (Application) Kernel.getContext().getResource();
WorkspaceDirectoryChannel channel = new WorkspaceDirectoryChannel(

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
* Copyright (C) 2001-2004 Red Hat Inc. 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
* 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.
*
* 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.
* 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
*/
@ -89,25 +92,35 @@ public abstract class FeedForm extends Form {
protected abstract void setURL(PageState state,
String url);
/**
*
*/
private class FeedFormInitListener implements FormInitListener {
public void init(FormSectionEvent e)
throws FormProcessException {
PageState state = e.getPageState();
public void init(FormSectionEvent e)
throws FormProcessException {
PageState state = e.getPageState();
if (m_feed.isSelected(state)) {
Feed feed = m_feed.getSelectedFeed(state);
m_title.setValue(state, feed.getTitle());
m_desc.setValue(state, feed.getDescription());
setURL(state, feed.getURL());
} else {
m_title.setValue(state, null);
m_desc.setValue(state, null);
setURL(state, null);
}
}
if (m_feed.isSelected(state)) {
Feed feed = m_feed.getSelectedFeed(state);
m_title.setValue(state, feed.getTitle());
m_desc.setValue(state, feed.getDescription());
setURL(state, feed.getURL());
} else {
m_title.setValue(state, null);
m_desc.setValue(state, null);
setURL(state, null);
}
}
}
/**
*
*/
private class FeedFormValidationListener implements FormValidationListener {
public void validate(FormSectionEvent e)
throws FormProcessException {

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
* Copyright (C) 2001-2004 Red Hat Inc. 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
* 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.
*
* 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.
* 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
*/
@ -22,15 +25,29 @@ import com.arsdigita.kernel.ui.ACSObjectSelectionModel;
import com.arsdigita.bebop.parameters.BigDecimalParameter;
/**
*
*
*/
public class FeedSelectionModel extends ACSObjectSelectionModel {
/**
*
* @param param
*/
public FeedSelectionModel(BigDecimalParameter param) {
super(Feed.class.getName(),
Feed.BASE_DATA_OBJECT_TYPE,
param);
super(Feed.class.getName(),
Feed.BASE_DATA_OBJECT_TYPE,
param);
}
/**
*
* @param state
* @return
*/
public Feed getSelectedFeed(PageState state) {
return (Feed)getSelectedObject(state);
return (Feed)getSelectedObject(state);
}
}

View File

@ -1,16 +1,19 @@
/*
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
* Copyright (C) 2001-2004 Red Hat Inc. 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
* 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.
*
* 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.
* 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
*/
@ -24,6 +27,10 @@ import com.arsdigita.bebop.Form;
/**
*
*
*/
public class FeedsPanel extends BoxPanel {
private Table m_provider_feeds;
@ -36,26 +43,30 @@ public class FeedsPanel extends BoxPanel {
private FeedSelectionModel m_external_model;
/**
*
*/
public FeedsPanel() {
super(BoxPanel.VERTICAL);
super(BoxPanel.VERTICAL);
m_provider_model = new FeedSelectionModel(new BigDecimalParameter("provider"));
m_external_model = new FeedSelectionModel(new BigDecimalParameter("external"));
m_provider_model =
new FeedSelectionModel(new BigDecimalParameter("provider"));
m_external_model =
new FeedSelectionModel(new BigDecimalParameter("external"));
m_provider_feeds = new FeedsTable(m_provider_model, true);
m_external_feeds = new FeedsTable(m_external_model, false);
m_provider_feeds = new FeedsTable(m_provider_model, true);
m_external_feeds = new FeedsTable(m_external_model, false);
m_provider_form = new ProviderFeedForm(m_provider_model);
m_external_form = new ExternalFeedForm(m_external_model);
m_provider_form = new ProviderFeedForm(m_provider_model);
m_external_form = new ExternalFeedForm(m_external_model);
add(new Label("Feed Providers",
Label.BOLD));
add(m_provider_feeds);
add(m_provider_form);
add(new Label("Feed Providers",Label.BOLD));
add(m_provider_feeds);
add(m_provider_form);
add(new Label("External Feeds",
Label.BOLD));
add(m_external_feeds);
add(m_external_form);
add(new Label("External Feeds",Label.BOLD));
add(m_external_feeds);
add(m_external_form);
}
}

View File

@ -11,9 +11,9 @@
</jsp:scriptlet>
<define:page name="rssPage" application="rss"
title="RSS Channel Admin" cache="true">
title="RSSFeed Channel Admin" cache="true">
<define:component name="admin" classname="com.arsdigita.london.rss.ui.admin.FeedsPanel"/>
<define:component name="admin" classname="com.arsdigita.rssfeed.ui.admin.FeedsPanel"/>
<jsp:scriptlet>
rssPage.addRequestListener(new ApplicationAuthenticationListener());

View File

@ -5,7 +5,7 @@
version="1.2">
<!-- This page is used by class in method getChannel(PageState pageState)
com.arsdigita.portalworkspace.ui.WorkspaceDirectoryComponent
Probably part of the ccm-ldn-rss WorkspaceDirectoryPortlet portlet. -->
Probably part of the ccm-rssfeed WorkspaceDirectoryPortlet portlet. -->
<jsp:directive.page import="com.arsdigita.dispatcher.DispatcherHelper"/>

View File

@ -2,7 +2,7 @@
version="1.2">
<jsp:directive.page import="com.arsdigita.dispatcher.DispatcherHelper"/>
<jsp:directive.page import="com.arsdigita.london.rss.ui.FeedGenerator"/>
<jsp:directive.page import="com.arsdigita.rssfeed.ui.FeedGenerator"/>
<jsp:scriptlet>
DispatcherHelper.cacheDisable(response);

View File

@ -2,7 +2,7 @@
version="1.2">
<jsp:directive.page import="com.arsdigita.dispatcher.DispatcherHelper"/>
<jsp:directive.page import="com.arsdigita.london.rss.ui.ChannelGenerator"/>
<jsp:directive.page import="com.arsdigita.rssfeed.ui.ChannelGenerator"/>
<jsp:scriptlet>
DispatcherHelper.cacheDisable(response);

View File

@ -2,7 +2,7 @@
version="1.2">
<jsp:directive.page import="com.arsdigita.dispatcher.DispatcherHelper"/>
<jsp:directive.page import="com.arsdigita.london.rss.ui.FeedGenerator"/>
<jsp:directive.page import="com.arsdigita.rssfeed.ui.FeedGenerator"/>
<jsp:scriptlet>
DispatcherHelper.cacheDisable(response);

View File

@ -2,7 +2,7 @@
version="1.2">
<jsp:directive.page import="com.arsdigita.dispatcher.DispatcherHelper"/>
<jsp:directive.page import="com.arsdigita.london.rss.ui.ChannelIndex"/>
<jsp:directive.page import="com.arsdigita.rssfeed.ui.ChannelIndex"/>
<jsp:scriptlet>
DispatcherHelper.cacheDisable(response);