svn commit: r673434 - in /lenya/trunk/src/modules-core: administration/config/cocoon-xconf/usecase-admin-siteOverview.xconf administration/usecases/siteOverview.jx sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java
[email protected] Wed, 02 Jul 2008 16:25:07 -0000
Newsgroups
gmane.comp.cms.lenya.cvs
Message-ID
<[email protected] >
Author: andreas
Date: Wed Jul 2 09:25:06 2008
New Revision: 673434
URL: http://svn.apache.org/viewvc?rev=673434&view=rev
Log:
Changing SiteOverview usecase so that no continuation is necessary (see bug 44676).
Modified:
lenya/trunk/src/modules-core/administration/config/cocoon-xconf/usecase-admin-siteOverview.xconf
lenya/trunk/src/modules-core/administration/usecases/siteOverview.jx
lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java
Modified: lenya/trunk/src/modules-core/administration/config/cocoon-xconf/usecase-admin-siteOverview.xconf
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/administration/config/cocoon-xconf/usecase-admin-siteOverview.xconf?rev=673434&r1=673433&r2=673434&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/administration/config/cocoon-xconf/usecase-admin-siteOverview.xconf (original)
+++ lenya/trunk/src/modules-core/administration/config/cocoon-xconf/usecase-admin-siteOverview.xconf Wed Jul 2 09:25:06 2008
@@ -23,7 +23,7 @@
<xconf xpath="/cocoon/usecases" unless="/cocoon/usecases/component-instance[@name = 'admin.siteOverview']">
<component-instance name="admin.siteOverview" logger="lenya.admin" class="org.apache.lenya.cms.site.usecases.SiteOverview">
- <view uri="modules/administration/usecases/siteOverview.jx" menu="true">
+ <view uri="modules/administration/usecases/siteOverview.jx" menu="true" createContinuation="false">
<tab group="admin" name="siteOverview"/>
</view>
<exit usecase="admin.siteOverview"/>
Modified: lenya/trunk/src/modules-core/administration/usecases/siteOverview.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/administration/usecases/siteOverview.jx?rev=673434&r1=673433&r2=673434&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/administration/usecases/siteOverview.jx (original)
+++ lenya/trunk/src/modules-core/administration/usecases/siteOverview.jx Wed Jul 2 09:25:06 2008
@@ -6,9 +6,9 @@
The ASF licenses this file to You under the Apache License, Version 2.0
(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.apache.org/licenses/LICENSE-2.0
-
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,7 +16,6 @@
limitations under the License.
-->
<!-- $Id: emptyTrash.jx 164233 2005-04-22 13:01:45Z jwkaltz $ -->
-
<page:page
xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
@@ -24,59 +23,84 @@
xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
>
+ <jx:macro name="sortForm" targetNamespace="http://www.w3.org/1999/xhtml">
+ <jx:parameter name="key"/>
+ <jx:parameter name="order"/>
+ <jx:parameter name="text"/>
+ <jx:set var="formId" value="${'form_sort_' + key + '_' + order}"/>
+ <form id="${formId}" action="${usecase.getSourceURL()}" style="display: inline;">
+ <input type="hidden" name="lenya.usecase" value="${usecase.getName()}"/>
+ <input type="hidden" name="sort" value="${key}"/>
+ <input type="hidden" name="order" value="${order}"/>
+ <jx:forEach var="filter" items="${usecase.getParameter('filters')}">
+ <input type="hidden" name="${filter}" value="${usecase.getParameter(filter)}"/>
+ </jx:forEach>
+ <span onclick="document.forms.${formId}.submit()" style="cursor: pointer">${text}</span>
+ </form>
+ </jx:macro>
+
<page:body>
<jx:import uri="fallback://lenya/modules/usecase/templates/tabs.jx"/>
<div id="contentblock1" class="lenya-tab">
- <h1><i18n:text>Overview</i18n:text></h1>
+ <h1><i18n:text>Overview</i18n:text></h1>
- <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
- <form id="form-overview">
- <input type="hidden" name="lenya.continuation" value="${continuation.id}"/>
- <input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/>
+ <jx:set var="sort" value="${usecase.getParameter('sort')}"/>
+ <jx:set var="order" value="${usecase.getParameter('order')}"/>
- <div class="lenya-box">
- <div class="lenya-box-title"><i18n:text>Filter</i18n:text></div>
- <div class="lenya-box-body">
- <table class="lenya-table-noborder">
- <jx:forEach var="filter" items="${usecase.getParameter('filters')}">
+ <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
+ <form id="form-overview" action="${usecase.getSourceURL()}">
+ <input type="hidden" name="lenya.usecase" value="${usecase.getName()}"/>
+ <input type="hidden" name="sort" value="${sort}"/>
+ <input type="hidden" name="order" value="${order}"/>
+
+ <div class="lenya-box">
+ <div class="lenya-box-title"><i18n:text>Filter</i18n:text></div>
+ <div class="lenya-box-body">
+ <table class="lenya-table-noborder">
+ <jx:forEach var="filter" items="${usecase.getParameter('filters')}">
+ <tr>
+ <td class="lenya-entry-caption"><i18n:text><jx:out value="${filter}"/></i18n:text></td>
+ <td>
+ <select class="lenya-form-element" name="${filter}">
+ <jx:forEach var="value" items="${usecase.getParameter(filter + 'Values')}">
+ <jx:set var="selectedValue" value="${usecase.getParameter(filter)}"/>
+ <jx:choose>
+ <jx:when test="${value.equals(selectedValue)}">
+ <option value="${value}" selected="selected"><i18n:text><jx:out value="${value}"/></i18n:text></option>
+ </jx:when>
+ <jx:otherwise>
+ <option value="${value}"><i18n:text><jx:out value="${value}"/></i18n:text></option>
+ </jx:otherwise>
+ </jx:choose>
+ </jx:forEach>
+ </select>
+ </td>
+ </tr>
+ </jx:forEach>
<tr>
- <td class="lenya-entry-caption"><i18n:text><jx:out value="${filter}"/></i18n:text></td>
- <td>
- <select class="lenya-form-element" name="${filter}">
- <jx:forEach var="value" items="${usecase.getParameter(filter + 'Values')}">
- <jx:set var="selectedValue" value="${usecase.getParameter(filter)}"/>
- <jx:choose>
- <jx:when test="${value.equals(selectedValue)}">
- <option value="${value}" selected="selected"><i18n:text><jx:out value="${value}"/></i18n:text></option>
- </jx:when>
- <jx:otherwise>
- <option value="${value}"><i18n:text><jx:out value="${value}"/></i18n:text></option>
- </jx:otherwise>
- </jx:choose>
- </jx:forEach>
- </select>
- </td>
+ <td></td>
+ <td><input i18n:attr="value" type="submit" value="Update" name="input-submit"/></td>
</tr>
- </jx:forEach>
- <tr>
- <td></td>
- <td><input i18n:attr="value" type="submit" value="Update" name="input-submit"/></td>
- </tr>
- </table>
+ </table>
+ </div>
</div>
- </div>
+ </form>
<table class="lenya-table-list-noborder">
-
+
<tr>
<jx:forEach var="key" items="${usecase.getParameter('keys')}">
- <th style="white-space: nowrap"> <i18n:text><jx:out value="${key}"/></i18n:text>
- <a class="sortArrow" href="${request.pathInfo}?order=asc&sort=${key}&lenya.usecase=${usecase.getName()}&lenya.continuation=${continuation.id}">
+ <th style="white-space: nowrap"> <i18n:text><jx:out value="${key}"/></i18n:text>
+ <sortForm order="asc" key="${key}" text="▼"/>
+ <sortForm order="desc" key="${key}" text="▲"/>
+ <!--
+ <a class="sortArrow" href="${request.pathInfo}?order=asc&sort=${key}&lenya.usecase=${usecase.getName()}&lenya.continuation=${continuation.id}">
▼
- </a>
- <a class="sortArrow" href="${request.pathInfo}?order=desc&sort=${key}&lenya.usecase=${usecase.getName()}&lenya.continuation=${continuation.id}">
+ </a>
+ <a class="sortArrow" href="${request.pathInfo}?order=desc&sort=${key}&lenya.usecase=${usecase.getName()}&lenya.continuation=${continuation.id}">
▲
- </a>
+ </a>
+ -->
</th>
</jx:forEach>
</tr>
@@ -107,7 +131,6 @@
</table>
- </form>
</div>
</page:body>
</page:page>
\ No newline at end of file
Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java?rev=673434&r1=673433&r2=673434&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/SiteOverview.java Wed Jul 2 09:25:06 2008
@@ -34,12 +34,14 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceSelector;
import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.DocumentException;
import org.apache.lenya.cms.publication.DocumentFactory;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.PublicationUtil;
import org.apache.lenya.cms.publication.ResourceType;
import org.apache.lenya.cms.repository.Node;
+import org.apache.lenya.cms.repository.RepositoryException;
import org.apache.lenya.cms.site.SiteException;
import org.apache.lenya.cms.site.SiteManager;
import org.apache.lenya.cms.usecase.AbstractUsecase;
@@ -47,6 +49,7 @@
import org.apache.lenya.cms.workflow.WorkflowUtil;
import org.apache.lenya.workflow.Version;
import org.apache.lenya.workflow.Workflow;
+import org.apache.lenya.workflow.WorkflowException;
import org.apache.lenya.workflow.Workflowable;
/**
@@ -89,82 +92,124 @@
protected static final String DESC = "desc";
protected static final String ASC = "asc";
- /**
- * @see org.apache.lenya.cms.usecase.AbstractUsecase#initParameters()
- */
- protected void initParameters() {
- super.initParameters();
+ protected void prepareView() throws Exception {
+ super.prepareView();
+ setDefaultParameter(SORT, KEY_PATH);
+ setDefaultParameter(ORDER, ASC);
+
try {
Document[] documents = getDocuments();
-
List entries = new ArrayList();
for (int i = 0; i < documents.length; i++) {
+ entries.add(createEntry(documents[i]));
+ }
- Entry entry = new Entry();
- if (documents[i].hasLink()) {
- entry.setValue(KEY_PATH, documents[i].getPath());
- } else {
- entry.setValue(KEY_PATH, "not in site structure");
- }
- entry.setValue(KEY_RESOURCE_TYPE, ResourceType.I18N_PREFIX
- + documents[i].getResourceType().getName());
- entry.setValue(KEY_LANGUAGE, documents[i].getLanguage());
- entry.setValue(KEY_URL, documents[i].getCanonicalWebappURL());
- entry.setValue(KEY_CONTENT_LENGTH, "" + (documents[i].getContentLength() / 1000));
-
- DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String lastModified = format.format(new Date(documents[i].getLastModified()));
- entry.setValue(KEY_LAST_MODIFIED, lastModified);
-
- if (WorkflowUtil.hasWorkflow(this.manager, getSession(), getLogger(), documents[i])) {
- Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager,
- getSession(), getLogger(), documents[i]);
- Version latestVersion = workflowable.getLatestVersion();
- String state;
- if (latestVersion != null) {
- state = latestVersion.getState();
- } else {
- Workflow workflow = WorkflowUtil.getWorkflowSchema(this.manager,
- getSession(), getLogger(), documents[i]);
- state = workflow.getInitialState();
- }
- entry.setValue(KEY_WORKFLOW_STATE, state);
- } else {
- entry.setValue(KEY_WORKFLOW_STATE, "");
- }
+ prepareFilters(entries);
+
+ List filteredDocuments = filter(entries);
+ sort(filteredDocuments);
+ setParameter(DOCUMENTS, filteredDocuments);
- Node node = documents[i].getRepositoryNode();
- if (node.isCheckedOut()) {
- entry.setValue(KEY_CHECKED_OUT, node.getCheckoutUserId());
- } else {
- entry.setValue(KEY_CHECKED_OUT, "");
- }
- entries.add(entry);
+ setParameter(PARAMETER_KEYS, Arrays.asList(KEYS));
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected void setDefaultParameter(String name, String value) {
+ if (getParameter(name) == null) {
+ setParameter(name, value);
+ }
+ }
+
+ protected Entry createEntry(Document doc) throws DocumentException, WorkflowException,
+ RepositoryException {
+ Entry entry = new Entry();
+ if (doc.hasLink()) {
+ entry.setValue(KEY_PATH, doc.getPath());
+ } else {
+ entry.setValue(KEY_PATH, "not in site structure");
+ }
+ entry.setValue(KEY_RESOURCE_TYPE, ResourceType.I18N_PREFIX
+ + doc.getResourceType().getName());
+ entry.setValue(KEY_LANGUAGE, doc.getLanguage());
+ entry.setValue(KEY_URL, doc.getCanonicalWebappURL());
+ entry.setValue(KEY_CONTENT_LENGTH, "" + (doc.getContentLength() / 1000));
+
+ DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String lastModified = format.format(new Date(doc.getLastModified()));
+ entry.setValue(KEY_LAST_MODIFIED, lastModified);
+
+ if (WorkflowUtil.hasWorkflow(this.manager, getSession(), getLogger(), doc)) {
+ Workflowable workflowable = WorkflowUtil.getWorkflowable(this.manager,
+ getSession(), getLogger(), doc);
+ Version latestVersion = workflowable.getLatestVersion();
+ String state;
+ if (latestVersion != null) {
+ state = latestVersion.getState();
+ } else {
+ Workflow workflow = WorkflowUtil.getWorkflowSchema(this.manager,
+ getSession(), getLogger(), doc);
+ state = workflow.getInitialState();
}
+ entry.setValue(KEY_WORKFLOW_STATE, state);
+ } else {
+ entry.setValue(KEY_WORKFLOW_STATE, "");
+ }
- for (int i = 0; i < FILTERS.length; i++) {
- SortedSet filterValues = new TreeSet();
- filterValues.add(VALUE_ALL);
-
- String key = "key" + FILTERS[i].substring("filter".length());
-
- for (Iterator docs = entries.iterator(); docs.hasNext();) {
- Entry entry = (Entry) docs.next();
- filterValues.add(entry.getValue(key));
- }
- setParameter(FILTERS[i] + "Values", filterValues);
- setParameter(FILTERS[i], VALUE_ALL);
+ Node node = doc.getRepositoryNode();
+ if (node.isCheckedOut()) {
+ entry.setValue(KEY_CHECKED_OUT, node.getCheckoutUserId());
+ } else {
+ entry.setValue(KEY_CHECKED_OUT, "");
+ }
+ return entry;
+ }
+
+ protected void prepareFilters(List entries) {
+ for (int i = 0; i < FILTERS.length; i++) {
+ SortedSet filterValues = new TreeSet();
+ filterValues.add(VALUE_ALL);
+
+ String key = "key" + FILTERS[i].substring("filter".length());
+
+ for (Iterator docs = entries.iterator(); docs.hasNext();) {
+ Entry entry = (Entry) docs.next();
+ filterValues.add(entry.getValue(key));
}
- setParameter(PARAMETER_FILTERS, Arrays.asList(FILTERS));
+ setParameter(FILTERS[i] + "Values", filterValues);
+ setDefaultParameter(FILTERS[i], VALUE_ALL);
+ }
+ setParameter(PARAMETER_FILTERS, Arrays.asList(FILTERS));
+ }
- setParameter(ALL_DOCUMENTS, new ArrayList(entries));
- setParameter(DOCUMENTS, entries);
+ protected void sort(List documents) {
+ String sort = getParameterAsString(SORT);
+ String order = getParameterAsString(ORDER, ASC);
+ if (sort != null) {
+ Comparator comparator = new EntryComparator(sort, order);
+ Collections.sort(documents, comparator);
+ }
+ }
- setParameter(PARAMETER_KEYS, Arrays.asList(KEYS));
+ protected List filter(List entries) {
+ List filteredDocuments = new ArrayList(entries);
- } catch (Exception e) {
- throw new RuntimeException(e);
+ for (int i = 0; i < FILTERS.length; i++) {
+ String key = "key" + FILTERS[i].substring("filter".length());
+ String filterValue = getParameterAsString(FILTERS[i]);
+ if (!filterValue.equals(VALUE_ALL)) {
+ Entry[] allEntries = (Entry[]) filteredDocuments.toArray(new Entry[filteredDocuments
+ .size()]);
+ for (int entryIndex = 0; entryIndex < allEntries.length; entryIndex++) {
+ if (!allEntries[entryIndex].getValue(key).equals(filterValue)) {
+ filteredDocuments.remove(allEntries[entryIndex]);
+ }
+ }
+ }
}
+ return filteredDocuments;
}
/**
@@ -208,39 +253,6 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#advance()
- */
- public void advance() throws UsecaseException {
- super.advance();
-
- List allDocuments = (List) getParameter(ALL_DOCUMENTS);
- List filteredDocuments = new ArrayList(allDocuments);
-
- for (int i = 0; i < FILTERS.length; i++) {
- String key = "key" + FILTERS[i].substring("filter".length());
- String filterValue = getParameterAsString(FILTERS[i]);
- if (!filterValue.equals(VALUE_ALL)) {
- Entry[] entries = (Entry[]) filteredDocuments.toArray(new Entry[filteredDocuments
- .size()]);
- for (int entryIndex = 0; entryIndex < entries.length; entryIndex++) {
- if (!entries[entryIndex].getValue(key).equals(filterValue)) {
- filteredDocuments.remove(entries[entryIndex]);
- }
- }
- }
- }
-
- String sort = getParameterAsString(SORT);
- String order = getParameterAsString(ORDER, ASC);
- if (sort != null) {
- Comparator comparator = new EntryComparator(sort, order);
- Collections.sort(filteredDocuments, comparator);
- }
-
- setParameter(DOCUMENTS, filteredDocuments);
- }
-
- /**
* Comparator for entries.
*/
public static class EntryComparator implements Comparator {