1 31 32 package org.opencms.file.types; 33 34 import org.opencms.db.CmsSecurityManager; 35 import org.opencms.file.CmsDataNotImplementedException; 36 import org.opencms.file.CmsObject; 37 import org.opencms.file.CmsResource; 38 import org.opencms.file.CmsResourceFilter; 39 import org.opencms.file.CmsVfsException; 40 import org.opencms.main.CmsException; 41 import org.opencms.main.CmsIllegalArgumentException; 42 import org.opencms.main.OpenCms; 43 import org.opencms.security.CmsPermissionSet; 44 import org.opencms.util.CmsStringUtil; 45 46 import java.util.HashSet ; 47 import java.util.List ; 48 import java.util.Set ; 49 50 59 public abstract class A_CmsResourceTypeFolderBase extends A_CmsResourceType { 60 61 64 public A_CmsResourceTypeFolderBase() { 65 66 super(); 67 } 68 69 72 public void changeLastModifiedProjectId(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource) 73 throws CmsException { 74 75 List resources = securityManager.readChildResources( 77 cms.getRequestContext(), 78 resource, 79 CmsResourceFilter.ALL, 80 true, 81 true); 82 83 super.changeLastModifiedProjectId(cms, securityManager, resource); 85 86 for (int i = 0; i < resources.size(); i++) { 88 CmsResource childResource = (CmsResource)resources.get(i); 89 if (childResource.isFolder()) { 90 changeLastModifiedProjectId(cms, securityManager, childResource); 92 } else { 93 getResourceType(childResource.getTypeId()).changeLastModifiedProjectId( 95 cms, 96 securityManager, 97 childResource); 98 } 99 } 100 } 101 102 105 public void chtype(CmsObject cms, CmsSecurityManager securityManager, CmsResource filename, int newType) 106 throws CmsException, CmsDataNotImplementedException { 107 108 if (!OpenCms.getResourceManager().getResourceType(newType).isFolder()) { 109 throw new CmsDataNotImplementedException(Messages.get().container( 111 Messages.ERR_CHTYPE_FOLDER_1, 112 cms.getSitePath(filename))); 113 } 114 super.chtype(cms, securityManager, filename, newType); 115 } 116 117 120 public void copyResource( 121 CmsObject cms, 122 CmsSecurityManager securityManager, 123 CmsResource source, 124 String destination, 125 int siblingMode) throws CmsIllegalArgumentException, CmsException { 126 127 destination = validateFoldername(destination); 129 130 List resources = securityManager.readChildResources( 132 cms.getRequestContext(), 133 source, 134 CmsResourceFilter.IGNORE_EXPIRATION, 135 true, 136 true); 137 138 super.copyResource(cms, securityManager, source, destination, siblingMode); 140 141 for (int i = 0; i < resources.size(); i++) { 143 CmsResource childResource = (CmsResource)resources.get(i); 144 String childDestination = destination.concat(childResource.getName()); 145 if (childResource.isFolder()) { 146 copyResource(cms, securityManager, childResource, childDestination, siblingMode); 148 } else { 149 getResourceType(childResource.getTypeId()).copyResource( 151 cms, 152 securityManager, 153 childResource, 154 childDestination, 155 siblingMode); 156 } 157 } 158 } 159 160 163 public CmsResource createResource( 164 CmsObject cms, 165 CmsSecurityManager securityManager, 166 String resourcename, 167 byte[] content, 168 List properties) throws CmsException { 169 170 resourcename = validateFoldername(resourcename); 171 return super.createResource(cms, securityManager, resourcename, content, properties); 172 } 173 174 177 public void deleteResource(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource, int siblingMode) 178 throws CmsException { 179 180 List resources = securityManager.readChildResources( 182 cms.getRequestContext(), 183 resource, 184 CmsResourceFilter.IGNORE_EXPIRATION, 185 true, 186 true); 187 188 Set deletedResources = new HashSet (); 189 190 for (int i = 0; i < resources.size(); i++) { 192 CmsResource childResource = (CmsResource)resources.get(i); 193 194 if (siblingMode == CmsResource.DELETE_REMOVE_SIBLINGS 195 && deletedResources.contains(childResource.getResourceId())) { 196 continue; 199 } 200 201 if (childResource.isFolder()) { 202 deleteResource(cms, securityManager, childResource, siblingMode); 204 } else { 205 getResourceType(childResource.getTypeId()).deleteResource( 207 cms, 208 securityManager, 209 childResource, 210 siblingMode); 211 } 212 213 deletedResources.add(childResource.getResourceId()); 214 } 215 216 deletedResources.clear(); 217 218 super.deleteResource(cms, securityManager, resource, siblingMode); 220 } 221 222 225 public int getLoaderId() { 226 227 return -1; 229 } 230 231 234 public boolean isFolder() { 235 236 return true; 237 } 238 239 242 public void moveResource(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource, String destination) 243 throws CmsException, CmsIllegalArgumentException { 244 245 String dest = cms.getRequestContext().addSiteRoot(destination); 246 if (!CmsResource.isFolder(dest)) { 247 dest = dest.concat("/"); 249 } 250 if (resource.getRootPath().equals(dest)) { 251 throw new CmsVfsException(org.opencms.file.Messages.get().container( 253 org.opencms.file.Messages.ERR_MOVE_SAME_NAME_1, 254 destination)); 255 } 256 if (dest.startsWith(resource.getRootPath())) { 257 throw new CmsVfsException(org.opencms.file.Messages.get().container( 259 org.opencms.file.Messages.ERR_MOVE_SAME_FOLDER_2, 260 cms.getSitePath(resource), 261 destination)); 262 } 263 264 securityManager.checkPermissions( 267 cms.getRequestContext(), 268 resource, 269 CmsPermissionSet.ACCESS_WRITE, 270 true, 271 CmsResourceFilter.IGNORE_EXPIRATION); 272 273 copyResource(cms, securityManager, resource, destination, CmsResource.COPY_AS_SIBLING); 274 275 deleteResource(cms, securityManager, resource, CmsResource.DELETE_PRESERVE_SIBLINGS); 276 } 277 278 281 public void replaceResource( 282 CmsObject cms, 283 CmsSecurityManager securityManager, 284 CmsResource resource, 285 int type, 286 byte[] content, 287 List properties) throws CmsException, CmsDataNotImplementedException { 288 289 if (type != getTypeId()) { 290 throw new CmsDataNotImplementedException(Messages.get().container( 292 Messages.ERR_REPLACE_RESOURCE_FOLDER_1, 293 cms.getSitePath(resource))); 294 } 295 super.replaceResource(cms, securityManager, resource, getTypeId(), null, properties); 297 } 298 299 302 public void restoreResourceBackup( 303 CmsObject cms, 304 CmsSecurityManager securityManager, 305 CmsResource resourename, 306 int tag) throws CmsException { 307 308 throw new CmsDataNotImplementedException(Messages.get().container(Messages.ERR_RESTORE_FOLDERS_0)); 310 } 311 312 315 public void setDateExpired( 316 CmsObject cms, 317 CmsSecurityManager securityManager, 318 CmsResource resource, 319 long dateLastModified, 320 boolean recursive) throws CmsException { 321 322 super.setDateExpired(cms, securityManager, resource, dateLastModified, recursive); 324 325 if (recursive) { 326 List resources = securityManager.readChildResources( 328 cms.getRequestContext(), 329 resource, 330 CmsResourceFilter.IGNORE_EXPIRATION, 331 true, 332 true); 333 334 for (int i = 0; i < resources.size(); i++) { 336 CmsResource childResource = (CmsResource)resources.get(i); 337 if (childResource.isFolder()) { 338 setDateExpired(cms, securityManager, childResource, dateLastModified, recursive); 340 } else { 341 getResourceType(childResource.getTypeId()).setDateExpired( 343 cms, 344 securityManager, 345 childResource, 346 dateLastModified, 347 recursive); 348 } 349 } 350 } 351 } 352 353 356 public void setDateLastModified( 357 CmsObject cms, 358 CmsSecurityManager securityManager, 359 CmsResource resource, 360 long dateLastModified, 361 boolean recursive) throws CmsException { 362 363 super.setDateLastModified(cms, securityManager, resource, dateLastModified, recursive); 365 366 if (recursive) { 367 List resources = securityManager.readChildResources( 369 cms.getRequestContext(), 370 resource, 371 CmsResourceFilter.IGNORE_EXPIRATION, 372 true, 373 true); 374 375 for (int i = 0; i < resources.size(); i++) { 377 CmsResource childResource = (CmsResource)resources.get(i); 378 if (childResource.isFolder()) { 379 setDateLastModified(cms, securityManager, childResource, dateLastModified, recursive); 381 } else { 382 getResourceType(childResource.getTypeId()).setDateLastModified( 384 cms, 385 securityManager, 386 childResource, 387 dateLastModified, 388 recursive); 389 } 390 } 391 } 392 } 393 394 397 public void setDateReleased( 398 CmsObject cms, 399 CmsSecurityManager securityManager, 400 CmsResource resource, 401 long dateLastModified, 402 boolean recursive) throws CmsException { 403 404 super.setDateReleased(cms, securityManager, resource, dateLastModified, recursive); 406 407 if (recursive) { 408 List resources = securityManager.readChildResources( 410 cms.getRequestContext(), 411 resource, 412 CmsResourceFilter.IGNORE_EXPIRATION, 413 true, 414 true); 415 416 for (int i = 0; i < resources.size(); i++) { 418 CmsResource childResource = (CmsResource)resources.get(i); 419 if (childResource.isFolder()) { 420 setDateReleased(cms, securityManager, childResource, dateLastModified, recursive); 422 } else { 423 getResourceType(childResource.getTypeId()).setDateReleased( 425 cms, 426 securityManager, 427 childResource, 428 dateLastModified, 429 recursive); 430 } 431 } 432 } 433 } 434 435 438 public void undoChanges(CmsObject cms, CmsSecurityManager securityManager, CmsResource resource, boolean recursive) 439 throws CmsException { 440 441 super.undoChanges(cms, securityManager, resource, recursive); 443 444 if (recursive) { 445 List resources = securityManager.readChildResources( 447 cms.getRequestContext(), 448 resource, 449 CmsResourceFilter.ALL, 450 true, 451 true); 452 453 for (int i = 0; i < resources.size(); i++) { 455 CmsResource childResource = (CmsResource)resources.get(i); 456 if (childResource.isFolder()) { 457 undoChanges(cms, securityManager, childResource, recursive); 459 } else { 460 getResourceType(childResource.getTypeId()).undoChanges( 462 cms, 463 securityManager, 464 childResource, 465 recursive); 466 } 467 } 468 } 469 } 470 471 479 private String validateFoldername(String resourcename) throws CmsIllegalArgumentException { 480 481 if (CmsStringUtil.isEmpty(resourcename)) { 482 throw new CmsIllegalArgumentException(org.opencms.db.Messages.get().container( 483 org.opencms.db.Messages.ERR_BAD_RESOURCENAME_1, 484 resourcename)); 485 } 486 if (!CmsResource.isFolder(resourcename)) { 487 resourcename = resourcename.concat("/"); 488 } 489 if (resourcename.charAt(0) != '/') { 490 resourcename = "/".concat(resourcename); 491 } 492 return resourcename; 493 } 494 } | Popular Tags |