/** * 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.zookeeper.inspector.gui; import java.awt.BorderLayout; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import org.apache.zookeeper.inspector.gui.nodeviewer.ZooInspectorNodeViewer; import org.apache.zookeeper.inspector.manager.ZooInspectorManager; import org.apache.zookeeper.inspector.manager.ZooInspectorNodeManager; /** * This is the {@link JPanel} which contains the {@link ZooInspectorNodeViewer}s */ public class ZooInspectorNodeViewersPanel extends JPanel implements TreeSelectionListener, ChangeListener { private final List<ZooInspectorNodeViewer> nodeVeiwers = new ArrayList<ZooInspectorNodeViewer>(); private final List<Boolean> needsReload = new ArrayList<Boolean>(); private final JTabbedPane tabbedPane; private final List<String> selectedNodes = new ArrayList<String>(); private final ZooInspectorNodeManager zooInspectorManager; /** * @param zooInspectorManager * - the {@link ZooInspectorManager} for the application * @param nodeVeiwers * - the {@link ZooInspectorNodeViewer}s to show */ public ZooInspectorNodeViewersPanel( ZooInspectorNodeManager zooInspectorManager, List<ZooInspectorNodeViewer> nodeVeiwers) { this.zooInspectorManager = zooInspectorManager; this.setLayout(new BorderLayout()); tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT); setNodeViewers(nodeVeiwers); tabbedPane.addChangeListener(this); this.add(tabbedPane, BorderLayout.CENTER); reloadSelectedViewer(); } /** * @param nodeViewers * - the {@link ZooInspectorNodeViewer}s to show */ public void setNodeViewers(List<ZooInspectorNodeViewer> nodeViewers) { this.nodeVeiwers.clear(); this.nodeVeiwers.addAll(nodeViewers); needsReload.clear(); tabbedPane.removeAll(); for (ZooInspectorNodeViewer nodeViewer : nodeVeiwers) { nodeViewer.setZooInspectorManager(zooInspectorManager); needsReload.add(true); tabbedPane.add(nodeViewer.getTitle(), nodeViewer); } this.revalidate(); this.repaint(); } private void reloadSelectedViewer() { int index = this.tabbedPane.getSelectedIndex(); if (index != -1 && this.needsReload.get(index)) { ZooInspectorNodeViewer viewer = this.nodeVeiwers.get(index); viewer.nodeSelectionChanged(selectedNodes); this.needsReload.set(index, false); } } /* * (non-Javadoc) * * @see * javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event * .TreeSelectionEvent) */ public void valueChanged(TreeSelectionEvent e) { TreePath[] paths = e.getPaths(); selectedNodes.clear(); for (TreePath path : paths) { boolean appended = false; StringBuilder sb = new StringBuilder(); Object[] pathArray = path.getPath(); for (Object o : pathArray) { if (o != null) { String nodeName = o.toString(); if (nodeName != null) { if (nodeName.length() > 0) { appended = true; sb.append("/"); //$NON-NLS-1$ sb.append(o.toString()); } } } } if (appended) { selectedNodes.add(sb.toString()); } } for (int i = 0; i < needsReload.size(); i++) { this.needsReload.set(i, true); } reloadSelectedViewer(); } /* * (non-Javadoc) * * @see * javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent * ) */ public void stateChanged(ChangeEvent e) { reloadSelectedViewer(); } }