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.main.CmsException; 39 import org.opencms.main.CmsIllegalArgumentException; 40 import org.opencms.util.CmsMacroResolver; 41 import org.opencms.util.PrintfFormat; 42 import org.opencms.workplace.CmsWorkplace; 43 44 import java.util.ArrayList ; 45 import java.util.List ; 46 47 56 public abstract class A_CmsResourceCollector implements I_CmsResourceCollector { 57 58 59 private static final String MACRO_NUMBER = "number"; 60 61 62 private static final PrintfFormat NUMBER_FORMAT = new PrintfFormat("%0.4d"); 63 64 65 protected int m_order; 66 67 68 private String m_defaultCollectorName; 69 70 71 private String m_defaultCollectorParam; 72 73 74 private int m_hashcode; 75 76 79 public A_CmsResourceCollector() { 80 81 m_hashcode = getClass().getName().hashCode(); 82 } 83 84 87 public int compareTo(Object obj) { 88 89 if (obj == this) { 90 return 0; 91 } 92 if (obj instanceof I_CmsResourceCollector) { 93 return getOrder() - ((I_CmsResourceCollector)obj).getOrder(); 94 } 95 return 0; 96 } 97 98 104 public boolean equals(Object obj) { 105 106 if (obj == this) { 107 return true; 108 } 109 if (obj instanceof I_CmsResourceCollector) { 110 return getClass().getName().equals(obj.getClass().getName()); 111 } 112 return false; 113 } 114 115 118 public String getCreateLink(CmsObject cms) throws CmsException, CmsDataAccessException { 119 120 checkParams(); 121 return getCreateLink(cms, getDefaultCollectorName(), getDefaultCollectorParam()); 122 } 123 124 127 public String getCreateParam(CmsObject cms) throws CmsDataAccessException { 128 129 checkParams(); 130 return getCreateParam(cms, getDefaultCollectorName(), getDefaultCollectorParam()); 131 } 132 133 136 public String getDefaultCollectorName() { 137 138 return m_defaultCollectorName; 139 } 140 141 144 public String getDefaultCollectorParam() { 145 146 return m_defaultCollectorParam; 147 } 148 149 152 public int getOrder() { 153 154 return m_order; 155 } 156 157 160 public List getResults(CmsObject cms) throws CmsDataAccessException, CmsException { 161 162 checkParams(); 163 return getResults(cms, getDefaultCollectorName(), getDefaultCollectorParam()); 164 } 165 166 169 public int hashCode() { 170 171 return m_hashcode; 172 } 173 174 177 public void setDefaultCollectorName(String collectorName) { 178 179 m_defaultCollectorName = collectorName; 180 } 181 182 185 public void setDefaultCollectorParam(String param) { 186 187 m_defaultCollectorParam = param; 188 } 189 190 193 public void setOrder(int order) { 194 195 m_order = order; 196 } 197 198 204 protected void checkParams() { 205 206 if ((m_defaultCollectorName == null) || (m_defaultCollectorParam == null)) { 207 throw new CmsIllegalArgumentException(Messages.get().container( 208 Messages.ERR_COLLECTOR_DEFAULTS_INVALID_2, 209 m_defaultCollectorName, 210 m_defaultCollectorParam)); 211 } 212 } 213 214 224 protected String getCreateInFolder(CmsObject cms, String param) throws CmsException { 225 226 CmsCollectorData data = new CmsCollectorData(param); 227 228 String foldername = CmsResource.getFolderPath(data.getFileName()); 229 230 List resources = cms.readResources(foldername, CmsResourceFilter.ALL, false); 232 233 List result = new ArrayList (resources.size()); 235 for (int i = 0; i < resources.size(); i++) { 236 CmsResource resource = (CmsResource)resources.get(i); 237 result.add(resource.getRootPath()); 238 } 239 240 String fileName = cms.getRequestContext().addSiteRoot(data.getFileName()); 241 int fileNameLength = fileName.length(); 242 String checkFileName; 243 String checkName; 244 StringBuffer checkTempFileName; 245 String number; 246 CmsMacroResolver resolver = CmsMacroResolver.newInstance(); 247 248 int j = 0; 249 do { 250 number = NUMBER_FORMAT.sprintf(++j); 251 resolver.addMacro(MACRO_NUMBER, number); 252 checkFileName = resolver.resolveMacros(fileName); 253 checkName = CmsResource.getName(checkFileName); 255 checkTempFileName = new StringBuffer (fileNameLength); 257 checkTempFileName.append(CmsResource.getFolderPath(checkFileName)); 258 checkTempFileName.append(CmsWorkplace.TEMP_FILE_PREFIX); 259 checkTempFileName.append(checkName); 260 } while (result.contains(checkFileName) || result.contains(checkTempFileName.toString())); 261 262 return cms.getRequestContext().removeSiteRoot(checkFileName); 263 } 264 265 273 protected List shrinkToFit(List result, int maxSize) { 274 275 if ((maxSize > 0) && (result.size() > maxSize)) { 276 result = result.subList(0, maxSize); 278 } 279 280 return result; 281 } 282 } | Popular Tags |