/** * Returns property transformer or throws {@link * com.aionemu.commons.configuration.TransformationException} if can't create new one. * * @param clazzToTransform Class that will is going to be transformed * @param tc {@link com.aionemu.commons.configuration.PropertyTransformer} class that will be * instantiated * @return instance of PropertyTransformer * @throws TransformationException if can't instantiate {@link * com.aionemu.commons.configuration.PropertyTransformer} */ @SuppressWarnings("rawtypes") public static PropertyTransformer newTransformer( Class clazzToTransform, Class<? extends PropertyTransformer> tc) throws TransformationException { // Just a hack, we can't set null to annotation value if (tc == PropertyTransformer.class) { tc = null; } if (tc != null) { try { return tc.newInstance(); } catch (Exception e) { throw new TransformationException("Can't instantiate property transfromer", e); } } if (clazzToTransform == Boolean.class || clazzToTransform == Boolean.TYPE) { return BooleanTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Byte.class || clazzToTransform == Byte.TYPE) { return ByteTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Character.class || clazzToTransform == Character.TYPE) { return CharTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Double.class || clazzToTransform == Double.TYPE) { return DoubleTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Float.class || clazzToTransform == Float.TYPE) { return FloatTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Integer.class || clazzToTransform == Integer.TYPE) { return IntegerTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Long.class || clazzToTransform == Long.TYPE) { return LongTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Short.class || clazzToTransform == Short.TYPE) { return ShortTransformer.SHARED_INSTANCE; } else if (clazzToTransform == String.class) { return StringTransformer.SHARED_INSTANCE; } else if (clazzToTransform.isEnum()) { return EnumTransformer.SHARED_INSTANCE; // TODO: Implement // } else if (ClassUtils.isSubclass(clazzToTransform, // Collection.class)) { // return new CollectionTransformer(); // } else if (clazzToTransform.isArray()) { // return new ArrayTransformer(); } else if (clazzToTransform == File.class) { return FileTransformer.SHARED_INSTANCE; } else if (ClassUtils.isSubclass(clazzToTransform, InetSocketAddress.class)) { return InetSocketAddressTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Pattern.class) { return PatternTransformer.SHARED_INSTANCE; } else if (clazzToTransform == Class.class) { return ClassTransformer.SHARED_INSTANCE; } else { throw new TransformationException( "Transformer not found for class " + clazzToTransform.getName()); } }
@SuppressWarnings("unchecked") @Override public void postLoad(Class<?>[] classes) { for (Class<?> c : classes) { if (log.isDebugEnabled()) log.debug("Load class " + c.getName()); if (!isValidClass(c)) continue; if (ClassUtils.isSubclass(c, InstanceHandler.class)) { Class<? extends InstanceHandler> tmp = (Class<? extends InstanceHandler>) c; if (tmp != null) { InstanceEngine.getInstance().addInstanceHandlerClass(tmp); } } } }