/*
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
package sun.jvm.hotspot.ui;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.ui.tree.*;
import sun.jvm.hotspot.utilities.soql.*;
public class FindByQueryPanel extends SAPanel {
private JTextArea queryEditor;
private JEditorPane objectsEditor;
private SOQLEngine queryEngine;
public FindByQueryPanel() {
queryEngine = SOQLEngine.getEngine();
HyperlinkListener hyperListener = new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
VM vm = VM.getVM();
OopHandle handle = vm.getDebugger().parseAddress(e.getDescription()).addOffsetToAsOopHandle(0);
showInspector(vm.getObjectHeap().newOop(handle));
}
}
};
objectsEditor = new JEditorPane();
objectsEditor.setContentType("text/html");
objectsEditor.setEditable(false);
objectsEditor.addHyperlinkListener(hyperListener);
queryEditor = new JTextArea();
JButton queryButton = new JButton("Execute");
queryButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
final StringBuffer buf = new StringBuffer();
buf.append("<html><body>");
try {
queryEngine.executeQuery(queryEditor.getText(),
new ObjectVisitor() {
public void visit(Object o) {
if (o != null && o instanceof JSJavaObject) {
String oopAddr = ((JSJavaObject)o).getOop().getHandle().toString();
buf.append("<a href='");
buf.append(oopAddr);
buf.append("'>");
buf.append(oopAddr);
buf.append("</a>");
} else {
buf.append((o == null)? "null" : o.toString());
}
buf.append("<br>");
}
});
} catch (Exception e) {
e.printStackTrace();
buf.append("<b>");
buf.append(e.getMessage());
buf.append("</b>");
}
buf.append("</body></html>");
objectsEditor.setText(buf.toString());
}
});
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
topPanel.add(new JLabel("SOQL Query :"), BorderLayout.WEST);
topPanel.add(new JScrollPane(queryEditor), BorderLayout.CENTER);
topPanel.add(queryButton, BorderLayout.EAST);
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new BorderLayout());
bottomPanel.add(new JScrollPane(objectsEditor), BorderLayout.CENTER);
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topPanel, bottomPanel);
splitPane.setDividerLocation(0.3);
setLayout(new BorderLayout());
add(splitPane, BorderLayout.CENTER);
}
}