package net.codjo.broadcast.gui.plugin; import net.codjo.broadcast.gui.GuiPreference; import net.codjo.broadcast.gui.wizard.BroadcastSelector; import net.codjo.broadcast.gui.wizard.DefaultBroadcastSelector; import net.codjo.mad.client.plugin.MadConnectionOperations; import net.codjo.mad.common.structure.StructureReader; import net.codjo.mad.gui.base.GuiConfiguration; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; /** * */ public class BroadcastGuiPluginConfiguration { private List<GuiPreferenceBuilder> guiPreferenceBuilders = new ArrayList<GuiPreferenceBuilder>(); private BroadcastWizardCustomizer broadcastWizardCustomizer = new PeriodBroadcastWizardCustomizer(); private boolean genericSelectorInstalled = false; private BroadcastSelector wizardBroadcastSelector; public BroadcastGuiPluginConfiguration(MadConnectionOperations madConnectionOperations) { wizardBroadcastSelector = new DefaultBroadcastSelector(madConnectionOperations, "selectAllBroadcastFiles"); } public void setWizardBroadcastSelector(BroadcastSelector wizardBroadcastSelector) { this.wizardBroadcastSelector = wizardBroadcastSelector; } public BroadcastSelector getWizardBroadcastSelector() { return wizardBroadcastSelector; } public void addGuiPreference(final Class<? extends GuiPreference> guiPreference) { guiPreferenceBuilders.add(new DefaultGuiPreferenceBuilder(guiPreference)); } public void addGuiPreference(GuiPreferenceBuilder guiPreference) { guiPreferenceBuilders.add(guiPreference); } public BroadcastWizardCustomizer getBroadcastWizardCustomizer() { return broadcastWizardCustomizer; } public void setBroadcastWizardCustomizer(BroadcastWizardCustomizer broadcastWizardCustomizer) { this.broadcastWizardCustomizer = broadcastWizardCustomizer; } public boolean isGenericSelectorInstalled() { return genericSelectorInstalled; } public void installGenericSelector() { this.genericSelectorInstalled = true; } public List<GuiPreference> createGuiPreferenceList(GuiConfiguration guiConfiguration) { try { List<GuiPreference> guiPreferences = new ArrayList<GuiPreference>(guiPreferenceBuilders.size()); for (GuiPreferenceBuilder builder : guiPreferenceBuilders) { guiPreferences.add(builder.createPreference(guiConfiguration)); } return guiPreferences; } catch (Exception e) { throw new IllegalStateException("Impossible de construire des preferences.", e); } } void addAllGuiPreferences(List<Class<? extends GuiPreference>> classes) { for (Class<? extends GuiPreference> guiPreferenceClass : classes) { addGuiPreference(guiPreferenceClass); } } private static class DefaultGuiPreferenceBuilder implements GuiPreferenceBuilder { private final Class<? extends GuiPreference> guiPreference; DefaultGuiPreferenceBuilder(Class<? extends GuiPreference> guiPreference) { this.guiPreference = guiPreference; } public GuiPreference createPreference(GuiConfiguration guiConfiguration) throws Exception { return createInstance(guiPreference, guiConfiguration.getStructureReader()); } private GuiPreference createInstance(Class<? extends GuiPreference> preferenceClass, StructureReader structureReader) throws Exception { Constructor<? extends GuiPreference> constructor = preferenceClass.getConstructor(StructureReader.class); return constructor.newInstance(structureReader); } } }