1 31 32 package org.opencms.util; 33 34 import org.opencms.db.CmsDbUtil; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsProject; 37 import org.opencms.file.CmsPropertyDefinition; 38 import org.opencms.file.CmsRequestContext; 39 import org.opencms.file.CmsResource; 40 import org.opencms.file.types.CmsResourceTypePlain; 41 import org.opencms.file.types.I_CmsResourceType; 42 import org.opencms.lock.CmsLock; 43 import org.opencms.main.OpenCms; 44 import org.opencms.workplace.CmsWorkplace; 45 import org.opencms.workplace.explorer.CmsExplorerTypeSettings; 46 47 import java.util.List ; 48 49 61 public final class CmsResourceUtil { 62 63 64 private static final char[] RESOURCE_STATE = new char[] {'U', 'C', 'N', 'D', '_'}; 65 66 67 private static final String SIZE_DIR = "-"; 68 69 70 private CmsObject m_cms; 71 72 73 private CmsLock m_lock; 74 75 76 private List m_projectResources; 77 78 79 private CmsProject m_referenceProject; 80 81 82 private CmsRequestContext m_request; 83 84 85 private CmsResource m_resource; 86 87 88 private I_CmsResourceType m_resourceType; 89 90 private int todo = 0; 93 94 99 public CmsResourceUtil(CmsObject cms) { 100 101 setCms(cms); 102 } 103 104 110 public CmsResourceUtil(CmsObject cms, CmsResource resource) { 111 112 setCms(cms); 113 setResource(resource); 114 } 115 116 121 public CmsResourceUtil(CmsResource resource) { 122 123 setResource(resource); 124 } 125 126 133 public static char getStateAbbreviation(int state) { 134 135 if (state >= 0 && state <= 3) { 136 return RESOURCE_STATE[state]; 137 } else { 138 return RESOURCE_STATE[4]; 139 } 140 } 141 142 147 public CmsObject getCms() { 148 149 return m_cms; 150 } 151 152 163 public String getIconPathExplorer() { 164 165 if (m_resource.getSiblingCount() > 1) { 166 if (m_resource.isLabeled()) { 168 return "explorer/link_labeled.gif"; 170 } else { 171 return "explorer/link.gif"; 173 } 174 } else { 175 return getIconPathResourceType(); 176 } 177 } 178 179 188 public String getIconPathLock() { 189 190 int lockId = getLock().getType(); 191 String iconPath = null; 192 if (lockId != CmsLock.TYPE_UNLOCKED && m_request != null && isInsideProject()) { 193 if (getLock().getUserId().equals(m_request.currentUser().getId()) 194 && getLockedInProjectId() == getReferenceProject().getId()) { 195 if (lockId == CmsLock.TYPE_SHARED_EXCLUSIVE || lockId == CmsLock.TYPE_SHARED_INHERITED) { 196 iconPath = "shared"; 197 } else { 198 iconPath = "user"; 199 } 200 } else { 201 iconPath = "other"; 202 } 203 } 204 if (iconPath == null) { 205 iconPath = "project_none"; 206 } else { 207 iconPath = "lock_" + iconPath; 208 } 209 return "explorer/" + iconPath + ".gif"; 210 } 211 212 219 public String getIconPathProjectState() { 220 221 String iconPath; 222 if (getProjectState() == null) { 223 iconPath = "none"; 224 } else if (getProjectState().booleanValue()) { 225 iconPath = "this"; 226 } else { 227 iconPath = "other"; 228 } 229 return "explorer/project_" + iconPath + ".gif"; 230 } 231 232 239 public String getIconPathResourceType() { 240 241 if (!isEditable()) { 242 return "filetypes/" 243 + OpenCms.getWorkplaceManager().getExplorerTypeSetting(CmsResourceTypePlain.getStaticTypeName()).getIcon(); 244 } 245 return "filetypes/" + OpenCms.getWorkplaceManager().getExplorerTypeSetting(getResourceTypeName()).getIcon(); 246 } 247 248 253 public CmsLock getLock() { 254 255 if (m_lock == null) { 256 try { 257 m_lock = getCms().getLock(m_resource); 258 } catch (Throwable e) { 259 m_lock = CmsLock.getNullLock(); 260 } 261 } 262 return m_lock; 263 } 264 265 270 public String getLockedByName() { 271 272 String lockedBy = ""; 273 if (!getLock().isNullLock()) { 274 try { 275 lockedBy = getCms().readUser(getLock().getUserId()).getName(); 276 } catch (Throwable e) { 277 lockedBy = e.getMessage(); 278 } 279 } 280 return lockedBy; 281 } 282 283 288 public int getLockedInProjectId() { 289 290 int lockedInProject = CmsDbUtil.UNKNOWN_ID; 291 if (getLock().isNullLock() && getResource().getState() != CmsResource.STATE_UNCHANGED) { 292 lockedInProject = getResource().getProjectLastModified(); 294 } else { 295 if (getResource().getState() != CmsResource.STATE_UNCHANGED) { 296 lockedInProject = getProjectId(); 298 } else { 299 lockedInProject = getLock().getProjectId(); 301 } 302 } 303 return lockedInProject; 304 } 305 306 311 public String getLockedInProjectName() { 312 313 try { 314 int pId = getLockedInProjectId(); 315 if (pId == CmsDbUtil.UNKNOWN_ID) { 316 return ""; 318 } 319 return getCms().readProject(pId).getName(); 320 } catch (Throwable e) { 321 return e.getMessage(); 322 } 323 } 324 325 330 public String getPermissions() { 331 332 String permissions; 333 try { 334 permissions = getCms().getPermissions(getCms().getSitePath(getResource())).getPermissionString(); 335 } catch (Throwable e) { 336 try { 337 permissions = getCms().getPermissions(getResource().getRootPath()).getPermissionString(); 338 } catch (Throwable e1) { 339 permissions = e1.getMessage(); 340 } 341 } 342 return permissions; 343 } 344 345 350 public int getProjectId() { 351 352 int projectId = m_resource.getProjectLastModified(); 353 if (!getLock().isNullLock() 354 && getLock().getType() != CmsLock.TYPE_INHERITED 355 && getLock().getType() != CmsLock.TYPE_SHARED_INHERITED) { 356 projectId = getLock().getProjectId(); 358 } 359 return projectId; 360 } 361 362 373 public Boolean getProjectState() { 374 375 if (m_resource.getState() == CmsResource.STATE_UNCHANGED || !isInsideProject()) { 376 return null; 377 } else { 378 return new Boolean (getLockedInProjectId() == getReferenceProject().getId()); 379 } 380 } 381 382 387 public CmsProject getReferenceProject() { 388 389 if (m_referenceProject == null) { 390 if (m_request != null) { 391 m_referenceProject = m_request.currentProject(); 392 } 393 } 394 return m_referenceProject; 395 } 396 397 402 public CmsResource getResource() { 403 404 return m_resource; 405 } 406 407 412 public I_CmsResourceType getResourceType() { 413 414 if (m_resourceType == null) { 415 try { 416 m_resourceType = OpenCms.getResourceManager().getResourceType(m_resource.getTypeId()); 417 } catch (Throwable e) { 418 try { 419 m_resourceType = OpenCms.getResourceManager().getResourceType( 420 CmsResourceTypePlain.getStaticTypeId()); 421 } catch (Throwable e1) { 422 m_resourceType = null; 424 } 425 } 426 } 427 return m_resourceType; 428 } 429 430 435 public int getResourceTypeId() { 436 437 return getResourceType().getTypeId(); 438 } 439 440 445 public String getResourceTypeName() { 446 447 return getResourceType().getTypeName(); 448 } 449 450 457 public String getSizeString() { 458 459 return m_resource.getLength() == -1 ? SIZE_DIR : "" + m_resource.getLength(); 460 } 461 462 467 public char getStateAbbreviation() { 468 469 int state = getResource().getState(); 470 if (state >= 0 && state <= 3) { 471 return RESOURCE_STATE[state]; 472 } else { 473 return RESOURCE_STATE[4]; 474 } 475 } 476 477 484 public String getStateName() { 485 486 int state = m_resource.getState(); 487 String name; 488 if (m_request == null) { 489 name = org.opencms.workplace.explorer.Messages.get().getBundle().key( 490 org.opencms.workplace.explorer.Messages.getStateKey(state)); 491 } else { 492 name = org.opencms.workplace.explorer.Messages.get().getBundle(m_request.getLocale()).key( 493 org.opencms.workplace.explorer.Messages.getStateKey(state)); 494 } 495 return name; 496 } 497 498 505 public String getStyleClassName() { 506 507 if (isInsideProject() && isEditable()) { 508 switch (m_resource.getState()) { 509 case CmsResource.STATE_CHANGED: 510 return "fc"; 511 case CmsResource.STATE_NEW: 512 return "fn"; 513 case CmsResource.STATE_DELETED: 514 return "fd"; 515 case CmsResource.STATE_UNCHANGED: 516 default: 517 return "nf"; 518 } 519 } 520 return "fp"; 521 } 522 523 531 public String getStyleRange() { 532 533 return isInRange() ? "" : "font-style:italic;"; 534 } 535 536 545 public String getStyleSiblings() { 546 547 StringBuffer style = new StringBuffer (128); 548 if (m_resource.getSiblingCount() > 1) { 549 style.append("background-image:url("); 550 style.append(CmsWorkplace.getSkinUri()); 551 style.append(getIconPathResourceType()); 552 style.append("); background-position: 0px 0px; background-repeat: no-repeat; "); 553 } 554 return style.toString(); 555 } 556 557 562 public String getTitle() { 563 564 String title; 565 try { 566 title = getCms().readPropertyObject( 567 getCms().getSitePath(m_resource), 568 CmsPropertyDefinition.PROPERTY_TITLE, 569 false).getValue(); 570 } catch (Throwable e) { 571 title = e.getMessage(); 572 } 573 if (title == null) { 574 title = ""; 575 } 576 return title; 577 } 578 579 584 public String getUserCreated() { 585 586 String user = m_resource.getUserCreated().toString(); 587 try { 588 user = getCms().readUser(m_resource.getUserCreated()).getName(); 589 } catch (Throwable e) { 590 } 592 return user; 593 } 594 595 600 public String getUserLastModified() { 601 602 String user = m_resource.getUserLastModified().toString(); 603 try { 604 user = getCms().readUser(m_resource.getUserLastModified()).getName(); 605 } catch (Throwable e) { 606 } 608 return user; 609 } 610 611 618 public boolean isEditable() { 619 620 if (m_request == null) { 621 return false; 622 } 623 CmsExplorerTypeSettings settings = OpenCms.getWorkplaceManager().getExplorerTypeSetting(getResourceTypeName()); 624 if (settings != null) { 625 return settings.getAccess().getPermissions(getCms()).requiresWritePermission(); 626 } 627 return false; 628 } 629 630 637 public boolean isExpired() { 638 639 if (m_request == null) { 640 return m_resource.getDateExpired() < System.currentTimeMillis(); 641 } 642 return m_resource.getDateExpired() < m_request.getRequestTime(); 643 } 644 645 652 public boolean isInRange() { 653 654 return isReleased() && !isExpired(); 655 } 656 657 666 public boolean isInsideProject() { 667 668 if (m_projectResources == null) { 669 try { 670 m_projectResources = getCms().readProjectResources(getReferenceProject()); 671 } catch (Throwable e) { 672 return false; 673 } 674 } 675 return CmsProject.isInsideProject(m_projectResources, m_resource); 676 } 677 678 683 public boolean isReleased() { 684 685 if (m_request == null) { 686 return m_resource.getDateReleased() < System.currentTimeMillis(); 687 } 688 return m_resource.getDateReleased() < m_request.getRequestTime(); 689 } 690 691 696 public void setCms(CmsObject cms) { 697 698 m_cms = cms; 699 m_request = cms.getRequestContext(); 700 m_referenceProject = null; 701 m_projectResources = null; 702 } 703 704 709 public void setReferenceProject(CmsProject project) { 710 711 m_referenceProject = project; 712 m_projectResources = null; 713 } 714 715 720 public void setResource(CmsResource resource) { 721 722 m_resource = resource; 723 m_lock = null; 724 m_resourceType = null; 725 } 726 } | Popular Tags |