package net.codjo.segmentation.gui.plugin;
import net.codjo.agent.AgentContainer;
import net.codjo.agent.ContainerFailureException;
import net.codjo.agent.UserId;
import net.codjo.i18n.common.Language;
import net.codjo.i18n.common.TranslationManager;
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.Preference;
import static net.codjo.mad.gui.request.PreferenceFactory.addPreference;
import static net.codjo.mad.gui.request.PreferenceFactory.containsPreferenceId;
import static net.codjo.mad.gui.request.PreferenceFactory.getPreference;
import net.codjo.plugin.batch.BatchException;
import net.codjo.plugin.common.ApplicationCore;
import net.codjo.segmentation.common.message.SegmentationJobRequest;
import net.codjo.segmentation.gui.SegmentationGuiOperations;
import net.codjo.segmentation.gui.exportParam.ExportParametersAction;
import net.codjo.segmentation.gui.importParam.ImportParametersAction;
import net.codjo.segmentation.gui.results.SegmentationResultAction;
import net.codjo.segmentation.gui.settings.ClassificationSettingsAction;
import net.codjo.segmentation.gui.wizard.ClassificationWizardAction;
import net.codjo.workflow.common.schedule.ScheduleLauncher;
import net.codjo.workflow.common.subscribe.JobEventHandler;
import net.codjo.workflow.gui.plugin.WorkflowGuiPlugin;
import java.util.Map;
import javax.swing.ImageIcon;
import org.xml.sax.InputSource;
public class SegmentationGuiPlugin extends AbstractInternationalizableGuiPlugin {
public static final String JOB_TYPE = SegmentationJobRequest.SEGMENTATION_REQUEST_TYPE;
private static final String SETTINGS_ACTION = "ClassificationSettingsAction";
private static final String WIZARD_ACTION = "ClassificationWizardAction";
private static final String RESULTS_ACTION = "ClassificationResultsAction";
private static final String IMPORT_PARAMETERS_ACTION = "ImportParametersAction";
private static final String EXPORT_PARAMETERS_ACTION = "ExportParametersAction";
private static final String CLASSIFICATION_WINDOW_PREFERENCE_ID = "ClassificationWindow";
private static final String CLASS_STRUCT_WINDOW_PREFERENCE_ID = "ClassificationStructureWindow";
private static final String CLASS_WIZARD_WINDOW_PREFERENCE_ID = "ClassificationWizardWindow";
private static final String PREFERENCE_FILE_NAME = "segmentationPreference.xml";
public static final String SEGMENTATION_GUI_PLUGIN_OPERATIONS = "SegmentationGuiOperations";
public static final String SEGMENTATION_AXIS_TREE_MAX_DEPTH = "AxisTreeMaximumDepth";
private SegmentationGuiPluginConfiguration configuration = new SegmentationGuiPluginConfiguration();
private SegmentationGuiOperationsImpl operations = new SegmentationGuiOperationsImpl();
private final ApplicationCore applicationCore;
private final MadGuiPlugin madGuiPlugin;
private AgentContainer container;
private static final String MISSING_ANOMALY_ERROR
= "Vous devez fournir la pr�f�rence d'affichage des anomalies (segmentationGuiPlugin.getConfiguration().setClassificationAnomalyPreferenceId())";
public SegmentationGuiPlugin(ApplicationCore pluginManager,
MadGuiPlugin madGuiPlugin,
WorkflowGuiPlugin workflowGuiPlugin) {
this.applicationCore = pluginManager;
this.madGuiPlugin = madGuiPlugin;
workflowGuiPlugin.getConfiguration()
.setTaskManagerJobIcon(SegmentationJobRequest.SEGMENTATION_REQUEST_TYPE,
new ImageIcon(getClass().getResource("/images/job.segmentation.png")));
}
@Override
protected void registerLanguageBundles(TranslationManager translationManager) {
translationManager.addBundle("net.codjo.segmentation.gui.i18n", Language.FR);
translationManager.addBundle("net.codjo.segmentation.gui.i18n", Language.EN);
}
@Override
public void initGui(GuiConfiguration guiConfiguration) throws Exception {
super.initGui(guiConfiguration);
loadPreferences();
guiConfiguration.getGuiContext().putProperty(SEGMENTATION_GUI_PLUGIN_OPERATIONS, getOperations());
guiConfiguration.getGuiContext()
.putProperty(SEGMENTATION_AXIS_TREE_MAX_DEPTH, configuration.getMaximumNodeDepth());
registerActions(guiConfiguration, guiConfiguration.getGuiContext());
}
private void registerActions(GuiConfiguration guiConfiguration, MutableGuiContext guiContext)
throws Exception {
String applicationPreferenceId = configuration.getClassificationPreferenceId();
extendPreference(getPreference(CLASSIFICATION_WINDOW_PREFERENCE_ID), applicationPreferenceId);
ClassificationSettingsAction classificationSettingsAction
= new ClassificationSettingsAction(guiContext, CLASSIFICATION_WINDOW_PREFERENCE_ID,
configuration.getClassificationListCustomizer(),
configuration.getSettingsCustomizer());
guiConfiguration.registerAction(this, SETTINGS_ACTION, classificationSettingsAction);
String applicationWizardPreferenceId = configuration.getClassificationWizardPreferenceId();
extendPreference(getPreference(CLASS_WIZARD_WINDOW_PREFERENCE_ID), applicationWizardPreferenceId);
String postSegmentationTreatment = configuration.getPostSegmentationTreatment();
String anomalyPreferenceId = configuration.getClassificationAnomalyPreferenceId();
if (anomalyPreferenceId == null) {
throw new Exception(MISSING_ANOMALY_ERROR);
}
if (applicationWizardPreferenceId == null) {
applicationWizardPreferenceId = CLASS_WIZARD_WINDOW_PREFERENCE_ID;
}
ClassificationWizardAction wizardAction =
new ClassificationWizardAction(guiContext,
applicationWizardPreferenceId,
anomalyPreferenceId,
getConfiguration().getAnomalyLogWindowCustomizer(),
getConfiguration().getWizardCustomizer(),
postSegmentationTreatment);
guiConfiguration.registerAction(this, WIZARD_ACTION, wizardAction);
SegmentationResultAction resultsAction =
new SegmentationResultAction(guiContext, getConfiguration().getResultCustomizer());
guiConfiguration.registerAction(this, RESULTS_ACTION, resultsAction);
ImportParametersAction importParametersAction =
new ImportParametersAction(guiContext,
applicationCore.getAgentContainer(),
applicationCore.getGlobalComponent(UserId.class));
guiConfiguration.registerAction(this, IMPORT_PARAMETERS_ACTION, importParametersAction);
ExportParametersAction exportParametersAction =
new ExportParametersAction(guiContext,
applicationCore.getAgentContainer(),
applicationCore.getGlobalComponent(UserId.class));
guiConfiguration.registerAction(this, EXPORT_PARAMETERS_ACTION, exportParametersAction);
}
private void extendPreference(Preference libPreference, String applicationPreferenceId) {
if (applicationPreferenceId != null) {
Preference applicationPreference = getPreference(applicationPreferenceId);
libPreference.getColumns().addAll(applicationPreference.getColumns());
libPreference.getHiddenColumns().addAll(applicationPreference.getHiddenColumns());
if (applicationPreference.getDetailWindowClass() != null) {
libPreference.setDetailWindowClass(applicationPreference.getDetailWindowClass());
}
if (applicationPreference.getDelete() != null) {
libPreference.setDelete(applicationPreference.getDelete());
}
if (applicationPreference.getInsert() != null) {
libPreference.setInsert(applicationPreference.getInsert());
}
if (applicationPreference.getUpdate() != null) {
libPreference.setUpdate(applicationPreference.getUpdate());
}
if (applicationPreference.getSelectAll() != null) {
libPreference.setSelectAll(applicationPreference.getSelectAll());
}
if (applicationPreference.getSelectByPk() != null) {
libPreference.setSelectByPk(applicationPreference.getSelectByPk());
}
addPreference(libPreference);
}
}
private void loadPreferences() {
if (containsPreferenceId(CLASSIFICATION_WINDOW_PREFERENCE_ID)
&& containsPreferenceId(CLASS_STRUCT_WINDOW_PREFERENCE_ID)) {
return;
}
InputSource inputSource = new InputSource(getClass().getResourceAsStream(PREFERENCE_FILE_NAME));
madGuiPlugin.getConfiguration().addPreferenceMapping(inputSource);
}
@Override
public void start(AgentContainer agentContainer)
throws Exception {
super.start(agentContainer);
this.container = agentContainer;
}
public SegmentationGuiOperations getOperations() {
return operations;
}
public SegmentationGuiPluginConfiguration getConfiguration() {
return configuration;
}
private class SegmentationGuiOperationsImpl implements SegmentationGuiOperations {
public void startSegmentation(Map<String, String> parameters)
throws BatchException, ContainerFailureException {
SegmentationJobRequest request = new SegmentationJobRequest();
for (Map.Entry<String, String> entry : parameters.entrySet()) {
request.putParameter(entry.getKey(), entry.getValue());
}
startSegmentation(request, null);
}
public void startSegmentation(SegmentationJobRequest request, JobEventHandler listener)
throws BatchException, ContainerFailureException {
ScheduleLauncher launcher = new ScheduleLauncher(getUserId());
launcher.setWorkflowConfiguration(configuration.getWorkflowConfiguration());
if (listener != null) {
launcher.setJobEventHandler(listener);
}
launcher.executeWorkflow(container, request.toRequest());
}
private UserId getUserId() {
return applicationCore.getGlobalComponent(UserId.class);
}
}
public enum FieldType {
BOOLEAN,
TEXT;
}
}