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 + -
显示快捷键?