/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.broadcast.gui.plugin;
import net.codjo.broadcast.common.message.BroadcastRequest;
import net.codjo.broadcast.gui.BroadcastFilesAction;
import net.codjo.broadcast.gui.BroadcastSectionsAction;
import net.codjo.broadcast.gui.GuiPreference;
import net.codjo.broadcast.gui.TemporaryWrapper;
import net.codjo.broadcast.gui.selector.BroadcastSelectorsAction;
import net.codjo.broadcast.gui.wizard.BroadcastSelectionStep;
import net.codjo.broadcast.gui.wizard.BroadcastTemplateRequestFactory;
import net.codjo.broadcast.gui.wizard.BroadcastVtomCaller;
import net.codjo.broadcast.gui.wizard.BroadcastWizardSummaryGui;
import net.codjo.gui.toolkit.wizard.Wizard;
import net.codjo.i18n.common.Language;
import net.codjo.i18n.common.TranslationManager;
import net.codjo.mad.client.plugin.MadConnectionPlugin;
import net.codjo.mad.gui.base.GuiConfiguration;
import net.codjo.mad.gui.framework.MutableGuiContext;
import net.codjo.mad.gui.i18n.AbstractInternationalizableGuiPlugin;
import net.codjo.mad.gui.plugin.MadGuiPlugin;
import net.codjo.mad.gui.request.PreferenceFactory;
import net.codjo.workflow.gui.plugin.WorkflowGuiPlugin;
import net.codjo.workflow.gui.wizard.CommandFile;
import net.codjo.workflow.gui.wizard.DefaultJobGui;
import net.codjo.workflow.gui.wizard.FinalStep;
import net.codjo.workflow.gui.wizard.WizardAction;
import net.codjo.workflow.gui.wizard.WizardBuilder;
import java.io.File;
import java.util.Arrays;
import javax.swing.Action;
import javax.swing.ImageIcon;
import org.xml.sax.InputSource;
/**
* Plugin permettant d'enregistrer les pr�f�rences des familles d'export.
*/
public final class BroadcastGuiPlugin extends AbstractInternationalizableGuiPlugin {
public static final String BROADCAST_VTOM_PARAMETER = "broadcast.vtom";
private static final String BROADCAST_PREFERENCE_FILE_NAME = "broadcastPreference.xml";
public static final String BROADCAST_SELECTOR_PREFERENCE_ID = "BroadcastSelectorsWindow";
private static final String BROADCAST_SELECTOR_PREFERENCE_FILE
= "selector/broadcastSelectorPreference.xml";
private static final String BROADCAST_SECTIONS_PREFERENCE_ID = "BroadcastSectionsWindow";
private static final String BROADCAST_COLUMNS_PREFERENCE_ID = "BroadcastColumnsWindow";
private static final String BROADCAST_FILES_PREFERENCE_ID = "BroadcastFilesWindow";
private static final String BROADCAST_CONTENTS_PREFERENCE_ID = "BroadcastFileContentsWindow";
private static final String WIZARD_IMAGE = "wizard.broadcast.gif";
private static final String WIZARD_DESCRIPTION = "Assistant diffusion manuelle";
private static final String WIZARD_ACTION = "BroadcastWizard";
private static final String WIZARD_ICON = "/net/codjo/broadcast/gui/wizard/broadcast.gif";
private static final String BROADCAST_FILES_ACTION = "BroadcastFilesAction";
private static final String BROADCAST_SECTIONS_ACTION = "BroadcastSectionsAction";
private static final String BROADCAST_SELECTORS_ACTION = "BroadcastSelectorsAction";
private final BroadcastGuiPluginConfiguration configuration;
private MadGuiPlugin madGuiPlugin;
public BroadcastGuiPlugin(Class<? extends GuiPreference>[] preferenceClasses,
MadConnectionPlugin madConnectionPlugin,
WorkflowGuiPlugin workflowGuiPlugin) {
configuration = new BroadcastGuiPluginConfiguration(madConnectionPlugin.getOperations());
configuration.addAllGuiPreferences(Arrays.asList(preferenceClasses));
workflowGuiPlugin.getConfiguration()
.setTaskManagerJobIcon(BroadcastRequest.BROADCAST_JOB_TYPE,
new ImageIcon(getClass().getResource("/images/job.broadcast.png")));
}
public BroadcastGuiPlugin(MadGuiPlugin madGuiPlugin,
MadConnectionPlugin madConnectionPlugin,
WorkflowGuiPlugin workflowGuiPlugin) {
this.madGuiPlugin = madGuiPlugin;
configuration = new BroadcastGuiPluginConfiguration(madConnectionPlugin.getOperations());
workflowGuiPlugin.getConfiguration()
.setTaskManagerJobIcon(BroadcastRequest.BROADCAST_JOB_TYPE,
new ImageIcon(getClass().getResource("/images/job.broadcast.png")));
}
public BroadcastGuiPluginConfiguration getConfiguration() {
return configuration;
}
@Override
public void initGui(GuiConfiguration guiConfiguration) throws Exception {
super.initGui(guiConfiguration);
for (GuiPreference guiPreference : configuration.createGuiPreferenceList(guiConfiguration)) {
TemporaryWrapper.addPreferences(guiPreference);
}
if (madGuiPlugin != null) {
loadBroadcastPreferences();
if (configuration.isGenericSelectorInstalled()) {
loadBroadcastGenericSelectorPreference();
}
}
registerActions(guiConfiguration, guiConfiguration.getGuiContext());
}
@Override
protected void registerLanguageBundles(TranslationManager translationManager) {
translationManager.addBundle("net.codjo.broadcast.gui.i18n", Language.FR);
translationManager.addBundle("net.codjo.broadcast.gui.i18n", Language.EN);
}
void registerActions(GuiConfiguration guiConfiguration, MutableGuiContext guiContext) {
WizardAction wizardAction = createWizardAction(guiConfiguration);
guiConfiguration.registerAction(this, WIZARD_ACTION, wizardAction);
Action filesAction = new BroadcastFilesAction(guiContext);
guiConfiguration.registerAction(this, BROADCAST_FILES_ACTION, filesAction);
Action sectionsAction = new BroadcastSectionsAction(guiContext);
guiConfiguration.registerAction(this, BROADCAST_SECTIONS_ACTION, sectionsAction);
if (configuration.isGenericSelectorInstalled()) {
Action selectorsAction = new BroadcastSelectorsAction(guiContext);
guiConfiguration.registerAction(this, BROADCAST_SELECTORS_ACTION, selectorsAction);
}
}
void loadBroadcastGenericSelectorPreference() {
if (PreferenceFactory.containsPreferenceId(BROADCAST_SELECTOR_PREFERENCE_ID)) {
return;
}
InputSource inputSource =
new InputSource(getClass().getResourceAsStream(BROADCAST_SELECTOR_PREFERENCE_FILE));
madGuiPlugin.getConfiguration().addPreferenceMapping(inputSource);
}
void loadBroadcastPreferences() {
if (PreferenceFactory.containsPreferenceId(BROADCAST_COLUMNS_PREFERENCE_ID)
&& PreferenceFactory.containsPreferenceId(BROADCAST_FILES_PREFERENCE_ID)
&& PreferenceFactory.containsPreferenceId(BROADCAST_SECTIONS_PREFERENCE_ID)
&& PreferenceFactory.containsPreferenceId(BROADCAST_CONTENTS_PREFERENCE_ID)) {
return;
}
InputSource inputSource =
new InputSource(getClass().getResourceAsStream(BROADCAST_PREFERENCE_FILE_NAME));
madGuiPlugin.getConfiguration().addPreferenceMapping(inputSource);
}
private WizardAction createWizardAction(GuiConfiguration guiConfiguration) {
String file =
(String)guiConfiguration.getGuiContext().getProperty(BROADCAST_VTOM_PARAMETER);
return new WizardAction(guiConfiguration.getGuiContext(),
"net.codjo.broadcast.gui.plugin.BroadcastGuiPlugin#BroadcastWizard",
WIZARD_DESCRIPTION,
new DefaultWizardBuilder(new File(file), guiConfiguration.getGuiContext()),
WIZARD_ACTION,
WIZARD_ICON,
new ImageIcon(getClass().getResource(WIZARD_IMAGE)));
}
private class DefaultWizardBuilder implements WizardBuilder {
private final File file;
private MutableGuiContext guiContext;
DefaultWizardBuilder(File file, MutableGuiContext guiContext) {
this.file = file;
this.guiContext = guiContext;
}
public Wizard createWizard() {
FinalStep finalStep =
new FinalStep("BroadcastGuiPlugin.finalStep.title",
new BroadcastVtomCaller(new CommandFile(file)),
new BroadcastWizardSummaryGui(guiContext),
new DefaultJobGui(guiContext, "BroadcastGuiPlugin.VTOMProcess"),
new FinalStep.JobGuiData[]{
new FinalStep.JobGuiData(
new DefaultJobGui(guiContext, "BroadcastGuiPlugin.export"),
new BroadcastTemplateRequestFactory())
});
Wizard wizard = new Wizard();
wizard.addStep(new BroadcastSelectionStep(guiContext, getConfiguration().getWizardBroadcastSelector()));
configuration.getBroadcastWizardCustomizer().customizeWizard(wizard);
wizard.setFinalStep(finalStep);
return wizard;
}
}
}