package com.framsticks.params; import java.lang.reflect.Field; import org.apache.log4j.Logger; import com.framsticks.util.lang.Delimeted; /** * The class Flags contains constants connected with parameter features as * well as feedback about set operation (when setting parameter value). * * Based on c++ defines located in: cpp/gdk/param.h * * @author Jarek Szymczak * (please replace name and surname with my personal data) * * @@author Piotr Sniegowski */ public final class Flags { private final static Logger log = Logger.getLogger(Flags.class.getName()); public static final int READONLY = 1; public static final int DONTSAVE = 2; public static final int USERREADONLY = 16; public static final int USERHIDDEN = 32; public static final int MUTALLOCENTRY = 64; public static final int MUTALLOCDATA = 128; public static final int NOSTATIC = 256; public static final int CONST = 512; public static final int CANOMITNAME = 1024; public static final int DONTLOAD = 2048; public static final int PSET_RONLY = 1; public static final int PSET_CHANGED = 2; public static final int PSET_HITMIN = 4; public static final int PSET_HITMAX = 8; public static String write(int flags, String empty) { Delimeted d = new Delimeted("+", empty); try { for (Field f : Flags.class.getDeclaredFields()) { if (f.getType() != int.class) { continue; } if ((flags & f.getInt(null)) != 0) { d.append(f.getName()); } } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } return d.build(); } public static Integer read(String flags) { Integer allFlags = 0; String[] flagsSplitted = flags.split("\\+"); for (String flag : flagsSplitted) { try { allFlags |= Integer.valueOf(flag); } catch (NumberFormatException ex) { try { Field field = Flags.class.getDeclaredField(flag.toUpperCase()); allFlags |= Integer.parseInt(field.get(null).toString()); } catch (SecurityException e) { log.warn("security exception was thrown while trying to read flag (" + flag + ")"); } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { log.warn("selected flag is not known (" + flag + ")"); } } } return allFlags; } }