Class RenameHandler
- java.lang.Object
-
- org.joda.convert.RenameHandler
-
public final class RenameHandler extends java.lang.ObjectA general purpose utility for registering renames.This handles type and enum constant renames. For example, use as follows:
RenameHandler.INSTANCE.renamedType("org.joda.OldName", NewName.class); RenameHandler.INSTANCE.renamedEnum("CORRECT", Status.VALID); RenameHandler.INSTANCE.renamedEnum("INCORRECT", Status.INVALID);From v2.1, renames can be stored on the classpath in configuration files. The file location isMETA-INF/org/joda/convert/Renamed.ini. All files found in this location are read and processed. The format has two sections[types]and[enums]. The[types]section has lines of the formatoldClassName = newClassName. The[enums]section has lines of the formatoldEnumConstantName = enumClassName.newEnumConstantName. Lines starting with#are treated as comments.The recommended usage is to edit the static singleton before using other classes. Editing a static is acceptable because renames are driven by bytecode which is static. For additional security, an application should lock the rename handler instance once any types and enums have been registered using
lock().This class is thread-safe with concurrent caches.
- Since:
- 1.6
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.util.Map<java.lang.String,java.lang.Enum<?>>>enumRenamesThe enum renames.static RenameHandlerINSTANCEA mutable global instance.private booleanlockedThe lock flag.private static booleanLOGErrors in class initialization are hard to debug.private java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.Class<?>>typeRenamesThe type renames.
-
Constructor Summary
Constructors Modifier Constructor Description privateRenameHandler()Restricted constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidcheckNotLocked()static RenameHandlercreate()Creates an instance.static RenameHandlercreate(boolean loadFromClasspath)Creates an instance, providing the ability to load types in config files.private static RenameHandlercreateInstance()java.util.Map<java.lang.String,java.lang.Enum<?>>getEnumRenames(java.lang.Class<?> type)Gets the map of renamed for an enum type.java.util.Set<java.lang.Class<?>>getEnumTypesWithRenames()Gets the set of enum types that have renames.java.util.Map<java.lang.String,java.lang.Class<?>>getTypeRenames()Gets the map of renamed types.private voidloadFromClasspath()private java.util.List<java.lang.String>loadRenameFile(java.net.URL url)voidlock()Locks this instance of the rename handler.<T extends java.lang.Enum<T>>
TlookupEnum(java.lang.Class<T> type, java.lang.String name)Lookup an enum from a name, handling renames.java.lang.Class<?>lookupType(java.lang.String name)Lookup a type from a name, handling renames.private voidparseRenameFile(java.util.List<java.lang.String> lines, java.net.URL url)voidrenamedEnum(java.lang.String oldName, java.lang.Enum<?> currentValue)Register the fact that an enum constant was renamed.voidrenamedType(java.lang.String oldName, java.lang.Class<?> currentValue)Register the fact that a type was renamed.java.lang.StringtoString()
-
-
-
Field Detail
-
LOG
private static final boolean LOG
Errors in class initialization are hard to debug. Set -Dorg.joda.convert.debug=true on the command line to add extra logging to System.errNOTE! This also forces
StringConvertto be loaded before callingcreateInstance()which is vital to avoid horrid ordering issues when loading Renamed.ini classes that referenceStringConvert.
-
INSTANCE
public static final RenameHandler INSTANCE
A mutable global instance. This is a singleton instance which is mutated. It will be populated by the contents of theRenamed.iniconfiguration files.
-
locked
private volatile boolean locked
The lock flag.
-
typeRenames
private final java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.Class<?>> typeRenames
The type renames.
-
enumRenames
private final java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.util.Map<java.lang.String,java.lang.Enum<?>>> enumRenames
The enum renames.
-
-
Method Detail
-
createInstance
private static RenameHandler createInstance()
-
create
public static RenameHandler create()
Creates an instance.This is not normally used as the preferred option is to edit the singleton.
- Returns:
- a new instance, not null
-
create
public static RenameHandler create(boolean loadFromClasspath)
Creates an instance, providing the ability to load types in config files.This is not normally used as the preferred option is to edit the singleton.
If the flag is set to true, the classpath config files will be used to register types and enums.
- Parameters:
loadFromClasspath- whether to load any types in classpath config files- Returns:
- a new instance, not null
-
renamedType
public void renamedType(java.lang.String oldName, java.lang.Class<?> currentValue)Register the fact that a type was renamed.This handles the use case where a class is renamed.
- Parameters:
oldName- the old name of the type including the package name, not nullcurrentValue- the current type, not null
-
getTypeRenames
public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeRenames()
Gets the map of renamed types.An empty map is returned if there are no renames.
- Returns:
- a copy of the set of enum types with renames, not null
-
lookupType
public java.lang.Class<?> lookupType(java.lang.String name) throws java.lang.ClassNotFoundExceptionLookup a type from a name, handling renames.- Parameters:
name- the name of the type to lookup, not null- Returns:
- the type, not null
- Throws:
java.lang.ClassNotFoundException- if the name is not a valid type
-
renamedEnum
public void renamedEnum(java.lang.String oldName, java.lang.Enum<?> currentValue)Register the fact that an enum constant was renamed.This handles the use case where an enum constant is renamed, but the enum class remains the same.
- Parameters:
oldName- the old name of the enum constant, not nullcurrentValue- the current enum constant, not null
-
getEnumTypesWithRenames
public java.util.Set<java.lang.Class<?>> getEnumTypesWithRenames()
Gets the set of enum types that have renames.An empty set is returned if there are no renames.
- Returns:
- a copy of the set of enum types with renames, not null
-
getEnumRenames
public java.util.Map<java.lang.String,java.lang.Enum<?>> getEnumRenames(java.lang.Class<?> type)
Gets the map of renamed for an enum type.An empty map is returned if there are no renames.
- Parameters:
type- the enum type, not null- Returns:
- a copy of the set of enum renames, not null
-
lookupEnum
public <T extends java.lang.Enum<T>> T lookupEnum(java.lang.Class<T> type, java.lang.String name)Lookup an enum from a name, handling renames.- Type Parameters:
T- the type of the desired enum- Parameters:
type- the enum type, not nullname- the name of the enum to lookup, not null- Returns:
- the enum value, not null
- Throws:
java.lang.IllegalArgumentException- if the name is not a valid enum constant
-
lock
public void lock()
Locks this instance of the rename handler.For additional security, an application should lock the rename handler once any types and enums have been registered.
-
checkNotLocked
private void checkNotLocked()
-
loadFromClasspath
private void loadFromClasspath()
-
loadRenameFile
private java.util.List<java.lang.String> loadRenameFile(java.net.URL url) throws java.io.IOException- Throws:
java.io.IOException
-
parseRenameFile
private void parseRenameFile(java.util.List<java.lang.String> lines, java.net.URL url)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-