/** * */ package ecologylab.serialization; import ecologylab.generic.Debug; /** * A TranslationsClassProvider is used to supply an array of Classes for a translation scope. They * are extensible so that subclasses can provide expanded lists of Classes. * * To use, one instantiates the specific subclass and invokes the provideClasses() method. * * @author Zachary O. Toups (zach@ecologylab.net) */ public abstract class TranslationsClassProvider extends Debug { private final Class[] providedClasses; /** * */ public TranslationsClassProvider() { providedClasses = specificSuppliedClasses(); } /** * Subclasses must override this method to provide their specific supplied classes. Subclasses of * subclasses should provide the combination of their own (new) class arrays and those of their * superclass. * * The combineClassArrays static method is useful for this. * * @return */ protected abstract Class[] specificSuppliedClasses(); /** * Convenience method for combining a number of Class arrays into a single array. * * @param classArray1 * @param classArray2 * @return */ protected static Class[] combineClassArrays(Class[]... classArrays) { int combinedArrayLength = 0; for (Class[] classArray : classArrays) { combinedArrayLength += classArray.length; } Class[] returnArray = new Class[combinedArrayLength]; int copyPos = 0; for (Class[] classArray : classArrays) { System.arraycopy(classArray, 0, returnArray, copyPos, classArray.length); copyPos += classArray.length; } return returnArray; } public final Class[] provideClasses() { return providedClasses; } }