001// Licensed under the Apache License, Version 2.0 (the "License"); 002// you may not use this file except in compliance with the License. 003// You may obtain a copy of the License at 004// 005// http://www.apache.org/licenses/LICENSE-2.0 006// 007// Unless required by applicable law or agreed to in writing, software 008// distributed under the License is distributed on an "AS IS" BASIS, 009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 010// See the License for the specific language governing permissions and 011// limitations under the License. 012package org.apache.tapestry5.versionmigrator; 013 014/** 015 * Class that represents information about one class being renamed and/or moved 016 * between artifacts (JARs) and/or packages. 017 */ 018final public class ClassRefactor 019{ 020 021 final private String newClassName; 022 final private String oldClassName; 023 final private String sourceArtifact; 024 final private String destinationArtifact; 025 026 /** 027 * Constructor for classes being moved from one artifact to another 028 * and possibly being renamed or moved between packages. 029 */ 030 public ClassRefactor(String newClassName, String oldClassName, String sourceArtifact, String destinationArtifact) 031 { 032 super(); 033 verifyNotBlank("newClassName", newClassName); 034 verifyNotBlank("oldClassName", oldClassName); 035 verifyNotBlank("sourceArtifact", sourceArtifact); 036 verifyNotBlank("destinationArtifact", destinationArtifact); 037 this.newClassName = newClassName; 038 this.oldClassName = oldClassName; 039 this.sourceArtifact = sourceArtifact; 040 this.destinationArtifact = destinationArtifact; 041 } 042 043 /** 044 * Returns the new fully-qualified class name. 045 */ 046 public String getNewClassName() 047 { 048 return newClassName; 049 } 050 051 /** 052 * Returns the old fully-qualified class name. 053 */ 054 public String getOldClassName() 055 { 056 return oldClassName; 057 } 058 059 /** 060 * Returns the artifact where the class was located. 061 */ 062 public String getSourceArtifact() 063 { 064 return sourceArtifact; 065 } 066 067 /** 068 * Returns the artifact where the class is now located. 069 */ 070 public String getDestinationArtifact() 071 { 072 return destinationArtifact; 073 } 074 075 /** 076 * Returns whether the class was moved between artifacts. 077 */ 078 public boolean isMovedBetweenArtifacts() 079 { 080 return !sourceArtifact.equals(destinationArtifact); 081 } 082 083 /** 084 * Returns whether the class had its fully qualified class name changed. 085 * This includes package changes. 086 */ 087 public boolean isRenamed() 088 { 089 return !oldClassName.equals(newClassName); 090 } 091 092 @Override 093 public String toString() { 094 return "ClassMoveInformation [newClassName=" + newClassName + ", oldClassName=" + oldClassName + ", sourceArtifact=" + sourceArtifact 095 + ", destinationArtifact=" + destinationArtifact + "]"; 096 } 097 098 final static boolean isNotBlank(String string) 099 { 100 return string != null && string.trim().length() > 0; 101 } 102 103 final static void verifyNotBlank(String parameterName, String parameterValue) 104 { 105 if (!isNotBlank(parameterValue)) 106 { 107 throw new IllegalArgumentException( 108 String.format("Parameter %s cannot be null nor blank", parameterName)); 109 } 110 } 111 112 /** 113 * Returns the simple old class name. 114 */ 115 public String getSimpleOldClassName() { 116 return oldClassName.substring(oldClassName.lastIndexOf(".") + 1); 117 } 118 119 /** 120 * Returns whether the class is internal or not. 121 */ 122 public boolean isInternal() 123 { 124 return oldClassName.contains(".internal."); 125 } 126 127 /** 128 * Returns the new package location. 129 */ 130 public String getNewPackageName() 131 { 132 return newClassName.substring(0, newClassName.lastIndexOf(".")); 133 } 134 135}