Package org.apache.airavata.xbaya.ui.menues

Source Code of org.apache.airavata.xbaya.ui.menues.XBayaMenuItem

/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/

package org.apache.airavata.xbaya.ui.menues;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

import org.apache.airavata.xbaya.XBayaConfiguration;
import org.apache.airavata.xbaya.XBayaConfiguration.XBayaExecutionMode;
import org.apache.airavata.xbaya.XBayaEngine;
import org.apache.airavata.xbaya.component.registry.ComponentRegistryLoader;
import org.apache.airavata.xbaya.core.generators.BPELFiler;
import org.apache.airavata.xbaya.core.generators.ImageFiler;
import org.apache.airavata.xbaya.core.generators.JythonFiler;
import org.apache.airavata.xbaya.core.generators.ODEScriptFiler;
import org.apache.airavata.xbaya.core.generators.WorkflowFiler;
import org.apache.airavata.xbaya.core.ide.XBayaExecutionModeListener;
import org.apache.airavata.xbaya.registry.RegistryAccesser;
import org.apache.airavata.xbaya.ui.dialogs.component.URLRegistryWindow;
import org.apache.airavata.xbaya.ui.dialogs.descriptors.ApplicationDescriptionDialog;
import org.apache.airavata.xbaya.ui.dialogs.descriptors.DeploymentDescriptionDialog;
import org.apache.airavata.xbaya.ui.dialogs.descriptors.HostDescriptionDialog;
import org.apache.airavata.xbaya.ui.experiment.RegistryLoaderWindow;
import org.apache.airavata.xbaya.ui.graph.GraphCanvas;
import org.apache.airavata.xbaya.ui.widgets.ToolbarButton;
import org.apache.airavata.xbaya.ui.widgets.XBayaToolBar;
import org.apache.airavata.xbaya.util.RegistryConstants;
import org.apache.airavata.xbaya.util.XBayaUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class XBayaMenuItem implements XBayaExecutionModeListener {

    private static final Logger logger = LoggerFactory.getLogger(XBayaMenuItem.class);

    private JMenu xbayaMenuItem;

    private WorkflowFiler graphFiler;

    private JythonFiler jythonFiler;

    private ImageFiler imageFiler;

    private BPELFiler bpelFiler;

//    private ScuflFiler scuflFiler;
   
    private JMenuItem urlItem;

//    private ODEDeploymentDescriptor odeDeploymentDescription;

    private JMenuItem openWorkflowItem;

    private JMenuItem saveWorkflowItem;

    private JMenuItem exportJythonItem;

    private JMenuItem exportBpelItem;

    private JMenuItem saveImageItem;

    private JMenuItem importWorkflowItemFromFileSystem;

    private JMenuItem exportODEScriptsItem;
   
    private JMenuItem clearWorkflowItem;

    private JMenuItem newWorkflowTabItem;

    private JMenuItem closeWorkflowItem;

    private JMenuItem nextWorkflowTabItem;
   
    private JMenuItem exitItem;

    private XBayaEngine engine;
   
    private JMenuItem registerServiceDesc;

    private JMenuItem registerApplicationDesc;

    private JMenuItem registerHostDesc;

  private JMenuItem closeAllWorkflowItem;

  private JMenuItem saveAsWorkflowItem;

  private JMenuItem saveAllWorkflowItem;

    private JMenuItem saveWorkflowtoRegistryItem;

  private JMenuItem importWorkflowItemFromRegistry;

  private RegistryAccesser registryAccesser;

  private XBayaToolBar toolBar;

  private ToolbarButton toolbarButtonSave;

  private ToolbarButton toolbarButtonOpen;

  private ToolbarButton toolbarButtonNew;
 
  private static final String FILE_ACTIONS="file";
 
    /**
     * Constructs a FileMenu.
     *
     * @param engine
     *
     */
    public XBayaMenuItem(XBayaEngine engine, XBayaToolBar toolBar) {
        this.engine = engine;
        this.toolBar=toolBar;
        this.registryAccesser = new RegistryAccesser(engine);

        this.graphFiler = new WorkflowFiler(engine);
        this.jythonFiler = new JythonFiler(engine);
        this.imageFiler = new ImageFiler(engine);
        this.bpelFiler = new BPELFiler(engine);
//        this.scuflFiler = new ScuflFiler(engine);
//        this.odeDeploymentDescription = new ODEDeploymentDescriptor();

        this.exitItem = createExitItem();

        createFileMenu();
        engine.getConfiguration().registerExecutionModeChangeListener(this);
        XBayaToolBar.setGroupOrder(FILE_ACTIONS, 1);
    }

    private void createFileMenu() {

        createOpenWorkflowMenuItem();
        createSaveWorkflowItem();
        createSaveAsWorkflowItem();
        createSaveAllWorkflowItem();
        createSaveWorkflowtoRegistryItem();

        createImportWorkflowItemFromFileSystem();
        createImportWorkflowItemFromRegistry();
        createExportJythonScriptItem();
        createExportBpelScriptItem();
        createSaveWorkflowImageItem();
        createExportODEScriptsItem();
       
        clearWorkflowItem = createClearWorkflowItem();
        newWorkflowTabItem = createNewWorkflowTabMenuItem();
        closeWorkflowItem = createCloseWorkflowTabItem();
        closeAllWorkflowItem = createCloseAllWorkflowTabItem();
        nextWorkflowTabItem = createNextWorkflowTabItem();
        urlItem = createURLRegistryItem();
       
        createRegisterHostDesc();
        createRegisterServiceDesc();
        createRegisterApplicationDesc();
       
        xbayaMenuItem = new JMenu("XBaya");
        xbayaMenuItem.setMnemonic(KeyEvent.VK_X);
//        JMenu newMenu = new JMenu("New");
//          newMenu.add(newWorkflowTabItem);
//          newMenu.addSeparator();
//         
//          newMenu.add(this.registerApplicationDesc);
//          newMenu.addSeparator();
//          JMenu regAddSubMenuItem = new JMenu("Registry additions");
//          newMenu.add(regAddSubMenuItem);
//          regAddSubMenuItem.add(this.registerHostDesc);
//          regAddSubMenuItem.add(this.registerServiceDesc);
//         
//        xbayaMenuItem.add(newMenu);
        xbayaMenuItem.add(newWorkflowTabItem);
        xbayaMenuItem.add(registerHostDesc);
        xbayaMenuItem.add(this.registerServiceDesc);
//        xbayaMenuItem.add(registerApplicationDesc);
        xbayaMenuItem.add(this.openWorkflowItem);

        xbayaMenuItem.addSeparator();
       
        xbayaMenuItem.add(clearWorkflowItem);
        xbayaMenuItem.add(closeWorkflowItem);
        xbayaMenuItem.add(closeAllWorkflowItem);
       
        //This menu item did not seem useful at all
//        xbayaMenuItem.add(this.nextWorkflowTabItem);

        xbayaMenuItem.addSeparator();

        xbayaMenuItem.add(this.saveWorkflowItem);

        xbayaMenuItem.add(this.saveAsWorkflowItem);
        xbayaMenuItem.add(this.saveAllWorkflowItem);
       
        xbayaMenuItem.addSeparator();
        JMenu importMenu = new JMenu("Import");
          importMenu.add(importWorkflowItemFromFileSystem);
          importMenu.add(importWorkflowItemFromRegistry);
          importMenu.addSeparator();
          importMenu.add(urlItem)
         
        JMenu exportMenu = new JMenu("Export");
          exportMenu.add(saveWorkflowtoRegistryItem);
          exportMenu.addSeparator();
          exportMenu.add(exportJythonItem);
          exportMenu.add(exportBpelItem);
          exportMenu.add(exportODEScriptsItem);
          exportMenu.addSeparator();
          exportMenu.add(saveImageItem);
       
        xbayaMenuItem.add(importMenu);
        xbayaMenuItem.add(exportMenu);
       
        xbayaMenuItem.addSeparator();
       
        xbayaMenuItem.add(exitItem);
       
        xbayaMenuItem.addMenuListener(new MenuListener() {
     
      @Override
      public void menuSelected(MenuEvent e) {
        GraphCanvas graphCanvas = engine.getGUI().getGraphCanvas();
        saveAsWorkflowItem.setEnabled(isWorkflowTabPresent() && graphCanvas.getWorkflowFile()!=null);
        saveWorkflowItem.setEnabled(isSaveShouldBeActive());
        saveAllWorkflowItem.setEnabled(engine.getGUI().getGraphCanvases().size()>0);
        saveWorkflowtoRegistryItem.setEnabled(isWorkflowTabPresent());
        exportJythonItem.setEnabled(isWorkflowTabPresent());
        exportBpelItem.setEnabled(isWorkflowTabPresent());
        exportODEScriptsItem.setEnabled(isWorkflowTabPresent());
        saveImageItem.setEnabled(isWorkflowTabPresent());
      }
      @Override
      public void menuDeselected(MenuEvent e) {}
      @Override
      public void menuCanceled(MenuEvent e) {}
    });
        executionModeChanged(engine.getConfiguration());
    }

    /**
     * @return The file menu.
     */
    public JMenu getMenu() {
        return this.xbayaMenuItem;
    }

    private void createSaveWorkflowtoRegistryItem() {
        this.saveWorkflowtoRegistryItem = new JMenuItem("Workflow To Registry...");
        this.saveWorkflowtoRegistryItem.setMnemonic(KeyEvent.VK_C);
        this.saveWorkflowtoRegistryItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                if (registryAccesser.saveWorkflow()){
                  if (engine.getGUI().getGraphCanvas().getWorkflowFile()==null){
                    engine.getGUI().getGraphCanvas().workflowSaved();
                  }
                }
            }
        });
    }
   
    private JMenuItem createURLRegistryItem() {
        JMenuItem item = new JMenuItem("WSDL From URL...");
        item.setMnemonic(KeyEvent.VK_U);
        item.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            private URLRegistryWindow window;
            public void actionPerformed(ActionEvent e) {
                if (this.window == null) {
                    this.window = new URLRegistryWindow(engine);
                }
                this.window.show();
            }
        });
        return item;
    }
   
    private void createRegisterServiceDesc() {
        this.registerServiceDesc = new JMenuItem("Register Application...");

        this.registerServiceDesc.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            @Override
            public void actionPerformed(ActionEvent e) {
                if (XBayaUtil.acquireJCRRegistry(engine)) {
                    try {
                        DeploymentDescriptionDialog serviceDescriptionDialog = new DeploymentDescriptionDialog(XBayaMenuItem.this.engine.getGUI().getFrame(), engine.getConfiguration()
                                        .getAiravataAPI());
                      serviceDescriptionDialog.open();
//                        ServiceDescriptionDialog serviceDescriptionDialog = new ServiceDescriptionDialog(
//                                engine.getConfiguration().getJcrComponentRegistry()
//                                        .getRegistry());
//                        serviceDescriptionDialog.open();
                      if (serviceDescriptionDialog.isServiceCreated()){
//                        engine.reloadRegistry();
                        ComponentRegistryLoader loader = ComponentRegistryLoader.getLoader(engine, RegistryConstants.REGISTRY_TYPE_JCR);
                        loader.load(engine.getConfiguration().getJcrComponentRegistry());
                      }
                    } catch (Exception e1) {
                        engine.getGUI().getErrorWindow().error(e1);
                    }
                }
            }
        });

    }

    private void createRegisterApplicationDesc() {
        this.registerApplicationDesc = new JMenuItem("Register Application...");

        this.registerApplicationDesc.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            @Override
            public void actionPerformed(ActionEvent e) {
                if (XBayaUtil.acquireJCRRegistry(engine)) {
                    try {
                        ApplicationDescriptionDialog applicationDescriptionDialog = new ApplicationDescriptionDialog(
                                engine);
                  applicationDescriptionDialog.setLocationRelativeTo(engine.getGUI().getFrame());
                        applicationDescriptionDialog.open();
                    } catch (Exception e1) {
                        engine.getGUI().getErrorWindow().error(e1);
                    }
                }
            }
        });

    }

    private void createRegisterHostDesc() {
        this.registerHostDesc = new JMenuItem("Add Host...");

        this.registerHostDesc.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            @Override
            public void actionPerformed(ActionEvent e) {
                if (XBayaUtil.acquireJCRRegistry(engine)) {
                    try {
                        HostDescriptionDialog hostDescriptionDialog = new HostDescriptionDialog(
                            engine.getConfiguration().getAiravataAPI(),XBayaMenuItem.this.engine.getGUI().getFrame() );
                        hostDescriptionDialog.open();
                    } catch (Exception e1) {
                        engine.getGUI().getErrorWindow().error(e1);
                    }
                }
            }
        });

    }
    private JMenuItem createClearWorkflowItem() {
        JMenuItem menuItem = new JMenuItem("Clear Workflow");
        menuItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
      public void actionPerformed(ActionEvent e) {
                engine.getGUI().getGraphCanvas().newWorkflow();
            }
        });
        return menuItem;
    }

    private JMenuItem createNewWorkflowTabMenuItem() {
       
    JMenuItem menuItem = new JMenuItem("New Workflow", MenuIcons.NEW_ICON);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
        AbstractAction action = new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                engine.getGUI().newGraphCanvas(true, true);
            }
        };
    menuItem.addActionListener(action);
    toolbarButtonNew=getToolBar().addToolbarButton(FILE_ACTIONS,menuItem.getText(), MenuIcons.NEW_ICON, "Create new workflow", action,1);
        return menuItem;
    }

    private JMenuItem createCloseWorkflowTabItem() {
        JMenuItem menuItem = new JMenuItem("Close Tab");
        menuItem.setMnemonic(KeyEvent.VK_C);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.CTRL_MASK));
        menuItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                engine.getGUI().closeGraphCanvas();
            }
        });
        return menuItem;
    }

    private JMenuItem createCloseAllWorkflowTabItem() {
        JMenuItem menuItem = new JMenuItem("Close All Tabs");
        menuItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                engine.getGUI().closeAllGraphCanvas();
            }
        });
        return menuItem;
    }
   
    private JMenuItem createNextWorkflowTabItem() {
        JMenuItem menuItem = new JMenuItem("Select Next Workflow Tab");
        menuItem.setMnemonic(KeyEvent.VK_S);
        // XXX VK_TAB doesn't work...
        // menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,
        // ActionEvent.CTRL_MASK));
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F6, ActionEvent.CTRL_MASK));
        menuItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                engine.getGUI().selectNextGraphCanvas();
            }
        });
        return menuItem;
    }
   
    private void createOpenWorkflowMenuItem() {
    this.openWorkflowItem = new JMenuItem("Open Workflow...", MenuIcons.OPEN_ICON);
        this.openWorkflowItem.setMnemonic(KeyEvent.VK_O);
        openWorkflowItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
        AbstractAction action = new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent event) {
                XBayaMenuItem.this.graphFiler.openWorkflow();
            }
        };
    this.openWorkflowItem.addActionListener(action);
    toolbarButtonOpen=getToolBar().addToolbarButton(FILE_ACTIONS,openWorkflowItem.getText(), MenuIcons.OPEN_ICON, "Open workflow", action,2);
    }

    private void createSaveWorkflowItem() {
    saveWorkflowItem = new JMenuItem("Save", MenuIcons.SAVE_ICON);
        saveWorkflowItem.setMnemonic(KeyEvent.VK_S);
        saveWorkflowItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
        AbstractAction action = new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.graphFiler.saveWorkflow();
                toolbarButtonSave.setEnabled(isSaveShouldBeActive());
            }
        };
    saveWorkflowItem.addActionListener(action);
        toolbarButtonSave = getToolBar().addToolbarButton(FILE_ACTIONS,saveWorkflowItem.getText(), MenuIcons.SAVE_ICON, "Save workflow", action,3);
        toolbarButtonSave.setEnabled(false);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
              while(engine.getGUI()==null){
                Thread.yield();
              }
                engine.getGUI().addWorkflowTabChangeListener(new ChangeListener(){
          @Override
          public void stateChanged(ChangeEvent event) {
            toolbarButtonSave.setEnabled(isSaveShouldBeActive());           
          }
                });
            }
        });
    }
   
    private void createSaveAsWorkflowItem() {
        saveAsWorkflowItem = new JMenuItem("Save as...");
        saveAsWorkflowItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.graphFiler.saveAsWorkflow();
            }
        });
    }
   
    private void createSaveAllWorkflowItem() {
        saveAllWorkflowItem = new JMenuItem("Save all");
        saveAllWorkflowItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.graphFiler.saveAllWorkflows();
            }
        });
        saveAllWorkflowItem.setEnabled(false);
    }

    private void createImportWorkflowItemFromFileSystem() {
        importWorkflowItemFromFileSystem = new JMenuItem("Workflow From File System...");
        importWorkflowItemFromFileSystem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.graphFiler.importWorkflow();
            }
        });
    }
   
    private void createImportWorkflowItemFromRegistry() {
        importWorkflowItemFromRegistry = new JMenuItem("Workflow From Registry...");
        importWorkflowItemFromRegistry.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                new RegistryLoaderWindow(engine).show();
            }
        });
    }
   
    private void createExportJythonScriptItem() {
        this.exportJythonItem = new JMenuItem("Workflow To Jython Script...");
        this.exportJythonItem.setMnemonic(KeyEvent.VK_J);
        this.exportJythonItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.jythonFiler.exportJythonScript();
            }
        });
    }

    private void createExportBpelScriptItem() {
        this.exportBpelItem = new JMenuItem("Workflow To BPEL2 Script...");
        this.exportBpelItem.setMnemonic(KeyEvent.VK_B);
        this.exportBpelItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.bpelFiler.exportBPEL();
            }
        });
    }

    private void createSaveWorkflowImageItem() {
        this.saveImageItem = new JMenuItem("Workflow To Image...");
        this.saveImageItem.setMnemonic(KeyEvent.VK_I);
        this.saveImageItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                XBayaMenuItem.this.imageFiler.saveWorkflowImage();
            }
        });
    }

    private void createExportODEScriptsItem() {
        this.exportODEScriptsItem = new JMenuItem("Workflow To ODE Scripts...");
        this.exportODEScriptsItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent e) {
                new ODEScriptFiler(XBayaMenuItem.this.engine).save();

            }
        });
    }

    private JMenuItem createExitItem() {
        JMenuItem menuItem = new JMenuItem("Exit");
        menuItem.setMnemonic(KeyEvent.VK_X);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.CTRL_MASK));
        menuItem.addActionListener(new AbstractAction() {
      private static final long serialVersionUID = 1L;
            public void actionPerformed(ActionEvent event) {
              JFrame frame = XBayaMenuItem.this.engine.getGUI().getFrame();
        frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
            }
        });
        return menuItem;
    }

  public XBayaToolBar getToolBar() {
    return toolBar;
  }

  public void setToolBar(XBayaToolBar toolBar) {
    this.toolBar = toolBar;
  }

  private boolean isSaveShouldBeActive() {
    GraphCanvas graphCanvas = engine.getGUI().getGraphCanvas();
    return isWorkflowTabPresent() && (graphCanvas.getWorkflowFile()==null || graphCanvas.isWorkflowChanged());
  }

  private boolean isWorkflowTabPresent() {
    return engine.getGUI().getGraphCanvas() !=null;
  }

  @Override
  public void executionModeChanged(XBayaConfiguration config) {
    toolbarButtonNew.setVisible(config.getXbayaExecutionMode()==XBayaExecutionMode.IDE);
    toolbarButtonSave.setVisible(config.getXbayaExecutionMode()==XBayaExecutionMode.IDE);
    toolbarButtonOpen.setVisible(config.getXbayaExecutionMode()==XBayaExecutionMode.IDE);
  }
}
TOP

Related Classes of org.apache.airavata.xbaya.ui.menues.XBayaMenuItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.