popupontologysource.java
来自「Semantic Web Ontology Editor」· Java 代码 · 共 607 行 · 第 1/2 页
JAVA
607 行
package org.mindswap.swoop.popup;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.io.File;import java.io.FileWriter;import java.io.StringReader;import java.io.StringWriter;import java.net.URI;import java.util.List;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.JCheckBox;import javax.swing.JDialog;import javax.swing.JEditorPane;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.KeyStroke;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.event.UndoableEditEvent;import javax.swing.event.UndoableEditListener;import javax.swing.filechooser.FileFilter;import javax.swing.text.BadLocationException;import javax.swing.text.DefaultHighlighter;import javax.swing.text.Document;import javax.swing.undo.CannotRedoException;import javax.swing.undo.CannotUndoException;import javax.swing.undo.UndoManager;import org.mindswap.swoop.SwoopFrame;import org.mindswap.swoop.SwoopModel;import org.mindswap.swoop.utils.owlapi.CorrectedRDFRenderer;import org.mindswap.swoop.utils.owlapi.diff.OWLDiff;import org.mindswap.swoop.utils.ui.ExceptionDialog;import org.mindswap.swoop.utils.ui.SwoopFileFilter;import org.semanticweb.owl.io.RendererException;import org.semanticweb.owl.model.OWLException;import org.semanticweb.owl.model.OWLOntology;import org.xngr.browser.editor.XmlEditorPane;import org.xngr.browser.properties.EditorProperties;/** * @author Aditya Kalyanpur * */public class PopupOntologySource extends JFrame implements KeyListener, ActionListener, WindowListener, DocumentListener, MouseListener { EditorProperties props; SwoopFrame swoopHandler; SwoopModel swoopModel; public JEditorPane codePane; JMenuItem saveOnt, saveAsOnt, refreshOnt, findMenu, findNextMenu, findPreviousMenu;// JCheckBoxMenuItem autoRefreshClose; File ontFile = null; JFileChooser wrapChooser = new JFileChooser(); public String originalSrc; private OWLOntology originalOntology; boolean srcChanged = false; public String findMatch = ""; int currentMatch = 0, lastMatch = 0; protected UndoAction undoAction; protected RedoAction redoAction; UndoManager undo = new UndoManager(); public boolean matchCase = false; public boolean matchWord = true; public DefaultHighlighter dh; public DefaultHighlighter.DefaultHighlightPainter dhp = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW); public int format; // use the same values as in the file filters: 0- RDF/XML, 1- AS , 2- Turtle int RDF_FORMAT = 0; int AS_FORMAT = 1; int TURTLE_FORMAT = 2; public String[] fileExt = { ".owl", ".txt",""}; JCheckBox caseChk; JCheckBox wordChk; public PopupOntologySource(SwoopFrame handler, SwoopModel model, int format) { this.swoopHandler = handler; this.swoopModel = model; this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); this.format = format; caseChk = new JCheckBox("Match Case"); wordChk = new JCheckBox("Match Whole Word"); caseChk.setSelected(false); wordChk.setSelected(false); setupUI(); setupMenu(); } public void displaySrcCode(OWLOntology ontology) { originalOntology = ontology; try { setTitle("View Source - "+ontology.getURI().toString()); } catch (OWLException e) { e.printStackTrace(); } StringWriter st = new StringWriter(); CorrectedRDFRenderer rdfRenderer = new CorrectedRDFRenderer(); org.semanticweb.owl.io.abstract_syntax.Renderer ASRenderer = new org.semanticweb.owl.io.abstract_syntax.Renderer(); String code = ""; try { switch (this.format) { case 0 : // source code in RDF rdfRenderer.renderOntology(ontology, st); code = st.toString(); break; case 1 : ASRenderer.renderOntology(ontology, st); code = st.toString(); break; case 2 : //TODO Turtle renderer break; } } catch (RendererException e) { e.printStackTrace(); } // codePane.setSelectionColor(Color.YELLOW); codePane.setText(code); codePane.setCaretPosition(0); originalSrc = codePane.getText(); codePane.getDocument().addUndoableEditListener(new MyUndoableEditListener()); codePane.getDocument().addDocumentListener(this); } private void setupUI() { codePane = new XmlEditorPane(); if (format!=RDF_FORMAT) { codePane = new JEditorPane(); codePane.setFont(new Font("Courier", Font.PLAIN, 13)); } codePane.setAutoscrolls(true); java.awt.Container content = getContentPane(); // create defaulthighlighter and associate with webPane dh = new DefaultHighlighter(); codePane.setHighlighter(dh); codePane.addMouseListener(this); content.setLayout(new BorderLayout()); content.add(new JScrollPane(codePane), "Center"); setLocation(10,10); setSize(800,600); this.addWindowListener(this); } private void setupMenu() { JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); saveOnt = new JMenuItem("Save"); saveOnt.addActionListener(this); saveAsOnt = new JMenuItem("Save As.."); saveAsOnt.addActionListener(this); fileMenu.add(saveOnt); fileMenu.add(saveAsOnt); JMenuItem menuExit = new JMenuItem("Exit"); fileMenu.add(menuExit); menuExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { dispose(); } }); JMenu editMenu = new JMenu("Edit"); menuBar.add(editMenu); findMenu = new JMenuItem("Find "); findMenu.addActionListener(this); findMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK)); editMenu.add(findMenu); findPreviousMenu = new JMenuItem("Find Previous.."); findPreviousMenu.addActionListener(this); findPreviousMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.CTRL_MASK)); editMenu.add(findPreviousMenu); findNextMenu = new JMenuItem("Find Next.."); findNextMenu.addActionListener(this); findNextMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K, ActionEvent.CTRL_MASK)); editMenu.add(findNextMenu); editMenu.addSeparator(); undoAction = new UndoAction(); editMenu.add(undoAction); redoAction = new RedoAction(); editMenu.add(redoAction); JMenu refreshMenu = new JMenu("Update Model"); menuBar.add(refreshMenu); refreshOnt = new JMenuItem("Save State & Update Ontology in SWOOP"); refreshOnt.addActionListener(this); refreshOnt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));// autoRefreshClose = new JCheckBoxMenuItem("Auto-Update Ontology upon Closing this Window");// autoRefreshClose.setState(true); refreshMenu.add(refreshOnt);// refreshMenu.add(autoRefreshClose); setJMenuBar(menuBar); } private boolean updateOntology() { if (!srcChanged) { return true; } else { srcChanged = false; } try { URI baseURI = originalOntology.getURI(); StringReader originalReader = new StringReader(originalSrc); OWLOntology ontology = null; // = swoopModel.getSelectedOntology(); // add updated ontology StringReader updateReader = new StringReader(codePane.getText()); OWLOntology updatedOntology = null; System.out.println("originalReader: "+originalReader); System.out.println("baseURI: "+baseURI); switch (format) { case 0: ontology = swoopModel.loadOntologyInRDF(originalReader, baseURI); updatedOntology = swoopModel.loadOntologyInRDF(updateReader, baseURI); break; case 1: ontology = swoopModel.loadOntologyInAbstractSyntax(originalReader, baseURI); updatedOntology = swoopModel.loadOntologyInAbstractSyntax(updateReader, ontology.getURI()); break; } // restore old ontology, if exception loading new one if (updatedOntology==null) { JOptionPane.showMessageDialog(this, "Error parsing source code of Ontology.", "Parse Error", JOptionPane.ERROR_MESSAGE); // srcChanged = false; return false; } else { List changes = OWLDiff.getChanges(ontology, updatedOntology, originalOntology); swoopModel.addUncommittedChanges(changes); int result = JOptionPane.showConfirmDialog(this, "Ontology model updated successfully.\nApply changes now?", "Ontology Updated", JOptionPane.YES_NO_OPTION); if (result == JOptionPane.YES_OPTION) { swoopModel.applyOntologyChanges(); } } return true; } catch (Exception ex) { JDialog dialog = ExceptionDialog.createDialog(this, "Cannot parse ontology", ex); dialog.show(); ex.printStackTrace(); return false; } } public int findClosingParent(int start) { // TODO int balance = 0, i = 0; boolean seenFirst = false; String tmp=""; Document doc = codePane.getDocument(); try { tmp = doc.getText(start, doc.getLength()-start); } catch (BadLocationException e) { }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?