
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcDimension.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcGeometry.*;
import com.ptc.pfc.pfcLayer.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcSession.*;

import java.lang.reflect.*;


public class Labeler2 {

	public static final int MAX_ARRAY_SIZE = FeatureType.__Last - 1;
	public static final String pfcPlacement[]		= initStringArray(Placement.class);
	public static final String pfcStdColor[]		= initStringArray(StdColor.class);
	public static final String pfcStdLineStyle[]	= initStringArray(StdLineStyle.class);
	public static final String pfcDimensionType[]	= initStringArray(DimensionType.class);
	public static final String pfcFeatureType[]		= initStringArray(FeatureType.class);
	public static final String pfcFeatureStatus[]	= initStringArray(FeatureStatus.class);
	public static final String pfcContourTraversal[] = initStringArray(ContourTraversal.class);
	public static final String pfcDisplayStatus[]	= initStringArray(DisplayStatus.class);
	public static final String pfcCGMExportType[]	= initStringArray(CGMExportType.class);
	public static final String pfcCGMScaleType[]	= initStringArray(CGMScaleType.class);
	public static final String pfcExportType[]		= initStringArray(ExportType.class);
	public static final String pfcModelType[]		= initStringArray(ModelType.class);
	public static final String pfcPlotPageRange[]	= initStringArray(PlotPageRange.class);
	public static final String pfcPlotPaperSize[]	= initStringArray(PlotPaperSize.class);
	public static final String pfcModelItemType[]	= initStringArray(ModelItemType.class);
	public static final String pfcParamValueType[]	= initStringArray(ParamValueType.class);
	public static final String pfcParamType[]		= initStringArray(ParamType.class);

	public static String [] initStringArray(Class typeclass) {
		String last_type = "__Last";
		int num_types,i,  j=0;
		Field temp [];
		Field last;
		String [] invalid;
		String [] ret;

		try {
			last=typeclass.getField(last_type);
			temp=typeclass.getFields();
		}
		catch (Throwable n) {
			invalid = new String [MAX_ARRAY_SIZE];
			for (i=0; i<MAX_ARRAY_SIZE; i++)
				invalid[i] = new String("invalid");
			return (invalid);
	 	}

		try {
			num_types=last.getInt(null);
		}
		catch (Throwable x) {
			invalid = new String [MAX_ARRAY_SIZE];
			for (i=0; i<MAX_ARRAY_SIZE; i++)
				invalid[i] = new String("invalid");
			return (invalid);
		}

		ret = new String [num_types];
		invalid = new String [num_types];
		for (i=0; i<num_types; i++)
			invalid[i]=new String ("invalid");

		try {
			for (i=0; i<Array.getLength(temp); i++) {
				if (typeclass.isInstance(temp[i].get(null))) {
					ret[j]=temp[i].getName();
					j++;
				}
			}
		}
		catch (Throwable x) {
			return (invalid);
		}
		return (ret);
	}
}
