RpcEnumTools.java

package eu.javaexperience.rpc.primitives;

import java.util.Collection;

import eu.javaexperience.collection.CollectionTools;
import eu.javaexperience.collection.enumerations.EnumTools;
import eu.javaexperience.datareprez.DataArray;
import eu.javaexperience.functional.BoolFunctions;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.reflect.CastTo;
import eu.javaexperience.transform.ConverterPublisher;

public class RpcEnumTools
{
	protected static final GetBy1<Boolean, ExportableEnum> EXPORTABLE_ENUM_FILTER = new GetBy1<Boolean, ExportableEnum>()
	{
		@Override
		public Boolean getBy(ExportableEnum a)
		{
			return a.isWordwideVisible();
		}
	};
	
	public static SymbolDescriptor[] exportPublicEnums(Class enumClass)
	{
		return exportFilteredEnums(enumClass, EXPORTABLE_ENUM_FILTER);
	}
	
	public static SymbolDescriptor[] exportFilteredEnums(Class enumClass, GetBy1<Boolean, ExportableEnum>... filter_false_drop)
	{
		ConverterPublisher conv =
		ConverterPublisher.createFromGetByWithPreFilter
		(
			SymbolDescriptor.CONVERTER,
			0 == filter_false_drop.length?
				BoolFunctions.always()
			:
			(GetBy1) BoolFunctions.and(filter_false_drop)
		);
		
		CollectionTools.copyInto(enumClass.getEnumConstants(), conv);
		
		return (SymbolDescriptor[]) conv.getDestination().toArray(SymbolDescriptor.emptySymbolDescriptorArray);
	}
	
	public static <E extends Enum> void copyNamesToArray(Collection<E> enumVals, DataArray arr)
	{
		for(E e:enumVals)
		{
			arr.putString(e.name());
		}
	}

}