KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > action > core > contentResource > ListContentResourcesAction


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package com.blandware.atleap.webapp.action.core.contentResource;
17
18 import com.blandware.atleap.common.Constants;
19 import com.blandware.atleap.common.util.Folder;
20 import com.blandware.atleap.common.util.FolderList;
21 import com.blandware.atleap.common.util.PartialCollection;
22 import com.blandware.atleap.common.util.QueryInfo;
23 import com.blandware.atleap.common.util.RegExUtil;
24 import com.blandware.atleap.model.core.ContentResource;
25 import com.blandware.atleap.service.core.ContentResourceManager;
26 import com.blandware.atleap.service.core.LookupManager;
27 import com.blandware.atleap.webapp.action.core.grid.BaseGridAction;
28 import com.blandware.atleap.webapp.taglib.core.grid.util.FilterConditions;
29 import com.blandware.atleap.webapp.taglib.core.grid.util.Grid;
30 import com.blandware.atleap.webapp.taglib.core.grid.util.StringFilter;
31 import com.blandware.atleap.webapp.util.core.*;
32 import org.apache.oro.text.regex.MatchResult;
33 import org.apache.oro.text.regex.Pattern;
34 import org.apache.oro.text.regex.PatternCompiler;
35 import org.apache.oro.text.regex.PatternMatcher;
36 import org.apache.oro.text.regex.Perl5Compiler;
37 import org.apache.oro.text.regex.Perl5Matcher;
38 import org.apache.struts.action.ActionForm;
39 import org.apache.struts.action.ActionForward;
40 import org.apache.struts.action.ActionMapping;
41
42 import javax.servlet.http.HttpServletRequest JavaDoc;
43 import javax.servlet.http.HttpServletResponse JavaDoc;
44 import java.util.ArrayList JavaDoc;
45 import java.util.HashMap JavaDoc;
46 import java.util.Iterator JavaDoc;
47 import java.util.LinkedList JavaDoc;
48 import java.util.List JavaDoc;
49 import java.util.Map JavaDoc;
50 import java.util.SortedSet JavaDoc;
51 import java.util.TreeSet JavaDoc;
52
53 /**
54  * <p>Forwards to the page with list of content resources
55  * </p>
56  * <p><a HREF="ListContentResourcesAction.java.htm"><i>View Source</i></a></p>
57  * <p/>
58  *
59  * @author Andrey Grebnev <a HREF="mailto:andrey.grebnev@blandware.com">&lt;andrey.grebnev@blandware.com&gt;</a>
60  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
61  * @version $Revision: 1.22 $ $Date: 2006/03/10 17:10:21 $
62  * @struts.action path="/core/contentResource/list"
63  * roles="core-contentResource-list"
64  * validate="false"
65  * @struts.action-forward name="listContentResources"
66  * path=".core.contentResource.list"
67  */

68 public final class ListContentResourcesAction extends BaseGridAction {
69     /**
70      * @param mapping The ActionMapping used to select this instance
71      * @param form The optional ActionForm bean for this request (if any)
72      * @param request The HTTP request we are proceeding
73      * @param response The HTTP response we are creating
74      * @return an ActionForward instance describing where and how
75      * control should be forwarded, or null if response
76      * has already been completed
77      */

78     public ActionForward execute(ActionMapping mapping, ActionForm form,
79                                  HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
80
81         String JavaDoc currentFolder = "";
82         if ( request.getParameter("currentFolder") != null ) {
83             currentFolder = request.getParameter("currentFolder");
84             request.getSession().setAttribute(WebappConstants.CONTENT_RESOURCES_CURRENT_PATH_KEY, currentFolder);
85         } else if ( request.getSession().getAttribute(WebappConstants.CONTENT_RESOURCES_CURRENT_PATH_KEY) != null ) {
86             currentFolder = (String JavaDoc) request.getSession().getAttribute(WebappConstants.CONTENT_RESOURCES_CURRENT_PATH_KEY);
87         }
88
89         if ( currentFolder == null || currentFolder.equals("/") ) {
90             currentFolder = "";
91         }
92
93         // ensure, that current folder starts with slash and does not end with slash
94
if ( currentFolder.length() > 0 ) {
95             if ( !currentFolder.startsWith("/") ) {
96                 currentFolder = "/" + currentFolder;
97             }
98             if ( currentFolder.endsWith("/") ) {
99                 currentFolder = currentFolder.substring(0, currentFolder.length() - 1);
100             }
101         }
102
103         // get all content resources, which exist in surrent folder
104

105         StringFilter uriFilter = new StringFilter("r.uri");
106         uriFilter.createFirstClause(FilterConditions.STRING_STARTS_WITH, Constants.RESOURCES_URI_PREFIX + currentFolder + "/");
107
108         Grid crGrid = getGridByName(WebappConstants.CONTENT_RESOURCES_GRID, request.getSession());
109         if ( crGrid == null ) {
110             crGrid = new Grid(WebappConstants.CONTENT_RESOURCES_GRID);
111         }
112
113         crGrid.addFilter(uriFilter);
114
115         saveGrid(crGrid, request.getSession());
116
117         QueryInfo queryInfo = new QueryInfo();
118         queryInfo.setWhereClause(crGrid.getWhereClause());
119
120         ContentResourceManager contentResourceManager = (ContentResourceManager) getBean(Constants.CONTENT_RESOURCE_MANAGER_BEAN);
121         PartialCollection contentResources = contentResourceManager.listContentResources(queryInfo);
122
123         // we have list of action resources which are all placed in current folder
124
// we only need to divide acquired set to subfolders and resources
125
// we need regular expression in order to do it:
126
String JavaDoc folderPatternString = "(" + RegExUtil.escapeMetasymbols(Constants.RESOURCES_URI_PREFIX + currentFolder) + ")";
127         folderPatternString += "\\/([^\\/]+)(\\/[^\\/]+)+";
128
129         // pattern compiler instance to use
130
PatternCompiler compiler = new Perl5Compiler();
131
132         // compiled patterns
133
Pattern folderPattern = compiler.compile(folderPatternString);
134
135         // pattern matcher instance to use
136
PatternMatcher matcher = new Perl5Matcher();
137
138         // list of folders
139
SortedSet JavaDoc folderSet = new TreeSet JavaDoc();
140
141         // list of resources
142
List resources = new ArrayList JavaDoc();
143
144         for ( Iterator JavaDoc i = contentResources.iterator(); i.hasNext(); ) {
145             ContentResource contentResource = (ContentResource) i.next();
146             String JavaDoc uri = contentResource.getUri();
147
148             // check folder name
149
if ( matcher.matches(uri, folderPattern) ) {
150                 MatchResult result = matcher.getMatch();
151
152                 // according to pattern, folder name is in second group
153
Folder folder = new VirtualFolder(result.group(2), currentFolder, '/');
154                 folderSet.add(folder);
155
156             } else {
157                 // add resource to list
158
ContentResource tmp = new ContentResource();
159                 WebappUtil.copyProperties(tmp, contentResource, request);
160                 int prefixLength = Constants.RESOURCES_URI_PREFIX.length();
161                 uri = uri.substring(prefixLength);
162                 tmp.setUri(uri.substring(currentFolder.length() + 1));
163                 resources.add(tmp);
164             }
165         }
166
167         // create parent folder if current folder is not the root folder
168
Folder parentFolder = null;
169         if ( currentFolder.length() > 0 ) {
170             int k = currentFolder.lastIndexOf("/");
171             if ( k < 0 ) {
172                 k = 0;
173             }
174             String JavaDoc parentFolderPath = currentFolder.substring(0, k);
175             parentFolder = new VirtualFolder("..", parentFolderPath, '/');
176         }
177
178         LinkedList JavaDoc folders = new LinkedList JavaDoc(folderSet);
179         if ( parentFolder != null ) {
180             folders.addFirst(parentFolder);
181         }
182
183         request.setAttribute(WebappConstants.CONTENT_RESOURCES_COLLECTION_KEY, resources);
184         request.setAttribute(WebappConstants.FOLDERS_COLLECTION_KEY, folders);
185         request.setAttribute(WebappConstants.CURRENT_PATH_KEY, new FolderList(VirtualFolder.splitPath(currentFolder)));
186
187         // get list of types
188
LookupManager lookupManager = (LookupManager) getBean(Constants.LOOKUP_MANAGER_BEAN);
189         ResourceTypesManager typesManager = ResourceTypesManager.getInstance(servlet.getServletContext());
190
191         List contentResourceTypes = lookupManager.listContentResourceTypes();
192         Map JavaDoc localizedTypes = new HashMap JavaDoc();
193         for ( Iterator JavaDoc i = contentResourceTypes.iterator(); i.hasNext(); ) {
194             String JavaDoc type = (String JavaDoc) i.next();
195             String JavaDoc localizedType = ApplicationResources.getInstance(servlet.getServletContext()).getMessage(request, typesManager.getResourceTypeNameKey(type));
196
197             localizedTypes.put(type, localizedType);
198         }
199
200         request.setAttribute(WebappConstants.RESOURCE_TYPES_COLLECTION_KEY, localizedTypes);
201
202         saveToken(request);
203         return mapping.findForward("listContentResources");
204     }
205 }
Popular Tags