au.gov.ansto.bragg.wombat.ui.views.WombatAnalysisControlViewOld.java Source code

Java tutorial

Introduction

Here is the source code for au.gov.ansto.bragg.wombat.ui.views.WombatAnalysisControlViewOld.java

Source

/******************************************************************************* 
* Copyright (c) 2008 Australian Nuclear Science and Technology Organisation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* 
* Contributors: 
*    Norman Xiong (nxi@Bragg Institute) - initial API and implementation
*******************************************************************************/
package au.gov.ansto.bragg.wombat.ui.views;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.gumtree.vis.listener.XYChartMouseEvent;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;

import au.gov.ansto.bragg.cicada.core.exception.SetTunerException;
import au.gov.ansto.bragg.cicada.core.exception.TransferFailedException;
import au.gov.ansto.bragg.cicada.core.exception.TunerNotReadyException;
import au.gov.ansto.bragg.datastructures.core.plot.Position;
import au.gov.ansto.bragg.kakadu.core.AlgorithmTask;
import au.gov.ansto.bragg.kakadu.core.OperationManager;
import au.gov.ansto.bragg.kakadu.core.data.Operation;
import au.gov.ansto.bragg.kakadu.core.data.OperationParameter;
import au.gov.ansto.bragg.kakadu.core.data.OperationParameter.OperationParameterListener;
import au.gov.ansto.bragg.kakadu.ui.editors.BooleanOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.DefaultOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.NumericOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.OperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.OptionOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.RegionOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.StepDirectionOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.TextOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.editors.UriOperationParameterEditor;
import au.gov.ansto.bragg.kakadu.ui.plot.PlotManager;
import au.gov.ansto.bragg.kakadu.ui.region.RegionParameterManager;
import au.gov.ansto.bragg.kakadu.ui.util.Util;
import au.gov.ansto.bragg.kakadu.ui.views.AnalysisParametersView;

/**
 * @author nxi
 * Created on 10/03/2009
 */
public class WombatAnalysisControlViewOld extends AnalysisParametersView {

    public static final String NAVIGATION_PROCESSOR_NAME = "slice_selection";
    public static final String ONEDPLOT_PROCESSOR_NAME = "plotGenerator_processor";
    public static final String SCAN_VARIABLE_NAME = "frame_valueOnAxis";
    public static final String APPLYTOALL_VARIABLE_NAME = "frame_loopToAll";
    public static final String RESET_HISTORY_VARIABLE_NAME = "frame_resetHistory";
    public static final String CORRECTED_HISTOGRAM_PROCESSOR_NAME = "geometryCorrection_processor";
    public static final String INTEGRATION_PROCESSOR_NAME = "integration_processor";

    protected static final String BACKGROUND_FOR_EFFICIENCY_MAP_TUNER_NAME = "frame_backgroundForEfficiencyMapURI";
    protected ArrayList<OperationParameterEditor> parameterEditorList;

    /* (non-Javadoc)
     * @see au.gov.ansto.bragg.kakadu.ui.views.AnalysisParametersView#getSavableTunerNames()
     */
    @Override
    protected String[] getSavableTunerNames() {
        return new String[] { EFFICIENCY_MAP_TUNER_NAME, BACKGROUND_FOR_EFFICIENCY_MAP_TUNER_NAME };
    }

    @Override
    public void createPartControl(Composite composite) {
        super.createPartControl(composite);

        AlgorithmTask task = getAlgorithmTask();
        final Operation operation = task.getOperationManager(0).getOperation(NAVIGATION_PROCESSOR_NAME);
        final OperationParameter valueOnAxisParameter = operation.getOperationParameter(SCAN_VARIABLE_NAME);
        final Operation plotOperation = task.getOperationManager(0).getOperation(ONEDPLOT_PROCESSOR_NAME);
        final Operation geometryOperation = task.getOperationManager(0)
                .getOperation(CORRECTED_HISTOGRAM_PROCESSOR_NAME);
        final Operation integrationOperation = task.getOperationManager(0).getOperation(INTEGRATION_PROCESSOR_NAME);
        final OperationParameter applyToAllParameter = operation.getOperationParameter(APPLYTOALL_VARIABLE_NAME);
        final OperationParameter resetHistoryParameter = operation
                .getOperationParameter(RESET_HISTORY_VARIABLE_NAME);
        //      final IPointLocatorListener mouseListener = new IPointLocatorListener(){
        //
        //         public void locationUpdated(double x, double y, double val) {
        //            List<OperationParameterEditor> editors = parameterEditorsMap.get(operation.getName());
        //            for (OperationParameterEditor editor : editors){
        //               if (editor.getOperationParameter() == parameter){
        ////                  parameter.setValue(new Double(x));
        ////                  editor.loadData();
        //                  if (editor instanceof OptionOperationParameterEditor)
        //                     ((OptionOperationParameterEditor) editor).setSelection(new Double(x));
        //               }
        //            }
        //            
        //            applyParameters();
        //         }
        //      };

        final OperationParameterListener applyToAllListener = new OperationParameterListener() {

            public void serverDataUpdated(OperationParameter operationParameter, Object newData) {
                if (newData instanceof Boolean) {
                    geometryOperation.setOperationDataListenerEnabled(!(Boolean) newData);
                    integrationOperation.setOperationDataListenerEnabled(!(Boolean) newData);
                    plotOperation.setOperationDataListenerEnabled(!(Boolean) newData);
                }
            }

        };

        applyToAllParameter.addOperationParameterListener(applyToAllListener);

        //      final KurandaMouseListener doubleClickListener = new KurandaMouseListener(){
        //
        //         public void mouseDoubleClick(EventData eventData) {
        //            List<OperationParameterEditor> editors = parameterEditorsMap.get(operation.getName());
        //            for (OperationParameterEditor editor : editors){
        //               if (editor.getOperationParameter() == valueOnAxisParameter){
        ////                  parameter.setValue(new Double(x));
        ////                  editor.loadData();
        //                  if (editor instanceof OptionOperationParameterEditor)
        //                     ((OptionOperationParameterEditor) editor).setSelection(
        ////                           new Position(String.valueOf(eventData.getX())));
        //                           Double.valueOf(eventData.getX()));
        //               }
        //            }
        //            
        //            applyParameters();            
        //         }
        //
        //         public void mouseDown(EventData eventData) {
        //            
        //         }
        //
        //         public void mouseUp(EventData eventData) {
        //            
        //         }
        //         
        //      };
        //
        //      PlotManager.addOpenNewPlotListener(new PlotManager.OpenNewPlotListener(){
        //
        //         public void newPlotOpened(Plot plot) {
        //            if (plot.getOperaton() == plotOperation)
        ////               plot.getCurrentPlotWidget().addPointLocatorListener(mouseListener);
        //               plot.getCurrentPlotWidget().addMouseEventListener(doubleClickListener);
        //         }});

        final ChartMouseListener chartMouseListener = new ChartMouseListener() {

            @Override
            public void chartMouseMoved(ChartMouseEvent event) {
                // TODO Auto-generated method stub
            }

            @Override
            public void chartMouseClicked(ChartMouseEvent event) {
                if (event instanceof XYChartMouseEvent) {
                    List<OperationParameterEditor> editors = parameterEditorsMap.get(operation.getName());
                    for (OperationParameterEditor editor : editors) {
                        if (editor.getOperationParameter() == valueOnAxisParameter) {
                            if (editor instanceof OptionOperationParameterEditor)
                                ((OptionOperationParameterEditor) editor).setSelection(
                                        new Position(String.valueOf(((XYChartMouseEvent) event).getX())));
                        }
                    }
                }
            }
        };

        PlotManager.addOpenNewPlotListener(new PlotManager.OpenNewPlotListener() {

            public void newPlotOpened(au.gov.ansto.bragg.kakadu.ui.plot.Plot plot) {
                if (plot.getOperaton() == plotOperation)
                    //               plot.getCurrentPlotWidget().addPointLocatorListener(mouseListener);
                    plot.getCurrentPlotWidget().addChartMouseListener(chartMouseListener);
            }
        });

        configurationButton.removeSelectionListener(configurationSelectionListener);
        configurationButton.setText("Reset");
        configurationButton.setToolTipText("clear all history data");
        configurationButton.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent arg0) {

            }

            public void widgetSelected(SelectionEvent arg0) {
                if (MessageDialog.openConfirm(getSite().getShell(), "Confirm of Clearing History Data",
                        "Do you want to clear all the history data?")) {
                    try {
                        algorithmTask.applyParameterChangesForAllDataItems(RESET_HISTORY_VARIABLE_NAME, true);
                        algorithmTask.markOperationsActual(NAVIGATION_PROCESSOR_NAME, false);
                    } catch (SetTunerException e) {
                        Util.handleException(getSite().getShell(), e);
                    }
                    applyParameters();
                }
            }
        });

    }

    protected void addOperationParameters(final Operation operation) {

        //create a new group of parameters
        if (operation.getParameters().size() > 0) {
            //      Group parameterEditorsGroup = new Group(parameterEditorsHolderComposite, SWT.NONE);
            Composite parameterEditorsGroup = parameterEditorsHolderComposite;
            //      parameterEditorsGroup.setText(operation.getUILabel());
            parameterEditorsGroup.setLayoutData(new GridData(GridData.FILL, SWT.CENTER, true, false));
            GridLayout parameterEditorsCompositeGridLayout = new GridLayout();
            parameterEditorsCompositeGridLayout.numColumns = 2;
            parameterEditorsCompositeGridLayout.marginWidth = 2;
            parameterEditorsCompositeGridLayout.marginBottom = 0;
            parameterEditorsCompositeGridLayout.marginHeight = 2;
            parameterEditorsCompositeGridLayout.marginTop = 0;
            parameterEditorsCompositeGridLayout.verticalSpacing = 2;
            parameterEditorsGroup.setLayout(parameterEditorsCompositeGridLayout);
            //      parameterEditorsGroup.
            //      parameterEditorsGroup.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
            //      parameterEditorsGroup.setBackgroundMode(SWT.INHERIT_FORCE);
            //         parameterEditorCompositeMap.put(operationName, parameterEditorComposite);

            //register new list of parameter editors
            parameterEditorList = new ArrayList<OperationParameterEditor>();
            parameterEditorsMap.put(operation.getName(), parameterEditorList);

            if (operation != null) {
                for (OperationParameter operationParameter : operation.getParameters()) {
                    OperationParameterEditor operationParameterEditor;
                    switch (operationParameter.getType()) {
                    case Text:
                        operationParameterEditor = new TextOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    case Number:
                        operationParameterEditor = new NumericOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    case Boolean:
                        operationParameterEditor = new BooleanOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    case Uri:
                        operationParameterEditor = new UriOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    case Region:
                        operationParameterEditor = new RegionOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        ((RegionOperationParameterEditor) operationParameterEditor).setRegionParameter(
                                ((RegionParameterManager) algorithmTask.getRegionParameterManager())
                                        .findParameter(operation));
                        break;
                    case Option:
                        operationParameterEditor = new OptionOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    case StepDirection:
                        operationParameterEditor = new StepDirectionOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    default:
                        operationParameterEditor = new DefaultOperationParameterEditor(operationParameter,
                                parameterEditorsGroup);
                        break;
                    }

                    operationParameterEditor.addChangeListener(parameterEditorChangeListener);
                    operationParameterEditor.addApplyParameterListener(applyParametersListener);
                    parameterEditorList.add(operationParameterEditor);
                }
            }

            //      } else {
            //         if (operation != null) {
            //            //update existed editors with parameters of selected operation
            //            final List<OperationParameter> parameters = operation.getParameters();
            //            final List<OperationParameterEditor> parameterEditorList = parameterEditorsMap.get(operationName);
            //            for (int i = 0; i < parameters.size(); i++) {
            //               OperationParameter parameter = (OperationParameter) parameters.get(i);
            //               final OperationParameterEditor operationParameterEditor = parameterEditorList.get(i);
            //               operationParameterEditor.setOperationParameter(parameter);
            //               operationParameterEditor.loadData();
            //            }
            //         }
            //         
            //      }

            //define parameterEditorComposite which contains parameter editors of selected operation
            parameterEditorsGroup.layout();

            parameterEditorsHolderComposite.layout();
            //      parent.layout();

            //      final Point propertiesCompositeSize = propertiesComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
            //      final Point size = plotAndOperationPropertiesSashForm.getSize();
            //      operationPropertiersScrolledComposite.setMinSize(propertiesCompositeSize);
            //      operationPropertiersScrolledComposite.layout();
        }
    }

    protected void applyParameters() {

        boolean isParametersChanged = false;

        //check is changed parameters available
        for (Operation operation : operations) {
            if (operation.isParametersChanged()) {
                isParametersChanged = true;
                break;
            }
        }

        //      if (!isParametersChanged) {
        //         //there are no changed parameters
        //         return;
        //      }

        //apply changed parameters
        try {
            for (Operation operation : operations) {
                getAlgorithmTask().applyParameterChangesForAllDataItems(operation);
            }
        } catch (Exception e) {
            handleException(e);
        }

        //OperationManager for selected data item
        OperationManager operationManager = algorithmTask
                .getOperationManager(algorithmTask.getSelectedDataItemIndex());

        //detect first no actual Operation data to run the algorithm from the operation.
        //      final Operation[] firstNotActualOperation = new Operation[1];
        //      Operation lastReprocessableOperation = operationManager.getOperations().get(0);
        //      for (Operation operation : operationManager.getOperations()) {
        //         //find first operation with not actual data
        //         if (operation.isReprocessable())
        //            lastReprocessableOperation = operation;
        //         if (firstNotActualOperation[0] == null && !operation.isActual()) {
        //            firstNotActualOperation[0] = operation;
        //            break;
        //         }
        //      }
        Operation lastReprocessableOperation = AlgorithmTask
                .getOperationChainHead(operationManager.getOperations());
        //run Algorithm from first operation with not actual data
        //      if (firstNotActualOperation[0] != null) {
        //         Display.getDefault().asyncExec(new Runnable() {
        //            public void run() {
        //               System.out.println("CHECK TIMING RUN algorithm from operation*************");
        //               try {
        //                  algorithmTask.runAlgorithmFromOperation(firstNotActualOperation[0]);
        //               } catch (TunerNotReadyException e) {
        //                  handleException(e);
        //               } catch (TransferFailedException e) {
        //                  handleException(e);
        //               }
        //            }
        //         });
        //      }

        if (lastReprocessableOperation == null || operations.indexOf(lastReprocessableOperation) < 1) {
            lastReprocessableOperation = operations.get(1);
        }
        System.out.println(
                "CHECK TIMING RUN algorithm from operation*************" + lastReprocessableOperation.getName());
        try {
            saveEfficiencyMapTuner();
            algorithmTask.forceRunAlgorithmFromOperation(lastReprocessableOperation);
        } catch (TunerNotReadyException e) {
            handleException(e);
        } catch (TransferFailedException e) {
            handleException(e);
        }

        updateParametersData();
    }

    public void setAlgorithmTask(AlgorithmTask algorithmTask) {
        super.setAlgorithmTask(algorithmTask);
        algorithmTask.removeStatusListener(statusListener);
    }
}