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.CmsProject; 37 import org.opencms.file.CmsProperty; 38 import org.opencms.file.CmsResource; 39 import org.opencms.file.CmsResourceFilter; 40 import org.opencms.main.CmsException; 41 42 import java.util.ArrayList ; 43 import java.util.Arrays ; 44 import java.util.Collections ; 45 import java.util.Iterator ; 46 import java.util.List ; 47 48 60 public class CmsPriorityResourceCollector extends A_CmsResourceCollector { 61 62 63 public static final int PRIORITY_STANDARD = 3; 64 65 66 public static final String PROPERTY_CHANNEL = "collector.channel"; 67 68 69 public static final String PROPERTY_PRIORITY = "collector.priority"; 70 71 72 private static final String [] COLLECTORS = { 73 "allInFolderPriorityDateAsc", 74 "allInSubTreePriorityDateAsc", 75 "allInFolderPriorityDateDesc", 76 "allInSubTreePriorityDateDesc", 77 "allInFolderPriorityTitleDesc", 78 "allInSubTreePriorityTitleDesc", 79 "allMappedToUriPriorityDateAsc", 80 "allMappedToUriPriorityDateDesc"}; 81 82 83 private static final List COLLECTORS_LIST = Collections.unmodifiableList(Arrays.asList(COLLECTORS)); 84 85 88 public List getCollectorNames() { 89 90 return COLLECTORS_LIST; 91 } 92 93 96 public String getCreateLink(CmsObject cms, String collectorName, String param) throws CmsException { 97 98 if (collectorName == null) { 100 collectorName = COLLECTORS[1]; 101 } 102 103 switch (COLLECTORS_LIST.indexOf(collectorName)) { 104 case 0: 105 case 2: 106 case 4: 107 return getCreateInFolder(cms, param); 109 case 1: 110 case 3: 111 case 5: 112 case 6: 113 case 7: 114 return null; 117 default: 118 throw new CmsDataAccessException(Messages.get().container( 119 Messages.ERR_COLLECTOR_NAME_INVALID_1, 120 collectorName)); 121 } 122 } 123 124 127 public String getCreateParam(CmsObject cms, String collectorName, String param) throws CmsDataAccessException { 128 129 if (collectorName == null) { 131 collectorName = COLLECTORS[1]; 132 } 133 134 switch (COLLECTORS_LIST.indexOf(collectorName)) { 135 case 0: 136 case 2: 137 case 4: 138 return param; 140 case 1: 141 case 3: 142 case 5: 143 case 6: 144 case 7: 145 return null; 148 default: 149 throw new CmsDataAccessException(Messages.get().container( 150 Messages.ERR_COLLECTOR_NAME_INVALID_1, 151 collectorName)); 152 } 153 } 154 155 158 public List getResults(CmsObject cms, String collectorName, String param) 159 throws CmsException, CmsDataAccessException { 160 161 if (collectorName == null) { 163 collectorName = COLLECTORS[0]; 164 } 165 166 switch (COLLECTORS_LIST.indexOf(collectorName)) { 167 168 case 0: 169 return allInFolderPriorityDate(cms, param, false, true); 171 case 1: 172 return allInFolderPriorityDate(cms, param, true, true); 174 case 2: 175 return allInFolderPriorityDate(cms, param, false, false); 177 case 3: 178 return allInFolderPriorityDate(cms, param, true, false); 180 case 4: 181 return allInFolderPriorityTitle(cms, param, false); 183 case 5: 184 return allInFolderPriorityTitle(cms, param, true); 186 case 6: 187 return allMappedToUriPriorityDate(cms, param, true); 189 case 7: 190 return allMappedToUriPriorityDate(cms, param, false); 192 default: 193 throw new CmsDataAccessException(Messages.get().container( 194 Messages.ERR_COLLECTOR_NAME_INVALID_1, 195 collectorName)); 196 } 197 198 } 199 200 212 protected List allInFolderPriorityDate(CmsObject cms, String param, boolean tree, boolean asc) throws CmsException { 213 214 CmsCollectorData data = new CmsCollectorData(param); 215 String foldername = CmsResource.getFolderPath(data.getFileName()); 216 217 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(data.getType()).addExcludeFlags( 218 CmsResource.FLAG_TEMPFILE); 219 List result = cms.readResources(foldername, filter, tree); 220 221 CmsPriorityDateResourceComparator comparator = new CmsPriorityDateResourceComparator(cms, asc); 223 Collections.sort(result, comparator); 224 225 return shrinkToFit(result, data.getCount()); 226 } 227 228 239 protected List allInFolderPriorityTitle(CmsObject cms, String param, boolean tree) throws CmsException { 240 241 CmsCollectorData data = new CmsCollectorData(param); 242 String foldername = CmsResource.getFolderPath(data.getFileName()); 243 244 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(data.getType()).addExcludeFlags( 245 CmsResource.FLAG_TEMPFILE); 246 List result = cms.readResources(foldername, filter, tree); 247 248 CmsPriorityTitleResourceComparator comparator = new CmsPriorityTitleResourceComparator(cms); 250 Collections.sort(result, comparator); 251 252 return shrinkToFit(result, data.getCount()); 253 } 254 255 267 protected List allMappedToUriPriorityDate(CmsObject cms, String param, boolean asc) throws CmsException { 268 269 CmsCollectorData data = new CmsCollectorData(param); 270 String foldername = CmsResource.getFolderPath(data.getFileName()); 271 272 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(data.getType()).addExcludeFlags( 273 CmsResource.FLAG_TEMPFILE); 274 275 List result = cms.readResources(foldername, filter, true); 276 List mapped = new ArrayList (); 277 278 Iterator i = result.iterator(); 280 while (i.hasNext()) { 281 CmsResource res = (CmsResource)i.next(); 282 CmsProperty prop = cms.readPropertyObject(res, PROPERTY_CHANNEL, false); 284 if (!prop.isNullProperty()) { 285 if (CmsProject.isInsideProject(prop.getValueList(), cms.getRequestContext().getSiteRoot() 286 + cms.getRequestContext().getUri())) { 287 mapped.add(res); 288 } 289 } 290 } 291 292 if (mapped.isEmpty()) { 293 return mapped; 295 } 296 297 CmsPriorityDateResourceComparator comparator = new CmsPriorityDateResourceComparator(cms, asc); 299 Collections.sort(mapped, comparator); 300 301 return shrinkToFit(mapped, data.getCount()); 302 } 303 } | Popular Tags |