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("<", "<");// content = content.replaceAll(">", ">");// content = content.replaceAll("&", "&");// // // 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 + -
显示快捷键?