1 31 32 package org.opencms.file.collectors; 33 34 import org.opencms.file.CmsDataAccessException; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.CmsResourceFilter; 38 import org.opencms.jsp.CmsJspNavBuilder; 39 import org.opencms.jsp.CmsJspNavElement; 40 import org.opencms.main.CmsException; 41 import org.opencms.main.CmsIllegalArgumentException; 42 import org.opencms.main.CmsLog; 43 44 import java.util.ArrayList ; 45 import java.util.Arrays ; 46 import java.util.Collections ; 47 import java.util.HashMap ; 48 import java.util.List ; 49 import java.util.Map ; 50 51 import org.apache.commons.logging.Log; 52 53 63 public class CmsDefaultResourceCollector extends A_CmsResourceCollector { 64 65 66 private static final String [] COLLECTORS = { 67 "singleFile", 68 "allInFolder", 69 "allInFolderDateReleasedDesc", 70 "allInFolderNavPos", 71 "allInSubTree", 72 "allInSubTreeDateReleasedDesc", 73 "allInSubTreeNavPos"}; 74 75 76 private static final List COLLECTORS_LIST = Collections.unmodifiableList(Arrays.asList(COLLECTORS)); 77 78 79 private static final Log LOG = CmsLog.getLog(CmsDefaultResourceCollector.class); 80 81 84 public List getCollectorNames() { 85 86 return COLLECTORS_LIST; 87 } 88 89 92 public String getCreateLink(CmsObject cms, String collectorName, String param) 93 throws CmsDataAccessException, CmsException { 94 95 if (collectorName == null) { 97 collectorName = COLLECTORS[0]; 98 } 99 100 switch (COLLECTORS_LIST.indexOf(collectorName)) { 101 case 0: 102 return null; 104 case 1: 105 case 2: 107 case 3: 109 return getCreateInFolder(cms, param); 111 case 4: 112 case 5: 114 case 6: 116 return null; 118 default: 119 throw new CmsDataAccessException(Messages.get().container( 120 Messages.ERR_COLLECTOR_NAME_INVALID_1, 121 collectorName)); 122 } 123 } 124 125 128 public String getCreateParam(CmsObject cms, String collectorName, String param) throws CmsDataAccessException { 129 130 if (collectorName == null) { 132 collectorName = COLLECTORS[0]; 133 } 134 135 switch (COLLECTORS_LIST.indexOf(collectorName)) { 136 case 0: 137 return null; 139 case 1: 140 case 2: 142 case 3: 144 return param; 146 case 4: 147 case 5: 149 case 6: 151 return null; 153 default: 154 throw new CmsDataAccessException(Messages.get().container( 155 Messages.ERR_COLLECTOR_NAME_INVALID_1, 156 collectorName)); 157 } 158 } 159 160 163 public List getResults(CmsObject cms, String collectorName, String param) 164 throws CmsDataAccessException, CmsException { 165 166 if (collectorName == null) { 168 collectorName = COLLECTORS[0]; 169 } 170 171 switch (COLLECTORS_LIST.indexOf(collectorName)) { 172 case 0: 173 return getSingleFile(cms, param); 175 case 1: 176 return getAllInFolder(cms, param, false); 178 case 2: 179 return allInFolderDateReleasedDesc(cms, param, false); 181 case 3: 182 return allInFolderNavPos(cms, param, false); 184 case 4: 185 return getAllInFolder(cms, param, true); 187 case 5: 188 return allInFolderDateReleasedDesc(cms, param, true); 190 case 6: 191 return allInFolderNavPos(cms, param, true); 193 default: 194 throw new CmsDataAccessException(Messages.get().container( 195 Messages.ERR_COLLECTOR_NAME_INVALID_1, 196 collectorName)); 197 } 198 } 199 200 213 protected List allInFolderDateReleasedDesc(CmsObject cms, String param, boolean tree) throws CmsException { 214 215 CmsCollectorData data = new CmsCollectorData(param); 216 String foldername = CmsResource.getFolderPath(data.getFileName()); 217 218 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(data.getType()).addExcludeFlags( 219 CmsResource.FLAG_TEMPFILE); 220 List result = cms.readResources(foldername, filter, tree); 221 222 Collections.sort(result, CmsResource.COMPARE_DATE_RELEASED); 223 224 return shrinkToFit(result, data.getCount()); 225 } 226 227 237 protected List allInFolderNavPos(CmsObject cms, String param, boolean readSubTree) throws CmsException { 238 239 CmsCollectorData data = new CmsCollectorData(param); 240 String foldername = CmsResource.getFolderPath(data.getFileName()); 241 242 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(data.getType()).addExcludeFlags( 243 CmsResource.FLAG_TEMPFILE); 244 List foundResources = cms.readResources(foldername, filter, readSubTree); 245 246 Map navElementMap = new HashMap (); 249 for (int i = 0, n = foundResources.size(); i < n; i++) { 250 251 CmsResource resource = (CmsResource)foundResources.get(i); 252 CmsJspNavElement navElement = CmsJspNavBuilder.getNavigationForResource(cms, cms.getSitePath(resource)); 253 254 if (navElement != null && navElement.getNavPosition() != Float.MAX_VALUE) { 256 navElementMap.put(navElement, resource); 257 } else if (LOG.isInfoEnabled()) { 258 LOG.info(Messages.get().getBundle().key(Messages.LOG_RESOURCE_WITHOUT_NAVPROP_1, navElement.getResourceName())); 261 } 262 } 263 264 List result = null; 265 if (navElementMap.size() == foundResources.size()) { 266 List navElementList = new ArrayList (navElementMap.keySet()); 270 result = new ArrayList (); 271 272 Collections.sort(navElementList); 273 for (int i = 0, n = navElementList.size(); i < n; i++) { 274 275 CmsJspNavElement navElement = (CmsJspNavElement)navElementList.get(i); 276 result.add(navElementMap.get(navElement)); 277 } 278 } else { 279 result = foundResources; 282 Collections.sort(result, CmsResource.COMPARE_DATE_RELEASED); 283 } 284 285 return shrinkToFit(result, data.getCount()); 286 } 287 288 301 protected List getAllInFolder(CmsObject cms, String param, boolean tree) 302 throws CmsException, CmsIllegalArgumentException { 303 304 CmsCollectorData data = new CmsCollectorData(param); 305 String foldername = CmsResource.getFolderPath(data.getFileName()); 306 307 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(data.getType()).addExcludeFlags( 308 CmsResource.FLAG_TEMPFILE); 309 List result = cms.readResources(foldername, filter, tree); 310 311 Collections.sort(result, CmsResource.COMPARE_ROOT_PATH); 312 Collections.reverse(result); 313 314 return shrinkToFit(result, data.getCount()); 315 } 316 317 327 protected List getSingleFile(CmsObject cms, String param) throws CmsException { 328 329 if ((param == null) || (cms == null)) { 330 throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_COLLECTOR_PARAM_SINGLE_FILE_0)); 331 } 332 333 ArrayList result = new ArrayList (1); 335 result.add(cms.readFile(param)); 336 return result; 337 } 338 } | Popular Tags |