You are viewing a plain text version of this content. The canonical link for it is here.
Posted to portalapps-dev@portals.apache.org by wo...@apache.org on 2010/05/17 11:58:28 UTC
svn commit: r945055 - in
/portals/applications/sandbox/content/trunk/src/main:
java/org/apache/portals/applications/content/
java/org/apache/portals/applications/content/beans/
java/org/apache/portals/applications/content/demo/
java/org/apache/portals/...
Author: woonsan
Date: Mon May 17 09:58:27 2010
New Revision: 945055
URL: http://svn.apache.org/viewvc?rev=945055&view=rev
Log:
- Refining package structure for demo beans/portlets
- fixing order by problem
- adding simple pagination
Added:
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java (contents, props changed)
- copied, changed from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/NewsItemPortlet.java
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java (contents, props changed)
- copied, changed from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/HtmlBodyContent.java
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java (contents, props changed)
- copied, changed from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/NewsItem.java
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java (contents, props changed)
- copied, changed from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/TextPage.java
Removed:
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/NewsItemPortlet.java
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/query/
Modified:
portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/GenericQueryContentPortlet.java
portals/applications/sandbox/content/trunk/src/main/webapp/META-INF/context.xml
portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/portlet.xml
portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-content-view.jsp
portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-query-content-view.jsp
portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/news-item-view.jsp
Modified: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/GenericQueryContentPortlet.java
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/GenericQueryContentPortlet.java?rev=945055&r1=945054&r2=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/GenericQueryContentPortlet.java (original)
+++ portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/GenericQueryContentPortlet.java Mon May 17 09:58:27 2010
@@ -31,7 +31,8 @@ import org.apache.jackrabbit.ocm.manager
import org.apache.jackrabbit.ocm.query.Filter;
import org.apache.jackrabbit.ocm.query.Query;
import org.apache.jackrabbit.ocm.query.QueryManager;
-import org.apache.portals.applications.content.query.DelegatingQueryManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -41,6 +42,8 @@ import org.apache.portals.applications.c
*/
public class GenericQueryContentPortlet extends GenericContentPortlet
{
+ private static Logger log = LoggerFactory.getLogger(GenericQueryContentPortlet.class);
+
@Override
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException
{
@@ -58,44 +61,76 @@ public class GenericQueryContentPortlet
protected Object getContentBean(final PortletRequest request, final ObjectContentManager ocm, final String contentPath) throws PortletException
{
String queryClassName = request.getPreferences().getValue("queryClass", null);
- int beginIndex = Integer.parseInt(request.getPreferences().getValue("beginIndex", "0"));
- int pageSize = Integer.parseInt(request.getPreferences().getValue("pageSize", "0"));
if (StringUtils.isBlank(queryClassName))
{
throw new PortletException("No query class provided.");
}
+ int pageIndex = 1;
+ String param = request.getParameter("page");
+
+ if (!StringUtils.isBlank(param))
+ {
+ try
+ {
+ pageIndex = Math.max(1, Integer.parseInt(param));
+ }
+ catch (NumberFormatException e)
+ {
+ }
+ }
+
+ int pageSize = Math.max(0, Integer.parseInt(request.getPreferences().getValue("pageSize", "0")));
+ int pageCount = 1;
+
try
{
- final String queryOrderByClause = request.getPreferences().getValue("queryOrderByClause", null);
QueryManager queryManager = ocm.getQueryManager();
+ Class<?> queryClass = Thread.currentThread().getContextClassLoader().loadClass(queryClassName);
+ Filter filter = createFilter(request, queryManager, queryClass, contentPath);
+ Query query = queryManager.createQuery(filter);
+ String jcrExpression = queryManager.buildJCRExpression(query);
+ String queryOrderByClause = request.getPreferences().getValue("queryOrderByClause", null);
if (!StringUtils.isBlank(queryOrderByClause))
{
- queryManager = new DelegatingQueryManager(queryManager)
+ jcrExpression += " order by " + queryOrderByClause;
+ }
+
+ if (log.isDebugEnabled())
+ {
+ log.debug("Executing jcr query: " + jcrExpression);
+ }
+
+ Collection result = ocm.getObjects(jcrExpression, javax.jcr.query.Query.XPATH);
+ int itemCount = result.size();
+
+ if (pageSize > 0)
+ {
+ pageCount = itemCount / pageSize;
+
+ if (itemCount % pageSize != 0)
{
- @Override
- public String buildJCRExpression(Query query)
- {
- return super.buildJCRExpression(query) + " order by " + queryOrderByClause;
- }
- };
+ ++pageCount;
+ }
}
- Class<?> queryClass = Thread.currentThread().getContextClassLoader().loadClass(queryClassName);
- Filter filter = createFilter(request, queryManager, queryClass, contentPath);
- Query query = queryManager.createQuery(filter);
- Collection result = ocm.getObjects(query);
+ request.setAttribute("itemCount", new Integer(itemCount));
+ request.setAttribute("pageCount", new Integer(pageCount));
+ request.setAttribute("pageIndex", new Integer(pageIndex));
+
Object contentBean = null;
- if (beginIndex <= 0 && pageSize <= 0)
+ int beginIndex = (pageIndex - 1) * pageSize;
+
+ if (beginIndex == 0 && pageSize == 0)
{
contentBean = result;
}
else
{
- List<Object> list = new ArrayList<Object>();
+ List<Object> list = new ArrayList<Object>(pageSize > 0 ? pageSize : 10);
int index = 0;
int count = 0;
@@ -131,25 +166,34 @@ public class GenericQueryContentPortlet
Filter filter = queryManager.createFilter(queryClass);
filter.setScope(scope);
- String queryContains = request.getPreferences().getValue("queryContains", null);
- String queryEqualTo = request.getPreferences().getValue("queryEqualTo", null);
- String queryJCRExpression = request.getPreferences().getValue("queryJCRExpression", null);
+ String query = getParameterOrPreference(request, "query", null);
+ String queryNode = getParameterOrPreference(request, "queryNode", ".");
+ String queryOperator = getParameterOrPreference(request, "queryOperator", "contains");
- if (queryContains != null)
+ if (query != null)
{
- filter.addContains(".", queryContains);
+ if ("contains".equals(queryOperator))
+ {
+ filter.addContains(queryNode, query);
+ }
+ else if ("equalto".equals(queryOperator))
+ {
+ filter.addEqualTo(queryNode, query);
+ }
}
- if (queryEqualTo != null)
- {
- filter.addEqualTo(".", queryEqualTo);
- }
+ return filter;
+ }
+
+ private String getParameterOrPreference(final PortletRequest request, String name, String defaultValue)
+ {
+ String value = request.getParameter(name);
- if (queryJCRExpression != null)
+ if (value == null)
{
- filter.addJCRExpression(queryJCRExpression);
+ value = request.getPreferences().getValue(name, null);
}
- return filter;
+ return (value != null ? value : defaultValue);
}
}
Copied: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java (from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/NewsItemPortlet.java)
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java?p2=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java&p1=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/NewsItemPortlet.java&r1=945001&r2=945055&rev=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/NewsItemPortlet.java (original)
+++ portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java Mon May 17 09:58:27 2010
@@ -14,7 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.portals.applications.content;
+package org.apache.portals.applications.content.demo;
+
+import org.apache.portals.applications.content.DynamicContentPortlet;
/**
* NewsItemPortlet
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/NewsItemPortlet.java
------------------------------------------------------------------------------
svn:keywords = Id
Copied: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java (from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/HtmlBodyContent.java)
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java?p2=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java&p1=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/HtmlBodyContent.java&r1=945001&r2=945055&rev=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/HtmlBodyContent.java (original)
+++ portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java Mon May 17 09:58:27 2010
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.portals.applications.content.beans;
+package org.apache.portals.applications.content.demo.beans;
import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/HtmlBodyContent.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java (from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/NewsItem.java)
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java?p2=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java&p1=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/NewsItem.java&r1=945001&r2=945055&rev=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/NewsItem.java (original)
+++ portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java Mon May 17 09:58:27 2010
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.portals.applications.content.beans;
+package org.apache.portals.applications.content.demo.beans;
import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/NewsItem.java
------------------------------------------------------------------------------
svn:keywords = Id
Copied: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java (from r945001, portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/TextPage.java)
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java?p2=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java&p1=portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/TextPage.java&r1=945001&r2=945055&rev=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/beans/TextPage.java (original)
+++ portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java Mon May 17 09:58:27 2010
@@ -14,7 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.portals.applications.content.beans;
+package org.apache.portals.applications.content.demo.beans;
+
+import java.util.Date;
import org.apache.jackrabbit.ocm.mapper.impl.annotation.Bean;
import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
@@ -29,6 +31,7 @@ import org.apache.jackrabbit.ocm.mapper.
public class TextPage
{
protected String path;
+ protected Date documentDate;
protected String title;
protected String introduction;
protected HtmlBodyContent bodyContent;
@@ -44,6 +47,17 @@ public class TextPage
this.path = path;
}
+ @Field(jcrName="onehippo:documentdate")
+ public Date getDocumentDate()
+ {
+ return documentDate;
+ }
+
+ public void setDocumentDate(Date documentDate)
+ {
+ this.documentDate = documentDate;
+ }
+
@Field(jcrName="onehippo:title")
public String getTitle()
{
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: portals/applications/sandbox/content/trunk/src/main/java/org/apache/portals/applications/content/demo/beans/TextPage.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: portals/applications/sandbox/content/trunk/src/main/webapp/META-INF/context.xml
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/webapp/META-INF/context.xml?rev=945055&r1=945054&r2=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/webapp/META-INF/context.xml (original)
+++ portals/applications/sandbox/content/trunk/src/main/webapp/META-INF/context.xml Mon May 17 09:58:27 2010
@@ -51,9 +51,9 @@
type="javax.jcr.Repository"
factory="org.apache.portals.applications.content.jndi.ObjectContentManagerProviderObjectFactory"
annotatedClassNames="
- org.apache.portals.applications.content.beans.HtmlBodyContent
- org.apache.portals.applications.content.beans.TextPage
- org.apache.portals.applications.content.beans.NewsItem
+ org.apache.portals.applications.content.demo.beans.HtmlBodyContent
+ org.apache.portals.applications.content.demo.beans.TextPage
+ org.apache.portals.applications.content.demo.beans.NewsItem
"
/>
-->
@@ -64,9 +64,9 @@
factory="org.apache.portals.applications.content.jndi.ObjectContentManagerProviderObjectFactory"
providerClassName="org.hippoecm.hst.jackrabbit.ocm.jndi.DefaultObjectContentManagerProvider"
annotatedClassNames="
- org.apache.portals.applications.content.beans.HtmlBodyContent
- org.apache.portals.applications.content.beans.TextPage
- org.apache.portals.applications.content.beans.NewsItem
+ org.apache.portals.applications.content.demo.beans.HtmlBodyContent
+ org.apache.portals.applications.content.demo.beans.TextPage
+ org.apache.portals.applications.content.demo.beans.NewsItem
"
/>
Modified: portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/portlet.xml
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/portlet.xml?rev=945055&r1=945054&r2=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/portlet.xml (original)
+++ portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/portlet.xml Mon May 17 09:58:27 2010
@@ -98,7 +98,7 @@
</preference>
<preference>
<name>queryClass</name>
- <value>org.apache.portals.applications.content.beans.TextPage</value>
+ <value>org.apache.portals.applications.content.demo.beans.TextPage</value>
</preference>
<preference>
<name>beginIndex</name>
@@ -119,7 +119,7 @@
<description>News Item Portlet</description>
<portlet-name>NewsItemPortlet</portlet-name>
<display-name>News Item Content</display-name>
- <portlet-class>org.apache.portals.applications.content.NewsItemPortlet</portlet-class>
+ <portlet-class>org.apache.portals.applications.content.demo.NewsItemPortlet</portlet-class>
<init-param>
<name>ViewPage</name>
<value>/WEB-INF/view/news-item-view.jsp</value>
@@ -194,7 +194,7 @@
</preference>
<preference>
<name>queryClass</name>
- <value>org.apache.portals.applications.content.beans.NewsItem</value>
+ <value>org.apache.portals.applications.content.demo.beans.NewsItem</value>
</preference>
<preference>
<name>beginIndex</name>
Modified: portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-content-view.jsp
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-content-view.jsp?rev=945055&r1=945054&r2=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-content-view.jsp (original)
+++ portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-content-view.jsp Mon May 17 09:58:27 2010
@@ -26,6 +26,10 @@ limitations under the License.
<td>${contentBean.title}</td>
</tr>
<tr>
+ <th>Date:</th>
+ <td>${contentBean.documentDate}</td>
+ </tr>
+ <tr>
<th>Introduction:</th>
<td>${contentBean.introduction}</td>
</tr>
Modified: portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-query-content-view.jsp
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-query-content-view.jsp?rev=945055&r1=945054&r2=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-query-content-view.jsp (original)
+++ portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/generic-query-content-view.jsp Mon May 17 09:58:27 2010
@@ -33,6 +33,26 @@ limitations under the License.
<c:forEach var="contentItem" items="${contentBean}">
<h3><a href="${portalContextPath}${portalServletPath}${fn:substringAfter(contentItem.path, contentUrlBase)}">${contentItem.title}</a></h3>
+<div align="right">(${contentItem.documentDate})</div>
<div>${contentItem.introduction}</div>
<p> </p>
</c:forEach>
+
+<hr/>
+
+Pages:
+<c:forEach begin="1" end="${pageCount}" var="index">
+
+ <c:choose>
+ <c:when test="${index == pageIndex}">
+ ${index}
+ </c:when>
+ <c:otherwise>
+ <portlet:renderURL var="pageURL">
+ <portlet:param name="page" value="${index}"/>
+ </portlet:renderURL>
+ <a href="${pageURL}">${index}</a>
+ </c:otherwise>
+ </c:choose>
+
+</c:forEach>
Modified: portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/news-item-view.jsp
URL: http://svn.apache.org/viewvc/portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/news-item-view.jsp?rev=945055&r1=945054&r2=945055&view=diff
==============================================================================
--- portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/news-item-view.jsp (original)
+++ portals/applications/sandbox/content/trunk/src/main/webapp/WEB-INF/view/news-item-view.jsp Mon May 17 09:58:27 2010
@@ -26,6 +26,10 @@ limitations under the License.
<td>${contentBean.title}</td>
</tr>
<tr>
+ <th>Date:</th>
+ <td>${contentBean.documentDate}</td>
+ </tr>
+ <tr>
<th>Introduction:</th>
<td>${contentBean.introduction}</td>
</tr>