| /** |
| * 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); |
| } |
| } |
| |
| } |