
com.jidesoft.converter.ObjectConverterManager Maven / Gradle / Ivy
/*
* @(#) ObjectConverterManager.java
*
* Copyright 2002 - 2003 JIDE Software. All rights reserved.
*/
package com.jidesoft.converter;
import java.awt.*;
import java.io.File;
import java.util.Calendar;
import java.util.Date;
/**
* A global object that can register converter with a type and a ConverterContext.
*/
public class ObjectConverterManager {
private static CacheMap _cache = new CacheMap(ConverterContext.DEFAULT_CONTEXT);
private static ObjectConverter _defaultConverter = new DefaultObjectConverter();
/**
* Registers a converter with the type specified as class and a converter context specified as context.
*
* @param clazz the type of which the converter will registered.
* @param converter the converter to be registered
* @param context the converter context.
*/
public static void registerConverter(Class> clazz, ObjectConverter converter, ConverterContext context) {
if (clazz == null) {
throw new IllegalArgumentException("Parameter class cannot be null");
}
if (context == null) {
context = ConverterContext.DEFAULT_CONTEXT;
}
if (isAutoInit() && !_initing) {
initDefaultConverter();
}
_cache.register(clazz, converter, context);
}
/**
* Registers as the default converter with type specified as clazz.
*
* @param clazz the type of which the converter will be registered.
* @param converter the converter to be registered
*/
public static void registerConverter(Class> clazz, ObjectConverter converter) {
registerConverter(clazz, converter, ConverterContext.DEFAULT_CONTEXT);
}
/**
* Unregisters converter associated with clazz and context.
*
* @param clazz the type of which the converter will be unregistered.
* @param context the converter context.
*/
public static void unregisterConverter(Class> clazz, ConverterContext context) {
if (context == null) {
context = ConverterContext.DEFAULT_CONTEXT;
}
if (isAutoInit() && !_initing) {
initDefaultConverter();
}
_cache.unregister(clazz, context);
}
/**
* Unregisters converter associated with clazz.
*
* @param clazz the type of which the converter will be unregistered.
*/
public static void unregisterConverter(Class> clazz) {
unregisterConverter(clazz, ConverterContext.DEFAULT_CONTEXT);
}
/**
* Unregisters all the converters which registered before.
*/
public static void unregisterAllConverters() {
_cache.clear();
}
/**
* Gets the registered converter associated with class and context.
*
* @param clazz the type of which the converter will be registered.
* @param context the converter context.
* @return the registered converter.
*/
public static ObjectConverter getConverter(Class> clazz, ConverterContext context) {
if (isAutoInit()) {
initDefaultConverter();
}
if (context == null) {
context = ConverterContext.DEFAULT_CONTEXT;
}
ObjectConverter converter = _cache.getRegisteredObject(clazz, context);
if (converter != null) {
return converter;
}
else {
return _defaultConverter;
}
}
/**
* Gets the converter associated with the type.
*
* @param clazz type
* @return the converter
*/
public static ObjectConverter getConverter(Class> clazz) {
return getConverter(clazz, ConverterContext.DEFAULT_CONTEXT);
}
/**
* Converts an object to string using default converter context.
*
* @param object object to be converted.
* @return the string
*/
public static String toString(Object object) {
if (object != null)
return toString(object, object.getClass(), ConverterContext.DEFAULT_CONTEXT);
else
return "";
}
/**
* Converts an object to string using default converter context.
*
* @param object object to be converted.
* @param clazz type of the object
* @return the string
*/
public static String toString(Object object, Class> clazz) {
return toString(object, clazz, ConverterContext.DEFAULT_CONTEXT);
}
/**
* Converts an object to string using converter context sepcified.
*
* @param object object to be converted.
* @param clazz type of the object
* @param context converter context
* @return the string converted from object
*/
public static String toString(Object object, Class> clazz, ConverterContext context) {
ObjectConverter converter = getConverter(clazz, context);
if (converter != null && converter.supportToString(object, context)) {
return converter.toString(object, context);
}
else if (object == null) {
return "";
}
else {
return object.toString();
}
}
/**
* Converts from a string to an object with type class.
*
* @param string the string to be converted
* @param clazz the type to be converted to
* @return the object of type class which is converted from string
*/
public static Object fromString(String string, Class> clazz) {
return fromString(string, clazz, ConverterContext.DEFAULT_CONTEXT);
}
/**
* Converts from a string to an object with type class using the converter context.
*
* @param string the string to be converted
* @param clazz the type to be converted to
* @param context converter context to be used
* @return the object of type class which is converted from string
*/
public static Object fromString(String string, Class> clazz, ConverterContext context) {
ObjectConverter converter = getConverter(clazz, context);
if (converter != null && converter.supportFromString(string, context)) {
return converter.fromString(string, context);
}
else {
return null;
}
}
private static boolean _inited = false;
private static boolean _initing = false;
private static boolean _autoInit = true;
/**
* Checks the value of autoInit.
*
* @return true or false.
* @see #setAutoInit(boolean)
*/
public static boolean isAutoInit() {
return _autoInit;
}
/**
* Sets autoInit to true or false. If autoInit is true, whenever someone tries to call methods like
* as toString or fromString, {@link #initDefaultConverter()} will be called if it has never be called.
* By default, autoInit is true.
*
* This might affect the behavior if users provide their own converters and want to overwrite
* default converters. In this case, instead of depending on autoInit to initialize default converters,
* you should call {@link #initDefaultConverter()} first, then call registerConverter to add your own converters.
*
* @param autoInit true or false.
*/
public static void setAutoInit(boolean autoInit) {
_autoInit = autoInit;
}
/**
* Adds a listener to the list that's notified each time a change
* to the manager occurs.
*
* @param l the RegistrationListener
*/
public static void addRegistrationListener(RegistrationListener l) {
_cache.addRegistrationListener(l);
}
/**
* Removes a listener from the list that's notified each time a
* change to the manager occurs.
*
* @param l the RegistrationListener
*/
public static void removeRegistrationListener(RegistrationListener l) {
_cache.removeRegistrationListener(l);
}
/**
* Returns an array of all the registration listeners
* registered on this manager.
*
* @return all of this registration's RegistrationListener
s
* or an empty array if no registration listeners are currently registered
* @see #addRegistrationListener
* @see #removeRegistrationListener
*/
public static RegistrationListener[] getRegistrationListeners() {
return _cache.getRegistrationListeners();
}
/**
* Gets the available ConverterContexts registered with the class.
*
* @param clazz the class.
* @return the available ConverterContexts.
*/
public static ConverterContext[] getConverterContexts(Class> clazz) {
return _cache.getKeys(clazz, new ConverterContext[0]);
}
/**
* Initialize default converters. Please make sure you call this method before you use any
* converter related classes. By default we register following converters.
*
* - registerConverter(String.class, new DefaultObjectConverter());
*
- registerConverter(Integer.class, new IntegerConverter());
*
- registerConverter(int.class, new IntegerConverter());
*
- registerConverter(Integer.class, new NaturalNumberConverter(), NaturalNumberConverter.CONTEXT);
*
- registerConverter(int.class, new NaturalNumberConverter(), NaturalNumberConverter.CONTEXT);
*
- registerConverter(Long.class, new LongConverter());
*
- registerConverter(long.class, new LongConverter());
*
- registerConverter(Double.class, new DoubleConverter());
*
- registerConverter(double.class, new DoubleConverter());
*
- registerConverter(Float.class, new FloatConverter());
*
- registerConverter(float.class, new FloatConverter());
*
- registerConverter(Short.class, new ShortConverter());
*
- registerConverter(short.class, new ShortConverter());
*
- registerConverter(Rectangle.class, new RectangleConverter());
*
- registerConverter(Point.class, new PointConverter());
*
- registerConverter(Insets.class, new InsetsConverter());
*
- registerConverter(Dimension.class, new DimensionConverter());
*
- registerConverter(Boolean.class, new BooleanConverter());
*
- registerConverter(boolean.class, new BooleanConverter());
*
- registerConverter(File.class, new FileConverter());
*
- registerConverter(String.class, new FontNameConverter(), FontNameConverter.CONTEXT);
*
- registerConverter(Date.class, new DateConverter());
*
- registerConverter(Calendar.class, new CalendarConverter());
*
- registerConverter(Calendar.class, new MonthConverter(), MonthConverter.CONTEXT_MONTH);
*
- registerConverter(Color.class, new RgbColorConverter());
*
- registerConverter(Color.class, new HexColorConverter(), ColorConverter.CONTEXT_HEX);
*
- registerConverter(String[].class, new StringArrayConverter());
*
*/
public static void initDefaultConverter() {
if (_inited) {
return;
}
_initing = true;
try {
registerConverter(String.class, new DefaultObjectConverter());
registerConverter(char[].class, new PasswordConverter(), PasswordConverter.CONTEXT);
IntegerConverter integerConverter = new IntegerConverter();
registerConverter(Integer.class, integerConverter);
registerConverter(int.class, integerConverter);
NaturalNumberConverter naturalNumberConverter = new NaturalNumberConverter();
registerConverter(Integer.class, naturalNumberConverter, NaturalNumberConverter.CONTEXT);
registerConverter(int.class, naturalNumberConverter, NaturalNumberConverter.CONTEXT);
LongConverter longConverter = new LongConverter();
registerConverter(Long.class, longConverter);
registerConverter(long.class, longConverter);
DoubleConverter doubleConverter = new DoubleConverter();
registerConverter(Double.class, doubleConverter);
registerConverter(double.class, doubleConverter);
FloatConverter floatConverter = new FloatConverter();
registerConverter(Float.class, floatConverter);
registerConverter(float.class, floatConverter);
ShortConverter shortConverter = new ShortConverter();
registerConverter(Short.class, shortConverter);
registerConverter(short.class, shortConverter);
ByteConverter byteConverter = new ByteConverter();
registerConverter(Byte.class, byteConverter);
registerConverter(byte.class, byteConverter);
registerConverter(Rectangle.class, new RectangleConverter());
registerConverter(Point.class, new PointConverter());
registerConverter(Insets.class, new InsetsConverter());
registerConverter(Dimension.class, new DimensionConverter());
BooleanConverter booleanConverter = new BooleanConverter();
registerConverter(Boolean.class, booleanConverter);
registerConverter(boolean.class, booleanConverter);
registerConverter(File.class, new FileConverter());
registerConverter(String.class, new FontNameConverter(), FontNameConverter.CONTEXT);
DateConverter dateConverter = new DateConverter();
registerConverter(Date.class, dateConverter);
registerConverter(Date.class, dateConverter, DateConverter.DATETIME_CONTEXT);
registerConverter(Date.class, dateConverter, DateConverter.TIME_CONTEXT);
CalendarConverter calendarConverter = new CalendarConverter();
registerConverter(Calendar.class, calendarConverter);
registerConverter(Calendar.class, calendarConverter, DateConverter.DATETIME_CONTEXT);
registerConverter(Calendar.class, calendarConverter, DateConverter.TIME_CONTEXT);
registerConverter(Calendar.class, new MonthConverter(), MonthConverter.CONTEXT_MONTH);
registerConverter(Color.class, new RgbColorConverter());
registerConverter(Color.class, new HexColorConverter(), ColorConverter.CONTEXT_HEX);
registerConverter(String[].class, new StringArrayConverter());
QuarterNameConverter quarterNameConverter = new QuarterNameConverter();
registerConverter(int.class, quarterNameConverter, QuarterNameConverter.CONTEXT);
registerConverter(Integer.class, quarterNameConverter, QuarterNameConverter.CONTEXT);
registerConverter(Font.class, new FontConverter());
CurrencyConverter currencyConverter = new CurrencyConverter();
registerConverter(Float.class, currencyConverter, CurrencyConverter.CONTEXT);
registerConverter(float.class, currencyConverter, CurrencyConverter.CONTEXT);
registerConverter(Double.class, currencyConverter, CurrencyConverter.CONTEXT);
registerConverter(double.class, currencyConverter, CurrencyConverter.CONTEXT);
PercentConverter percentConverter = new PercentConverter();
registerConverter(Float.class, percentConverter, PercentConverter.CONTEXT);
registerConverter(float.class, percentConverter, PercentConverter.CONTEXT);
registerConverter(Double.class, percentConverter, PercentConverter.CONTEXT);
registerConverter(double.class, percentConverter, PercentConverter.CONTEXT);
MonthNameConverter monthNameConverter = new MonthNameConverter();
registerConverter(Integer.class, monthNameConverter, MonthNameConverter.CONTEXT);
registerConverter(int.class, monthNameConverter, MonthNameConverter.CONTEXT);
YearNameConverter yearNameConverter = new YearNameConverter();
registerConverter(Integer.class, yearNameConverter, YearNameConverter.CONTEXT);
registerConverter(int.class, yearNameConverter, YearNameConverter.CONTEXT);
ObjectConverterManager.registerConverter(int[].class, new DefaultArrayConverter("; ", int.class));
registerConverter(Object[].class, new DefaultArrayConverter("; ", Object.class));
registerConverter(String[].class, new DefaultArrayConverter("; ", String.class));
}
finally {
_initing = false;
_inited = true;
}
}
/**
* If {@link #initDefaultConverter()} is called once, calling it again will have no effect because an internal flag is set.
* This method will reset the internal flag so that you can call {@link #initDefaultConverter()} in case you unresgister all
* converters using {@link #unregisterAllConverters()}.
*/
public static void resetInit() {
_inited = false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy