cdc.util.enums.MaskToString Maven / Gradle / Ivy
package cdc.util.enums;
import java.util.ArrayList;
import java.util.List;
import cdc.util.args.Args;
import cdc.util.args.FormalArg;
import cdc.util.args.FormalArgs;
import cdc.util.args.Necessity;
import cdc.util.converters.Converter;
import cdc.util.converters.defaults.AbstractSequenceToString;
import cdc.util.lang.Introspection;
/**
* Converter from a mask to a string.
*
* @author Damien Carbonne
*
* @param The mask type.
* @param The value type.
*/
public class MaskToString, V> extends AbstractSequenceToString {
private final MaskSupport support;
private final Converter super V, String> converter;
public static final FormalArg> SUPPORT =
new FormalArg<>("support", Introspection.uncheckedCast(MaskSupport.class), Necessity.MANDATORY);
public static final FormalArg> CONVERTER =
new FormalArg<>("converter", Introspection.uncheckedCast(Converter.class), Necessity.MANDATORY);
public static final FormalArgs FPARAMS =
new FormalArgs(PREFIX,
SEPARATOR,
SUFFIX,
SUPPORT,
CONVERTER);
public MaskToString(MaskSupport maskSupport,
String prefix,
String separator,
String suffix,
Converter super V, String> converter) {
super(maskSupport.getMaskClass(), prefix, separator, suffix);
this.support = maskSupport;
this.converter = converter;
}
public final MaskSupport getMaskSupport() {
return support;
}
public final Converter super V, String> getConverter() {
return converter;
}
@Override
public String apply(M mask) {
// Create a sorted list in order of declarations of values in the supporting type.
final List list = new ArrayList<>();
for (final V value : support.getType().getValues()) {
if (mask.getValues().contains(value)) {
list.add(value);
}
}
return toString(converter, list);
}
@Override
public Args getParams() {
return Args.builder()
.setArg(PREFIX, getPrefix())
.setArg(SEPARATOR, getSeparator())
.setArg(SUFFIX, getSuffix())
.setArg(SUPPORT, getMaskSupport())
.setArg(CONVERTER, getConverter())
.build();
}
}