Package org.apache.oodt.cas.workflow.gui.perspective.view.impl

Source Code of org.apache.oodt.cas.workflow.gui.perspective.view.impl.DefaultPropView

/**
* 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.perspective.view.impl;

//JDK imports
import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DecimalFormat;
import java.text.Format;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

//Apache imports
import org.apache.commons.lang.StringUtils;

//OODT imports
import org.apache.oodt.cas.metadata.Metadata;
import org.apache.oodt.cas.workflow.gui.model.ModelGraph;
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.util.GuiUtils;

/**
*
*
* The default view displaying a workflow property (for a task, or a condition,
* or set of workflows).
*
* @author bfoster
* @author mattmann
*
*/
public class DefaultPropView extends View {

  private static final long serialVersionUID = -5521047300551974898L;

  private JTable table;
  private JPopupMenu tableMenu;
  private JMenuItem override;
  private JMenuItem delete;
  private static final String OVERRIDE = "Override";
  private static final String DELETE = "Delete";
  private int DEFAULT_PRIORITY = 5;

  public DefaultPropView(String name) {
    super(name);
    this.setLayout(new BorderLayout());
  }

  private JTable createTable(final ViewState state) {
    JTable table = null;
    final ModelGraph selected = state.getSelected();
    if (selected != null) {
      final Vector<Vector<String>> rows = new Vector<Vector<String>>();
      HashMap<String, String> keyToGroupMap = new HashMap<String, String>();
      Metadata staticMet = selected.getModel().getStaticMetadata();
      Metadata inheritedMet = selected.getInheritedStaticMetadata(state);
      Metadata completeMet = new Metadata();
      if (staticMet != null) {
        completeMet.replaceMetadata(staticMet.getSubMetadata(state
            .getCurrentMetGroup()));
      }
      if (selected.getModel().getExtendsConfig() != null) {
        for (String configGroup : selected.getModel().getExtendsConfig()) {
          Metadata extendsMetadata = state.getGlobalConfigGroups()
              .get(configGroup).getMetadata()
              .getSubMetadata(state.getCurrentMetGroup());
          for (String key : extendsMetadata.getAllKeys()) {
            if (!completeMet.containsKey(key)) {
              keyToGroupMap.put(key, configGroup);
              completeMet.replaceMetadata(key,
                  extendsMetadata.getAllMetadata(key));
            }
          }
        }
      }
      if (inheritedMet != null) {
        Metadata inheritedMetadata = inheritedMet.getSubMetadata(state
            .getCurrentMetGroup());
        for (String key : inheritedMetadata.getAllKeys()) {
          if (!completeMet.containsKey(key)) {
            keyToGroupMap.put(key, "__inherited__");
            completeMet.replaceMetadata(key,
                inheritedMetadata.getAllMetadata(key));
          }
        }
      }
      List<String> keys = completeMet.getAllKeys();
      Collections.sort(keys);
      for (String key : keys) {
        if (key.endsWith("/envReplace"))
          continue;
        String values = StringUtils.join(completeMet.getAllMetadata(key), ",");
        Vector<String> row = new Vector<String>();
        row.add(keyToGroupMap.get(key));
        row.add(key);
        row.add(values);
        row.add(Boolean.toString(Boolean.parseBoolean(completeMet
            .getMetadata(key + "/envReplace"))));
        rows.add(row);
      }
      table = new JTable();// rows, new Vector<String>(Arrays.asList(new
                           // String[] { "key", "values", "envReplace" })));
      table.setModel(new AbstractTableModel() {
        public String getColumnName(int col) {
          switch (col) {
          case 0:
            return "group";
          case 1:
            return "key";
          case 2:
            return "values";
          case 3:
            return "envReplace";
          default:
            return null;
          }
        }

        public int getRowCount() {
          return rows.size() + 1;
        }

        public int getColumnCount() {
          return 4;
        }

        public Object getValueAt(int row, int col) {
          if (row >= rows.size())
            return null;
          String value = rows.get(row).get(col);
          if (value == null && col == 3)
            return "false";
          if (value == null && col == 0)
            return "__local__";
          return value;
        }

        public boolean isCellEditable(int row, int col) {
          if (row >= rows.size()) {
            if (selected.getModel().getStaticMetadata()
                .containsGroup(state.getCurrentMetGroup()))
              return true;
            else
              return false;
          }
          if (col == 0)
            return false;
          String key = rows.get(row).get(1);
          if (key == null
              || (selected.getModel().getStaticMetadata() != null && selected
                  .getModel().getStaticMetadata()
                  .containsKey(getKey(key, state))))
            return true;
          return false;
        }

        public void setValueAt(Object value, int row, int col) {
          if (row >= rows.size()) {
            Vector<String> newRow = new Vector<String>(Arrays
                .asList(new String[] { null, null, null, null }));
            newRow.add(col, (String) value);
            rows.add(newRow);
          } else {
            Vector<String> rowValues = rows.get(row);
            rowValues.add(col, (String) value);
            rowValues.remove(col + 1);
          }
          this.fireTableCellUpdated(row, col);
        }

      });
      MyTableListener tableListener = new MyTableListener(state);
      table.getModel().addTableModelListener(tableListener);
      table.getSelectionModel().addListSelectionListener(tableListener);
    } else {
      table = new JTable(new Vector<Vector<String>>(), new Vector<String>(
          Arrays.asList(new String[] { "key", "values", "envReplace" })));
    }

    // table.setFillsViewportHeight(true);
    table.setSelectionBackground(Color.cyan);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    TableCellRenderer cellRenderer = new TableCellRenderer() {

      public Component getTableCellRendererComponent(JTable table,
          Object value, boolean isSelected, boolean hasFocus, int row,
          int column) {
        JLabel field = new JLabel((String) value);
        if (column == 0) {
          field.setForeground(Color.gray);
        } else {
          if (isSelected)
            field.setBorder(new EtchedBorder(1));
          if (table.isCellEditable(row, 1))
            field.setForeground(Color.black);
          else
            field.setForeground(Color.gray);
        }
        return field;
      }

    };
    TableColumn groupCol = table.getColumnModel().getColumn(0);
    groupCol.setPreferredWidth(75);
    groupCol.setCellRenderer(cellRenderer);
    TableColumn keyCol = table.getColumnModel().getColumn(1);
    keyCol.setPreferredWidth(200);
    keyCol.setCellRenderer(cellRenderer);
    TableColumn valuesCol = table.getColumnModel().getColumn(2);
    valuesCol.setPreferredWidth(300);
    valuesCol.setCellRenderer(cellRenderer);
    TableColumn envReplaceCol = table.getColumnModel().getColumn(3);
    envReplaceCol.setPreferredWidth(75);
    envReplaceCol.setCellRenderer(cellRenderer);

    table.addMouseListener(new MouseListener() {
      public void mouseClicked(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON3
            && DefaultPropView.this.table.getSelectedRow() != -1) {
          int row = DefaultPropView.this.table.getSelectedRow();// rowAtPoint(DefaultPropView.this.table.getMousePosition());
          String key = getKey(
              (String) DefaultPropView.this.table.getValueAt(row, 1), state);
          Metadata staticMet = state.getSelected().getModel()
              .getStaticMetadata();
          override.setVisible(staticMet == null || !staticMet.containsKey(key));
          delete.setVisible(staticMet != null && staticMet.containsKey(key));
          tableMenu.show(DefaultPropView.this.table, e.getX(), e.getY());
        }
      }

      public void mouseEntered(MouseEvent e) {
      }

      public void mouseExited(MouseEvent e) {
      }

      public void mousePressed(MouseEvent e) {
      }

      public void mouseReleased(MouseEvent e) {
      }
    });

    return table;
  }

  @Override
  public void refreshView(final ViewState state) {
    this.removeAll();

    tableMenu = new JPopupMenu("TableMenu");
    this.add(tableMenu);
    override = new JMenuItem(OVERRIDE);
    override.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int row = DefaultPropView.this.table.getSelectedRow();// rowAtPoint(DefaultPropView.this.table.getMousePosition());
        String key = getKey(
            (String) DefaultPropView.this.table.getValueAt(row, 1), state);
        Metadata staticMet = state.getSelected().getModel().getStaticMetadata();
        if (staticMet == null)
          staticMet = new Metadata();
        if (e.getActionCommand().equals(OVERRIDE)) {
          if (!staticMet.containsKey(key)) {
            staticMet.addMetadata(key,
                (String) DefaultPropView.this.table.getValueAt(row, 2));
            String envReplace = (String) DefaultPropView.this.table.getValueAt(
                row, 3);
            if (Boolean.valueOf(envReplace))
              staticMet.addMetadata(key + "/envReplace", envReplace);
            state.getSelected().getModel().setStaticMetadata(staticMet);
            DefaultPropView.this.notifyListeners();
          }
        }
      }
    });
    delete = new JMenuItem(DELETE);
    delete.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        int row = DefaultPropView.this.table.getSelectedRow();// rowAtPoint(DefaultPropView.this.table.getMousePosition());
        String key = getKey(
            (String) DefaultPropView.this.table.getValueAt(row, 1), state);
        Metadata staticMet = state.getSelected().getModel().getStaticMetadata();
        if (staticMet == null)
          staticMet = new Metadata();
        staticMet.removeMetadata(key);
        staticMet.removeMetadata(key + "/envReplace");
        state.getSelected().getModel().setStaticMetadata(staticMet);
        DefaultPropView.this.notifyListeners();
      }

    });
    tableMenu.add(override);
    tableMenu.add(delete);

    if (state.getSelected() != null) {
      JPanel masterPanel = new JPanel();
      masterPanel.setLayout(new BoxLayout(masterPanel, BoxLayout.Y_AXIS));
      masterPanel.add(this.getModelIdPanel(state.getSelected(), state));
      masterPanel.add(this.getModelNamePanel(state.getSelected(), state));
      if (!state.getSelected().getModel().isParentType())
        masterPanel.add(this.getInstanceClassPanel(state.getSelected(), state));
      masterPanel.add(this.getExecutionTypePanel(state.getSelected(), state));
      masterPanel.add(this.getPriorityPanel(state));
      masterPanel.add(this.getExecusedIds(state.getSelected()));
      if (state.getSelected().getModel().getExecutionType().equals("condition")) {
        masterPanel.add(this.getTimeout(state.getSelected(), state));
        masterPanel.add(this.getOptional(state.getSelected(), state));
      }
      JScrollPane scrollPane = new JScrollPane(table = this.createTable(state),
          JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
          JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
      scrollPane.getHorizontalScrollBar().setUnitIncrement(10);
      scrollPane.getVerticalScrollBar().setUnitIncrement(10);
      JPanel panel = new JPanel();
      panel.setLayout(new BorderLayout());
      panel.setBorder(new EtchedBorder());
      final JLabel metLabel = new JLabel("Static Metadata");
      metLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
      final JLabel extendsLabel = new JLabel("<extends>");
      extendsLabel.setFont(new Font("Serif", Font.PLAIN, 10));
      extendsLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
      extendsLabel.addMouseListener(new MouseListener() {

        private JScrollPane availableScroller;
        private JScrollPane mineScroller;
        private JList mineList;
        private JList availableList;
        private DefaultListModel mineModel;
        private DefaultListModel availableModel;

        public void mouseClicked(MouseEvent e) {
          final JPopupMenu popup = new JPopupMenu();
          popup.setLayout(new BorderLayout());

          JPanel main = new JPanel();
          main.setLayout(new BoxLayout(main, BoxLayout.X_AXIS));

          JPanel mine = new JPanel();
          mine.setBorder(new EtchedBorder());
          mine.setLayout(new BorderLayout());
          JLabel mineLabel = new JLabel("Mine");
          mineScroller = new JScrollPane(mineList = createJList(
              mineModel = new DefaultListModel(), state.getSelected()
                  .getModel().getExtendsConfig()));
          mineScroller.setPreferredSize(new Dimension(250, 80));
          mine.add(mineLabel, BorderLayout.NORTH);
          mine.add(mineScroller, BorderLayout.CENTER);

          JPanel available = new JPanel();
          available.setBorder(new EtchedBorder());
          available.setLayout(new BorderLayout());
          JLabel availableLabel = new JLabel("Available");
          Vector<String> availableGroups = new Vector<String>(state
              .getGlobalConfigGroups().keySet());
          availableGroups.removeAll(state.getSelected().getModel()
              .getExtendsConfig());
          availableScroller = new JScrollPane(availableList = this.createJList(
              availableModel = new DefaultListModel(), availableGroups));
          availableScroller.setPreferredSize(new Dimension(250, 80));
          available.add(availableLabel, BorderLayout.NORTH);
          available.add(availableScroller, BorderLayout.CENTER);

          JPanel buttons = new JPanel();
          buttons.setLayout(new BoxLayout(buttons, BoxLayout.Y_AXIS));
          JButton addButton = new JButton("<---");
          addButton.addMouseListener(new MouseListener() {

            public void mouseClicked(MouseEvent e) {
              String selected = availableList.getSelectedValue().toString();
              Vector<String> extendsConfig = new Vector<String>(state
                  .getSelected().getModel().getExtendsConfig());
              extendsConfig.add(selected);
              state.getSelected().getModel().setExtendsConfig(extendsConfig);
              availableModel.remove(availableList.getSelectedIndex());
              mineModel.addElement(selected);
              popup.revalidate();
              DefaultPropView.this.notifyListeners();
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
            }

          });
          JButton removeButton = new JButton("--->");
          removeButton.addMouseListener(new MouseListener() {

            public void mouseClicked(MouseEvent e) {
              String selected = mineList.getSelectedValue().toString();
              Vector<String> extendsConfig = new Vector<String>(state
                  .getSelected().getModel().getExtendsConfig());
              extendsConfig.remove(selected);
              state.getSelected().getModel().setExtendsConfig(extendsConfig);
              mineModel.remove(mineList.getSelectedIndex());
              availableModel.addElement(selected);
              popup.revalidate();
              DefaultPropView.this.notifyListeners();
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
            }

          });
          buttons.add(addButton);
          buttons.add(removeButton);

          main.add(mine);
          main.add(buttons);
          main.add(available);
          popup.add(main, BorderLayout.CENTER);
          popup.show(extendsLabel, e.getX(), e.getY());
        }

        public void mouseEntered(MouseEvent e) {
          extendsLabel.setForeground(Color.blue);
        }

        public void mouseExited(MouseEvent e) {
          extendsLabel.setForeground(Color.black);
        }

        public void mousePressed(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
        }

        private JList createJList(DefaultListModel model,
            final List<String> list) {
          for (String value : list)
            model.addElement(value);
          JList jList = new JList(model);
          jList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
          jList.setLayoutOrientation(JList.VERTICAL);
          return jList;
        }
      });
      JLabel metGroupLabel = new JLabel("(Sub-Group: "
          + (state.getCurrentMetGroup() != null ? state.getCurrentMetGroup()
              : "<base>") + ")");
      metGroupLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
      JPanel labelPanel = new JPanel();
      labelPanel.setLayout(new BoxLayout(labelPanel, BoxLayout.Y_AXIS));
      JPanel top = new JPanel();
      top.setLayout(new BoxLayout(top, BoxLayout.Y_AXIS));
      top.add(extendsLabel);
      top.add(metLabel);
      labelPanel.add(top);
      labelPanel.add(metGroupLabel);
      panel.add(labelPanel, BorderLayout.NORTH);
      panel.add(scrollPane, BorderLayout.CENTER);
      masterPanel.add(panel);
      this.add(masterPanel);
    } else {
      this.add(new JPanel());
    }
    this.revalidate();
  }

  private JPanel getTimeout(final ModelGraph graph, final ViewState state) {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBorder(new EtchedBorder());
    panel.add(new JLabel("Timeout:"), BorderLayout.NORTH);
    JTextField field = new JTextField(String.valueOf(graph.getModel()
        .getTimeout()), 50);
    field.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (!graph.getModel().getModelId().equals(e.getActionCommand())) {
          graph.getModel().setTimeout(Long.valueOf(
              e.getActionCommand() != null &&
              !e.getActionCommand().equals("") ?
                  e.getActionCommand():"-1"));
          DefaultPropView.this.notifyListeners();
          DefaultPropView.this.refreshView(state);
        }
      }

    });
    panel.add(field, BorderLayout.CENTER);
    return panel;
  }

  private JPanel getModelIdPanel(final ModelGraph graph, final ViewState state) {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBorder(new EtchedBorder());
    panel.add(new JLabel("ModelId:"), BorderLayout.NORTH);
    JTextField field = new JTextField(graph.getModel().getModelId(), 50);
    field.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (!graph.getModel().getModelId().equals(e.getActionCommand())) {
          GuiUtils.updateGraphModelId(state, graph.getModel().getId(),
              e.getActionCommand());
          DefaultPropView.this.notifyListeners();
          DefaultPropView.this.refreshView(state);
        }
      }

    });
    panel.add(field, BorderLayout.CENTER);
    return panel;
  }

  private JPanel getModelNamePanel(final ModelGraph graph, final ViewState state) {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBorder(new EtchedBorder());
    panel.add(new JLabel("ModelName:"), BorderLayout.NORTH);
    JTextField field = new JTextField(graph.getModel().getModelName(), 50);
    field.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (!graph.getModel().getModelName().equals(e.getActionCommand())) {
          // GuiUtils.updateGraphModelName(getState(),
          // graph.getModel().getModelId(), e.getActionCommand());
          graph.getModel().setModelName(e.getActionCommand());
          DefaultPropView.this.notifyListeners();
          DefaultPropView.this.refreshView(state);
        }
      }

    });
    panel.add(field, BorderLayout.CENTER);
    return panel;
  }

  private JPanel getInstanceClassPanel(final ModelGraph graph,
      final ViewState state) {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBorder(new EtchedBorder());
    panel.add(new JLabel("InstanceClass:"), BorderLayout.NORTH);
    JTextField field = new JTextField(graph.getModel().getInstanceClass(), 50);
    field.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (graph.getModel().getInstanceClass() == null
            || !graph.getModel().getInstanceClass()
                .equals(e.getActionCommand())) {
          graph.getModel().setInstanceClass(e.getActionCommand());
          DefaultPropView.this.notifyListeners();
          DefaultPropView.this.refreshView(state);
        }
      }

    });
    panel.add(field, BorderLayout.CENTER);
    return panel;
  }

  private JPanel getPriorityPanel(final ViewState state) {
    JPanel panel = new JPanel();
    panel.setBorder(new EtchedBorder());
    panel.setLayout(new BorderLayout());
    panel.add(new JLabel("Priority:  "), BorderLayout.WEST);
    final JLabel priorityLabel = new JLabel(String.valueOf(DEFAULT_PRIORITY));
    panel.add(priorityLabel, BorderLayout.CENTER);
    JSlider slider = new JSlider(0, 100, (int) 5 * 10);
    slider.setMajorTickSpacing(10);
    slider.setMinorTickSpacing(1);
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setSnapToTicks(false);
    Format f = new DecimalFormat("0.0");
    Hashtable<Integer, JComponent> labels = new Hashtable<Integer, JComponent>();
    for (int i = 0; i <= 10; i += 2) {
      JLabel label = new JLabel(f.format(i));
      label.setFont(label.getFont().deriveFont(Font.PLAIN));
      labels.put(i * 10, label);
    }
    slider.setLabelTable(labels);
    slider.addChangeListener(new ChangeListener() {

      public void stateChanged(ChangeEvent e) {
        double value = ((JSlider) e.getSource()).getValue() / 10.0;
        priorityLabel.setText(value + "");
        priorityLabel.revalidate();
        if (!((JSlider) e.getSource()).getValueIsAdjusting()) {
          // FIXME: deal with priorities
          DefaultPropView.this.notifyListeners();
        }
      }

    });

    panel.add(slider, BorderLayout.SOUTH);
    return panel;
  }

  private JPanel getExecutionTypePanel(final ModelGraph graph,
      final ViewState state) {
    JPanel panel = new JPanel();
    panel.setBorder(new EtchedBorder());
    panel.setLayout(new BorderLayout());
    panel.add(new JLabel("ExecutionType:"), BorderLayout.WEST);
    JComboBox comboBox = new JComboBox();
    if (graph.hasChildren()) {
      comboBox.addItem("parallel");
      comboBox.addItem("sequential");
    } else if (graph.getModel().getExecutionType().equals("task")) {
      comboBox.addItem("parallel");
      comboBox.addItem("sequential");
      comboBox.addItem("task");
    } else if (graph.isCondition()
        || graph.getModel().getExecutionType().equals("condition")) {
      comboBox.addItem("parallel");
      comboBox.addItem("sequential");
      comboBox.addItem("condition");
    } else {
      comboBox.addItem("parallel");
      comboBox.addItem("sequential");
      comboBox.addItem("task");
    }
    comboBox.setSelectedItem(graph.getModel().getExecutionType());
    comboBox.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e) {
        if (!graph.getModel().getExecutionType().equals(e.getItem())) {
          graph.getModel().setExecutionType((String) e.getItem());
          DefaultPropView.this.notifyListeners();
          DefaultPropView.this.refreshView(state);
        }
      }
    });
    panel.add(comboBox, BorderLayout.CENTER);
    return panel;
  }

  private JPanel getOptional(final ModelGraph graph, final ViewState state) {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBorder(new EtchedBorder());
    panel.add(new JLabel("Optional:"), BorderLayout.NORTH);
    JPanel checkBoxes = new JPanel();
    checkBoxes.setLayout(new GridLayout(1, 1));
    Checkbox checkbox = new Checkbox("ignore", graph.getModel().isOptional());
    checkBoxes.add(checkbox);
        checkbox.addItemListener(new ItemListener() {

          public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.DESELECTED)
              graph.getModel().setOptional(false);
            else if (e.getStateChange() == ItemEvent.SELECTED)
              graph.getModel().setOptional(true);
            else
              return;
            DefaultPropView.this.notifyListeners();
            DefaultPropView.this.refreshView(state);
          }

        });
    panel.add(checkBoxes, BorderLayout.CENTER);
    return panel;
 
 
 
  private JPanel getExecusedIds(final ModelGraph graph) {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBorder(new EtchedBorder());
    panel.add(new JLabel("ExcusedSubProcessorIds:"), BorderLayout.NORTH);
    JPanel checkBoxes = new JPanel();
    checkBoxes.setLayout(new GridLayout(graph.getChildren().size(), 1));
    if (graph.hasChildren()) {
      for (ModelGraph childGraph : graph.getChildren()) {
        final String modelId = childGraph.getModel().getModelId();
        Checkbox checkbox = new Checkbox(modelId, graph.getModel()
            .getExcusedSubProcessorIds().contains(modelId));
        checkBoxes.add(checkbox);
        checkbox.addItemListener(new ItemListener() {

          public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.DESELECTED)
              graph.getModel().getExcusedSubProcessorIds().remove(modelId);
            else if (e.getStateChange() == ItemEvent.SELECTED)
              graph.getModel().getExcusedSubProcessorIds().add(modelId);
            else
              return;
            DefaultPropView.this.notifyListeners();
          }

        });
      }
    }
    panel.add(checkBoxes, BorderLayout.CENTER);
    return panel;
  }

  public class MyTableListener implements TableModelListener,
      ListSelectionListener {

    String oldKey, oldValue, oldEnvReplace;

    private ViewState state;

    public MyTableListener(ViewState state) {
      this.state = state;
    }

    public void tableChanged(TableModelEvent e) {
      System.out.println(oldKey + " " + oldValue + " " + oldEnvReplace);
      if (e.getType() == TableModelEvent.UPDATE) {
        Metadata staticMet = state.getSelected().getModel().getStaticMetadata();
        if (staticMet == null)
          staticMet = new Metadata();
        if (e.getColumn() == 1) {
          String newGrouplessKey = (String) table.getValueAt(e.getFirstRow(),
              e.getColumn());
          if (newGrouplessKey.equals("")
              || (newGrouplessKey.equals("envReplace") && !state.getSelected()
                  .getModel().getStaticMetadata()
                  .containsGroup(state.getCurrentMetGroup()))) {
            notifyListeners();
            return;
          }
          String newKey = getKey(newGrouplessKey, state);
          System.out.println("newKey: " + newKey);
          if (oldKey != null) {
            staticMet.replaceMetadata(newKey, staticMet.getAllMetadata(oldKey));
            if (staticMet.containsKey(oldKey + "/envReplace"))
              staticMet.replaceMetadata(newKey,
                  staticMet.getAllMetadata(oldKey + "/envReplace"));
            if (!newKey.equals(oldKey))
              staticMet.removeMetadata(oldKey);
            notifyListeners();
          } else {
            staticMet.replaceMetadata(oldKey = newKey, (String) null);
          }
        } else if (e.getColumn() == 2) {
          if (oldKey != null) {
            String newValue = (String) table.getValueAt(e.getFirstRow(),
                e.getColumn());
            if (oldKey.endsWith("/envReplace")) {
              newValue = newValue.toLowerCase();
              if (newValue.equals("false"))
                staticMet.removeMetadata(oldKey);
              else
                staticMet.replaceMetadata(oldKey,
                    Arrays.asList(newValue.split(",")));
            } else {
              staticMet.replaceMetadata(oldKey,
                  Arrays.asList(newValue.split(",")));
            }
            notifyListeners();
          }
        } else if (e.getColumn() == 3) {
          if (oldKey != null) {
            String newEnvReplace = ((String) table.getValueAt(e.getFirstRow(),
                e.getColumn())).toLowerCase();
            if (newEnvReplace.equals("true"))
              staticMet.replaceMetadata(oldKey + "/envReplace", newEnvReplace);
            else
              staticMet.removeMetadata(oldKey + "/envReplace");
            notifyListeners();
          }
        }
        state.getSelected().getModel().setStaticMetadata(staticMet);
      }

    }

    public void valueChanged(ListSelectionEvent e) {
      oldKey = getKey((String) table.getValueAt(e.getFirstIndex(), 1), state);
      oldValue = (String) table.getValueAt(e.getFirstIndex(), 2);
      oldEnvReplace = (String) table.getValueAt(e.getFirstIndex(), 3);
    }

  }

  private String getKey(String key, ViewState state) {
    if (key != null && state.getCurrentMetGroup() != null)
      return state.getCurrentMetGroup() + "/" + key;
    else
      return key;
  }

}
TOP

Related Classes of org.apache.oodt.cas.workflow.gui.perspective.view.impl.DefaultPropView

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.