/**
* 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.nodeviewer;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.SwingWorker;
import org.apache.zookeeper.inspector.gui.ZooInspectorIconResources;
import org.apache.zookeeper.inspector.logger.LoggerFactory;
import org.apache.zookeeper.inspector.manager.ZooInspectorNodeManager;
/**
* A node viewer for displaying the data for the currently selected node
*/
public class NodeViewerData extends ZooInspectorNodeViewer {
private ZooInspectorNodeManager zooInspectorManager;
private final JTextPane dataArea;
private final JToolBar toolbar;
private String selectedNode;
/**
*
*/
public NodeViewerData() {
this.setLayout(new BorderLayout());
this.dataArea = new JTextPane();
this.toolbar = new JToolBar();
this.toolbar.setFloatable(false);
JScrollPane scroller = new JScrollPane(this.dataArea);
scroller
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
this.add(scroller, BorderLayout.CENTER);
this.add(this.toolbar, BorderLayout.NORTH);
JButton saveButton = new JButton(ZooInspectorIconResources
.getSaveIcon());
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (selectedNode != null) {
if (JOptionPane.showConfirmDialog(NodeViewerData.this,
"Are you sure you want to save this node?"
+ " (this action cannot be reverted)",
"Confirm Save", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
zooInspectorManager.setData(selectedNode, dataArea
.getText());
}
}
}
});
this.toolbar.add(saveButton);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.zookeeper.inspector.gui.nodeviewer.ZooInspectorNodeViewer#
* getTitle()
*/
@Override
public String getTitle() {
return "Node Data";
}
/*
* (non-Javadoc)
*
* @see
* org.apache.zookeeper.inspector.gui.nodeviewer.ZooInspectorNodeViewer#
* nodeSelectionChanged(java.util.Set)
*/
@Override
public void nodeSelectionChanged(List<String> selectedNodes) {
if (selectedNodes.size() > 0) {
this.selectedNode = selectedNodes.get(0);
SwingWorker<String, Void> worker = new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
return NodeViewerData.this.zooInspectorManager
.getData(NodeViewerData.this.selectedNode);
}
@Override
protected void done() {
String data = "";
try {
data = get();
} catch (InterruptedException e) {
LoggerFactory.getLogger().error(
"Error retrieving data for node: "
+ NodeViewerData.this.selectedNode, e);
} catch (ExecutionException e) {
LoggerFactory.getLogger().error(
"Error retrieving data for node: "
+ NodeViewerData.this.selectedNode, e);
}
NodeViewerData.this.dataArea.setText(data);
}
};
worker.execute();
}
}
/*
* (non-Javadoc)
*
* @see
* org.apache.zookeeper.inspector.gui.nodeviewer.ZooInspectorNodeViewer#
* setZooInspectorManager
* (org.apache.zookeeper.inspector.manager.ZooInspectorNodeManager)
*/
@Override
public void setZooInspectorManager(
ZooInspectorNodeManager zooInspectorManager) {
this.zooInspectorManager = zooInspectorManager;
}
}