You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2015/08/27 14:17:12 UTC
svn commit: r1698134 - in
/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer:
Explorer.java NodeStoreTree.java
Author: alexparvulescu
Date: Thu Aug 27 12:17:11 2015
New Revision: 1698134
URL: http://svn.apache.org/r1698134
Log:
OAK-3296 Oak Explorer support for live read-only store
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java?rev=1698134&r1=1698133&r2=1698134&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java Thu Aug 27 12:17:11 2015
@@ -41,6 +41,7 @@ import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
+import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.ReadOnlyStore;
import org.apache.jackrabbit.oak.plugins.segment.file.JournalReader;
@@ -67,14 +68,17 @@ public class Explorer {
}
final String path = args[0];
- final ReadOnlyStore store = new ReadOnlyStore(new File(path));
final boolean skipSizeCheck = args.length == 2
&& skip.equalsIgnoreCase(args[1]);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
initLF();
- createAndShowGUI(path, store, skipSizeCheck);
+ try {
+ createAndShowGUI(path, skipSizeCheck);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
});
}
@@ -93,25 +97,27 @@ public class Explorer {
}
}
- private void createAndShowGUI(final String path, final ReadOnlyStore store, boolean skipSizeCheck) {
+ private void createAndShowGUI(final String path, boolean skipSizeCheck)
+ throws IOException {
+
+ JTextArea log = new JTextArea(5, 20);
+ log.setMargin(new Insets(5, 5, 5, 5));
+ log.setLineWrap(true);
+ log.setEditable(false);
+
+ final NodeStoreTree treePanel = new NodeStoreTree(path, log, skipSizeCheck);
+
final JFrame frame = new JFrame("Explore " + path + " @head");
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
- store.close();
+ IOUtils.closeQuietly(treePanel);
System.exit(0);
}
});
JPanel content = new JPanel(new GridBagLayout());
- JTextArea log = new JTextArea(5, 20);
- log.setMargin(new Insets(5, 5, 5, 5));
- log.setLineWrap(true);
- log.setEditable(false);
-
- final NodeStoreTree treePanel = new NodeStoreTree(store, log, skipSizeCheck);
-
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
@@ -126,6 +132,19 @@ public class Explorer {
JMenuBar menuBar = new JMenuBar();
menuBar.setMargin(new Insets(2, 2, 2, 2));
+ JMenuItem menuReopen = new JMenuItem("Reopen");
+ menuReopen.setMnemonic(KeyEvent.VK_R);
+ menuReopen.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ev) {
+ try {
+ treePanel.reopen();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
JMenuItem menuCompaction = new JMenuItem("Time Machine");
menuCompaction.setMnemonic(KeyEvent.VK_T);
menuCompaction.addActionListener(new ActionListener() {
@@ -221,6 +240,8 @@ public class Explorer {
}
});
+ menuBar.add(menuReopen);
+ menuBar.add(new JSeparator(JSeparator.VERTICAL));
menuBar.add(menuCompaction);
menuBar.add(new JSeparator(JSeparator.VERTICAL));
menuBar.add(menuRefs);
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java?rev=1698134&r1=1698133&r2=1698134&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java Thu Aug 27 12:17:11 2015
@@ -24,6 +24,7 @@ import static com.google.common.collect.
import static com.google.common.escape.Escapers.builder;
import java.awt.GridLayout;
+import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
@@ -67,9 +68,11 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-public class NodeStoreTree extends JPanel implements TreeSelectionListener {
+public class NodeStoreTree extends JPanel implements TreeSelectionListener,
+ Closeable {
- private final ReadOnlyStore store;
+ private final String path;
+ private ReadOnlyStore store;
private DefaultTreeModel treeModel;
private final JTree tree;
@@ -81,32 +84,31 @@ public class NodeStoreTree extends JPane
// TODO make this configurable
private final boolean cacheNodeState = false;
- public NodeStoreTree(ReadOnlyStore store, JTextArea log, boolean skipSizeCheck) {
+ public NodeStoreTree(String path, JTextArea log, boolean skipSizeCheck)
+ throws IOException {
super(new GridLayout(1, 0));
- this.store = store;
+ this.path = path;
this.log = log;
-
- this.index = store.getTarReaderIndex();
- this.sizeCache = new HashMap<RecordIdKey, Long[]>();
this.skipSizeCheck = skipSizeCheck;
- DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(
- new NamePathModel("/", "/", store.getHead(), sizeCache,
- skipSizeCheck, store, cacheNodeState), true);
- treeModel = new DefaultTreeModel(rootNode);
- addChildren(rootNode);
-
- tree = new JTree(treeModel);
+ tree = new JTree();
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setShowsRootHandles(true);
tree.addTreeSelectionListener(this);
tree.setExpandsSelectedPaths(true);
+ refreshStore();
+ refreshModel();
+
JScrollPane scrollPane = new JScrollPane(tree);
add(scrollPane);
}
+ private void refreshStore() throws IOException {
+ this.store = new ReadOnlyStore(new File(path));
+ }
+
private void refreshModel() {
index = store.getTarReaderIndex();
sizeCache = new HashMap<RecordIdKey, Long[]>();
@@ -115,6 +117,13 @@ public class NodeStoreTree extends JPane
skipSizeCheck, store, cacheNodeState), true);
treeModel = new DefaultTreeModel(rootNode);
addChildren(rootNode);
+ tree.setModel(treeModel);
+ }
+
+ public void reopen() throws IOException {
+ close();
+ refreshStore();
+ refreshModel();
}
@Override
@@ -802,4 +811,9 @@ public class NodeStoreTree extends JPane
}
+ @Override
+ public void close() throws IOException {
+ store.close();
+ }
+
}