package de.tobiyas.racesandclasses.standalonegui.data.option; import java.awt.Font; import java.awt.GridLayout; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import javax.swing.JLabel; import javax.swing.JPanel; public abstract class AbstractTraitConfigOption implements TraitConfigOption { /** * If the Element needs Save. */ protected boolean needsSave = false; /** * The Name of the option. */ protected final String name; /** * The Type this is. */ protected final OptionType optionType; /** * The options to choose. */ protected final Set<String> options = new HashSet<String>(); /** * If the field is optional. */ protected final boolean optional; /** * If the Value is created. */ protected boolean created = false; public AbstractTraitConfigOption(OptionType type, String name, boolean optional) { this.optionType = type; this.name = name; this.optional = optional; } @Override public boolean isOptional() { return optional; } @Override public boolean isCreated(){ return created; } @Override public void setCreated(boolean created){ this.created = created; } @Override public String getName() { return name; } @Override public OptionType getOptionType() { return optionType; } @Override public Set<String> options() { return options; } @Override public TraitConfigOption setOptions(Set<String> options) { this.options.clear(); this.options.addAll(options); return this; } @Override public TraitConfigOption setOptions(String... options) { this.options.clear(); this.options.addAll(Arrays.asList(options)); return this; } @Override public boolean isAcceptable(String value) { for(String accepted : options){ if(value.equalsIgnoreCase(accepted)) return true; } return false; } /** * Adds idividual Panels to the Panel. * * @param panel to add to */ public abstract void addWithConfigOption(JPanel panel); @Override public int hashCode() { return name.hashCode(); } @Override public boolean equals(Object other) { if(!(other instanceof AbstractTraitConfigOption)) return false; return name.equals(((AbstractTraitConfigOption)other).name); } /** * Generates an empty pane with only the Header. * @return */ protected JPanel generateEmptyRightPanel(){ JPanel mainPanel = new JPanel(); mainPanel.setLayout(new GridLayout(10,1)); JLabel header = new JLabel("Option: " + name); header.setHorizontalAlignment(JLabel.CENTER); header.setFont(new Font(header.getFont().getFontName(), Font.BOLD, header.getFont().getSize())); mainPanel.add(header); return mainPanel; } @Override public void reset() { this.created = false; } @Override public int compareTo(TraitConfigOption other) { return name.compareTo(other.getName()); } @Override public boolean needsSave() { return needsSave; } @Override public void notifySaved() { this.needsSave = false; } }