blob: e0dbbcbfec0cb6a80b80557b8ad0be1c4e6543e1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* Created on Jun 13, 2003
*/
package org.apache.jmeter.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Properties;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.jorphan.util.JOrphanUtils;
import org.apache.log.Logger;
public final class NameUpdater {
private static final Properties nameMap;
// Read-only access after class has been initialised
private static final Logger log = LoggingManager.getLoggerForClass();
private static final String NAME_UPDATER_PROPERTIES =
"META-INF/resources/org.apache.jmeter.nameupdater.properties"; // $NON-NLS-1$
static {
nameMap = new Properties();
FileInputStream fis = null;
File f = new File(JMeterUtils.getJMeterHome(),
JMeterUtils.getPropDefault("upgrade_properties", // $NON-NLS-1$
"/bin/upgrade.properties")); // $NON-NLS-1$
try {
fis = new FileInputStream(f);
nameMap.load(fis);
} catch (FileNotFoundException e) {
log.error("Could not find upgrade file: ", e);
} catch (IOException e) {
log.error("Error processing upgrade file: "+f.getPath(), e);
} finally {
JOrphanUtils.closeQuietly(fis);
}
//load additionnal name conversion rules from plugins
Enumeration<URL> enu = null;
try {
enu = JMeterUtils.class.getClassLoader().getResources(NAME_UPDATER_PROPERTIES);
} catch (IOException e) {
log.error("Error in finding additional nameupdater.properties files: ", e);
}
if(enu != null) {
while(enu.hasMoreElements()) {
URL ressourceUrl = enu.nextElement();
log.info("Processing "+ressourceUrl.toString());
Properties prop = new Properties();
InputStream is = null;
try {
is = ressourceUrl.openStream();
prop.load(is);
} catch (IOException e) {
log.error("Error processing upgrade file: " + ressourceUrl.getPath(), e);
} finally {
JOrphanUtils.closeQuietly(is);
}
@SuppressWarnings("unchecked") // names are Strings
Enumeration<String> propertyNames = (Enumeration<String>) prop.propertyNames();
while (propertyNames.hasMoreElements()) {
String key = propertyNames.nextElement();
if (!nameMap.contains(key)) {
nameMap.put(key, prop.get(key));
log.info("Added additional nameMap entry: " + key);
} else {
log.warn("Additional nameMap entry: '" + key + "' rejected as already defined.");
}
}
}
}
}
/**
* Looks up the class name; if that does not exist in the map,
* then defaults to the input name.
*
* @param className the classname from the script file
* @return the class name to use, possibly updated.
*/
public static String getCurrentName(String className) {
if (nameMap.containsKey(className)) {
String newName = nameMap.getProperty(className);
log.info("Upgrading class " + className + " to " + newName);
return newName;
}
return className;
}
/**
* Looks up test element / gui class combination; if that
* does not exist in the map, then defaults to getCurrentName(testClassName).
*
* @param testClassName - test element class name
* @param guiClassName - associated gui class name
* @return new test class name
*/
public static String getCurrentTestName(String testClassName, String guiClassName) {
String key = testClassName + "|" + guiClassName;
if (nameMap.containsKey(key)) {
String newName = nameMap.getProperty(key);
log.info("Upgrading " + key + " to " + newName);
return newName;
}
return getCurrentName(testClassName);
}
/**
* Looks up class name / property name combination; if that
* does not exist in the map, then defaults to input property name.
*
* @param propertyName - property name to check
* @param className - class name containing the property
* @return possibly updated property name
*/
public static String getCurrentName(String propertyName, String className) {
String key = className + "/" + propertyName;
if (nameMap.containsKey(key)) {
String newName = nameMap.getProperty(key);
log.info("Upgrading property " + propertyName + " to " + newName);
return newName;
}
return propertyName;
}
/**
* Looks up class name . property name / value combination;
* if that does not exist in the map, returns the original value.
*
* @param value the value to be checked
* @param propertyName the name of the property
* @param className the class containing the propery.
* @return the value, updated if necessary
*/
public static String getCurrentName(String value, String propertyName, String className) {
String key = className + "." + propertyName + "/" + value;
if (nameMap.containsKey(key)) {
String newValue = nameMap.getProperty(key);
log.info("Upgrading value " + value + " to " + newValue);
return newValue;
}
return value;
}
/**
* Private constructor to prevent instantiation.
*/
private NameUpdater() {
}
/**
* Check if a key is in the map; intended for use by
* {@link org.apache.jmeter.save.SaveService#checkClasses() SaveService#checkClasses()}
* only.
*
* @param key name of the key to check
* @return true if the key is in the map
*/
public static boolean isMapped(String key) {
return nameMap.containsKey(key);
}
}