001/** 002 * Copyright 2010-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.common.util.property.processor; 017 018import java.util.Collections; 019import java.util.List; 020import java.util.Properties; 021 022import org.kuali.common.util.Mode; 023import org.kuali.common.util.PropertyUtils; 024import org.kuali.common.util.Version; 025import org.kuali.common.util.VersionUtils; 026import org.kuali.common.util.property.Constants; 027 028public class VersionProcessor implements PropertyProcessor { 029 030 public static final String SANITIZED_QUALIFIER = Constants.DEFAULT_QUALIFIER_VERSION_SUFFIX + ".sanitized"; 031 public static final String SANITIZED_VERSION_KEY = "project.version.sanitized"; 032 033 String majorSuffix = Constants.DEFAULT_MAJOR_VERSION_SUFFIX; 034 String minorSuffix = Constants.DEFAULT_MINOR_VERSION_SUFFIX; 035 String incrementalSuffix = Constants.DEFAULT_INCREMENTAL_VERSION_SUFFIX; 036 String qualifierSuffix = Constants.DEFAULT_QUALIFIER_VERSION_SUFFIX; 037 String sanitizedQualifierSuffix = SANITIZED_QUALIFIER; 038 String trimmedSuffix = Constants.DEFAULT_TRIMMED_VERSION_SUFFIX; 039 String snapshotSuffix = Constants.DEFAULT_SNAPSHOT_VERSION_SUFFIX; 040 boolean alwaysAddOrOverride; 041 042 List<String> includes; 043 List<String> excludes; 044 Mode propertyOverwriteMode = Constants.DEFAULT_PROPERTY_OVERWRITE_MODE; 045 046 public VersionProcessor() { 047 this(Collections.<String> emptyList()); 048 } 049 050 public VersionProcessor(String include) { 051 this(Collections.singletonList(include)); 052 } 053 054 public VersionProcessor(List<String> includes) { 055 this(includes, false); 056 } 057 058 public VersionProcessor(List<String> includes, boolean alwaysAddOrOverride) { 059 this.includes = includes; 060 this.alwaysAddOrOverride = alwaysAddOrOverride; 061 } 062 063 @Override 064 public void process(Properties properties) { 065 List<String> keys = PropertyUtils.getSortedKeys(properties, includes, excludes); 066 Properties versionProperties = new Properties(); 067 for (String key : keys) { 068 String version = properties.getProperty(key); 069 Version v = VersionUtils.getVersion(version); 070 versionProperties.putAll(getVersionProperties(key, v)); 071 } 072 List<String> versionKeys = PropertyUtils.getSortedKeys(versionProperties); 073 for (String versionKey : versionKeys) { 074 String versionValue = versionProperties.getProperty(versionKey); 075 if (alwaysAddOrOverride) { 076 properties.setProperty(versionKey, versionValue); 077 } else { 078 PropertyUtils.addOrOverrideProperty(properties, versionKey, versionValue, propertyOverwriteMode); 079 } 080 } 081 } 082 083 public Properties getVersionProperties(String key, Version v) { 084 Properties properties = new Properties(); 085 if (v.getMajor() != null) { 086 String newKey = key + "." + majorSuffix; 087 properties.setProperty(newKey, v.getMajor()); 088 } 089 if (v.getMinor() != null) { 090 String newKey = key + "." + minorSuffix; 091 properties.setProperty(newKey, v.getMinor()); 092 } 093 if (v.getIncremental() != null) { 094 String newKey = key + "." + incrementalSuffix; 095 properties.setProperty(newKey, v.getIncremental()); 096 } 097 if (v.getQualifier() != null) { 098 String newKey = key + "." + qualifierSuffix; 099 properties.setProperty(newKey, v.getQualifier()); 100 String sanitizedKey = key + "." + sanitizedQualifierSuffix; 101 String sanitizedValue = VersionUtils.getSanitizedQualifier(v.getQualifier()); 102 properties.setProperty(sanitizedKey, sanitizedValue); 103 } 104 if (v.getTrimmed() != null) { 105 String newKey = key + "." + trimmedSuffix; 106 properties.setProperty(newKey, v.getTrimmed()); 107 } 108 String newKey = key + "." + snapshotSuffix; 109 properties.setProperty(newKey, Boolean.toString(v.isSnapshot())); 110 properties.setProperty(SANITIZED_VERSION_KEY, VersionUtils.asSanitizedString(v)); 111 return properties; 112 } 113 114 public String getMajorSuffix() { 115 return majorSuffix; 116 } 117 118 public void setMajorSuffix(String majorSuffix) { 119 this.majorSuffix = majorSuffix; 120 } 121 122 public String getMinorSuffix() { 123 return minorSuffix; 124 } 125 126 public void setMinorSuffix(String minorSuffix) { 127 this.minorSuffix = minorSuffix; 128 } 129 130 public String getIncrementalSuffix() { 131 return incrementalSuffix; 132 } 133 134 public void setIncrementalSuffix(String incrementalSuffix) { 135 this.incrementalSuffix = incrementalSuffix; 136 } 137 138 public String getQualifierSuffix() { 139 return qualifierSuffix; 140 } 141 142 public void setQualifierSuffix(String qualifierSuffix) { 143 this.qualifierSuffix = qualifierSuffix; 144 } 145 146 public String getTrimmedSuffix() { 147 return trimmedSuffix; 148 } 149 150 public void setTrimmedSuffix(String trimmedSuffix) { 151 this.trimmedSuffix = trimmedSuffix; 152 } 153 154 public String getSnapshotSuffix() { 155 return snapshotSuffix; 156 } 157 158 public void setSnapshotSuffix(String snapshotSuffix) { 159 this.snapshotSuffix = snapshotSuffix; 160 } 161 162 public List<String> getIncludes() { 163 return includes; 164 } 165 166 public void setIncludes(List<String> includes) { 167 this.includes = includes; 168 } 169 170 public List<String> getExcludes() { 171 return excludes; 172 } 173 174 public void setExcludes(List<String> excludes) { 175 this.excludes = excludes; 176 } 177 178 public Mode getPropertyOverwriteMode() { 179 return propertyOverwriteMode; 180 } 181 182 public void setPropertyOverwriteMode(Mode propertyOverwriteMode) { 183 this.propertyOverwriteMode = propertyOverwriteMode; 184 } 185 186 public boolean isAlwaysAddOrOverride() { 187 return alwaysAddOrOverride; 188 } 189 190 public void setAlwaysAddOrOverride(boolean alwaysAddOrOverride) { 191 this.alwaysAddOrOverride = alwaysAddOrOverride; 192 } 193 194 public String getSanitizedQualifierSuffix() { 195 return sanitizedQualifierSuffix; 196 } 197 198 public void setSanitizedQualifierSuffix(String sanitizedQualifierSuffix) { 199 this.sanitizedQualifierSuffix = sanitizedQualifierSuffix; 200 } 201 202}