conciseformatentityrenderer.java

来自「Semantic Web Ontology Editor」· Java 代码 · 共 1,805 行 · 第 1/5 页

JAVA
1,805
字号
//The MIT License//// Copyright (c) 2004 Mindswap Research Group, University of Maryland, College Park//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included in// all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS// IN THE SOFTWARE.package org.mindswap.swoop.renderer.entity;import java.awt.Component;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.StringWriter;import java.io.Writer;import java.net.URI;import java.net.URL;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.HashSet;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import javax.swing.JList;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import org.apache.commons.lang.StringEscapeUtils;import org.mindswap.pellet.debug.owlapi.Reasoner;import org.mindswap.pellet.debug.utils.Timer;import org.mindswap.swoop.Swoop;import org.mindswap.swoop.SwoopDisplayPanel;import org.mindswap.swoop.SwoopModel;import org.mindswap.swoop.TermsDisplay;import org.mindswap.swoop.debugging.RepairFrame;import org.mindswap.swoop.popup.PopupAddAnnotation;import org.mindswap.swoop.popup.PopupAddClass;import org.mindswap.swoop.popup.PopupAddIndividual;import org.mindswap.swoop.popup.PopupAddProperty;import org.mindswap.swoop.popup.PopupAddRule;import org.mindswap.swoop.popup.PopupAddValue;import org.mindswap.swoop.reasoner.PelletReasoner;import org.mindswap.swoop.reasoner.SwoopReasoner;import org.mindswap.swoop.renderer.BaseEntityRenderer;import org.mindswap.swoop.renderer.SwoopEditableRenderer;import org.mindswap.swoop.renderer.SwoopEntityRenderer;import org.mindswap.swoop.renderer.SwoopRenderingVisitor;import org.mindswap.swoop.utils.RuleValue;import org.mindswap.swoop.utils.RulesExpressivity;import org.mindswap.swoop.utils.SetUtils;import org.mindswap.swoop.utils.XPointers;import org.mindswap.swoop.utils.change.BooleanElementChange;import org.mindswap.swoop.utils.change.EnumElementChange;import org.mindswap.swoop.utils.external.ExternalRuleSubmitter;import org.mindswap.swoop.utils.owlapi.CorrectedRDFRenderer;import org.mindswap.swoop.utils.owlapi.OWLDescriptionFinder;import org.mindswap.swoop.utils.owlapi.OWLOntBuilder;import org.mindswap.swoop.utils.ui.SwoopIcons;import org.semanticweb.owl.io.RendererException;import org.semanticweb.owl.io.vocabulary.OWLVocabularyAdapter;import org.semanticweb.owl.model.OWLAnd;import org.semanticweb.owl.model.OWLAnnotationInstance;import org.semanticweb.owl.model.OWLAnnotationProperty;import org.semanticweb.owl.model.OWLClass;import org.semanticweb.owl.model.OWLClassAxiom;import org.semanticweb.owl.model.OWLDataFactory;import org.semanticweb.owl.model.OWLDataProperty;import org.semanticweb.owl.model.OWLDataRange;import org.semanticweb.owl.model.OWLDataType;import org.semanticweb.owl.model.OWLDataValue;import org.semanticweb.owl.model.OWLDescription;import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom;import org.semanticweb.owl.model.OWLDisjointClassesAxiom;import org.semanticweb.owl.model.OWLEntity;import org.semanticweb.owl.model.OWLEnumeration;import org.semanticweb.owl.model.OWLEquivalentClassesAxiom;import org.semanticweb.owl.model.OWLEquivalentPropertiesAxiom;import org.semanticweb.owl.model.OWLException;import org.semanticweb.owl.model.OWLIndividual;import org.semanticweb.owl.model.OWLIndividualAxiom;import org.semanticweb.owl.model.OWLIndividualTypeAssertion;import org.semanticweb.owl.model.OWLNamedObject;import org.semanticweb.owl.model.OWLNot;import org.semanticweb.owl.model.OWLObject;import org.semanticweb.owl.model.OWLObjectProperty;import org.semanticweb.owl.model.OWLObjectPropertyInstance;import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom;import org.semanticweb.owl.model.OWLOntology;import org.semanticweb.owl.model.OWLOr;import org.semanticweb.owl.model.OWLProperty;import org.semanticweb.owl.model.OWLPropertyDomainAxiom;import org.semanticweb.owl.model.OWLRestriction;import org.semanticweb.owl.model.OWLSameIndividualsAxiom;import org.semanticweb.owl.model.OWLSubClassAxiom;import org.semanticweb.owl.model.OWLSubPropertyAxiom;import org.semanticweb.owl.model.change.AddAnnotationInstance;import org.semanticweb.owl.model.change.AddClassAxiom;import org.semanticweb.owl.model.change.AddDataPropertyInstance;import org.semanticweb.owl.model.change.AddDataPropertyRange;import org.semanticweb.owl.model.change.AddDomain;import org.semanticweb.owl.model.change.AddEntity;import org.semanticweb.owl.model.change.AddEnumeration;import org.semanticweb.owl.model.change.AddEquivalentClass;import org.semanticweb.owl.model.change.AddIndividualAxiom;import org.semanticweb.owl.model.change.AddIndividualClass;import org.semanticweb.owl.model.change.AddInverse;import org.semanticweb.owl.model.change.AddObjectPropertyInstance;import org.semanticweb.owl.model.change.AddObjectPropertyRange;import org.semanticweb.owl.model.change.AddPropertyAxiom;import org.semanticweb.owl.model.change.AddSuperClass;import org.semanticweb.owl.model.change.AddSuperProperty;import org.semanticweb.owl.model.change.ChangeVisitor;import org.semanticweb.owl.model.change.OntologyChange;import org.semanticweb.owl.model.change.RemoveAnnotationInstance;import org.semanticweb.owl.model.change.RemoveClassAxiom;import org.semanticweb.owl.model.change.RemoveDataPropertyInstance;import org.semanticweb.owl.model.change.RemoveDataPropertyRange;import org.semanticweb.owl.model.change.RemoveDomain;import org.semanticweb.owl.model.change.RemoveEntity;import org.semanticweb.owl.model.change.RemoveEnumeration;import org.semanticweb.owl.model.change.RemoveEquivalentClass;import org.semanticweb.owl.model.change.RemoveIndividualAxiom;import org.semanticweb.owl.model.change.RemoveIndividualClass;import org.semanticweb.owl.model.change.RemoveInverse;import org.semanticweb.owl.model.change.RemoveObjectPropertyInstance;import org.semanticweb.owl.model.change.RemoveObjectPropertyRange;import org.semanticweb.owl.model.change.RemovePropertyAxiom;import org.semanticweb.owl.model.change.RemoveSuperClass;import org.semanticweb.owl.model.change.RemoveSuperProperty;import org.semanticweb.owl.model.change.SetFunctional;import org.semanticweb.owl.model.change.SetInverseFunctional;import org.semanticweb.owl.model.change.SetSymmetric;import org.semanticweb.owl.model.change.SetTransitive;import org.semanticweb.owl.model.helper.OntologyHelper;import org.semanticweb.owl.rules.OWLRule;import org.semanticweb.owl.rules.OWLRuleAtom;import org.semanticweb.owl.rules.OWLRuleClassAtom;import org.semanticweb.owl.rules.OWLRuleDataPropertyAtom;import org.semanticweb.owl.rules.OWLRuleObjectPropertyAtom;/** * @author Aditya Kalyanpur, Evren Sirin */public class ConciseFormatEntityRenderer extends BaseEntityRenderer implements SwoopEditableRenderer, SwoopEntityRenderer {		List changes = null;	public Map OWLDescHash;	OWLEntity displayedEntity;	String[] depictions = {"http://www.mindswap.org/~glapizco/technical.owl#depiction", "http://xmlns.com/foaf/0.1/depiction"}; 	String HR = "</tr><tr></tr><tr bgcolor=\"#FFF68F\">";	boolean imported = false;	Map sortLevelMap;	// params used for black box sos derivation	boolean sosBlackBox = false;	int axiomLimit = 40;	// two maps for entities	HashMap usageMap = new HashMap();	HashMap axiomMap = new HashMap();	// one map for axioms	HashMap signatureMap = new HashMap();		private long parseTime = 0;	private long netTime = 0;	private int mupsCount = 0;		public ConciseFormatEntityRenderer() {	}		public String getContentType() {		return "text/html";	}		public String getName() {		return "Concise Format";	}		public SwoopRenderingVisitor createVisitor() {		return new ConciseFormatVisitor(this, swoopModel);	}	protected void renderEntity() throws OWLException {		print("<html><body style='color: black; background-color: white;'>");		print("<FONT FACE=\""+swoopModel.getFontFace()+"\" SIZE="+fontSize+">");		super.renderEntity();		print("</FONT>");		print("</body></html>");	}		// silly hack to remove artifact in display when show_divisions is ON	private String postProcess(String rendStr) {		if (swoopModel.getShowDivisions()) {			String remove = "<tr bgcolor=\"#FFF68F\">";			if (rendStr.lastIndexOf(remove)>rendStr.lastIndexOf("<b>")) {				rendStr = rendStr.substring(0, rendStr.lastIndexOf(remove));			}											}		return rendStr;	}	/* Well dodgy coding */	protected void renderAnnotationContent(Object o) throws OWLException {		if (o instanceof URI) {			print(escape(o));		} else if (o instanceof OWLIndividual) {			print(escape(((OWLIndividual) o).getURI()));		} else {			String content = o.toString();			if (o instanceof OWLDataValue) {							OWLDataValue dv = (OWLDataValue) o;				/* Only show it if it's not string */				URI dvdt = dv.getURI();				String dvlang = dv.getLang();				if (dvdt != null) {					print("(Datatype " + escape(dvdt) + ") ");				} else {					if (dvlang != null && !dvlang.equals("")) {						print("(" + escape(dvlang) + ") ");					}				}				content = dv.getValue().toString();			}//			print(escape(dv.getValue()));//		} else {			// This is such a hack - Ron			//			if (content.indexOf("html")>=0 && content.indexOf("body")>=0) {//				content = content.replaceAll("&lt;", "<");//				content = content.replaceAll("&gt;", ">");//				content = content.replaceAll("&amp;", "&");//			//				// remove <html><body> outer tags because it's being rendered inside a new html doc anyway//			//				int spos = content.indexOf("<body>")+6;//				int epos = content.indexOf("</body>");//				content = content.substring(spos, epos);//				if (content.trim().indexOf("<p")>=0) {//					content = content.substring(content.indexOf(">")+1, content.length());//				}//				content += " (**Stripped HTML tags**)";//			}//			// System.out.println(content);			print(" : "+escape(content));		}	}		/**	 * Return an ontology change which deletes OWL Annotation Instances	 * @param subj - subject of the annotation	 * @param prop - OWL Annotation property used	 * @param content - content of the annotation	 * @return	 */	private OntologyChange isDeleted(OWLObject subj, OWLAnnotationProperty prop, Object content) {		OntologyChange deleted = null;				Iterator i = changes.iterator();		while(i.hasNext()) {			OntologyChange oc = (OntologyChange) i.next();						if(oc instanceof RemoveAnnotationInstance) {				RemoveAnnotationInstance change = (RemoveAnnotationInstance) oc;				if (change.getSubject().equals(subj) && change.getProperty().equals(prop) && change.getContent().equals(content))					deleted = oc;			}		}				return deleted;	}		protected boolean renderAnnotations(OWLObject obj) throws OWLException {				boolean printed = false;		if (!obj.getAnnotations(reasoner.getOntology()).isEmpty()) {			printed = true;			println();			String annTitle = " <b>Annotations</b>:";			if (editorEnabled) annTitle += addTitle("A-ANN");			println(annTitle);			for (Iterator it = obj.getAnnotations(reasoner.getOntology()).iterator(); it.hasNext();) {				OWLAnnotationInstance oai = (OWLAnnotationInstance) it.next();								if (editorEnabled) {					OntologyChange deleted = isDeleted(obj, oai.getProperty(), oai.getContent());									if (deleted!=null) {						print("<font color=\"red\"><strike>");						print("  " + escape(shortForm(oai.getProperty().getURI())) + " ");						renderAnnotationContent(oai.getContent());						print("</strike></font>");						addUndo(deleted, "Delete", annTitle);					}					else {						print("  " + escape(shortForm(oai.getProperty().getURI())) + " ");						renderAnnotationContent(oai.getContent());						addDelete(oai, "A-ANN");					}				}				else {					print("  " + escape(shortForm(oai.getProperty().getURI())) + " ");					renderAnnotationContent(oai.getContent());				}				println();				/* Do we need to do this??? */				visitor.reset();				oai.accept(visitor);				// 		if (it.hasNext()) {				// 		    println();				// 		}			}		}				// print temporarily added changes		if (editorEnabled) {			Set added = this.getAddedAnnotations(obj); 			if (added.size()>0) {				// print title if not printed already				String annTitle = " <b>Annotations</b>:";				annTitle += addTitle("A-ANN");				if (!printed) {					println(annTitle);					printed = true;				}				// print added changes in green (and add undo links)				for (Iterator iter = added.iterator(); iter.hasNext(); ) {					AddAnnotationInstance change = (AddAnnotationInstance) iter.next();					print("<font color=\"green\">");					print("  " + escape(shortForm(change.getProperty().getURI())) + " ");					renderAnnotationContent(change.getContent());					print("</font>");					this.addUndo(change, "Add", annTitle);					println();				}			}		}		return printed;	}	private boolean isExplicit(OWLObject subj, String code, OWLObject obj) throws OWLException {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?