1 31 32 package org.opencms.module; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.main.CmsIllegalArgumentException; 36 import org.opencms.main.CmsLog; 37 import org.opencms.security.CmsRole; 38 import org.opencms.security.CmsRoleViolationException; 39 import org.opencms.util.CmsFileUtil; 40 import org.opencms.util.CmsStringUtil; 41 42 import java.util.ArrayList ; 43 import java.util.Collections ; 44 import java.util.List ; 45 import java.util.Map ; 46 import java.util.SortedMap ; 47 import java.util.StringTokenizer ; 48 import java.util.TreeMap ; 49 50 import org.apache.commons.logging.Log; 51 52 67 public class CmsModule implements Comparable { 68 69 70 public static final long DEFAULT_DATE = 0L; 71 72 73 private static final Log LOG = CmsLog.getLog(CmsModule.class); 74 75 79 private static final String MODULE_PROPERTY_ADDITIONAL_RESOURCES = "additionalresources"; 80 81 82 private static final String MODULE_PROPERTY_ADDITIONAL_RESOURCES_SEPARATOR = ";"; 83 84 85 private String m_actionClass; 86 87 88 private I_CmsModuleAction m_actionInstance; 89 90 91 private String m_authorEmail; 92 93 94 private String m_authorName; 95 96 97 private boolean m_createClassesFolder; 98 99 100 private boolean m_createElementsFolder; 101 102 103 private boolean m_createLibFolder; 104 105 106 private boolean m_createModuleFolder; 107 108 109 private boolean m_createResourcesFolder; 110 111 112 private boolean m_createTemplateFolder; 113 114 115 private long m_dateCreated; 116 117 118 private long m_dateInstalled; 119 120 121 private List m_dependencies; 122 123 124 private String m_description; 125 126 127 private List m_explorerTypeSettings; 128 129 130 private List m_exportPoints; 131 132 133 private boolean m_frozen; 134 135 136 private String m_group; 137 138 139 private String m_name; 140 141 142 private String m_niceName; 143 144 145 private SortedMap m_parameters; 146 147 148 private List m_resources; 149 150 151 private List m_resourceTypes; 152 153 154 private String m_userInstalled; 155 156 157 private CmsModuleVersion m_version; 158 159 162 public CmsModule() { 163 164 m_version = new CmsModuleVersion(CmsModuleVersion.DEFAULT_VERSION); 165 m_resources = Collections.EMPTY_LIST; 166 m_exportPoints = Collections.EMPTY_LIST; 167 m_dependencies = Collections.EMPTY_LIST; 168 } 169 170 189 public CmsModule( 190 String name, 191 String niceName, 192 String group, 193 String actionClass, 194 String description, 195 CmsModuleVersion version, 196 String authorName, 197 String authorEmail, 198 long dateCreated, 199 String userInstalled, 200 long dateInstalled, 201 List dependencies, 202 List exportPoints, 203 List resources, 204 Map parameters) { 205 206 super(); 207 m_name = name; 208 setNiceName(niceName); 209 setActionClass(actionClass); 210 setGroup(group); 211 212 if (CmsStringUtil.isEmpty(description)) { 213 m_description = ""; 214 } else { 215 m_description = description; 216 } 217 m_version = version; 218 if (CmsStringUtil.isEmpty(authorName)) { 219 m_authorName = ""; 220 } else { 221 m_authorName = authorName; 222 } 223 if (CmsStringUtil.isEmpty(authorEmail)) { 224 m_authorEmail = ""; 225 } else { 226 m_authorEmail = authorEmail; 227 } 228 m_dateCreated = (dateCreated / 1000L) * 1000L; 230 if (CmsStringUtil.isEmpty(userInstalled)) { 231 m_userInstalled = ""; 232 } else { 233 m_userInstalled = userInstalled; 234 } 235 m_dateInstalled = (dateInstalled / 1000L) * 1000L; 236 if (dependencies == null) { 237 m_dependencies = Collections.EMPTY_LIST; 238 } else { 239 m_dependencies = Collections.unmodifiableList(dependencies); 240 } 241 if (exportPoints == null) { 242 m_exportPoints = Collections.EMPTY_LIST; 243 } else { 244 m_exportPoints = Collections.unmodifiableList(exportPoints); 245 } 246 if (resources == null) { 247 m_resources = Collections.EMPTY_LIST; 248 } else { 249 m_resources = Collections.unmodifiableList(resources); 250 } 251 if (parameters == null) { 252 m_parameters = new TreeMap (); 254 } else { 255 m_parameters = new TreeMap (parameters); 256 } 257 258 initOldAdditionalResources(); 259 260 if (LOG.isDebugEnabled()) { 261 LOG.debug(Messages.get().getBundle().key(Messages.LOG_MODULE_INSTANCE_CREATED_1, m_name)); 262 } 263 m_resourceTypes = Collections.EMPTY_LIST; 264 m_explorerTypeSettings = Collections.EMPTY_LIST; 265 } 266 267 274 public CmsModuleDependency checkDependency(CmsModule module) { 275 276 CmsModuleDependency otherDepdendency = new CmsModuleDependency(module.getName(), module.getVersion()); 277 278 for (int i = 0; i < m_dependencies.size(); i++) { 280 CmsModuleDependency dependency = (CmsModuleDependency)m_dependencies.get(i); 281 if (dependency.dependesOn(otherDepdendency)) { 282 return dependency; 284 } 285 } 286 287 return null; 289 } 290 291 298 public void checkResources(CmsObject cms) throws CmsIllegalArgumentException { 299 300 CmsFileUtil.checkResources(cms, getResources()); 301 } 302 303 309 public Object clone() { 310 311 CmsModule result = new CmsModule( 313 m_name, 314 m_niceName, 315 m_group, 316 m_actionClass, 317 m_description, 318 m_version, 319 m_authorName, 320 m_authorEmail, 321 m_dateCreated, 322 m_userInstalled, 323 m_dateInstalled, 324 m_dependencies, 325 m_exportPoints, 326 m_resources, 327 m_parameters); 328 result.m_frozen = false; 330 331 if (getExplorerTypes() != null) { 332 result.setExplorerTypes(new ArrayList (getExplorerTypes())); 333 } 334 if (getResourceTypes() != null) { 335 result.setResourceTypes(new ArrayList (getResourceTypes())); 336 } 337 338 if (getDependencies() != null) { 339 result.setDependencies(new ArrayList (getDependencies())); 340 } 341 342 result.setCreateClassesFolder(m_createClassesFolder); 343 result.setCreateElementsFolder(m_createElementsFolder); 344 result.setCreateLibFolder(m_createLibFolder); 345 result.setCreateModuleFolder(m_createModuleFolder); 346 result.setCreateResourcesFolder(m_createResourcesFolder); 347 result.setCreateTemplateFolder(m_createTemplateFolder); 348 349 result.setResources(new ArrayList (m_resources)); 350 result.setExportPoints(new ArrayList (m_exportPoints)); 351 return result; 352 } 353 354 357 public int compareTo(Object obj) { 358 359 if (obj == this) { 360 return 0; 361 } 362 if (obj instanceof CmsModule) { 363 return m_name.compareTo(((CmsModule)obj).m_name); 364 } 365 return 0; 366 } 367 368 378 public boolean equals(Object obj) { 379 380 if (obj == this) { 381 return true; 382 } 383 if (obj instanceof CmsModule) { 384 return ((CmsModule)obj).m_name.equals(m_name); 385 } 386 return false; 387 } 388 389 397 public String getActionClass() { 398 399 return m_actionClass; 400 } 401 402 408 public I_CmsModuleAction getActionInstance() { 409 410 return m_actionInstance; 411 } 412 413 418 public String getAuthorEmail() { 419 420 return m_authorEmail; 421 } 422 423 428 public String getAuthorName() { 429 430 return m_authorName; 431 } 432 433 438 public long getDateCreated() { 439 440 return m_dateCreated; 441 } 442 443 448 public long getDateInstalled() { 449 450 return m_dateInstalled; 451 } 452 453 458 public List getDependencies() { 459 460 return m_dependencies; 461 } 462 463 468 public String getDescription() { 469 470 return m_description; 471 } 472 473 478 public List getExplorerTypes() { 479 480 return m_explorerTypeSettings; 481 } 482 483 488 public List getExportPoints() { 489 490 return m_exportPoints; 491 } 492 493 498 public String getGroup() { 499 500 return m_group; 501 } 502 503 510 public String getName() { 511 512 return m_name; 513 } 514 515 520 public String getNiceName() { 521 522 return m_niceName; 523 } 524 525 531 public String getParameter(String key) { 532 533 return (String )m_parameters.get(key); 534 } 535 536 544 public String getParameter(String key, String defaultValue) { 545 546 String value = (String )m_parameters.get(key); 547 return (value != null) ? value : defaultValue; 548 } 549 550 555 public SortedMap getParameters() { 556 557 return m_parameters; 558 } 559 560 565 public List getResources() { 566 567 return m_resources; 568 } 569 570 575 public List getResourceTypes() { 576 577 return m_resourceTypes; 578 } 579 580 585 public String getUserInstalled() { 586 587 return m_userInstalled; 588 } 589 590 595 public CmsModuleVersion getVersion() { 596 597 return m_version; 598 } 599 600 603 public int hashCode() { 604 605 return m_name.hashCode(); 606 } 607 608 613 public boolean isCreateClassesFolder() { 614 615 return m_createClassesFolder; 616 } 617 618 623 public boolean isCreateElementsFolder() { 624 625 return m_createElementsFolder; 626 } 627 628 633 public boolean isCreateLibFolder() { 634 635 return m_createLibFolder; 636 } 637 638 643 public boolean isCreateModuleFolder() { 644 645 return m_createModuleFolder; 646 } 647 648 653 public boolean isCreateResourcesFolder() { 654 655 return m_createResourcesFolder; 656 } 657 658 663 public boolean isCreateTemplateFolder() { 664 665 return m_createTemplateFolder; 666 } 667 668 683 public boolean isIdentical(CmsModule other) { 684 685 if (!isEqual(m_name, other.m_name)) { 687 return false; 688 } 689 if (!isEqual(m_niceName, other.m_niceName)) { 690 return false; 691 } 692 if (!isEqual(m_version, other.m_version)) { 693 return false; 694 } 695 if (!isEqual(m_actionClass, other.m_actionClass)) { 696 return false; 697 } 698 if (!isEqual(m_description, other.m_description)) { 699 return false; 700 } 701 if (!isEqual(m_authorName, other.m_authorName)) { 702 return false; 703 } 704 if (!isEqual(m_authorEmail, other.m_authorEmail)) { 705 return false; 706 } 707 if (m_dateCreated != other.m_dateCreated) { 708 return false; 709 } 710 return true; 711 } 712 713 723 public void setActionClass(String value) { 724 725 checkFrozen(); 726 if (CmsStringUtil.isEmpty(value)) { 727 m_actionClass = null; 728 } else { 729 if (!CmsStringUtil.isValidJavaClassName(value)) { 730 throw new CmsIllegalArgumentException(Messages.get().container( 731 Messages.ERR_MODULE_ACTION_CLASS_2, 732 value, 733 getName())); 734 } 735 m_actionClass = value; 736 } 737 } 738 739 748 public void setAuthorEmail(String value) { 749 750 checkFrozen(); 751 m_authorEmail = value.trim(); 752 } 753 754 763 public void setAuthorName(String value) { 764 765 checkFrozen(); 766 m_authorName = value.trim(); 767 } 768 769 774 public void setCreateClassesFolder(boolean createClassesFolder) { 775 776 m_createClassesFolder = createClassesFolder; 777 } 778 779 784 public void setCreateElementsFolder(boolean createElementsFolder) { 785 786 m_createElementsFolder = createElementsFolder; 787 } 788 789 794 public void setCreateLibFolder(boolean createLibFolder) { 795 796 m_createLibFolder = createLibFolder; 797 } 798 799 804 public void setCreateModuleFolder(boolean createModuleFolder) { 805 806 m_createModuleFolder = createModuleFolder; 807 } 808 809 814 public void setCreateResourcesFolder(boolean createResourcesFolder) { 815 816 m_createResourcesFolder = createResourcesFolder; 817 } 818 819 824 public void setCreateTemplateFolder(boolean createTemplateFolder) { 825 826 m_createTemplateFolder = createTemplateFolder; 827 } 828 829 838 public void setDateCreated(long value) { 839 840 checkFrozen(); 841 m_dateCreated = value; 842 } 843 844 853 public void setDateInstalled(long value) { 854 855 checkFrozen(); 856 m_dateInstalled = value; 857 } 858 859 864 public void setDependencies(List dependencies) { 865 866 checkFrozen(); 867 m_dependencies = dependencies; 868 } 869 870 879 public void setDescription(String value) { 880 881 checkFrozen(); 882 m_description = value.trim(); 883 } 884 885 890 public void setExplorerTypes(List explorerTypeSettings) { 891 892 m_explorerTypeSettings = explorerTypeSettings; 893 } 894 895 900 public void setExportPoints(List exportPoints) { 901 902 m_exportPoints = exportPoints; 903 } 904 905 914 public void setGroup(String value) { 915 916 checkFrozen(); 917 m_group = value; 918 } 919 920 930 public void setName(String value) { 931 932 checkFrozen(); 933 if (!CmsStringUtil.isValidJavaClassName(value)) { 934 throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_MODULE_NAME_1, value)); 935 } 936 m_name = value; 937 } 938 939 947 public void setNiceName(String value) { 948 949 checkFrozen(); 950 if (CmsStringUtil.isEmptyOrWhitespaceOnly(value)) { 951 m_niceName = getName(); 952 } else { 953 m_niceName = value.trim(); 954 } 955 } 956 957 966 public void setParameters(SortedMap value) { 967 968 checkFrozen(); 969 m_parameters = value; 970 } 971 972 981 public void setResources(List value) { 982 983 checkFrozen(); 984 m_resources = value; 985 } 986 987 992 public void setResourceTypes(List resourceTypes) { 993 994 m_resourceTypes = Collections.unmodifiableList(resourceTypes); 995 } 996 997 1006 public void setUserInstalled(String value) { 1007 1008 checkFrozen(); 1009 m_userInstalled = value.trim(); 1010 } 1011 1012 1017 protected void checkFrozen() throws CmsIllegalArgumentException { 1018 1019 if (m_frozen) { 1020 throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_MODULE_FROZEN_1, getName())); 1021 } 1022 } 1023 1024 1031 protected void initialize(CmsObject cms) throws CmsRoleViolationException { 1032 1033 checkFrozen(); 1034 cms.checkRole(CmsRole.MODULE_MANAGER); 1036 1037 m_frozen = true; 1038 m_resources = Collections.unmodifiableList(m_resources); 1039 } 1040 1041 1046 void setActionInstance(I_CmsModuleAction actionInstance) { 1047 1048 m_actionInstance = actionInstance; 1049 1050 } 1051 1052 1061 private void initOldAdditionalResources() { 1062 1063 SortedMap parameters = new TreeMap (m_parameters); 1064 List resources = new ArrayList (m_resources); 1065 1066 String additionalResources; 1067 additionalResources = (String )parameters.get(MODULE_PROPERTY_ADDITIONAL_RESOURCES); 1068 if (additionalResources != null) { 1069 StringTokenizer tok = new StringTokenizer ( 1070 additionalResources, 1071 MODULE_PROPERTY_ADDITIONAL_RESOURCES_SEPARATOR); 1072 while (tok.hasMoreTokens()) { 1073 String resource = tok.nextToken().trim(); 1074 if ((!"-".equals(resource)) && (!resources.contains(resource))) { 1075 resources.add(resource); 1076 } 1077 } 1078 } 1079 1080 m_resources = resources; 1081 } 1082 1083 1090 private boolean isEqual(Object a, Object b) { 1091 1092 if (a == null) { 1093 return (b == null); 1094 } 1095 if (b == null) { 1096 return false; 1097 } 1098 return a.equals(b); 1099 } 1100}
| Popular Tags
|