blob: 954eabec5fd5cf11016fa3faca0498c665adb230 [file] [log] [blame]
/**
* 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();
}
}
});
}
}