Package org.apache.oodt.cas.workflow.gui

Source Code of org.apache.oodt.cas.workflow.gui.WorkflowGUI

/**
* 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.oodt.cas.workflow.gui;

//JDK imports
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;

//OODT imports
import org.apache.oodt.cas.workflow.gui.menu.EditMenu;
import org.apache.oodt.cas.workflow.gui.menu.FileMenu;
import org.apache.oodt.cas.workflow.gui.model.ModelGraph;
import org.apache.oodt.cas.workflow.gui.model.repo.XmlWorkflowModelRepository;
import org.apache.oodt.cas.workflow.gui.model.repo.XmlWorkflowModelRepositoryFactory;
import org.apache.oodt.cas.workflow.gui.perspective.MultiStatePerspective;
import org.apache.oodt.cas.workflow.gui.perspective.build.BuildPerspective;
import org.apache.oodt.cas.workflow.gui.perspective.view.View;
import org.apache.oodt.cas.workflow.gui.perspective.view.ViewState;
import org.apache.oodt.cas.workflow.gui.toolbox.Tool;
import org.apache.oodt.cas.workflow.gui.toolbox.ToolBox;
import org.apache.oodt.cas.workflow.gui.util.IconLoader;

//Commons import
import org.apache.commons.lang.StringUtils;

/**
*
*
* Main driver shell and JFrame for the Workflow Editor GUI.
*
* @author bfoster
* @author mattmann
*
*/
public class WorkflowGUI extends JFrame {

  private static final long serialVersionUID = -8217540440195126377L;

  private ToolBox toolbox;

  private MultiStatePerspective perspective;

  private static AtomicInteger untitledIter = new AtomicInteger(0);

  private JMenuBar menu;

  private File workspace;

  private XmlWorkflowModelRepository repo;

  public WorkflowGUI() throws Exception {

    this.addWindowFocusListener(new WindowFocusListener() {

      public void windowGainedFocus(WindowEvent e) {
        if (menu != null)
          menu.revalidate();
        if (toolbox != null)
          toolbox.revalidate();
        if (perspective != null)
          perspective.refresh();
      }

      public void windowLostFocus(WindowEvent e) {
      }

    });

    this.setLayout(new BorderLayout());
    this.setPreferredSize(new Dimension(1000, 800));

    Vector<Tool> tools = new Vector<Tool>();
    Tool editTool = new Tool(IconLoader.getIcon(IconLoader.EDIT),
        IconLoader.getIcon(IconLoader.EDIT_SELECTED)) {
      private static final long serialVersionUID = 1682845263796161282L;

      @Override
      public void onClick() {
        WorkflowGUI.this.perspective.setMode(View.Mode.EDIT);
      }
    };
    tools.add(editTool);
    Tool deleteTool = new Tool(IconLoader.getIcon(IconLoader.DELETE),
        IconLoader.getIcon(IconLoader.DELETE_SELECTED)) {
      private static final long serialVersionUID = 5050127713254634783L;

      @Override
      public void onClick() {
        WorkflowGUI.this.perspective.setMode(View.Mode.DELETE);
      }
    };
    tools.add(deleteTool);
    Tool moveTool = new Tool(IconLoader.getIcon(IconLoader.MOVE),
        IconLoader.getIcon(IconLoader.MOVE_SELECTED)) {
      private static final long serialVersionUID = 1682845263796161282L;

      @Override
      public void onClick() {
        WorkflowGUI.this.perspective.setMode(View.Mode.MOVE);
      }
    };
    tools.add(moveTool);
    Tool zoomInTool = new Tool(IconLoader.getIcon(IconLoader.ZOOM_IN),
        IconLoader.getIcon(IconLoader.ZOOM_IN_SELECTED)) {
      private static final long serialVersionUID = 1682845263796161282L;

      @Override
      public void onClick() {
        WorkflowGUI.this.perspective.setMode(View.Mode.ZOOM_IN);
      }
    };
    tools.add(zoomInTool);
    Tool zoomOutTool = new Tool(IconLoader.getIcon(IconLoader.ZOOM_OUT),
        IconLoader.getIcon(IconLoader.ZOOM_OUT_SELECTED)) {
      private static final long serialVersionUID = 1682845263796161282L;

      @Override
      public void onClick() {
        WorkflowGUI.this.perspective.setMode(View.Mode.ZOOM_OUT);
      }
    };
    tools.add(zoomOutTool);
    toolbox = new ToolBox(tools);
    toolbox.setSelected(editTool);
    this.add(toolbox, BorderLayout.NORTH);

    this.setJMenuBar(menu = this.generateMenuBar());
    perspective = new BuildPerspective();
    perspective.refresh();
    this.add(perspective, BorderLayout.CENTER);
  }

  private void updateWorkspaceText() {
    if (this.workspace == null)
      this.setTitle(null);
    else
      this.setTitle(StringUtils.leftPad("Workspace: " + this.workspace, 100));
  }

  private void loadProjects() {
    try {
      XmlWorkflowModelRepositoryFactory factory = new XmlWorkflowModelRepositoryFactory();
      factory.setWorkspace(this.workspace.getAbsolutePath());
      repo = factory.createModelRepository();
      repo.loadGraphs(new HashSet<String>(Arrays.asList("sequential",
          "parallel", "task", "condition")));
      for (File file : repo.getFiles()) {
        List<ModelGraph> graphs = new Vector<ModelGraph>();
        for (ModelGraph graph : repo.getGraphs())
          if (graph.getModel().getFile().equals(file))
            graphs.add(graph);
        System.out.println(graphs);
        perspective.addState(new ViewState(file, null, graphs, repo
            .getGlobalConfigGroups()));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public JMenuBar generateMenuBar() {
    JMenuBar bar = new JMenuBar();
    FileMenu fileMenu = new FileMenu();
    bar.add(fileMenu);
    fileMenu.getExit().addActionListener(new ActionListener() {
     
      @Override
      public void actionPerformed(ActionEvent event) {
        System.exit(1);       
      }
    });
   
    fileMenu.getOpenWorkspace().addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        try {
          JFileChooser chooser = new JFileChooser(new File(".")) {
            boolean acceptFile(File f) {
              return f.isDirectory();
            }
          };
          chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
          int value = chooser.showOpenDialog(WorkflowGUI.this);
          if (value == JFileChooser.APPROVE_OPTION) {
            workspace = chooser.getSelectedFile();
            updateWorkspaceText();
            perspective.reset();
            loadProjects();
          }
        } catch (Exception e1) {
          e1.printStackTrace();
        }
      }
    });
    fileMenu.getImport().addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent event) {
        try {
          if (workspace == null)
            return;
          JFileChooser chooser = new JFileChooser(new File("."));
          int value = chooser.showOpenDialog(WorkflowGUI.this);
          if (value == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            XmlWorkflowModelRepositoryFactory factory = new XmlWorkflowModelRepositoryFactory();
            factory.setWorkspace(workspace.getAbsolutePath());
            View activeView = perspective.getActiveView();

            if (activeView != null) {
              // TODO: add code for import
            }
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
      }

    });
    fileMenu.getNewWorkspace().addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        JFileChooser chooser = new JFileChooser(new File(".")) {
          boolean acceptFile(File f) {
            return f.isDirectory();
          }
        };
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int value = chooser.showOpenDialog(WorkflowGUI.this);
        if (value == JFileChooser.APPROVE_OPTION) {
          workspace = chooser.getSelectedFile();
          updateWorkspaceText();
          perspective.reset();
          loadProjects();
          perspective.refresh();
        }
      }
    });

    fileMenu.getNewProject().addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        // TODO: add new project code
      }
    });
    fileMenu.getSave().addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        try {
          repo.save();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
    EditMenu editMenu = new EditMenu();
    bar.add(editMenu);
    editMenu.getUndo().addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        try {
          perspective.undo();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
    bar.revalidate();
    return bar;
  }

  public static void main(String[] args) {
    UIManager.put("TabbedPane.selected", new Color(238, 238, 238));
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        WorkflowGUI gui;
        try {
          gui = new WorkflowGUI();
          gui.pack();
          gui.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

}
TOP

Related Classes of org.apache.oodt.cas.workflow.gui.WorkflowGUI

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.