Portlet LatestNews aus contrib WestSussex hinzugefügt. Muss noch weiter angepasst werden.
git-svn-id: https://svn.libreccm.org/ccm/trunk@2070 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
74eaab17dc
commit
6ba1d1a8e4
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<ccm:application name="ccm-wsx-news-portlet"
|
||||
prettyName="Personalised News Portlet"
|
||||
version="1.0.1"
|
||||
release="1"
|
||||
webapp="ROOT"
|
||||
xmlns:ccm="http://ccm.redhat.com/ccm-project">
|
||||
|
||||
<ccm:dependencies>
|
||||
<ccm:requires name="ccm-cms-types-newsitem" version="6.1.0"/>
|
||||
<!--
|
||||
<ccm:requires name="ccm-ldn-portal" version="1.4.2"/>
|
||||
<ccm:requires name="ccm-wsx-authentication" version="1.0.1"/>
|
||||
-->
|
||||
</ccm:dependencies>
|
||||
|
||||
|
||||
<ccm:contacts>
|
||||
<ccm:contact uri="http://wsgfl.westsussex.gov.uk" type="website"/>
|
||||
<ccm:contact uri="mailto:chris.gilbert@westsussex.gov.uk" type="support"/>
|
||||
</ccm:contacts>
|
||||
|
||||
<ccm:description>
|
||||
Portlet either displays the latest news content, or the latest personalised items
|
||||
</ccm:description>
|
||||
</ccm:application>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// Copyright (C) 2003 Chris Gilbert 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
|
||||
|
||||
|
||||
// model for a portlet that displays the latest news
|
||||
|
||||
model com.arsdigita.portlet;
|
||||
|
||||
import com.arsdigita.portal.Portlet;
|
||||
|
||||
object type NewsPortlet extends Portlet {
|
||||
Integer[0..1] itemCount = portlet_news.item_count INTEGER;
|
||||
|
||||
reference key (portlet_news.portlet_id);
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
@ ddl/oracle-se/create.sql
|
||||
@ ddl/oracle-se/deferred.sql
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
begin;
|
||||
\i ddl/postgres/create.sql
|
||||
\i ddl/postgres/deferred.sql
|
||||
end;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<registry>
|
||||
<config class="com.arsdigita.portlet.news.NewsPortletConfig"
|
||||
storage="ccm-portlet-latestnews/newsportlet.properties"/>
|
||||
</registry>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<load>
|
||||
<requires>
|
||||
<table name="inits"/>
|
||||
<table name="acs_objects"/>
|
||||
<initializer class="com.arsdigita.core.Initializer"/>
|
||||
<table name="cms_items"/>
|
||||
<initializer class="com.arsdigita.cms.Initializer"/>
|
||||
<initializer class="com.arsdigita.portalworkspace.Initializer"/>
|
||||
<!--
|
||||
<initializer class="uk.gov.westsussex.authentication.Initializer"/>
|
||||
-->
|
||||
<initializer class="com.arsdigita.cms.contenttypes.NewsItemInitializer"/>
|
||||
<initializer class="com.arsdigita.navigation.Initializer"/>
|
||||
|
||||
</requires>
|
||||
<provides>
|
||||
<table name="portlet_news"/>
|
||||
<initializer class="com.arsdigita.portlet.news.Initializer"/>
|
||||
</provides>
|
||||
<scripts>
|
||||
<schema directory="ccm-portlet-latestnews"/>
|
||||
<data class="com.arsdigita.portlet.news.Loader"/>
|
||||
</scripts>
|
||||
</load>
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* Copyright (C) 2003 Chris Gilbert 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.portlet.news;
|
||||
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.db.DbHelper;
|
||||
import com.arsdigita.domain.DomainObject;
|
||||
import com.arsdigita.kernel.ACSObjectInstantiator;
|
||||
import com.arsdigita.kernel.ResourceType;
|
||||
import com.arsdigita.kernel.ResourceTypeConfig;
|
||||
import com.arsdigita.kernel.ui.ResourceConfigFormSection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.persistence.pdl.ManifestSource;
|
||||
import com.arsdigita.persistence.pdl.NameFilter;
|
||||
import com.arsdigita.portal.PortletType;
|
||||
import com.arsdigita.runtime.CompoundInitializer;
|
||||
import com.arsdigita.runtime.DomainInitEvent;
|
||||
import com.arsdigita.runtime.PDLInitializer;
|
||||
import com.arsdigita.runtime.RuntimeConfig;
|
||||
|
||||
import com.arsdigita.portlet.news.ui.NewsPortletEditor;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
/**
|
||||
* based on com.arsdigita.london.portal.installer.portlet
|
||||
* @author Chris Gilbert (cgyg9330) <chris.gilbert@westsussex.gov.uk>
|
||||
* @version $Id: Initializer.java,v 1.2 2005/03/07 13:48:49 cgyg9330 Exp $
|
||||
*/
|
||||
public class Initializer extends CompoundInitializer {
|
||||
|
||||
/** Private Logger instance for debugging purpose. */
|
||||
private static final Logger s_log = Logger.getLogger(Initializer.class);
|
||||
|
||||
public Initializer() {
|
||||
final String url = RuntimeConfig.getConfig().getJDBCURL();
|
||||
final int database = DbHelper.getDatabaseFromURL(url);
|
||||
|
||||
add(
|
||||
new PDLInitializer(
|
||||
new ManifestSource(
|
||||
"ccm-portlet-latestnews.pdl.mf",
|
||||
new NameFilter(
|
||||
DbHelper.getDatabaseSuffix(database),
|
||||
"pdl"))));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param e
|
||||
*/
|
||||
@Override
|
||||
public void init(DomainInitEvent e) {
|
||||
super.init(e);
|
||||
|
||||
|
||||
/* Register portlet with the domain coupling machinery */
|
||||
e.getFactory().registerInstantiator(
|
||||
NewsPortlet.BASE_DATA_OBJECT_TYPE,
|
||||
new ACSObjectInstantiator() {
|
||||
@Override
|
||||
public DomainObject doNewInstance(DataObject dataObject) {
|
||||
return new NewsPortlet(dataObject);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/* */
|
||||
new ResourceTypeConfig(NewsPortlet.BASE_DATA_OBJECT_TYPE) {
|
||||
@Override
|
||||
public ResourceConfigFormSection getCreateFormSection(
|
||||
final ResourceType resType,
|
||||
final RequestLocal parentAppRL) {
|
||||
final ResourceConfigFormSection config = new
|
||||
NewsPortletEditor(resType, parentAppRL);
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceConfigFormSection getModifyFormSection(
|
||||
final RequestLocal application) {
|
||||
final NewsPortletEditor config = new
|
||||
NewsPortletEditor(application);
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
/* Register internal default themes's stylesheet which concomitantly
|
||||
* serves as a fallback if a custom theme is used without supporting
|
||||
* this portlet. */
|
||||
PortletType.registerXSLFile(
|
||||
NewsPortlet.BASE_DATA_OBJECT_TYPE,
|
||||
PortletType.INTERNAL_THEME_PORTLET_DIR + "news-portlet.xsl");
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright (C) 2003 Chris Gilbert 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.portlet.news;
|
||||
|
||||
import com.arsdigita.kernel.Kernel;
|
||||
import com.arsdigita.kernel.KernelExcursion;
|
||||
import com.arsdigita.loader.PackageLoader;
|
||||
import com.arsdigita.portal.PortletType;
|
||||
import com.arsdigita.runtime.ScriptContext;
|
||||
import com.arsdigita.util.parameter.Parameter;
|
||||
import com.arsdigita.util.parameter.StringParameter;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Chris Gilbert (cgyg9330) <chris.gilbert@westsussex.gov.uk>
|
||||
* @version $Id: Loader.java, 2005/02/28 16:28:49 cgyg9330 $
|
||||
*/
|
||||
public class Loader extends PackageLoader {
|
||||
|
||||
private static final Logger s_log = Logger.getLogger(Loader.class);
|
||||
|
||||
private StringParameter typeName = new StringParameter
|
||||
("uk.gov.westsussex.portlet.news.name",
|
||||
Parameter.REQUIRED, "News");
|
||||
|
||||
public Loader() {
|
||||
register(typeName);
|
||||
|
||||
}
|
||||
public void run(final ScriptContext ctx) {
|
||||
new KernelExcursion() {
|
||||
public void excurse() {
|
||||
setEffectiveParty(Kernel.getSystemParty());
|
||||
PortletType type = PortletType
|
||||
.createPortletType((String)get(typeName),
|
||||
PortletType.WIDE_PROFILE,
|
||||
NewsPortlet.BASE_DATA_OBJECT_TYPE);
|
||||
type.setDescription("See your personalised news");
|
||||
}
|
||||
}.run();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
uk.gov.westsussex.portlet.news.name.title=Portlet Type Name
|
||||
uk.gov.westsussex.portlet.news.name.purpose=The name of the portlet type that appears in the drop down list of portlet types
|
||||
uk.gov.westsussex.portlet.news.name.example=News
|
||||
uk.gov.westsussex.portlet.news.name.format=[string]
|
||||
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright (C) 2003 - 2004 Chris Gilbert 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.portlet.news;
|
||||
|
||||
|
||||
/**
|
||||
* Constants used by classes in the news portlet application.
|
||||
*
|
||||
* @author cgyg9330
|
||||
*/
|
||||
public interface NewsConstants {
|
||||
|
||||
|
||||
|
||||
public static final String ITEM_COUNT = "itemCount";
|
||||
|
||||
|
||||
|
||||
public static final String GENERAL_NEWS_CACHE_KEY = "generalNews";
|
||||
|
||||
//queries
|
||||
public static final String RECENT_NEWS =
|
||||
"uk.gov.westsussex.portal.portlet.RecentNews";
|
||||
public static final String PERSONALISED_NEWS =
|
||||
"uk.gov.westsussex.portal.portlet.PersonalisedNews";
|
||||
public static final String LAST_UPDATE =
|
||||
"uk.gov.westsussex.portal.portlet.LatestNewsDate";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// rendering
|
||||
|
||||
public static final String XML_NEWS_NS = "http://wsgfl.westsussex.gov.uk/portlet/news/1.0";
|
||||
public static final String MAIN_PORTLET_ELEMENT = "portlet:news";
|
||||
public static final String NEWS_ITEM_ELEMENT = "news-portlet:newsItem";
|
||||
public static final String NEWS_ROOM_ATTRIBUTE = "newsroom-shortcut";
|
||||
public static final String PERSONALISED_ATTRIBUTE = "personalised";
|
||||
public static final String DATE_ATTRIBUTE = "date";
|
||||
public static final String TITLE_ATTRIBUTE = "title";
|
||||
public static final String LEAD_ATTRIBUTE = "lead";
|
||||
public static final String URL_ATTRIBUTE = "url";
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* Copyright (C) 2003 Chris Gilbert 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.portlet.news;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
// import java.util.Date;
|
||||
|
||||
import com.arsdigita.portlet.news.ui.NewsPortletRenderer;
|
||||
|
||||
import com.arsdigita.bebop.portal.AbstractPortletRenderer;
|
||||
// import com.arsdigita.cms.contenttypes.NewsItem;
|
||||
// import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
// import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.portal.Portlet;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
/**
|
||||
* List of news content types items, in descending order of date. The number
|
||||
* of items retrieved is set by the administrator.
|
||||
*
|
||||
* @author Chris Gilbert (cgyg9330) <chris.gilbert@westsussex.gov.uk>
|
||||
* @version $Id: NewsPortlet.java, 2007/08/08 09:28:26 cgyg9330 $
|
||||
*/
|
||||
public class NewsPortlet extends Portlet implements NewsConstants {
|
||||
|
||||
/** Private Logger instance for debugging purpose. */
|
||||
private static final Logger s_log = Logger.getLogger(NewsPortlet.class);
|
||||
|
||||
/** PDL stuff */
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.portlet.NewsPortlet";
|
||||
|
||||
/**
|
||||
* allows non personalised news page to be cached between updates
|
||||
*/
|
||||
private static BigDecimal s_latestNews = new BigDecimal(0);
|
||||
private static long s_newsCount = 0;
|
||||
|
||||
|
||||
private static final NewsPortletConfig s_config = NewsPortletConfig.getConfig();
|
||||
|
||||
static {
|
||||
s_config.load();
|
||||
}
|
||||
|
||||
public static NewsPortletConfig getConfig() {
|
||||
return s_config;
|
||||
}
|
||||
|
||||
|
||||
public NewsPortlet(DataObject dataObject) {
|
||||
super(dataObject);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected String getBaseDataObjectType() {
|
||||
return BASE_DATA_OBJECT_TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbstractPortletRenderer doGetPortletRenderer() {
|
||||
return new NewsPortletRenderer(this);
|
||||
}
|
||||
|
||||
public int getItemCount() {
|
||||
return ((Integer) get(ITEM_COUNT)).intValue();
|
||||
}
|
||||
|
||||
public void setItemCount(int count) {
|
||||
set(ITEM_COUNT, new Integer(count));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return whether any homepage news items have been added or edited since last checked.
|
||||
* If news has been updated, the stored value of the last update is changed. Note
|
||||
* deleted news items do not cause true to be returned.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
*
|
||||
* starting to look doubtful whether this would actually save any time
|
||||
*
|
||||
* will recheck when more data on database
|
||||
public boolean isNewNews() {
|
||||
NewsItem latest = NewsItem.getMostRecentNewsItem();
|
||||
|
||||
if (!latest.getID().equals(s_latestNews)) {
|
||||
s_latestNews = latest.getID();
|
||||
return true;
|
||||
}
|
||||
DataCollection news = SessionManager.getSession().retrieve(NewsItem.BASE_DATA_OBJECT_TYPE);
|
||||
news.addEqualsFilter(NewsItem.IS_HOMEPAGE, new Boolean(true));
|
||||
long newsCount = news.size();
|
||||
if (newsCount != s_newsCount) {
|
||||
s_newsCount = newsCount;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
}*/
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright (C) 2003 - 2004 Chris Gilbert 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.portlet.news;
|
||||
|
||||
import com.arsdigita.runtime.AbstractConfig;
|
||||
// import com.arsdigita.util.parameter.IntegerParameter;
|
||||
import com.arsdigita.util.parameter.Parameter;
|
||||
// import com.arsdigita.util.parameter.StringArrayParameter;
|
||||
// import com.arsdigita.util.parameter.URLParameter;
|
||||
import com.arsdigita.util.parameter.StringParameter;
|
||||
// import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
// import java.io.InputStream;
|
||||
// import java.io.IOException;
|
||||
// import java.net.URL;
|
||||
// import java.net.MalformedURLException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Specification of datasources required by Atomwide application
|
||||
*
|
||||
* @author Chris Gilbert <chris.gilbert@westsussex.gov.uk>
|
||||
* @version $Id: NewsPortletConfig.java,v 1.1 2005/03/07 13:48:49 cgyg9330 Exp $
|
||||
*/
|
||||
public class NewsPortletConfig extends AbstractConfig {
|
||||
|
||||
/** A logger instance to assist debugging. */
|
||||
private static final Logger s_log = Logger.getLogger(NewsPortletConfig.class);
|
||||
|
||||
/** Singelton config object. */
|
||||
private static NewsPortletConfig s_conf;
|
||||
|
||||
/**
|
||||
* Gain a NewsPortletConfig object.
|
||||
*
|
||||
* Singelton pattern, don't instantiate a config object using the
|
||||
* constructor directly!
|
||||
* use RSSFeedConfig.getConfig(); instead
|
||||
* @return
|
||||
*/
|
||||
public static synchronized NewsPortletConfig getConfig() {
|
||||
if (s_conf == null) {
|
||||
s_conf = new NewsPortletConfig();
|
||||
s_conf.load();
|
||||
}
|
||||
|
||||
return s_conf;
|
||||
}
|
||||
|
||||
|
||||
// ////////////////////////////////////////////////////////////////////////
|
||||
// Set of configuration parameters
|
||||
|
||||
/** */
|
||||
private final Parameter newsroomShortcut = new StringParameter
|
||||
( "com.arsdigita.portlet.news.newsroom-shortcut",
|
||||
Parameter.REQUIRED,
|
||||
"/news");
|
||||
|
||||
/**
|
||||
* Constructor initializes class.
|
||||
*/
|
||||
public NewsPortletConfig() {
|
||||
|
||||
register(newsroomShortcut);
|
||||
loadInfo();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Getter newsroom shortcut parameter
|
||||
*/
|
||||
public final String getNewsroomShortcut() {
|
||||
return (String)get(newsroomShortcut);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
com.artsdigita.portlet.news.newsroom-shortcut.title=Newsroom Shortcut
|
||||
com.artsdigita.portlet.news.newsroom-shortcut.purpose=used as a link at the bottom of the news portlet
|
||||
com.artsdigita.portlet.news.newsroom-shortcut.example=/news
|
||||
com.artsdigita.portlet.news.newsroom-shortcut.format=[string]
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright (C) 2005 Chris Gilbert 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.portlet.news;
|
||||
|
||||
import com.arsdigita.domain.DomainCollection;
|
||||
|
||||
/**
|
||||
* Service is used by news portlet to display potentially useful articles
|
||||
* to the user.
|
||||
*
|
||||
* An implementation will require a mapping between content pages and some
|
||||
* attributes of the user. In the atomwide authentication module, user profile
|
||||
* values are modelled as terms in domains mapped to /content/ and so authors
|
||||
* may specify which user groups their articles are to be promoted to
|
||||
*
|
||||
* @author chris.gilbert@westsussex.gov.uk
|
||||
*/
|
||||
public interface PersonalisedNewsTarget {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return a domainCollection of com.arsdigita.cms.ContentPage objects
|
||||
*/
|
||||
public DomainCollection getMyNews();
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* Copyright (C) 2003 - 2004 Chris Gilbert 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.portlet.news.ui;
|
||||
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.RequestLocal;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.IntegerValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.bebop.portal.PortletConfigFormSection;
|
||||
import com.arsdigita.kernel.ResourceType;
|
||||
import com.arsdigita.portal.Portlet;
|
||||
|
||||
import com.arsdigita.portlet.news.NewsPortlet;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Chris Gilbert (cgyg9330) <chris.gilbert@westsussex.gov.uk>
|
||||
* @version $Id: NewsPortletEditor.java 2005/03/07 13:48:49 cgyg9330 Exp $
|
||||
*/
|
||||
public class NewsPortletEditor extends PortletConfigFormSection {
|
||||
|
||||
private TextField m_itemCount;
|
||||
private static final Logger s_log = Logger.getLogger(NewsPortletEditor.class);
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param resType
|
||||
* @param parentAppRL
|
||||
*/
|
||||
public NewsPortletEditor(ResourceType resType, RequestLocal parentAppRL) {
|
||||
super(resType, parentAppRL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param application
|
||||
*/
|
||||
public NewsPortletEditor(RequestLocal application) {
|
||||
super(application);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
protected void addWidgets() {
|
||||
super.addWidgets();
|
||||
|
||||
m_itemCount =
|
||||
new TextField(new StringParameter(NewsPortlet.ITEM_COUNT));
|
||||
|
||||
add(new Label("Number of items:", Label.BOLD), ColumnPanel.RIGHT);
|
||||
|
||||
m_itemCount.addValidationListener(new IntegerValidationListener());
|
||||
|
||||
add(m_itemCount);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param state
|
||||
* @param portlet
|
||||
* @throws FormProcessException
|
||||
*
|
||||
* TODO: add validation or set up drop down list with contents of Static folder?
|
||||
*/
|
||||
@Override
|
||||
protected void initWidgets(PageState state, Portlet portlet)
|
||||
throws FormProcessException {
|
||||
super.initWidgets(state, portlet);
|
||||
|
||||
if (portlet != null) {
|
||||
NewsPortlet myportlet = (NewsPortlet) portlet;
|
||||
|
||||
m_itemCount.setValue(state, myportlet.getItemCount()+ "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param state
|
||||
* @param portlet
|
||||
* @throws FormProcessException
|
||||
*/
|
||||
@Override
|
||||
protected void processWidgets(PageState state, Portlet portlet)
|
||||
throws FormProcessException {
|
||||
s_log.debug("START processWidgets");
|
||||
super.processWidgets(state, portlet);
|
||||
|
||||
NewsPortlet myportlet = (NewsPortlet) portlet;
|
||||
myportlet.setItemCount(new Integer(
|
||||
(String) m_itemCount.getValue(state)).intValue());
|
||||
s_log.debug("END processWidgets");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,252 @@
|
|||
/*
|
||||
* Copyright (C) 2003 - 2004 Chris Gilbert 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.portlet.news.ui;
|
||||
|
||||
//import uk.gov.westsussex.authentication.ExternalUserFactory;
|
||||
import com.arsdigita.portlet.news.NewsConstants;
|
||||
import com.arsdigita.portlet.news.NewsPortlet;
|
||||
import com.arsdigita.portlet.news.PersonalisedNewsTarget;
|
||||
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.portal.AbstractPortletRenderer;
|
||||
import com.arsdigita.categorization.Category;
|
||||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.cms.SecurityManager;
|
||||
import com.arsdigita.domain.DomainCollection;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.kernel.Kernel;
|
||||
import com.arsdigita.kernel.User;
|
||||
import com.arsdigita.kernel.permissions.PermissionService;
|
||||
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
||||
import com.arsdigita.navigation.Navigation;
|
||||
// import com.arsdigita.portalworkspace.ui.PortalConstants;
|
||||
import com.arsdigita.london.terms.Domain;
|
||||
import com.arsdigita.london.terms.Term;
|
||||
import com.arsdigita.persistence.DataCollection;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.portal.PortletType;
|
||||
import com.arsdigita.xml.Element;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Chris Gilbert (cgyg9330) <chris.gilbert@westsussex.gov.uk>
|
||||
* @version $Id: NewsPortletRenderer.java 2005/03/07 13:48:49 cgyg9330 Exp $
|
||||
*/
|
||||
public class NewsPortletRenderer extends AbstractPortletRenderer
|
||||
implements NewsConstants {
|
||||
|
||||
private static final Logger s_log =
|
||||
Logger.getLogger(NewsPortletRenderer.class);
|
||||
|
||||
private NewsPortlet m_portlet;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param portlet
|
||||
*/
|
||||
public NewsPortletRenderer(NewsPortlet portlet) {
|
||||
m_portlet = portlet;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see
|
||||
* com.arsdigita.bebop.portal.AbstractPortletRenderer#generateBodyXML(
|
||||
* com.arsdigita.bebop.PageState,
|
||||
* com.arsdigita.xml.Element)
|
||||
*/
|
||||
protected void generateBodyXML(PageState state, Element parent) {
|
||||
s_log.debug("START - generateBodyXML");
|
||||
|
||||
Element newsPortlet = parent.newChildElement( MAIN_PORTLET_ELEMENT,
|
||||
PortletType.PORTLET_XML_NS);
|
||||
DateFormat formatter = new SimpleDateFormat("dd/MM/yy");
|
||||
User thisUser = (User) Kernel.getContext().getParty();
|
||||
if (null == thisUser) {
|
||||
thisUser = Kernel.getPublicUser();
|
||||
}
|
||||
|
||||
// Object customUser = ExternalUserFactory.getCustomUserObject(thisUser);
|
||||
// if (customUser instanceof PersonalisedNewsTarget) {
|
||||
// newsPortlet.addAttribute(PERSONALISED_ATTRIBUTE, "true");
|
||||
// getPersonalisedNews(
|
||||
// state,
|
||||
// newsPortlet,
|
||||
// (PersonalisedNewsTarget) customUser,
|
||||
// formatter);
|
||||
//
|
||||
// } else {
|
||||
newsPortlet.addAttribute(PERSONALISED_ATTRIBUTE, "false");
|
||||
getGeneralNews(newsPortlet, formatter);
|
||||
|
||||
// }
|
||||
|
||||
newsPortlet.addAttribute(NEWS_ROOM_ATTRIBUTE,
|
||||
NewsPortlet.getConfig().getNewsroomShortcut());
|
||||
|
||||
s_log.debug("FINISH - generateBodyXML");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param newsPortlet
|
||||
* @param profiledUser
|
||||
*/
|
||||
/* CURRENTLY NOT AVAILABLE
|
||||
private void getPersonalisedNews( PageState state,
|
||||
Element main,
|
||||
PersonalisedNewsTarget profiledUser,
|
||||
DateFormat formatter) {
|
||||
s_log.debug("START - getPersonalisedNews");
|
||||
|
||||
DomainCollection myNews = profiledUser.getMyNews();
|
||||
if (myNews == null) {
|
||||
// method in personalised user class has been implemented to just return null
|
||||
getGeneralNews(main, formatter);
|
||||
return;
|
||||
}
|
||||
|
||||
myNews.addOrder(ContentPage.LAUNCH_DATE + " desc");
|
||||
|
||||
PermissionService.filterObjects(
|
||||
myNews,
|
||||
PrivilegeDescriptor.get(SecurityManager.CMS_READ_ITEM),
|
||||
Kernel.getContext().getParty().getOID());
|
||||
|
||||
myNews.setRange(
|
||||
new Integer(1),
|
||||
new Integer(m_portlet.getItemCount() + 1));
|
||||
|
||||
while (myNews.next()) {
|
||||
ContentPage page = (ContentPage) myNews.getDomainObject();
|
||||
|
||||
Element item = main.newChildElement(NEWS_ITEM_ELEMENT, XML_NEWS_NS);
|
||||
Date d = page.getLaunchDate();
|
||||
String date = (d != null) ? formatter.format(d) : "";
|
||||
item.addAttribute(DATE_ATTRIBUTE, date);
|
||||
|
||||
item.addAttribute(TITLE_ATTRIBUTE, page.getTitle());
|
||||
item.addAttribute(LEAD_ATTRIBUTE, page.getSearchSummary());
|
||||
item.addAttribute(
|
||||
URL_ATTRIBUTE,
|
||||
Navigation.redirectURL(page.getOID()));
|
||||
|
||||
}
|
||||
s_log.debug("END - getPersonalisedNews");
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
private void getGeneralNews(Element main, DateFormat formatter) {
|
||||
s_log.debug("START - getGeneralNews");
|
||||
|
||||
// this is the default key - maybe should parametrise
|
||||
Domain rss = Domain.retrieve("APLAWS-RSS");
|
||||
DomainCollection rssRoots = rss.getRootTerms();
|
||||
rssRoots.addEqualsFilter(Term.NAME, "News");
|
||||
Term newsTerm = null;
|
||||
while (rssRoots.next()) {
|
||||
newsTerm = (Term) rssRoots.getDomainObject();
|
||||
s_log.debug("found the news rss feed term");
|
||||
Category cat = newsTerm.getModel();
|
||||
DataCollection newsItems = SessionManager.getSession()
|
||||
.retrieve(ContentPage.BASE_DATA_OBJECT_TYPE);
|
||||
newsItems.addEqualsFilter("parent.categories.id",
|
||||
cat.getID());
|
||||
|
||||
newsItems.addEqualsFilter(ContentItem.VERSION, ContentItem.LIVE);
|
||||
newsItems.addOrder(ContentPage.LAUNCH_DATE + " desc");
|
||||
|
||||
// CategorizedCollection newsItems =
|
||||
// cat.getObjects(ContentPage.BASE_DATA_OBJECT_TYPE);
|
||||
s_log.debug("total items = " + newsItems.size());
|
||||
newsItems.setRange(
|
||||
new Integer(1),
|
||||
new Integer(m_portlet.getItemCount() + 1));
|
||||
|
||||
ContentPage newsItem = null;
|
||||
while (newsItems.next()) {
|
||||
Element item =
|
||||
main.newChildElement(NEWS_ITEM_ELEMENT, XML_NEWS_NS);
|
||||
//newsItem = (ContentPage) newsItems.getDomainObject();
|
||||
newsItem = (ContentPage)DomainObjectFactory
|
||||
.newInstance(newsItems.getDataObject());
|
||||
Date d = newsItem.getLaunchDate();
|
||||
String date = (d != null) ? formatter.format(d) : "";
|
||||
item.addAttribute(DATE_ATTRIBUTE, date);
|
||||
|
||||
item.addAttribute(TITLE_ATTRIBUTE, newsItem.getTitle());
|
||||
|
||||
item.addAttribute(LEAD_ATTRIBUTE, newsItem.getSearchSummary());
|
||||
item.addAttribute(
|
||||
URL_ATTRIBUTE,
|
||||
Navigation.redirectURL(newsItem.getOID()));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
s_log.debug("END - getGeneralNews");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
public Object getCacheKey() {
|
||||
|
||||
if (getProfiledUser() == null) {
|
||||
return GENERAL_NEWS_CACHE_KEY;
|
||||
} else {
|
||||
|
||||
|
||||
return m_portlet.getID();
|
||||
}
|
||||
}
|
||||
|
||||
// is dirty if edited, as this means the number of entries has changed.
|
||||
// For non personalised news, dirty if homepage
|
||||
// newsitems are added or edited.
|
||||
// For personalised, dirty if pushed items added or edited.
|
||||
|
||||
public boolean isDirty() {
|
||||
|
||||
|
||||
// has it been edited? - add in this condition when response
|
||||
// from Redhat about AbstractPortletRenderer
|
||||
|
||||
// if not has news changed
|
||||
if (getCacheKey().equals(GENERAL_NEWS_CACHE_KEY)) {
|
||||
isDirty = m_portlet.isNewNews();
|
||||
s_log.debug("general news: dirty? " + isDirty);
|
||||
|
||||
} else {
|
||||
// implement later
|
||||
isDirty = true;
|
||||
}
|
||||
}
|
||||
return isDirty;
|
||||
*/
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 79 B |
|
|
@ -0,0 +1,83 @@
|
|||
<?xml version="1.0"?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:news-portlet="http://wsgfl.westsussex.gov.uk/portlet/news/1.0"
|
||||
xmlns:portlet="http://www.uk.arsdigita.com/portlet/1.0"
|
||||
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
|
||||
version="1.0" >
|
||||
|
||||
<xsl:param name="internal-theme"/>
|
||||
|
||||
<xsl:template match="portlet:news">
|
||||
<xsl:if test="@personalised= 'true'">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td width="3">
|
||||
<img alt="" src="{$internal-theme}/images/spacer.gif" width="100%" />
|
||||
</td>
|
||||
<td class="portletText">
|
||||
Latest articles for you...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</xsl:if>
|
||||
|
||||
<table width="100%" cellpadding="0" cellspacing="0" border="0">
|
||||
<xsl:apply-templates />
|
||||
<tr>
|
||||
<td colspan="3" width="100%" height="7">
|
||||
<img alt="" src="{$internal-theme}/images/spacer.gif"
|
||||
width="100%" height="3" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table width="100%" cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td height="20" width="" valign="middle" class="portletText">
|
||||
<br/>
|
||||
<img alt = "" src="/STATIC/portlet/spacer.gif" width="8" />
|
||||
<a href="{@newsroom-shortcut}">News Room</a>
|
||||
<img alt="" src="{$internal-theme}/images/spacer.gif" width="10"
|
||||
height="1" />
|
||||
<a href="{@newsroom-shortcut}">
|
||||
<img src="{$internal-theme}/images/portlets/news_arrow.gif"
|
||||
alt="More News" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="news-portlet:newsItem">
|
||||
<tr>
|
||||
<td colspan="3" width="100%" height="7">
|
||||
<img alt="" src="{$internal-theme}/images/spacer.gif" width="100%" height="3" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="20" width="" valign="middle" class="portletText">
|
||||
<img alt = "" src="{$internal-theme}/images/portlets/arrow_bullet.gif" />
|
||||
</td>
|
||||
<td height="20" width="423" align="left" valign="middle" class="portletText">
|
||||
<a>
|
||||
<xsl:attribute name="href">
|
||||
<xsl:value-of select="@url" />
|
||||
</xsl:attribute>
|
||||
<xsl:value-of select="@title" />
|
||||
</a>
|
||||
-
|
||||
<xsl:value-of select="@date" />
|
||||
</td>
|
||||
<td height="20" valign="middle" width="2" class="portletText"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td width="423" align="left" valign="middle" class="portletText">
|
||||
<xsl:value-of select="@lead" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
Loading…
Reference in New Issue