blob: 0f33ced8343693cdd2579d39d6fa5e67ede974d8 [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.
*/
package org.netbeans.modules.j2ee.sun.validation.util;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.text.MessageFormat;
/**
* Utils is an utility class. Provides various utility methods.
*
*
* @author Rajeshwar Patil
* @version %I%, %G%
*/
public class Utils {
private static final String GET_PREFIX = "get"; //NOI18N
/** Creates a new instance of Utils */
public Utils() {
}
/**
* Gets the name from the absolute name/path
*
* @param absoluteName the complete path name
* @param delimiter the separator character used
* in the <code>absoluteName</code>
* @return the name
*/
public String getName(String absoluteName, int delimiter) {
if(null == absoluteName){
return absoluteName;
}
int index = absoluteName.lastIndexOf(delimiter);
if( index != -1) {
index = index + 1;
return absoluteName.substring(index);
} else {
return absoluteName;
}
}
/**
* Gets the parent of the given absolute name
*
* @param absoluteName the complete path name
* @param delimiter the separator character used
* in the <code>absoluteName</code>
* @return the parent of the given absolute name;
* returns <code>null</code> if the given name does not have parent.
*/
public String getParentName(String absoluteName, int delimiter) {
if(null == absoluteName){
return absoluteName;
}
int endIndex = absoluteName.lastIndexOf(delimiter);
if(endIndex != -1){
if(0 == endIndex){
return null;
} else {
return absoluteName.substring(0, endIndex);
}
} else {
return null;
}
}
/**
* Converts the first letter of the given string to Uppercase.
*
* @param string the input string
* @return the string with the Uppercase first letter
*/
public String upperCaseFirstLetter(String string)
{
if(string == null || string.length() <= 0){
return string;
}
return string.substring(0, 1).toUpperCase() + string.substring(1);
}
/**
* Creates an instance of the given type.
* Uses constructor with no arguments to instantiate the type object.
*
* @param type the type name
* @return the <code>Object</code> of the given <code>type</code>
*/
public Object createObject(String type) {
Object object = null;
try {
Class classObject = Class.forName(type);
object = classObject.newInstance();
} catch (InstantiationException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
} catch (ClassNotFoundException e) {
System.out.println(e);
}
return object;
}
/**
* Creates an instance of the type; given the <code>Class</code>
* object of the type. Uses constructor with no arguments to
* instantiate the type object.
*
* @param class the Class object of the type to create instance of.
* @return the <code>Object</code> of the given <code>type</code>
*/
public Object createObject(Class classObject) {
Object object = null;
try {
object = classObject.newInstance();
} catch (InstantiationException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
}
return object;
}
/**
* Creates an instance of the type; given the <code>Constructor</code>
* object of the type and the array of argument values.
* Uses constructor, represented by the input <code>Constructor</code>
* object.
*
* @param constructor the <code>Constructor</code> object of the type
* @param arguments an array of arugments to the constructor
* @return the <code>Object</code> of the given <code>type</code>
*/
public Object createObject(Constructor constructor,
Object[] arguments) {
//System.out.println ("Constructor: " + constructor.toString());
Object object = null;
try {
object = constructor.newInstance(arguments);
//System.out.println ("Object: " + object.toString());
return object;
} catch (InstantiationException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
} catch (IllegalArgumentException e) {
System.out.println(e);
} catch (InvocationTargetException e) {
System.out.println(e);
}
return object;
}
/**
* Gets a corresponding Constructor object of a given type,
* based on the Class objects of the arguments.
* Constructor object represents constructor which takes arguments
* represented by argumentClass array.
*
* @param type the type to get the Constructor of.
* @param argumentClass an array <code>Class</code> objects of the arugments
* @return the <code>Constructor</code> of the given <code>type</code>
*/
public Constructor getConstructor(String type,
Class[] argumentClass){
Constructor constructor = null;
Class classObject = getClass(type);
try {
constructor = classObject.getConstructor(argumentClass);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return constructor;
}
/**
* Gets a corresponding Constructor object of a given type,
* based on the Class objects of the arguments.
* Constructor object represents constructor which takes arguments
* represented by argumentClass array.
*
* @param classObject the <code>Class</code> object of the type to
* get Constructor of.
* @param argumentClass an array of <code>Class</code> objects of
* the arugments
* @return the <code>Constructor</code> of the given <code>type</code>
*/
public Constructor getConstructor(Class classObject,
Class[] argumentClass){
Constructor constructor = null;
try {
constructor = classObject.getConstructor(argumentClass);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return constructor;
}
/**
* Gets a <code>Class</code> object of the given <code>Object</code>.
*
* @param object the given <code>Object</code>
* @return the <code>Class</code> object of the given <code>Object</code>
*/
public Class getClass(Object object){
Class classObject = null;
classObject = object.getClass();
///System.out.println(classObject.toString());
return classObject;
}
/**
* Gets a <code>Class</code> object of the given type.
*
* @param object the given type
* @return the <code>Class</code> object of the given type
*/
public Class getClass(String type){
Class classObject = null;
try {
classObject = Class.forName(type);
} catch (ClassNotFoundException e) {
System.out.println(e);
}
return classObject;
}
/**
* Gets a Method object of a given type, based on method name and
* the Class objects of the arguments.
*
* @param type the type to fetch method of.
* @param methodName the name of the method to fetch
* <code>Method</code> object of.
* @param argumentClass an array of <code>Class</code> objects of
* the arugments
* @return the <code>Method</code> object of the given type
*/
public Method getMethod(String type, String methodName,
Class[] argumentClass){
Method method = null;
Class classObject = getClass(type);
try {
method = classObject.getMethod(methodName, argumentClass);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return method;
}
/**
* Gets a Method object of a given type, based on method name and
* the Class objects of the arguments.
*
* @param classObject the <code>Class</code> object of
* the type to fetch method of.
* @param methodName the name of the method to fetch
* <code>Method</code> object of.
* @param argumentClass an array of <code>Class</code> objects of
* the arugments
* @return the <code>Method</code> object of the given type
*/
public Method getMethod(Class classObject, String methodName,
Class[] argumentClass){
Method method = null;
try {
method = classObject.getMethod(methodName, argumentClass);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return method;
}
/**
* Invokes the method, on the given object with the given arguments.
* Invokes method, represented by the <code>Method</code> object.
*
* @param object the <code>Object</code> to invoke the method of
* @param method the method to be invoked
* @param arguments an array of <code>Objects</code> to be used as
* arugments to the method being invoked
* @return an <code>Object</code>, returned by the invoked method.
*/
public Object invoke(Object object, Method method,
Object[] arguments) {
Object result = null;
try {
result = method.invoke(object, arguments);
} catch (IllegalAccessException e) {
System.out.println(e);
} catch (InvocationTargetException e) {
System.out.println(e);
}
return result;
}
/**
* Gets the <code>Method</code> object of the given
* type; given the method name.
*
* @param type the given type, to get the method of
* @param methodName the method name to get the
* <code>Method</code> object of
* @return a <code>Method</code> object of the given type
*/
public Method getMethod(String type, String methodName){
Method method = null;
Class classObject = getClass(type);
try {
method = classObject.getMethod(methodName);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return method;
}
/**
* Gets the <code>Method</code> object of the given
* type; given the method name.
*
* @param classObject the <codeb>Class</code> object
* of the given type, to get the method of
* @param methodName the method name to get the
* <code>Method</code> object of
* @return a <code>Method</code> object of the given type
*/
public Method getMethod(Class classObject,
String methodName){
Method method = null;
try {
method = classObject.getMethod(methodName);
} catch (NoSuchMethodException e) {
System.out.println(e);
}
return method;
}
/**
* Invokes the method, on the given object.
* Invokes method, represented by the Method object.
*
* @param object the <codeb>Olass</code> to invoke the method of
* @param method the method to be invoked
* @return an <code>Object</code> returned by the invoked method
*/
public Object invoke(Object object, Method method) {
Object result = null;
try {
result = method.invoke(object);
} catch (IllegalAccessException e) {
System.out.println(e);
} catch (InvocationTargetException e) {
System.out.println(e);
}
return result;
}
/**
* Removes any hypens ( - ) from the given string.
* When it removes a hypen, it converts next immidiate
* character, if any, to an Uppercase.(schema2beans convention)
* @param string the input string
* @return a <code>String</code> resulted after removing the hypens
*/
public String eleminateHypen(String string){
if(!(string == null || string.length() <= 0)){
int index = string.indexOf('-');
while(index != -1){
if(index == 0){
string = string.substring(1);
} else {
if(index == (string.length() - 1)){
string = string.substring(0,string.length()-1);
} else {
string = string.substring(0,index) +
upperCaseFirstLetter(string.substring(index + 1));
}
}
index = string.indexOf('-');
}
}
return string;
}
/**
* Constructs a method name from element's bean
* name for a given prefix.(schema2beans convention)
*
* @param elementName the given element name
* @param prefix the given prefix
* @return a method name formed from the given name and the prefix
*/
public String methodNameFromBeanName(String elementName,
String prefix){
if((null == elementName) || (null == prefix) ||
(prefix.length() <= 0 )){
return elementName;
}
String methodName = upperCaseFirstLetter(elementName);
return methodName = prefix + methodName;
}
/**
* Constructs a method name from element's dtd name
* name for a given prefix.(schema2beans convention)
*
* @param elementName the given element name
* @param prefix the given prefix
* @return a method name formed from the given name and the prefix
*/
public String methodNameFromDtdName(String elementName,
String prefix){
return methodNameFromBeanName(eleminateHypen(elementName), prefix);
}
/**
* Gets an element from the given <code>Object</code>;
* given the name of the element.
*
* @param elementName the name of the element to get from the given object
* @param object the given object
* @return the retrieved element from the given object; returns null if the
* following cases :
* the given <code>object</code> is null
* the given <code>elementName</code> is null or zero length.
*/
public Object getElement(String elementName, Object object){
//Consvert the first letter of elementName to Uppercase
//Construct method name by appending given "get" to elementName //NOI18N
//Invoke this method on object to get the required value
if((null == object) || (null == elementName) ||
(elementName.length() <= 0)){
return null;
}
String methodName =
methodNameFromDtdName(elementName, GET_PREFIX); //NOI18N
Method getMethod = null;
getMethod = getMethod(getClass(object), methodName);
return invoke(object, getMethod);
}
/**
* Gets the elements from the given <code>Object</code>;
* given the name of the element.
*
* @param elementName the name of the elements to get from the given object
* @param object the given object
* @return an array of the retrieved elements from the given object; returns
* null in the following cases :
* the given <code>object</code> is null
* the given <code>elementName</code> is null or zero length.
*/
public Object[] getElements(String elementName, Object object){
return (Object[]) getElement(elementName, object);
}
/**
* Gets an element at a given index, from the given <code>Object</code>;
* given the name of the element.
*
* @param elementName the name of the element to get from the given object
* @param index the given index
* @param object the given object
* @return the retrieved element from the given object; returns null in the
* following cases:
* the given <code>object</code> is null
* the given <code>elementName</code> is null or zero length.
* the given <code>index</code> is less than zero.
*/
public Object getElement(String elementName, int index,
Object object){
//Consvert the first letter of elementName to Uppercase
//Construct method name by appending given "get" to elementName //NOI18N
//Invoke this method on object to get the required value
if((null == object) || (null == elementName) ||
(elementName.length() <= 0) || (index < 0)){
return null;
}
String methodName =
methodNameFromDtdName(elementName, GET_PREFIX); //NOI18N
Class[] argumentTypes = new Class[] {int.class};
Method getMethod = null;
getMethod = getMethod(getClass(object), methodName,
argumentTypes);
Integer in = Integer.valueOf(index);
Object[] argumentValues = new Object[] {in};
return invoke(object, getMethod, argumentValues);
}
/**
* Gets an element from the given <code>Object</code>;
* given the name of the element and prefix to use to for the method name.
*
* @param elementName the name of the element to get from the given object
* @param object the given object
* @param prefix the prefix to use to formulate the name of the fetch method
* @return Object the retrieved element from the given object; returns
* null if the following cases :
* the given <code>object</code> is null
* the given <code>elementName</code> is null or zero length.
*/
public Object getElement(String elementName, Object object,
String prefix){
//Consvert the first letter of elementName to Uppercase
//Construct method name by appending given "perfix" to elementName
//Invoke this method on object to get the required value
if((null == object) || (null == elementName) ||
(elementName.length() <= 0)){
return null;
}
String methodName = methodNameFromDtdName(elementName, prefix);
Class classObject = getClass(object);
Method method = getMethod(classObject, methodName);
return (Integer) invoke(object, method);
}
/**
* Gets an indexed name from a given name and index.
*
* @param name the given name
* @param index the given index
* @return the indexed name; returns null if the
* given <code>name</code> is null.
*/
public String getIndexedName(String name, int index){
if(name != null) {
String format =
BundleReader.getValue("Indexed_Name_Format"); //NOI18N
Object[] arguments = new Object[]{name, String.valueOf(index)};
name = MessageFormat.format(format, arguments);
}
return name;
}
/**
* Gets an Url object for a given relative path.
*/
public URL getUrlObject(String relativePath){
Class cl = getClass();
ClassLoader classLoader = cl.getClassLoader();
return classLoader.getResource(relativePath);
}
/**
* Gets an input stream for the given file.
*
* @param relavtiveFilePath the relative path name of the file.
*
* @return InputStream the input stream for the given file; returns null
* in case of failure.
*/
public InputStream getInputStream(String relavtiveFilePath){
InputStream inputStream = null;
URL url = null;
if(relavtiveFilePath != null){
url = getUrlObject(relavtiveFilePath);
if(url != null) {
try {
inputStream = url.openStream();
} catch (IOException exception){
System.out.println(exception.getMessage());
}
} else {
String format =
BundleReader.getValue("Error_does_not_exists"); //NOI18N
Object[] arguments =
new Object[]{"File", relavtiveFilePath}; //NOI18N
System.out.println(MessageFormat.format(format, arguments));
}
}
return inputStream;
}
/**
* Determines if the given file exists.
*
* @param relativePath the relative path name of the file.
*
* @return boolean true if the given file exists; else false.
*/
public boolean fileExists(String relativePath){
boolean returnValue = false;
InputStream inputStream = getInputStream(relativePath);
if(inputStream != null){
returnValue = true;
}
return returnValue;
}
}