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

Source Code of org.apache.oodt.cas.workflow.gui.perspective.view.impl.GlobalConfigView$Key

/**
* 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.Color;
import java.awt.Component;
import java.awt.Rectangle;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.border.EtchedBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;

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

//OODT imports
import org.apache.oodt.cas.workflow.gui.model.repo.XmlWorkflowModelRepository.ConfigGroup;
import org.apache.oodt.cas.workflow.gui.perspective.view.View;
import org.apache.oodt.cas.workflow.gui.perspective.view.ViewState;

/**
*
* Displays information about global config properties loaded from the
* Workflows.
*
* @author bfoster
* @author mattmann
*
*/
public class GlobalConfigView extends View {

  private static final long serialVersionUID = 3899104909278232407L;
  private JTree tree;
  private JTabbedPane tabbedPane;
  private Map<String, ConfigGroup> globalConfig;

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

  @Override
  public void refreshView(ViewState state) {

    Rectangle visibleRect = null;
    if (this.tree != null)
      visibleRect = this.tree.getVisibleRect();

    DefaultMutableTreeNode root = new DefaultMutableTreeNode("GlobalConfig");

    if (state != null && state.getGlobalConfigGroups() != null) {
      if (globalConfig != null
          && globalConfig.keySet().equals(
              state.getGlobalConfigGroups().keySet())
          && globalConfig.values().equals(
              state.getGlobalConfigGroups().values()))
        return;

      this.removeAll();

      for (ConfigGroup group : (globalConfig = state.getGlobalConfigGroups())
          .values()) {
        HashSet<String> keys = new HashSet<String>();
        DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(
            new Group(group.getName()));
        root.add(groupNode);
        for (String key : group.getMetadata().getAllKeys()) {
          keys.add(key);
          DefaultMutableTreeNode keyNode = new DefaultMutableTreeNode(new Key(
              key));
          groupNode.add(keyNode);
          DefaultMutableTreeNode valueNode = new DefaultMutableTreeNode(
              new Value(StringUtils.join(group.getMetadata()
                  .getAllMetadata(key), ",")));
          keyNode.add(valueNode);
        }
        if (group.getExtends() != null) {
          List<String> extendsGroups = new Vector<String>(group.getExtends());
          Collections.reverse(extendsGroups);
          for (String extendsGroup : extendsGroups) {
            List<String> groupKeys = state.getGlobalConfigGroups()
                .get(extendsGroup).getMetadata().getAllKeys();
            groupKeys.removeAll(keys);
            if (groupKeys.size() > 0) {
              for (String key : groupKeys) {
                if (!keys.contains(key)) {
                  keys.add(key);
                  DefaultMutableTreeNode keyNode = new DefaultMutableTreeNode(
                      new ExtendsKey(extendsGroup, key));
                  groupNode.add(keyNode);
                  DefaultMutableTreeNode valueNode = new DefaultMutableTreeNode(
                      new ExtendsValue(StringUtils.join(state
                          .getGlobalConfigGroups().get(extendsGroup)
                          .getMetadata().getAllMetadata(key), ",")));
                  keyNode.add(valueNode);
                }
              }
            }
          }
        }
      }

      tree = new JTree(root);
      tree.setShowsRootHandles(true);
      tree.setRootVisible(false);

      tree.setCellRenderer(new TreeCellRenderer() {

        public Component getTreeCellRendererComponent(JTree tree, Object value,
            boolean selected, boolean expanded, boolean leaf, int row,
            boolean hasFocus) {
          DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
          if (node.getUserObject() instanceof Key) {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            JLabel label = new JLabel(node.getUserObject().toString());
            label.setForeground(Color.darkGray);
            panel.add(label, BorderLayout.CENTER);
            panel.setBackground(selected ? Color.lightGray : Color.white);
            return panel;
          } else if (node.getUserObject() instanceof ExtendsKey) {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            ExtendsKey key = (ExtendsKey) node.getUserObject();
            JLabel groupLabel = new JLabel("(" + key.getGroup() + ") ");
            groupLabel.setForeground(Color.black);
            JLabel keyLabel = new JLabel(key.getValue());
            keyLabel.setForeground(Color.gray);
            panel.add(groupLabel, BorderLayout.WEST);
            panel.add(keyLabel, BorderLayout.CENTER);
            panel.setBackground(selected ? Color.lightGray : Color.white);
            return panel;
          } else if (node.getUserObject() instanceof Group) {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            JLabel label = new JLabel(node.getUserObject().toString());
            label.setForeground(Color.black);
            label.setBackground(Color.white);
            panel.add(label, BorderLayout.CENTER);
            panel.setBackground(selected ? Color.lightGray : Color.white);
            return panel;
          } else if (node.getUserObject() instanceof Value) {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            panel.setBorder(new EtchedBorder(1));
            JLabel label = new JLabel(node.getUserObject().toString());
            label.setForeground(Color.black);
            panel.add(label, BorderLayout.CENTER);
            panel.setBackground(selected ? Color.lightGray : Color.white);
            return panel;
          } else if (node.getUserObject() instanceof ExtendsValue) {
            JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            panel.setBorder(new EtchedBorder(1));
            JLabel label = new JLabel(node.getUserObject().toString());
            label.setForeground(Color.gray);
            panel.add(label, BorderLayout.CENTER);
            panel.setBackground(selected ? Color.lightGray : Color.white);
            return panel;
          } else {
            return new JLabel();
          }
        }

      });
    }

    this.setBorder(new EtchedBorder());
    JLabel panelName = new JLabel("Global-Config Groups");
    panelName.setBorder(new EtchedBorder());
    this.add(panelName, BorderLayout.NORTH);
    JScrollPane scrollPane = new JScrollPane(tree,
        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

    tabbedPane = new JTabbedPane();
    tabbedPane.addTab("Tree", scrollPane);
    tabbedPane.addTab("Table", new JPanel());

    this.add(tabbedPane, BorderLayout.CENTER);

    if (visibleRect != null)
      this.tree.scrollRectToVisible(visibleRect);

    this.revalidate();
  }

  public class StringNode {
    private String value;

    public StringNode(String value) {
      this.value = value;
    }

    public String getValue() {
      return this.value;
    }

    public String toString() {
      return this.value;
    }
  }

  public class Key extends StringNode {
    public Key(String value) {
      super(value);
    }
  }

  public class ExtendsKey extends StringNode {
    private String group;

    public ExtendsKey(String group, String value) {
      super(value);
      this.group = group;
    }

    public String getGroup() {
      return this.group;
    }
  }

  public class ExtendsValue extends StringNode {
    public ExtendsValue(String value) {
      super(value);
    }
  }

  public class Value extends StringNode {
    public Value(String value) {
      super(value);
    }
  }

  public class Group extends StringNode {
    public Group(String group) {
      super(group);
    }
  }

}
TOP

Related Classes of org.apache.oodt.cas.workflow.gui.perspective.view.impl.GlobalConfigView$Key

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.