diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties
index 1f60914e0b..4211568f63 100644
--- a/config/alfresco/messages/webclient.properties
+++ b/config/alfresco/messages/webclient.properties
@@ -761,6 +761,44 @@ company_id=Company ID
home_space_location=Home Space Location
home_space_name=Home Space Name
+# Trashcan messages
+title_deleted_items=Deleted Items
+title_delete_all=Delete All Items
+title_recover_all=Recover All Items
+title_recover_listed=Recover Listed Items
+title_delete_listed=Delete Listed Items
+title_delete_item=Delete Item
+title_recover_item=Recover Item
+deleted_items=Deleted Items
+manage_deleted_items=Manage Deleted Items
+manage_deleted_items_description=Remove or recover previously deleted items
+recover_all_items=Recover All Items
+delete_all_items=Delete All Items
+deleted_items_info=Use the Search to find specific named deleted items and use the Filters to reduce the list.
+original_location=Original Location
+deleted_date=Date Deleted
+deleted_user=Deleted by User
+recover=Recover
+search_deleted_items=Search Deleted Items
+delete_item=Delete Item
+delete_item_info=Permanently delete an item from the deleted file store
+delete_item_confirm=Are you sure you want to permanently delete \"{0}\" from the deleted file store? The item cannot be recovered once this action has been performed.
+recover_item=Recover Item
+recover_item_info=Recover an item from the deleted file store
+recover_item_confirm=Are you sure you want to recover \"{0}\" from the deleted file store?
+delete_all_items=Delete All Items
+delete_all_items_info=Permanently delete all files and spaces from the deleted file store
+delete_all_items_confirm=Are you sure you want to permanently delete all files and spaces from the deleted file store? The items cannot be recovered once this action has been performed.
+recover_all_items=Recover All Items
+recover_all_items_info=Recover all files and spaces from the deleted file store
+recover_all_items_confirm=Are you sure you want to recover all the deleted files and spaces from the deleted file store?
+delete_listed_items=Delete Listed Items
+delete_listed_items_info=Permanently delete the listed files and spaces from the deleted file store
+delete_listed_items_confirm=Are you sure you want to permanently delete the listed deleted files and spaces from the deleted file store? The items cannot be recovered once this action has been performed.
+recover_listed_items=Recover Listed Items
+recover_listed_items_info=Recover the listed files and spaces from the deleted file store
+recover_listed_items_confirm=Are you sure you want to recover the listed deleted files and spaces from the deleted file store?
+
# Admin Console messages
title_admin_console=Administration Console
admin_console=Administration Console
diff --git a/config/alfresco/web-client-config-forum-actions.xml b/config/alfresco/web-client-config-forum-actions.xml
index b43f12eefc..e5c1f2eaa2 100644
--- a/config/alfresco/web-client-config-forum-actions.xml
+++ b/config/alfresco/web-client-config-forum-actions.xml
@@ -258,6 +258,7 @@
+
diff --git a/source/java/org/alfresco/web/app/servlet/BaseServlet.java b/source/java/org/alfresco/web/app/servlet/BaseServlet.java
index 2e8568a056..5f4a945015 100644
--- a/source/java/org/alfresco/web/app/servlet/BaseServlet.java
+++ b/source/java/org/alfresco/web/app/servlet/BaseServlet.java
@@ -75,6 +75,7 @@ public abstract class BaseServlet extends HttpServlet
validRedirectJSPs.add("/jsp/dialog/system-info.jsp");
validRedirectJSPs.add("/jsp/forums/forums.jsp");
validRedirectJSPs.add("/jsp/users/users.jsp");
+ validRedirectJSPs.add("/jsp/trashcan/trash-list.jsp");
}
private static Log logger = LogFactory.getLog(BaseServlet.class);
diff --git a/source/java/org/alfresco/web/bean/TrashcanBean.java b/source/java/org/alfresco/web/bean/TrashcanBean.java
new file mode 100644
index 0000000000..3e4882b9e2
--- /dev/null
+++ b/source/java/org/alfresco/web/bean/TrashcanBean.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2005 Alfresco, Inc.
+ *
+ * Licensed under the Mozilla Public License version 1.1
+ * with a permitted attribution clause. You may obtain a
+ * copy of the License at
+ *
+ * http://www.alfresco.org/legal/license.txt
+ *
+ * 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. See the License for the specific
+ * language governing permissions and limitations under the
+ * License.
+ */
+package org.alfresco.web.bean;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.search.SearchService;
+import org.alfresco.web.app.context.IContextListener;
+import org.alfresco.web.bean.repository.Node;
+import org.alfresco.web.ui.common.component.data.UIRichList;
+
+/**
+ * @author Kevin Roast
+ */
+public class TrashcanBean implements IContextListener
+{
+ /** NodeService bean reference */
+ protected NodeService nodeService;
+
+ /** SearchService bean reference */
+ protected SearchService searchService;
+
+ /** Component reference for Deleted Items RichList control */
+ protected UIRichList itemsRichList;
+
+ /** Search text */
+ private String searchText;
+
+
+ // ------------------------------------------------------------------------------
+ // Bean property getters and setters
+
+ /**
+ * @param nodeService The NodeService to set.
+ */
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ /**
+ * @param searchService the search service
+ */
+ public void setSearchService(SearchService searchService)
+ {
+ this.searchService = searchService;
+ }
+
+ /**
+ * @return Returns the itemsRichList.
+ */
+ public UIRichList getItemsRichList()
+ {
+ return this.itemsRichList;
+ }
+
+ /**
+ * @param itemsRichList The itemsRichList to set.
+ */
+ public void setItemsRichList(UIRichList itemsRichList)
+ {
+ this.itemsRichList = itemsRichList;
+ }
+
+ /**
+ * @return Returns the searchText.
+ */
+ public String getSearchText()
+ {
+ return this.searchText;
+ }
+
+ /**
+ * @param searchText The searchText to set.
+ */
+ public void setSearchText(String searchText)
+ {
+ this.searchText = searchText;
+ }
+
+ /**
+ * @return the list of deleted items to display
+ */
+ public List getItems()
+ {
+ // TODO: need the following MapNode properties:
+ // deletedDate, locationPath, displayPath, deletedUsername [only for admin user]
+ // TODO: get deleted items from deleted items store
+ // use a search - also use filters by name/username
+ return Collections.emptyList();
+ }
+
+
+ // ------------------------------------------------------------------------------
+ // Action handlers
+
+ // TODO:
+ // need the following navigation outcomes
+ // DONE deleteItem, recoverItem, recoverAllItems, deleteAllItems, recoverListedItems, deleteListedItems
+ // need the following Action Handlers:
+ // deleteItemOK, recoverItemOK, deleteAllItemsOK, recoverAllItemsOK, recoverListedItemsOK, deleteListedItemsOK
+ // and following Action Event Handlers:
+ // setupItemAction, search
+ // and following getters:
+ // listedItems, item (setup by setupItemAction!)
+
+
+ // ------------------------------------------------------------------------------
+ // IContextListener implementation
+
+ /**
+ * @see org.alfresco.web.app.context.IContextListener#contextUpdated()
+ */
+ public void contextUpdated()
+ {
+ if (this.itemsRichList != null)
+ {
+ this.itemsRichList.setValue(null);
+ }
+ }
+}
diff --git a/source/web/WEB-INF/faces-config-beans.xml b/source/web/WEB-INF/faces-config-beans.xml
index e80288e5d2..c1c8347aae 100644
--- a/source/web/WEB-INF/faces-config-beans.xml
+++ b/source/web/WEB-INF/faces-config-beans.xml
@@ -1394,6 +1394,23 @@
+
+
+ The bean that holds state for the Manage Deleted Items screen.
+
+ TrashcanBean
+ org.alfresco.web.bean.TrashcanBean
+ session
+
+ nodeService
+ #{NodeService}
+
+
+ searchService
+ #{SearchService}
+
+
+
Helper bean that caches the last item added to a multi
@@ -1404,8 +1421,8 @@
session
-
+
Bean that generates a text field component
diff --git a/source/web/WEB-INF/faces-config-navigation.xml b/source/web/WEB-INF/faces-config-navigation.xml
index a484145a45..4ba20bbf82 100644
--- a/source/web/WEB-INF/faces-config-navigation.xml
+++ b/source/web/WEB-INF/faces-config-navigation.xml
@@ -174,6 +174,10 @@
saveEditSearch
/jsp/dialog/edit-search.jsp
+
+ manageDeletedItems
+ /jsp/trashcan/trash-list.jsp
+
@@ -1153,5 +1157,34 @@
/jsp/forums/forum.jsp
+
+
+
+ /jsp/trashcan/*
+
+ deleteItem
+ /jsp/trashcan/delete-item.jsp
+
+
+ recoverItem
+ /jsp/trashcan/recover-item.jsp
+
+
+ recoverAllItems
+ /jsp/trashcan/recover-all.jsp
+
+
+ deleteAllItems
+ /jsp/trashcan/delete-all.jsp
+
+
+ recoverListedItems
+ /jsp/trashcan/recover-listed.jsp
+
+
+ deleteListedItems
+ /jsp/trashcan/delete-listed.jsp
+
+
diff --git a/source/web/images/icons/delete_all.gif b/source/web/images/icons/delete_all.gif
new file mode 100644
index 0000000000..4ee6ccfce4
Binary files /dev/null and b/source/web/images/icons/delete_all.gif differ
diff --git a/source/web/images/icons/delete_all_large.gif b/source/web/images/icons/delete_all_large.gif
new file mode 100644
index 0000000000..cfe75d348b
Binary files /dev/null and b/source/web/images/icons/delete_all_large.gif differ
diff --git a/source/web/images/icons/recover.gif b/source/web/images/icons/recover.gif
new file mode 100644
index 0000000000..c49ece5db0
Binary files /dev/null and b/source/web/images/icons/recover.gif differ
diff --git a/source/web/images/icons/recover_all.gif b/source/web/images/icons/recover_all.gif
new file mode 100644
index 0000000000..c49ece5db0
Binary files /dev/null and b/source/web/images/icons/recover_all.gif differ
diff --git a/source/web/images/icons/recover_all_large.gif b/source/web/images/icons/recover_all_large.gif
new file mode 100644
index 0000000000..035d076420
Binary files /dev/null and b/source/web/images/icons/recover_all_large.gif differ
diff --git a/source/web/images/icons/recover_large.gif b/source/web/images/icons/recover_large.gif
new file mode 100644
index 0000000000..035d076420
Binary files /dev/null and b/source/web/images/icons/recover_large.gif differ
diff --git a/source/web/images/icons/trashcan.gif b/source/web/images/icons/trashcan.gif
new file mode 100644
index 0000000000..4ee6ccfce4
Binary files /dev/null and b/source/web/images/icons/trashcan.gif differ
diff --git a/source/web/images/icons/trashcan_large.gif b/source/web/images/icons/trashcan_large.gif
new file mode 100644
index 0000000000..cfe75d348b
Binary files /dev/null and b/source/web/images/icons/trashcan_large.gif differ
diff --git a/source/web/jsp/users/users.jsp b/source/web/jsp/users/users.jsp
index 875eb30e9b..cec237c38e 100644
--- a/source/web/jsp/users/users.jsp
+++ b/source/web/jsp/users/users.jsp
@@ -144,11 +144,11 @@
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "yellowInner"); %>
-
+
-
+