blob: 09403d4072f13d9bab7a463dab230176cb444227 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.build.site;
import com.ibm.icu.util.Calendar;
import java.util.Properties;
import org.eclipse.pde.internal.build.AbstractScriptGenerator;
import org.eclipse.pde.internal.build.IBuildPropertiesConstants;
import org.osgi.framework.Version;
public class QualifierReplacer implements IBuildPropertiesConstants {
// private static final String DOT_QUALIFIER = '.' + PROPERTY_QUALIFIER;
private static String globalQualifier = null;
/**
* Replaces the 'qualifier' in the given version with the qualifier replacement.
*
* @param version version to replace qualifier in
* @param id id used when building a replacement using newVersions properties
* @param replaceTag replace qualifier with this tag instead of global qualifier, may be <code>null</code>
* @param newVersions properties that can be used to generate an alternative qualifier
* @return string version with qualifier replaced
*/
public static String replaceQualifierInVersion(String version, String id, String replaceTag, Properties newVersions) {
if (!AbstractScriptGenerator.getPropertyAsBoolean(IBuildPropertiesConstants.PROPERTY_PACKAGER_AS_NORMALIZER))
return version;
if (!version.endsWith(PROPERTY_QUALIFIER))
return version;
String newQualifier = null;
if (replaceTag == null || replaceTag.equalsIgnoreCase(PROPERTY_CONTEXT)) {
if (globalQualifier != null)
newQualifier = globalQualifier;
if (newQualifier == null && newVersions != null && newVersions.size() != 0) { //Skip the lookup in the file if there is no entries
newQualifier = (String) newVersions.get(getQualifierKey(id, version)); //First we check to see if there is a precise version
if (newQualifier == null) //If not found, then lookup for the id,0.0.0
newQualifier = (String) newVersions.get(id + ',' + Version.emptyVersion.toString());
if (newQualifier == null)
newQualifier = newVersions.getProperty(DEFAULT_MATCH_ALL);
}
if (newQualifier == null)
newQualifier = getDateQualifier();
} else if (replaceTag.equalsIgnoreCase(PROPERTY_NONE)) {
newQualifier = ""; //$NON-NLS-1$
} else {
newQualifier = replaceTag;
}
version = version.replaceFirst(PROPERTY_QUALIFIER, newQualifier);
if (version.endsWith(".")) //$NON-NLS-1$
version = version.substring(0, version.length() - 1);
return version;
}
//given a version ending in "qualifier" return the key to look up the replacement
public static String getQualifierKey(String id, String version) {
if (version == null || !version.endsWith(PROPERTY_QUALIFIER))
return null;
Version osgiVersion = new Version(version);
String qualifier = osgiVersion.getQualifier();
qualifier = qualifier.substring(0, qualifier.length() - PROPERTY_QUALIFIER.length());
StringBuffer keyBuffer = new StringBuffer(id);
keyBuffer.append(',');
keyBuffer.append(osgiVersion.getMajor());
keyBuffer.append('.');
keyBuffer.append(osgiVersion.getMinor());
keyBuffer.append('.');
keyBuffer.append(osgiVersion.getMicro());
if (qualifier.length() > 0) {
keyBuffer.append('.');
keyBuffer.append(qualifier);
}
return keyBuffer.toString();
}
/**
* Returns the current date/time as a string to be used as a qualifier
* replacement. This is the default qualifier replacement. Will
* be of the form YYYYMMDDHHMM.
* @return current date/time as a qualifier replacement
*/
public static String getDateQualifier() {
final String empty = ""; //$NON-NLS-1$
int monthNbr = Calendar.getInstance().get(Calendar.MONTH) + 1;
String month = (monthNbr < 10 ? "0" : empty) + monthNbr; //$NON-NLS-1$
int dayNbr = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
String day = (dayNbr < 10 ? "0" : empty) + dayNbr; //$NON-NLS-1$
int hourNbr = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
String hour = (hourNbr < 10 ? "0" : empty) + hourNbr; //$NON-NLS-1$
int minuteNbr = Calendar.getInstance().get(Calendar.MINUTE);
String minute = (minuteNbr < 10 ? "0" : empty) + minuteNbr; //$NON-NLS-1$
return empty + Calendar.getInstance().get(Calendar.YEAR) + month + day + hour + minute;
}
/**
* Sets the global variable used as the qualifier replacement during calls to
* {@link #replaceQualifierInVersion(String, String, String, Properties)}
* Setting the qualifier to <code>null</code> will result in the default
* date qualifier being used.
* @param globalQualifier string replacement or <code>null</code>
*/
public static void setGlobalQualifier(String globalQualifier) {
if (globalQualifier == null || globalQualifier.length() == 0)
QualifierReplacer.globalQualifier = null;
else if (globalQualifier.length() > 0 && globalQualifier.charAt(0) != '$')
QualifierReplacer.globalQualifier = globalQualifier;
}
}