1 16 package com.blandware.atleap.webapp.action.core.browser; 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.ContentImage; 25 import com.blandware.atleap.service.core.ContentResourceManager; 26 import com.blandware.atleap.webapp.action.core.grid.BaseGridAction; 27 import com.blandware.atleap.webapp.taglib.core.grid.util.FilterConditions; 28 import com.blandware.atleap.webapp.taglib.core.grid.util.Grid; 29 import com.blandware.atleap.webapp.taglib.core.grid.util.StringFilter; 30 import com.blandware.atleap.webapp.util.core.VirtualFolder; 31 import com.blandware.atleap.webapp.util.core.WebappConstants; 32 import com.blandware.atleap.webapp.util.core.WebappUtil; 33 import org.apache.oro.text.regex.MatchResult; 34 import org.apache.oro.text.regex.Pattern; 35 import org.apache.oro.text.regex.PatternCompiler; 36 import org.apache.oro.text.regex.PatternMatcher; 37 import org.apache.oro.text.regex.Perl5Compiler; 38 import org.apache.oro.text.regex.Perl5Matcher; 39 import org.apache.struts.action.ActionForm; 40 import org.apache.struts.action.ActionForward; 41 import org.apache.struts.action.ActionMapping; 42 43 import javax.servlet.http.HttpServletRequest ; 44 import javax.servlet.http.HttpServletResponse ; 45 import java.util.ArrayList ; 46 import java.util.HashMap ; 47 import java.util.Iterator ; 48 import java.util.LinkedList ; 49 import java.util.List ; 50 import java.util.Map ; 51 import java.util.SortedSet ; 52 import java.util.TreeSet ; 53 54 68 public final class BrowseImagesAction extends BaseGridAction { 69 70 79 public ActionForward execute(ActionMapping mapping, ActionForm form, 80 HttpServletRequest request, HttpServletResponse response) throws Exception { 81 82 String currentFolder = ""; 83 if ( request.getParameter("currentFolder") != null ) { 84 currentFolder = request.getParameter("currentFolder"); 85 request.getSession().setAttribute(WebappConstants.CONTENT_RESOURCES_CURRENT_PATH_KEY, currentFolder); 86 } else if ( request.getSession().getAttribute(WebappConstants.CONTENT_RESOURCES_CURRENT_PATH_KEY) != null ) { 87 currentFolder = (String ) request.getSession().getAttribute(WebappConstants.CONTENT_RESOURCES_CURRENT_PATH_KEY); 88 } 89 90 if ( currentFolder == null || currentFolder.equals("/") ) { 91 currentFolder = ""; 92 } 93 94 if ( currentFolder.length() > 0 ) { 96 if ( !currentFolder.startsWith("/") ) { 97 currentFolder = "/" + currentFolder; 98 } 99 if ( currentFolder.endsWith("/") ) { 100 currentFolder = currentFolder.substring(0, currentFolder.length() - 1); 101 } 102 } 103 104 106 StringFilter uriFilter = new StringFilter("r.uri"); 107 uriFilter.createFirstClause(FilterConditions.STRING_STARTS_WITH, Constants.RESOURCES_URI_PREFIX + currentFolder + "/"); 108 109 Grid crGrid = getGridByName(WebappConstants.BROWSE_IMAGES_GRID, request.getSession()); 110 if ( crGrid == null ) { 111 crGrid = new Grid(WebappConstants.BROWSE_IMAGES_GRID); 112 } 113 114 crGrid.addFilter(uriFilter); 115 116 saveGrid(crGrid, request.getSession()); 117 118 QueryInfo queryInfo = new QueryInfo(); 119 queryInfo.setWhereClause(crGrid.getWhereClause()); 120 121 Map queryParameters = new HashMap (); 122 queryParameters.put("contentImageType", Constants.RESOURCE_TYPE_IMAGE); 123 queryInfo.setQueryParameters(queryParameters); 124 125 ContentResourceManager contentResourceManager = (ContentResourceManager) getBean(Constants.CONTENT_RESOURCE_MANAGER_BEAN); 126 PartialCollection contentImages = contentResourceManager.listContentImages(queryInfo); 127 128 String folderPatternString = "(" + RegExUtil.escapeMetasymbols(Constants.RESOURCES_URI_PREFIX + currentFolder) + ")"; 132 folderPatternString += "\\/([^\\/]+)(\\/[^\\/]+)+"; 133 134 PatternCompiler compiler = new Perl5Compiler(); 136 137 Pattern folderPattern = compiler.compile(folderPatternString); 139 140 PatternMatcher matcher = new Perl5Matcher(); 142 143 SortedSet folderSet = new TreeSet (); 145 146 List images = new ArrayList (); 148 149 for ( Iterator i = contentImages.iterator(); i.hasNext(); ) { 150 ContentImage contentImage = (ContentImage) i.next(); 151 String uri = contentImage.getUri(); 152 153 if ( matcher.matches(uri, folderPattern) ) { 155 MatchResult result = matcher.getMatch(); 156 157 Folder folder = new VirtualFolder(result.group(2), currentFolder, '/'); 159 folderSet.add(folder); 160 161 } else { 162 ContentImage tmp = new ContentImage(); 164 WebappUtil.copyProperties(tmp, contentImage, request); 165 int prefixLength = Constants.RESOURCES_URI_PREFIX.length(); 166 uri = uri.substring(prefixLength); 167 tmp.setUri(uri.substring(currentFolder.length() + 1)); 168 images.add(tmp); 169 } 170 } 171 172 Folder parentFolder = null; 174 if ( currentFolder.length() > 0 ) { 175 int k = currentFolder.lastIndexOf("/"); 176 if ( k < 0 ) { 177 k = 0; 178 } 179 String parentFolderPath = currentFolder.substring(0, k); 180 parentFolder = new VirtualFolder("..", parentFolderPath, '/'); 181 } 182 183 LinkedList folders = new LinkedList (folderSet); 184 if ( parentFolder != null ) { 185 folders.addFirst(parentFolder); 186 } 187 188 request.setAttribute(WebappConstants.BROWSER_IMAGES_COLLECTION_KEY, images); 189 request.setAttribute(WebappConstants.FOLDERS_COLLECTION_KEY, folders); 190 191 request.setAttribute(WebappConstants.CURRENT_PATH_KEY, new FolderList(VirtualFolder.splitPath(currentFolder))); 192 193 String inputId = request.getParameter("inputId"); 194 if ( inputId != null && inputId.length() != 0 ) { 195 request.getSession().setAttribute(WebappConstants.HTML_INPUT_TAG_ID_KEY, inputId); 196 } 197 198 return mapping.findForward("showBrowser"); 199 200 } 201 202 } | Popular Tags |