Revision: 20251 http://sourceforge.net/p/gate/code/20251 Author: markagreenwood Date: 2017-07-12 09:33:41 +0000 (Wed, 12 Jul 2017) Log Message: ----------- mavenized ready to move to git
Added Paths: ----------- gate/branches/sawdust2/plugins/Ontology_Tools/pom.xml gate/branches/sawdust2/plugins/Ontology_Tools/src/main/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/ClassNode.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/Gaze.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/GeneralEditorException.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/IFolder.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/MappingTreeView.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/OntoTreeModel.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/AnnotationAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/AnnotationEditor.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/CheckRenderer.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/ComboRenderer.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/FeaturesEditor.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/OntologyTreeListener.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/OntologyTreePanel.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/OntologyViewer.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/OntologyViewerOptions.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/creole/ontology/ocat/Utils.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/docview/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/docview/OntologyClassView.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/docview/OntologyInstanceView.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/AnnotationPropertyAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/DatatypePropertyAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/DeleteOntologyResourceAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/DetailsGroup.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/DetailsTableCellRenderer.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/DetailsTableModel.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/InstanceAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/KeyValuePair.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/OResourceNode.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/ObjectPropertyAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/OntoTreeCellRenderer.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/OntologyEditor.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/OntologyItemComparator.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/PropertyDetailsTableCellRenderer.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/PropertyDetailsTableModel.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/PropertyValue.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/RDFPropertyPrototype.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/RestrictionAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/SearchAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/SubClassAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/SymmetricPropertyAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/TopClassAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/TransitivePropertyAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/TreeNodeSelectionListener.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/Utils.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/gate/gui/ontology/ValuesSelectionAction.java gate/branches/sawdust2/plugins/Ontology_Tools/src/main/resources/ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/resources/creole.xml gate/branches/sawdust2/plugins/Ontology_Tools/src/test/ gate/branches/sawdust2/plugins/Ontology_Tools/src/test/java/ gate/branches/sawdust2/plugins/Ontology_Tools/src/test/java/gate/ gate/branches/sawdust2/plugins/Ontology_Tools/src/test/java/gate/creole/ gate/branches/sawdust2/plugins/Ontology_Tools/src/test/java/gate/creole/GappLoadingTest.java gate/branches/sawdust2/plugins/Ontology_Tools/src/test/resources/ gate/branches/sawdust2/plugins/Ontology_Tools/src/test/resources/creole.properties Removed Paths: ------------- gate/branches/sawdust2/plugins/Ontology_Tools/.classpath gate/branches/sawdust2/plugins/Ontology_Tools/.project gate/branches/sawdust2/plugins/Ontology_Tools/build.xml gate/branches/sawdust2/plugins/Ontology_Tools/doc/ gate/branches/sawdust2/plugins/Ontology_Tools/src/com/ gate/branches/sawdust2/plugins/Ontology_Tools/src/gate/ Deleted: gate/branches/sawdust2/plugins/Ontology_Tools/.classpath =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/.classpath 2017-07-10 14:43:43 UTC (rev 20250) +++ gate/branches/sawdust2/plugins/Ontology_Tools/.classpath 2017-07-12 09:33:41 UTC (rev 20251) @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> - <classpathentry combineaccessrules="false" exported="true" kind="src" path="/GATE"/> - <classpathentry kind="output" path="build"/> -</classpath> Deleted: gate/branches/sawdust2/plugins/Ontology_Tools/.project =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/.project 2017-07-10 14:43:43 UTC (rev 20250) +++ gate/branches/sawdust2/plugins/Ontology_Tools/.project 2017-07-12 09:33:41 UTC (rev 20251) @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>GATE-plugin-Ontology_Tools</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> Deleted: gate/branches/sawdust2/plugins/Ontology_Tools/build.xml =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/build.xml 2017-07-10 14:43:43 UTC (rev 20250) +++ gate/branches/sawdust2/plugins/Ontology_Tools/build.xml 2017-07-12 09:33:41 UTC (rev 20251) @@ -1,89 +0,0 @@ -<project name="ontology_tools" default="jar" basedir="."> - <description> - A plugin for Ontology Tools. - </description> - - <!-- Prevent Ant from warning about includeantruntime not being set --> - <property name="build.sysclasspath" value="ignore" /> - - <!-- set global properties for this build --> - <property name="src" location="src"/> - <property name="jar.location" location="ontology_tools.jar" /> - <property name="build" location="build" /> - <property name="gate.home" location="../.." /> - <property name="gate.jar" location="${gate.home}/bin/gate.jar" /> - <property name="gate.lib" location="${gate.home}/lib" /> - <property name="doc.dir" location="doc" /> - <property name="javadoc.dir" location="${doc.dir}/javadoc" /> - - <path id="classpath"> - <pathelement location="${gate.jar}" /> - <fileset dir="${gate.lib}"> - <include name="**/*.jar" /> - <include name="**/*.zip" /> - </fileset> - <!--<fileset dir="lib"> - <include name="*.jar"/> - </fileset>--> - </path> - - - <target name="init"> - <!-- Create the time stamp --> - <tstamp/> - <!-- Create the build directory structure used by compile --> - <mkdir dir="${build}"/> - </target> - - <target name="compile" depends="init" - description="compile the source " > - <!-- Compile the java code from ${src} into ${build} --> - <javac srcdir="${src}" destdir="${build}" debug="true" source="1.5" target="1.5"> - <compilerarg value="-Xlint:deprecation"/> - <classpath refid="classpath"/> - </javac> - </target> - - <target name="jar" depends="compile" - description="generate the distribution" > - <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> - <jar jarfile="${jar.location}" basedir="${build}"/> - </target> - - <!-- Build JavaDoc documentation --> - <target name="doc.prepare"> - <mkdir dir="${javadoc.dir}" /> - </target> - - <target name="javadoc" depends="doc.prepare"> - <javadoc destdir="${javadoc.dir}" packagenames="*" - classpathref="classpath" - encoding="UTF-8" - windowtitle="${plugin.name} JavaDoc" - source="1.6"> - <sourcepath> - <pathelement location="${src}" /> - </sourcepath> - <link href="http://docs.oracle.com/javase/6/docs/api/" /> - <link href="http://gate.ac.uk/gate/doc/javadoc/" /> - </javadoc> - </target> - - - <target name="clean.classes" - description="clean up" > - <delete dir="${build}"/> - </target> - - <target name="clean" depends="clean.classes" > - <!-- full clean also removes the generated JAR file --> - <delete file="${jar.location}" /> - </target> - - <!-- Targets used by the main GATE build file --> - <target name="build" depends="jar" /> - <target name="test" /> - <target name="distro.prepare" depends="clean.classes" /> - -</project> - Added: gate/branches/sawdust2/plugins/Ontology_Tools/pom.xml =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/pom.xml (rev 0) +++ gate/branches/sawdust2/plugins/Ontology_Tools/pom.xml 2017-07-12 09:33:41 UTC (rev 20251) @@ -0,0 +1,42 @@ + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>uk.ac.gate</groupId> + <artifactId>gate-plugin-base</artifactId> + <!-- this should be the version of GATE you wish to build against --> + <version>8.5-SNAPSHOT</version> + + <!-- this forces the parent to always be resolved from the repo --> + <relativePath></relativePath> + </parent> + + <!-- this is the description of this plugin --> + <groupId>uk.ac.gate.plugins</groupId> + <artifactId>ontology-tools</artifactId> + <version>8.5-SNAPSHOT</version> + + <licenses> + <license> + <!-- this is the license we usually use for plugins but feel free to change + this if you feel a different license would be more suitable for your plugin --> + <name>GNU Lesser General Public License (LGPL), Version 3</name> + <url>http://www.gnu.org/licenses/lgpl-3.0.txt</url> + <distribution>repo</distribution> + </license> + </licenses> + + <dependencies> + <!-- add any other libraries your plugin depends on. Any other GATE plugins + you depend on at compile time should use the provided scope --> + <dependency> + <groupId>uk.ac.gate.plugins</groupId> + <artifactId>annie</artifactId> + <version>8.5-SNAPSHOT</version> + </dependency> + </dependencies> + +</project> Added: gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/ClassNode.java =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/ClassNode.java (rev 0) +++ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/ClassNode.java 2017-07-12 09:33:41 UTC (rev 20251) @@ -0,0 +1,455 @@ +package com.ontotext.gate.vr; + +import gate.creole.gazetteer.MappingDefinition; +import gate.creole.gazetteer.MappingNode; +import gate.creole.ontology.AnonymousClass; +import gate.creole.ontology.OClass; +import gate.creole.ontology.OConstants; +import gate.creole.ontology.OInstance; +import gate.creole.ontology.OURI; +import gate.creole.ontology.Ontology; +import gate.util.GateRuntimeException; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; +import java.io.Serializable; +import java.net.URL; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +/** Represents a single class node from the visualized ontology */ +public class ClassNode implements IFolder, Transferable, Cloneable, + Serializable { + + private static final long serialVersionUID = 3258128055154063414L; + + /** flavor used for drag and drop */ + final public static DataFlavor CLASS_NODE_FLAVOR = new DataFlavor( + ClassNode.class, "Class Node"); + + static DataFlavor flavors[] = { CLASS_NODE_FLAVOR }; + + private String name; + private Vector<ClassNode> children = new Vector<ClassNode>(); + private Object source; + + /** + * create a structure representing the class hierarchy of an ontology + * + * @return the root node of the structure + */ + public static ClassNode createRootNode(Ontology o) { + return createRootNode(o, false, false); + } + + public static ClassNode createRootNode(Ontology o, + boolean includeInstances, boolean includeAnonymousClasses) { + if (null == o) + throw new NullPointerException("ontology is null."); + + ClassNode root = new ClassNode(o); + Iterator<OClass> itops = o.getOClasses(true).iterator(); + Vector<ClassNode> kids = new Vector<ClassNode>(); + if (includeAnonymousClasses) { + while (itops.hasNext()) { + ClassNode node = new ClassNode(itops.next()); + kids.add(node); + } // while + } else { + while (itops.hasNext()) { + OClass aClass = itops.next(); + if (aClass instanceof AnonymousClass) { + continue; + } + ClassNode node = new ClassNode(aClass); + kids.add(node); + } // while + } + + root.source = o; + root.setChildren(kids); + Vector<ClassNode> parents = kids; + Vector<ClassNode> allKids; + do { + allKids = new Vector<ClassNode>(); + for (int i = 0; i < parents.size(); i++) { + ClassNode parent = parents.get(i); + kids = new Vector<ClassNode>(); + + // skip this one if it's an instance + if (parent.getSource() instanceof OInstance) + continue; + + OClass ocl = (OClass) parent.getSource(); + + // if we include instances, then get them too + if (includeInstances && (o instanceof Ontology)) { + Ontology kb = (Ontology) o; + Set<OInstance> instances = kb.getOInstances(ocl, + OConstants.Closure.DIRECT_CLOSURE); + if (instances != null && !instances.isEmpty()) { + Iterator<OInstance> insti = instances.iterator(); + while (insti.hasNext()) + kids.add(new ClassNode(insti.next())); + } + } + + if (0 == ocl.getSubClasses(OConstants.Closure.DIRECT_CLOSURE) + .size()) { + if (!kids.isEmpty()) + // add the instances as children, but do not add them + // for future + // traversal to allKids + parent.setChildren(kids); + continue; + } // if 0 children + + Iterator<OClass> kidsi = ocl.getSubClasses( + OConstants.Closure.DIRECT_CLOSURE).iterator(); + + while (kidsi.hasNext()) { + OClass aClass = kidsi.next(); + if (!includeAnonymousClasses + && aClass instanceof AnonymousClass) + continue; + kids.add(new ClassNode(aClass)); + } // while kidsi + parent.setChildren(kids); + allKids.addAll(kids); + + } // for i + parents = allKids; + } while (0 < allKids.size()); + + return root; + }// createRootNode() + + /** + * Creates a structure representing the class hierarchy of an ontology and + * the gazetteerLists mapped to it. + * + * @param o + * an ontology + * @param mapping + * mapping definition + * @param nameVsNode + * : this is actually a return value: should be initialized + * before passing to this method and afterwards one can find a + * mapping of class names vs class nodes there. + * @return the root node of the structure + */ + @SuppressWarnings("deprecation") + public static ClassNode createRootNode(Ontology o, + MappingDefinition mapping, Map<String, ClassNode> nameVsNode) { + if (null == o || null == nameVsNode || null == mapping) + throw new NullPointerException( + "mapping, nameVsNode or ontology-o is null."); + ClassNode root = new ClassNode(o); + Iterator<OClass> itops = o.getOClasses(true).iterator(); + Vector<ClassNode> kids = new Vector<ClassNode>(); + while (itops.hasNext()) { + ClassNode node = new ClassNode(itops.next()); + nameVsNode.put(node.toString(), node); + kids.add(node); + } // while + + root.source = o; + root.setChildren(kids); + Vector<ClassNode> parents = kids; + Vector<ClassNode> allKids; + do { + allKids = new Vector<ClassNode>(); + for (int i = 0; i < parents.size(); i++) { + ClassNode parent = parents.get(i); + + OClass ocl = (OClass) parent.getSource(); + if (0 == ocl.getSubClasses(OConstants.Closure.DIRECT_CLOSURE) + .size()) { + continue; + } // if 0 children + + Iterator<OClass> kidsi = ocl.getSubClasses( + OConstants.Closure.DIRECT_CLOSURE).iterator(); + + kids = new Vector<ClassNode>(); + while (kidsi.hasNext()) { + ClassNode cn = new ClassNode(kidsi.next()); + kids.add(cn); + nameVsNode.put(cn.toString(), cn); + } // while kidsi + parent.setChildren(kids); + allKids.addAll(kids); + + } // for i + parents = allKids; + } while (0 < allKids.size()); + + // display mapping + Iterator<MappingNode> inodes = mapping.iterator(); + MappingNode mn; + while (inodes.hasNext()) { + mn = inodes.next(); + URL turl = null; + try { + turl = new URL(mn.getOntologyID()); + } catch (java.net.MalformedURLException x) { + } + if (null != turl) { + Ontology o2 = null; + try { + o2 = gate.creole.ontology.OntologyUtilities.getOntology(turl); + } catch (gate.creole.ResourceInstantiationException x) { + } + if (o2 != null && o2.equals(o)) { + ClassNode cmn = new ClassNode(mn); + ClassNode cn = nameVsNode.get(mn.getClassID()); + if (null != cn) { + cn.children.add(cn.children.size(), cmn); + } + }// if from the same ontology + } // turl != null + }// while inodes + + return root; + }// createRootNode() + + /** + * Constructs a root class node from an ontology + * + * @param o + * the ontology + */ + public ClassNode(Ontology o) { + name = o.getName(); + } + + /** + * Constructs a class node given an ontology class + * + * @param clas + * ontology class + */ + public ClassNode(OClass clas) { + name = clas.getName(); + source = clas; + } + + /** + * Constructs a class node given an ontology instance + * + * @param instance + * ontology instance + */ + public ClassNode(OInstance instance) { + name = instance.getName(); + source = instance; + } + + /** + * Constructs a class node given a mapping node + * + * @param mapNode + * mapping node + */ + public ClassNode(MappingNode mapNode) { + name = mapNode.getList(); + source = mapNode; + } + + public int getIndexOfChild(Object child) { + return children.indexOf(child); + } + + public Iterator<ClassNode> getChildren() { + return children.iterator(); + } + + public void setChildren(Vector<ClassNode> chldrn) { + children = chldrn; + } + + public Vector<ClassNode> children() { + return children; + } + + public String toString() { + return name; + } + + public int getChildCount() { + return children.size(); + } + + public IFolder getChild(int index) { + return children.get(index); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((source == null) ? 0 : source.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ClassNode other = (ClassNode) obj; + if (source == null) { + if (other.source != null) + return false; + } else if (!source.equals(other.source)) + return false; + return true; + } + + /** + * Gets the Source object + * + * @return the source object e.g. an gate.creole.TClass or a + * gate.creole.Ontology + */ + public Object getSource() { + return source; + } + + /** + * Sets the source object + * + * @param o + * the source object to be set + */ + public void setSource(Object o) { + source = o; + } + + /** + * Renames this class node + * + * @param newName + * the new name of the node + */ + public void rename(String newName) { + name = newName; + } + + /** + * Removes a sub class + * + * @param sub + * the sub class to be removed + */ + public void removeSubNode(ClassNode sub) { + if (children.contains(sub)) { + children.remove(sub); + Object source = this.getSource(); + if (source instanceof OClass) { + OClass c = (OClass) source; + if (sub.getSource() instanceof OClass) + c.removeSubClass((OClass) sub.getSource()); + else if (sub.getSource() instanceof OInstance + && c.getOntology() instanceof Ontology) + ((Ontology) c.getOntology()) + .removeOInstance((OInstance) sub.getSource()); + } else if (source instanceof Ontology) { + Ontology o = (Ontology) source; + o.removeOClass((OClass) sub.getSource()); + } else if (source instanceof OInstance) { + // cannot remove anything from an instance + return; + } else { + throw new GateRuntimeException( + "Can not remove a sub node from a classnode.\n" + + "The source is neither an Ontology neither TClass"); + } // else + } // if contains + } // removeSubNode + + /** + * Adds a sub node + * + * @param sub + * the sub node to be added + */ + public void addSubNode(ClassNode sub) { + if (!children.contains(sub)) { + Object source = this.getSource(); + if (source instanceof OClass) { + OClass c = (OClass) source; + if (!(sub.getSource() instanceof OClass) + && !(sub.getSource() instanceof OInstance)) + throw new GateRuntimeException( + "The sub node's source is not an instance of TClass or OInstance"); + if (sub.getSource() instanceof OClass) { + OClass sc = (OClass) sub.getSource(); + c.addSubClass(sc); + // this code originally used the deprecated method + // addOClass(URI, byte) + // with the byte constant indicating a class, without + // checking for + // sc not being an anonymous class. + c.getOntology().addOClass((OURI) sc.getONodeID()); + children.add(sub); + } + if (sub.getSource() instanceof OInstance + && c.getOntology() instanceof Ontology) { + OInstance inst = (OInstance) sub.getSource(); + if (!((Ontology) c.getOntology()).containsOInstance(inst + .getOURI())) { + Iterator<OClass> instClasses = inst.getOClasses( + OConstants.Closure.DIRECT_CLOSURE).iterator(); + while (instClasses.hasNext()) { + ((Ontology) c.getOntology()).addOInstance( + inst.getOURI(), instClasses.next()); + } + } + + children.add(sub); + } + + } else { + if (source instanceof Ontology) { + Ontology o = (Ontology) source; + if (!(sub.getSource() instanceof OClass)) + throw new GateRuntimeException( + "The sub node's source is not an instance of TClass"); + OClass sc = (OClass) sub.getSource(); + o.addOClass((OURI) sc.getONodeID()); + children.add(sub); + } else { + throw new GateRuntimeException( + "cannot add a sub node to something which " + + "is neither an Ontology neither an TClass"); + } // else + } // else + } // if ! contains + } // addSubNode() + + /*--- Transferable interface implementation ---*/ + public boolean isDataFlavorSupported(DataFlavor df) { + return df.equals(CLASS_NODE_FLAVOR); + } + + public Object getTransferData(DataFlavor df) + throws UnsupportedFlavorException, IOException { + if (df.equals(CLASS_NODE_FLAVOR)) { + return this; + } else + throw new UnsupportedFlavorException(df); + } + + public DataFlavor[] getTransferDataFlavors() { + return flavors; + } + +} // class ClassNode \ No newline at end of file Added: gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/Gaze.java =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/Gaze.java (rev 0) +++ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/Gaze.java 2017-07-12 09:33:41 UTC (rev 20251) @@ -0,0 +1,1968 @@ +/* Gaze.java + * borislav popov + */ +package com.ontotext.gate.vr; + +import javax.swing.*; +import javax.swing.event.*; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; + +import gate.creole.*; +import gate.creole.gazetteer.*; +import gate.creole.ontology.*; +import gate.util.*; +import gate.event.GateEvent; +import gate.gui.MainFrame; +import java.awt.*; +import java.awt.event.*; +import java.util.*; +import java.net.*; +import java.io.*; + +/** Gaze is a Gazetteer VR capable of viewing and editing + * gazetteer lists, linear definitions (lists.def files), + * and mapping definitions (mappings between ontology classes and gazetteer lists). + * I.e. capable of visualizing and editing both linear and ontology-aware gazetteers. */ +public class Gaze extends AbstractVisualResource + implements GazetteerListener, OntologyModificationListener { + + /** size x when running from the tools menu */ + public final static int SIZE_X = 700; + /** size y when running from the tools menu */ + public final static int SIZE_Y = 500; + /** positin x when running from the tools menu */ + public final static int POSITION_X = 300; + /** positin y when running from the tools menu */ + public final static int POSITION_Y = 200; + + /* Linear Definition Actions */ + /** Edit Linear Node */ + private final static int LDA_EDIT = 1; + /** Insert Linear Node */ + private final static int LDA_INSERT = 2; + /** Remove Linear Node */ + private final static int LDA_REMOVE = 3; + + /** the target to be displayed */ + private Gazetteer target = null; + + /** is the target resource ontology-aware gazetteer */ + private boolean isOntoGaz = false; + + /** the linear definition being displayed */ + private LinearDefinition linear = null; + + /** the linear node currently selected */ + private LinearNode linearNode = null; + + /** the gazetteer list currently selected */ + private GazetteerList gazList = null; + + /** Set of all lists, both in the linear definition and + * explicitly loaded ones.*/ + private Set listSet = null; + + /** the mapping definition being displayed */ + private MappingDefinition mapping = null; + + /** the mapping node currently selected */ + private MappingNode mappingNode = null; + + /** the ontology that is currently displayed */ + private Ontology ontology = null; + + /** map of ontologies vs trees */ + private Map<Ontology, JTree> ontologyTrees = new HashMap<Ontology, JTree>(); + + /*manually added gui components */ + + /**Linear Definition Popup menu */ + protected JPopupMenu linearPopup = new JPopupMenu(); + /**Linear Definition Edit Popup Item*/ + protected JMenuItem linearPopupEdit; + /**Linear Definition Insert Popup Item*/ + protected JMenuItem linearPopupInsert; + /**Linear Definition Remove Popup Item*/ + protected JMenuItem linearPopupRemove; + + /*automatically added gui components */ + protected JMenuBar mainMenu = new JMenuBar(); + protected JMenu fileMenu = new JMenu(); + protected JMenu viewMenu = new JMenu(); + protected JSplitPane baseSplit = new JSplitPane(); + protected JSplitPane mappingSplit = new JSplitPane(); + protected JSplitPane linearSplit = new JSplitPane(); + protected JPanel linearPanel = new JPanel(); + protected JPanel listPanel = new JPanel(); + protected JPanel mappingPanel = new JPanel(); + protected JPanel ontologyPanel = new JPanel(); + protected JLabel linearLabel = new JLabel(); + protected GridBagLayout gridBagLayout1 = new GridBagLayout(); + protected JScrollPane linearScroll = new JScrollPane(); + protected JToolBar linearBar = new JToolBar(); + protected JButton btnLinearLoad = new JButton(); + protected JList linearList = new JList(); + protected JButton btnLinearSave = new JButton(); + protected JButton btnLinearSaveAs = new JButton(); + protected JLabel listLabel = new JLabel(); + protected GridBagLayout gridBagLayout2 = new GridBagLayout(); + protected JToolBar listBar = new JToolBar(); + protected JButton btnListLoad = new JButton(); + protected JScrollPane listScroll = new JScrollPane(); + protected JButton btnListSave = new JButton(); + protected JButton btnListSaveAs = new JButton(); + protected GridBagLayout gridBagLayout3 = new GridBagLayout(); + protected JLabel mappingLabel = new JLabel(); + protected JToolBar mappingBar = new JToolBar(); + protected JButton btnMappingLoad = new JButton(); + protected JScrollPane mappingScroll = new JScrollPane(); + protected JList mappingList = new JList(); + protected JButton btnMappingSave = new JButton(); + protected JButton btnMappingSaveAs = new JButton(); + protected JLabel ontologyLabel = new JLabel(); + protected JToolBar ontologyBar = new JToolBar(); + protected JButton btnOntologyLoad = new JButton(); + protected JScrollPane ontologyScroll = new JScrollPane(); + protected GridBagLayout gridBagLayout4 = new GridBagLayout(); + protected JMenu menuHelp = new JMenu(); + protected JMenuItem menuAbout = new JMenuItem(); + protected GridBagLayout thisLayout = new GridBagLayout(); + protected JMenu menuLinear = new JMenu(); + protected JMenuItem menuLinearLoad = new JMenuItem(); + protected JMenuItem menuLinearSave = new JMenuItem(); + protected JMenuItem menuLinearSaveAs = new JMenuItem(); + protected JMenu menuList = new JMenu(); + protected JMenuItem menuListLoad = new JMenuItem(); + protected JMenuItem menuListSave = new JMenuItem(); + protected JMenuItem menuListSaveAs = new JMenuItem(); + protected JMenu menuMapping = new JMenu(); + protected JMenuItem menuMappingLoad = new JMenuItem(); + protected JMenuItem menuMappingSave = new JMenuItem(); + protected JMenuItem menuMappingSaveAs = new JMenuItem(); + protected JMenu menuOntology = new JMenu(); + protected JMenuItem menuOntologyLoad = new JMenuItem(); + protected JMenuItem menuRefresh = new JMenuItem(); + protected JTree oTree = new JTree(); + protected JTextArea listArea = new JTextArea(); + protected JButton btnMappingNew = new JButton(); + protected JButton btnLinearNew = new JButton(); + protected JButton btnListNew = new JButton(); + protected JMenuItem menuLinearNew = new JMenuItem(); + protected JMenuItem menuListNew = new JMenuItem(); + protected JMenuItem menuMappingNew = new JMenuItem(); + protected JButton btnListSaveAll = new JButton(); + protected JMenuItem menuListSaveAll = new JMenuItem(); + + + public Gaze() { + try { + + jbInit(); + /* add menu bar*/ + mainMenu.setMinimumSize(new Dimension(0,20)); + mainMenu.setMaximumSize(new Dimension(0,20)); + mainMenu.setPreferredSize(new Dimension(0,20)); + this.add(mainMenu, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, + GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0 )); + + /* make the ontology tree invisible because not initialized yet*/ + oTree.setVisible(false); + + /* create and associate linear listeners... */ + createLinearListeneres(); + + /*...and non linear (mapping, ontology) listeners */ + createNonLinearListeners(); + + /* associate the load,save,saveas buttons with action */ + createLinearDefBtnListeners(); + createGazListBtnListeners(); + createMappingDefBtnListeners(); + + /* create a new cell renderer for the linear definition list */ + linearList.setCellRenderer(new LinearCR()); + + /* add modifications listener over the gazetteer list text area */ + listArea.getDocument().addDocumentListener(new GazListDL()); + + /* create Linear Definition Popup menu */ + linearPopupEdit = new JMenuItem("edit"); + linearPopupInsert = new JMenuItem("insert"); + linearPopupRemove = new JMenuItem("remove"); + + linearPopup.add(linearPopupEdit); + linearPopup.add(linearPopupInsert); + linearPopup.add(linearPopupRemove); + + /* add popup listener */ + linearList.addMouseListener(new LinearPopupListener()); + + + /* add popup menu items' listeners*/ + linearPopupEdit.addActionListener(new LinearPopupEditListener()); + linearPopupRemove.addActionListener(new LinearPopupRemoveListener()); + linearPopupInsert.addActionListener(new LinearPopupInsertListener()); + } catch(Exception e) { + e.printStackTrace(gate.util.Err.getPrintWriter()); + } + } + + /** + * Called by the GUI when this viewer/editor has to initialise itself for a + * specific object. this is an {@link gate.creole.AbstractVisualResource} overriden method. + * @param targeta the object (be it a {@link gate.Resource}, + * {@link gate.DataStore} or whatever) this viewer has to display + */ + public void setTarget(Object targeta) { + + /*check the parameter*/ + if (null == targeta) { + throw new GateRuntimeException("should not set null target."); + } + if (! (targeta instanceof Gazetteer) ) { + throw new GateRuntimeException( + "the target should impelement \n"+ + "gate.creole.gazetteer.Gazetteer. \n"+ + "target => "+targeta.getClass()); + } + + target = (Gazetteer)targeta; + + target.addGazetteerListener(this); + + /** determine the type of the target */ + isOntoGaz = (target instanceof OntoGazetteer); + + /**disable the ontology and mapping areas */ + if (!isOntoGaz) { + mappingSplit.setVisible(false); + mappingList.setEnabled(false); + } + + /* display linear definition */ + displayLinear(target); + + /* display mapping */ + if (isOntoGaz) + displayMapping(target); + + } // setTarget(Object) + + + public gate.Resource init() throws ResourceInstantiationException { + return this; + } + + /** updates the mapping list's ui */ + void updateMappingUI(){ + if ( null!=mappingList ) { + mappingList.setListData(mapping.toArray()); + mappingList.updateUI(); + } + } // updateMappingUI() + + /** Displays the specified list in the most right pane of Gaze + * @param listName the name of the list + */ + void displayList(String listName) { + // find the gazetteer list by list name + Object node = linear.getNodesByListNames().get(listName); + GazetteerList newList = null; + if ( node != null ) { + newList = (GazetteerList)linear.getListsByNode().get(node); + if ( null != newList ){ + + //retrieve the possible editions of the gazetteer + if (null!=listArea && null!=gazList) { + gazList.setMode(gazList.STRING_MODE); + boolean mdfd = gazList.isModified(); + gazList.updateContent(listArea.getText()); + gazList.setModified(mdfd); + } + + //show the newly selected list + gazList = newList; + if ( null!= gazList) { + gazList.setMode(gazList.STRING_MODE); + boolean mdfd = gazList.isModified(); + listArea.setText(gazList.toString()); + gazList.setModified(mdfd); + } else { + listArea.setText(""); + } + } // != null + } // != null + + } // displayList(String) + + /**Gets the lists + * @return a list of all the gaz lists known to this VR*/ + java.util.List getLists() { + return linear.getLists(); + } + + /**Gets all classes. + * @return a list of all the classes from all the ontologies known to this VR*/ + java.util.List getClasses() { + java.util.List<OClass> result = null; + if ( null == ontology) + result = new ArrayList<OClass>(); + else { + result = new ArrayList<OClass>(ontology.getOClasses(false)); + } + return result; + } + + + + /** Displays linear definition + * @param g the gazetteer to take the definition from */ + private void displayLinear(Gazetteer g) { + // get the linear definition + linear = g.getLinearDefinition(); + // check the linear definition + if (null == linear) + throw new GateRuntimeException( + "linear definition of a gazetteer should not be null."); + + listSet = new HashSet(linear.getLists()); + + if (null == listSet) + throw new GateRuntimeException( + "The set of Gazetteer Lists should not be null."); + + // set the list data with the nodes of the gaz + linearList.setListData(new Vector(linear.getNodes())); + } // displayLinear() + + /** Displays mapping + * @param g the gazetteer to take the mapping from */ + private void displayMapping(Gazetteer g) { + mapping = g.getMappingDefinition(); + if (null == mapping) + throw new GateRuntimeException( + "the mapping definition of an onto gazetteer should not be null"); + mappingList.setListData(mapping.toArray()); + + /*Add all lists present in the mapping to the set of loaded lists*/ + listSet.addAll(mapping.getLists()); + + }// displayMapping() + + /**Creates and associates listeners for the linear gui components*/ + private void createLinearListeneres() { + + /* add list selection listener to the linear definition list component*/ + linearList.addListSelectionListener( + new ListSelectionListener () { + public void valueChanged(ListSelectionEvent e) { + if (linearList.getAnchorSelectionIndex() < linearList.getModel().getSize()) { + Object obj = linearList.getModel().getElementAt( + linearList.getAnchorSelectionIndex()); + if ( obj instanceof LinearNode ) { + linearNode = (LinearNode) obj; + + //retrieve the possible editions of the gazetteer + if (null!=listArea && null!=gazList) { + gazList.setMode(gazList.STRING_MODE); + boolean mdfd = gazList.isModified(); + gazList.updateContent(listArea.getText()); + gazList.setModified(mdfd); + } + + //show the newly selected list + gazList = (GazetteerList)linear.getListsByNode().get(linearNode); + if ( null!= gazList) { + gazList.setMode(gazList.STRING_MODE); + boolean mdfd = gazList.isModified(); + listArea.setText(gazList.toString()); + gazList.setModified(mdfd); + } else { + listArea.setText(""); + } + + + } // only if linear node + } // size > 0 + } // valueChanged(); + } ); + + } // createLinearListeneres() + + /**Creates and asssociates listeners for the + * non linear (mapping,ontology) gui components */ + private void createNonLinearListeners() { + + /* add list selection listener to the mapping definition list component*/ + mappingList.addListSelectionListener( + new ListSelectionListener () { + @SuppressWarnings("deprecation") + public void valueChanged(ListSelectionEvent e) { + if (0 < mappingList.getModel().getSize()) { + Object obj = mappingList.getModel().getElementAt( + mappingList.getAnchorSelectionIndex()); + if ( obj instanceof MappingNode ) { + mappingNode = (MappingNode) obj; + URL ourl; + try { + ourl = new URL(mappingNode.getOntologyID()); + } catch (MalformedURLException x) { + throw new GateRuntimeException("Malformed URL:" + +mappingNode.getOntologyID()); + } + // get te ontology + try { + ontology = OntologyUtilities.getOntology(ourl); + ontology.addOntologyModificationListener(Gaze.this); + } catch (ResourceInstantiationException x) { + x.printStackTrace(Err.getPrintWriter()); + } + if (null == ontology) + throw new GateRuntimeException("can not retrieve ontology by url.\n" + +"ontology is null.\n" + +"url = "+ourl); + + // remove the old tree from the scroll pane + if (null != oTree) + ontologyScroll.getViewport().remove(oTree); + + // check if there is already a tree for this ontology + oTree = (JTree) ontologyTrees.get(ontology); + + if (null == oTree) { + Map namesVsNodes = new HashMap(); + ClassNode root = ClassNode.createRootNode(ontology,mapping,namesVsNodes); + OntoTreeModel model = new OntoTreeModel(root); + MappingTreeView view = new MappingTreeView(model,mapping,Gaze.this); + oTree = view; + ontologyTrees.put(ontology,oTree); + } // ontology tree has not been previously creted + + ontologyScroll.getViewport().add(oTree,null); + oTree.setVisible(true); + + displayList(mappingNode.getList()); + } // only if mapping node + } // size > 0 + } // valueChanged(); + } ); + + } // createNonLinearListeners() + + + /**Sets the listeners for the load,save and save as + * buttons in the linear definition pane */ + private void createLinearDefBtnListeners() { + /* add a create/new action listener */ + btnLinearNew.addActionListener(new LinearNewListener()); + menuLinearNew.addActionListener(new LinearNewListener()); + + /* add load action listener for the linear definition */ + btnLinearLoad.addActionListener(new LinearLoadListener()); + menuLinearLoad.addActionListener(new LinearLoadListener()); + + /* add save as action listener for the linear definition */ + btnLinearSaveAs.addActionListener(new LinearSaveAsListener()); + menuLinearSaveAs.addActionListener(new LinearSaveAsListener()); + + + /* add save action listener for the linear definition */ + btnLinearSave.addActionListener(new LinearSaveListener()); + menuLinearSave.addActionListener(new LinearSaveListener()); + + } // createLinearDefBtnListeners() + + /**Sets the listeners for the load,save and save as + * buttons in the gazetteer list pane */ + private void createGazListBtnListeners() { + + /* add new action listener */ + btnListNew.addActionListener(new ListNewListener()); + menuListNew.addActionListener(new ListNewListener()); + + /* add load action listener */ + btnListLoad.addActionListener(new ListLoadListener()); + menuListLoad.addActionListener(new ListLoadListener()); + + /* add save as action listener */ + btnListSaveAs.addActionListener(new ListSaveAsListener()); + menuListSaveAs.addActionListener(new ListSaveAsListener()); + + /* add save action listener */ + btnListSave.addActionListener(new ListSaveListener()); + menuListSave.addActionListener(new ListSaveListener()); + + /* add save all action listener */ + btnListSaveAll.addActionListener(new ListSaveAllListener()); + menuListSaveAll.addActionListener(new ListSaveAllListener()); + } // createGazListBtnListeners() + + /**Sets the listeners for the load,save and save as + * buttons in the mapping pane */ + private void createMappingDefBtnListeners() { + + /* add create new action listener */ + btnMappingNew.addActionListener(new MappingNewListener()); + menuMappingNew.addActionListener(new MappingNewListener()); + + /* add load action listener */ + btnMappingLoad.addActionListener(new MappingLoadListener()); + menuMappingLoad.addActionListener(new MappingLoadListener()); + + /* add save as action listen*/ + btnMappingSaveAs.addActionListener(new MappingSaveAsListener()); + menuMappingSaveAs.addActionListener(new MappingSaveAsListener()); + + + /* add save action listener */ + btnMappingSave.addActionListener(new MappingSaveListener()); + menuMappingSave.addActionListener(new MappingSaveListener()); + + /* add load ontology action listener*/ + btnOntologyLoad.addActionListener(new OntologyLoadListener()); + menuOntologyLoad.addActionListener(new OntologyLoadListener()); + + } // createLinearDefBtnListeners() + + /** + * Performs an action over the Linear Definition. + * e.g. edit,insert,remove Linear Node. + * @param action the action to be performed + * @param index index of the place where this action took place(e.g. where to insert) + * @param node the Linear Node to be used in the action + */ + private void performLinearAction(int action, int index, LinearNode node ) { + switch (action) { + case LDA_EDIT : { + LinearNode bkp = linear.get(index); + linear.remove(index); + int size = linear.size(); + linear.add(index,node); + if (size == linear.size()) { + JOptionPane.showMessageDialog( + this, + "The Linear Node can not be added to the Linear Definition \n" + +"because a node with such a list already exists,\n"+ + "cannot be opened, or cannot be created if non-existant.\n" + +"node : "+node, + "Edit Linear Node Failure", + JOptionPane.ERROR_MESSAGE); + //rollback + linear.add(index,bkp); + }// if + + break; + } + case LDA_INSERT : { + int size = linear.size(); + if (index < 0 ) index = 0; + linear.add(index,node); + if (size == linear.size()) { + JOptionPane.showMessageDialog( + this, + "The Linear Node can not be added to the Linear Definition \n" + +"because a node with such a list already exists,\n"+ + "cannot be opened, or cannot be created if non-existant.\n" + +"node : "+node, + "Insert Linear Node Failure", + JOptionPane.ERROR_MESSAGE); + }// if + break; + } + case LDA_REMOVE : { + linear.remove(index); + break; + } + } // switch action + linearList.setListData(linear.toArray()); + } // performLinearAction(int,LinearNode) + + /** Reinitializes the edited gazetteer */ + private void reinitializeGazetteer() { + try { + target.setListsURL(linear.getURL()); + if (isOntoGaz) { + ((OntoGazetteer)target).setMappingURL(mapping.getURL()); + gate.Factory.deleteResource(((OntoGazetteer)target).getGazetteer()); + } // if onto gaz + target = (Gazetteer)target.init(); + JOptionPane.showMessageDialog(this, + "Gazetteer Reinitialized.", + "Reinitialize Gazetteer", + JOptionPane.INFORMATION_MESSAGE); + } catch(ResourceInstantiationException x) { + JOptionPane.showMessageDialog(this, + "Gazetteer can not be reinitialized.\n"+ + "due to:"+x.getClass()+" "+x.getMessage(), + "Gazsetteer Reinitialize Failure.",JOptionPane.ERROR_MESSAGE); + } + } // reinitializeGazetteer() + + /** Init of the gui components */ + private void jbInit() throws Exception { + fileMenu.setToolTipText(""); + fileMenu.setText("File"); + viewMenu.setText("View"); + this.setPreferredSize(new Dimension(600, 300)); + this.setLayout(thisLayout); + baseSplit.setPreferredSize(new Dimension(700, 450)); + mappingSplit.setOrientation(JSplitPane.VERTICAL_SPLIT); + mappingSplit.setToolTipText(""); + linearSplit.setContinuousLayout(true); + linearLabel.setAlignmentY((float) 0.0); + linearLabel.setToolTipText(""); + linearLabel.setHorizontalAlignment(SwingConstants.CENTER); + linearLabel.setText("Linear Definition"); + linearPanel.setLayout(gridBagLayout1); + linearScroll.setPreferredSize(new Dimension(100, 50)); + btnLinearLoad.setBorder(BorderFactory.createEtchedBorder()); + btnLinearLoad.setToolTipText("Load a linear definition"); + btnLinearLoad.setFocusPainted(false); + btnLinearLoad.setMargin(new Insets(2, 2, 2, 2)); + btnLinearLoad.setText("Load"); + btnLinearSave.setBorder(BorderFactory.createEtchedBorder()); + btnLinearSave.setToolTipText("Save the linear definition"); + btnLinearSave.setFocusPainted(false); + btnLinearSave.setMargin(new Insets(2, 2, 2, 2)); + btnLinearSave.setText("Save"); + btnLinearSaveAs.setBorder(BorderFactory.createEtchedBorder()); + btnLinearSaveAs.setToolTipText("Save the linear definition changing the location"); + btnLinearSaveAs.setFocusPainted(false); + btnLinearSaveAs.setMargin(new Insets(2, 0, 2, 0)); + btnLinearSaveAs.setText("Save as..."); + listLabel.setAlignmentY((float) 0.0); + listLabel.setHorizontalAlignment(SwingConstants.CENTER); + listLabel.setText("Gazetteer List"); + listPanel.setLayout(gridBagLayout2); + btnListLoad.setBorder(BorderFactory.createEtchedBorder()); + btnListLoad.setToolTipText("Load a gazetteer list"); + btnListLoad.setFocusPainted(false); + btnListLoad.setMargin(new Insets(2, 0, 2, 0)); + btnListLoad.setText("Load"); + listScroll.setAlignmentX((float) 0.0); + listScroll.setAlignmentY((float) 0.0); + btnListSave.setBorder(BorderFactory.createEtchedBorder()); + btnListSave.setToolTipText("Save the gazetteer list"); + btnListSave.setFocusPainted(false); + btnListSave.setMargin(new Insets(2, 0, 2, 0)); + btnListSave.setText("Save"); + btnListSaveAs.setBorder(BorderFactory.createEtchedBorder()); + btnListSaveAs.setToolTipText("Save the gazetteer list to different location"); + btnListSaveAs.setFocusPainted(false); + btnListSaveAs.setMargin(new Insets(2, 0, 2, 0)); + btnListSaveAs.setText("Save as..."); + listBar.setFloatable(false); + mappingPanel.setLayout(gridBagLayout3); + mappingLabel.setHorizontalAlignment(SwingConstants.CENTER); + mappingLabel.setText("Mapping Definition"); + btnMappingLoad.setBorder(BorderFactory.createEtchedBorder()); + btnMappingLoad.setToolTipText("Load a mapping definition"); + btnMappingLoad.setFocusPainted(false); + btnMappingLoad.setMargin(new Insets(2, 0, 2, 0)); + btnMappingLoad.setText("Load"); + btnMappingSave.setBorder(BorderFactory.createEtchedBorder()); + btnMappingSave.setToolTipText("Save mapping definition"); + btnMappingSave.setFocusPainted(false); + btnMappingSave.setMargin(new Insets(2, 0, 2, 0)); + btnMappingSave.setText("Save"); + btnMappingSaveAs.setBorder(BorderFactory.createEtchedBorder()); + btnMappingSaveAs.setToolTipText("Save mapping definition to another location"); + btnMappingSaveAs.setFocusPainted(false); + btnMappingSaveAs.setMargin(new Insets(2, 0, 2, 0)); + btnMappingSaveAs.setText("Save As..."); + ontologyLabel.setHorizontalAlignment(SwingConstants.CENTER); + ontologyLabel.setText("Ontology"); + btnOntologyLoad.setBorder(BorderFactory.createEtchedBorder()); + btnOntologyLoad.setToolTipText("Load an ontology"); + btnOntologyLoad.setFocusPainted(false); + btnOntologyLoad.setMargin(new Insets(2, 2, 2, 2)); + btnOntologyLoad.setText("Load"); + ontologyPanel.setLayout(gridBagLayout4); + mappingBar.setFloatable(false); + ontologyBar.setFloatable(false); + linearBar.setFloatable(false); + menuHelp.setText("Help"); + menuAbout.setText("About"); + menuLinear.setText("Linear Definition"); + menuLinearLoad.setText("Load"); + menuLinearSave.setText("Save"); + menuLinearSaveAs.setText("Save as"); + menuList.setText("Gazetteer List"); + menuListLoad.setText("Load"); + menuListSave.setText("Save"); + menuListSaveAs.setText("Save as"); + menuMapping.setText("Mapping Definition"); + menuMappingLoad.setText("Load"); + menuMappingSave.setText("Save"); + menuMappingSaveAs.setText("Save as"); + menuOntology.setText("Ontology"); + menuOntologyLoad.setText("Load"); + menuRefresh.setText("Refresh"); + mainMenu.setBorder(BorderFactory.createEtchedBorder()); + oTree.setToolTipText(""); + btnMappingNew.setText("New"); + btnMappingNew.setMargin(new Insets(2, 0, 2, 0)); + btnMappingNew.setFocusPainted(false); + btnMappingNew.setToolTipText("Create a New Mapping Definition"); + btnMappingNew.setBorder(BorderFactory.createEtchedBorder()); + btnLinearNew.setText("New"); + btnLinearNew.setMargin(new Insets(2, 2, 2, 2)); + btnLinearNew.setFocusPainted(false); + btnLinearNew.setToolTipText("Create a New Linear Definition"); + btnLinearNew.setBorder(BorderFactory.createEtchedBorder()); + btnListNew.setText("New"); + btnListNew.setMargin(new Insets(2, 0, 2, 0)); + btnListNew.setFocusPainted(false); + btnListNew.setToolTipText("Create a New Gazetteer List"); + btnListNew.setBorder(BorderFactory.createEtchedBorder()); + menuLinearNew.setText("New"); + menuListNew.setText("New"); + menuMappingNew.setText("New"); + btnListSaveAll.setText("Save All"); + btnListSaveAll.setMargin(new Insets(2, 0, 2, 0)); + btnListSaveAll.setFocusPainted(false); + btnListSaveAll.setToolTipText("Save all modified gazetteer lists "); + btnListSaveAll.setBorder(BorderFactory.createEtchedBorder()); + menuListSaveAll.setToolTipText("Save All Modified Gazetteer Lists"); + menuListSaveAll.setText("Save All"); + listBar.add(btnListNew, null); + linearBar.add(btnLinearNew, null); + mainMenu.add(fileMenu); + mainMenu.add(viewMenu); + mainMenu.add(menuHelp); + this.add(baseSplit, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 48, 64)); + baseSplit.add(mappingSplit, JSplitPane.LEFT); + baseSplit.add(linearSplit, JSplitPane.RIGHT); + linearSplit.add(linearPanel, JSplitPane.TOP); + linearSplit.add(listPanel, JSplitPane.BOTTOM); + listPanel.add(listLabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + mappingSplit.add(mappingPanel, JSplitPane.BOTTOM); + mappingSplit.add(ontologyPanel, JSplitPane.TOP); + ontologyPanel.add(ontologyLabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + ontologyPanel.add(ontologyBar, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + ontologyPanel.add(ontologyScroll, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + ontologyScroll.getViewport().add(oTree, null); + ontologyBar.add(btnOntologyLoad, null); + linearPanel.add(linearBar, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + linearBar.add(btnLinearLoad, null); + linearBar.add(btnLinearSave, null); + linearBar.add(btnLinearSaveAs, null); + linearPanel.add(linearScroll, new GridBagConstraints(0, 2, GridBagConstraints.REMAINDER, GridBagConstraints.REMAINDER, 1.0, 1.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + linearScroll.getViewport().add(linearList, null); + linearPanel.add(linearLabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + listPanel.add(listBar, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + listPanel.add(listScroll, new GridBagConstraints(0, 2, GridBagConstraints.REMAINDER, GridBagConstraints.REMAINDER, 1.0, 1.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + listScroll.getViewport().add(listArea, null); + listBar.add(btnListLoad, null); + listBar.add(btnListSave, null); + listBar.add(btnListSaveAs, null); + listBar.add(btnListSaveAll, null); + mappingPanel.add(mappingLabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + mappingPanel.add(mappingBar, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + mappingPanel.add(mappingScroll, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0 + ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); + mappingScroll.getViewport().add(mappingList, null); + mappingBar.add(btnMappingNew, null); + mappingBar.add(btnMappingLoad, null); + mappingBar.add(btnMappingSave, null); + mappingBar.add(btnMappingSaveAs, null); + menuHelp.add(menuAbout); + fileMenu.add(menuLinear); + fileMenu.add(menuList); + fileMenu.addSeparator(); + fileMenu.add(menuMapping); + fileMenu.add(menuOntology); + menuLinear.add(menuLinearNew); + menuLinear.add(menuLinearLoad); + menuLinear.add(menuLinearSave); + menuLinear.add(menuLinearSaveAs); + menuList.add(menuListNew); + menuList.add(menuListLoad); + menuList.add(menuListSave); + menuList.add(menuListSaveAs); + menuList.add(menuListSaveAll); + menuMapping.add(menuMappingNew); + menuMapping.add(menuMappingLoad); + menuMapping.add(menuMappingSave); + menuMapping.add(menuMappingSaveAs); + menuOntology.add(menuOntologyLoad); + viewMenu.add(menuRefresh); + mappingSplit.setDividerLocation(200); + linearSplit.setDividerLocation(230); + baseSplit.setDividerLocation(300); + } // jbInit() + +/*---------implementation of GazetteerListener interface--------------*/ + public void processGazetteerEvent(GazetteerEvent e) { + if ( e.REINIT == e.getType() ) { + displayLinear((Gazetteer)e.getSource()); + if (isOntoGaz) { + displayMapping((Gazetteer)e.getSource()); + ontologyTrees = new HashMap(); + oTree.setVisible(false); + } + } // reinit + } // processGazetteerEvent(GazetteerEvent) +/*---------implementation of GazetteerListener interface--------------*/ + +/*->->->---implementation of OntologyModificationListener interface--------------*/ + public void processGateEvent(GateEvent e) { + } + + public void resourceAdded(Ontology ontology, OResource resource) { + ontologyModified(ontology, null, -1); + } + + public void resourcesRemoved(Ontology ontology, String[] resourcesURIs) { + ontologyModified(ontology, null, -1); + } + + public void ontologyReset(Ontology ontology) { + ontologyModified(ontology, null, -1); + } + + public void resourceRelationChanged(Ontology ontology, OResource resource1, OResource resouce2, int eventType) { + this.ontologyModified(ontology, resource1, eventType); + } + + public void resourcePropertyValueChanged(Ontology ontology, OResource resource, RDFProperty property, Object value, int eventType) { + this.ontologyModified(ontology, resource, eventType); + } + + public void ontologyModified(Ontology ontology, OResource resource, int eventType) { + JTree tree = ontologyTrees.get(ontology); + if (tree!=null) { + ontologyTrees.remove(ontology); + Map<String, ClassNode> namesVsNodes = new HashMap<String, ClassNode>(); + ClassNode root = ClassNode.createRootNode(ontology,mapping,namesVsNodes); + OntoTreeModel model = new OntoTreeModel(root); + MappingTreeView view = new MappingTreeView(model,mapping,Gaze.this); + + /* synchronize the expansion of the old and new trees */ + synchronizeTreeExpansion(tree,view); + + if (ontology.equals(ontology)) { + oTree = view; + ontologyScroll.getViewport().add(oTree,null); + oTree.setVisible(true); + } + ontologyTrees.put(ontology,oTree); + } + } + + /** + * Synchronizes the expansion of the given trees. + * @param orig the original tree + * @param mirror the tree to mimic the expansion of the original + */ + public static void synchronizeTreeExpansion(JTree orig, JTree mirror) { + /*create a Set of expanded node names*/ + /*below will : + iterate all nodes of the tree + accumulate the path for each node as an arraylist + check for each passed node whether the treepath is expanded + and if expanded add it to the expanded list as a string. + */ + Set expanded = new HashSet(); + TreeModel model = orig.getModel(); + + ArrayList remains = new ArrayList(); + ArrayList remainPaths = new ArrayList(); + + remains.add(model.getRoot()); + ArrayList rootPath = new ArrayList(); + rootPath.add(model.getRoot()); + remainPaths.add(rootPath); + + while (remains.size() > 0 ) { + Object node = remains.get(0); + int cc = model.getChildCount(node); + ArrayList parentPath = (ArrayList)remainPaths.get(0); + for ( int c = 0 ; c < cc ; c++) { + Object child = model.getChild(node,c); + remains.add(child); + ArrayList pp = new ArrayList(parentPath); + pp.add(child); + remainPaths.add(pp); + } + TreePath tp = new TreePath(parentPath.toArray()); + if (orig.isExpanded(tp)) { + expanded.add(node.toString()); + } + remains.remove(0); + remainPaths.remove(0); + } + + /*expand the mirror tree according to the expanded nodes set*/ + /* + iterate all the nodes and keep their paths + if a node is found as a string then expand it + */ + + remains = new ArrayList(); + remainPaths = new ArrayList(); + + model = mirror.getModel(); + remains.add(model.getRoot()); + rootPath = new ArrayList(); + rootPath.add(model.getRoot()); + remainPaths.add(rootPath); + + while (remains.size() > 0 ) { + Object node = remains.get(0); + int cc = model.getChildCount(node); + ArrayList parentPath = (ArrayList)remainPaths.get(0); + for ( int c = 0 ; c < cc ; c++) { + Object child = model.getChild(node,c); + remains.add(child); + ArrayList pp = new ArrayList(parentPath); + pp.add(child); + remainPaths.add(pp); + } + + if (expanded.contains(node.toString()) ) { + TreePath tp = new TreePath(parentPath.toArray()); + mirror.expandPath(tp); + } + remains.remove(0); + remainPaths.remove(0); + } // while nodes remain + + } // synchronizeTreeExpansion(JTree,JTree) + + +/*-<-<-<---implementation of OntologyModificationListener interface--------------*/ + + + /* --- inner classes ----*/ + + /** Creates a list cell renderer for the + * Linear Definition list. It should make + * distinct the modifed gazetteer lists and still + * look like the default one.*/ + class LinearCR extends DefaultListCellRenderer { + + private static final long serialVersionUID = 3690752878255943737L; + + public LinearCR() { + super(); + } + + public Component getListCellRendererComponent( + JList list, + Object value, + int index, + boolean isSelected, + boolean cellHasFocus) + { + super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus); + GazetteerList gl = (GazetteerList)linear.getListsByNode().get(value); + if ( null!= gl && gl.isModified()) { + setBackground(list.getBackground()); + setForeground(Color.red); + } // is modified + return this; + }// getListCellRendererComponent() + } // class linearCR + + /** Gazetteer List Document Listener is used to monitor the + * gaz list changes and alter the isModified flag of the current list.*/ + class GazListDL implements DocumentListener { + + public void changedUpdate(DocumentEvent ev) { + gazList.setModified(true); + } + + public void insertUpdate(DocumentEvent ev) { + gazList.setModified(true); + } + + public void removeUpdate(DocumentEvent ev) { + gazList.setModified(true); + } + } // class GazListDL + + /** Reacts on all New Linear Definition actions performed either + * through the menu, wither through the new buton. */ + class LinearNewListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showDialog(Gaze.this, "New"); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + if (!selected.createNewFile()){ + JOptionPane.showMessageDialog( + Gaze.this, + "Cannot Create Linear Definition\n"+ + selected.getAbsolutePath(), + "Linear Definition Create Failure", + JOptionPane.ERROR_MESSAGE + ); + } // if + URL lurl = new URL("file:///"+selected.getAbsolutePath()); + linear = new LinearDefinition(); + linear.setURL(lurl); + linear.setEncoding(target.getEncoding()); + linear.load(); + + // get the new list set + listSet = new HashSet(linear.getLists()); + + if (null == listSet) + throw new GateRuntimeException( + "The set of Gazetteer Lists should not be null."); + + // set the list data with the nodes of the gaz + linearList.setListData(new Vector(linear.getNodes())); + + + JOptionPane.showMessageDialog( + Gaze.this, + "New Linear Definition created successfully \n"+ + selected.getAbsolutePath(), + "Create New Linear Definition Successful", + JOptionPane.INFORMATION_MESSAGE + ); + + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load linear definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\nResourceInstantiationException:"+x.getMessage() + ,"Linear Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load linear definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Linear Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class LinearLoadListener + + /** Reacts on all Load Linear Definition actions performed either + * through the menu, wither through the load buton. */ + class LinearLoadListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showOpenDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + URL lurl = new URL("file:///"+selected.getAbsolutePath()); + linear = new LinearDefinition(); + linear.setURL(lurl); + linear.setEncoding(target.getEncoding()); + linear.load(); + + // get the new list set + listSet = new HashSet(linear.getLists()); + + if (null == listSet) + throw new GateRuntimeException( + "The set of Gazetteer Lists should not be null."); + + // set the list data with the nodes of the gaz + linearList.setListData(new Vector(linear.getNodes())); + + + reinitializeGazetteer(); + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load linear definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\nResourceInstantiationException:"+x.getMessage() + ,"Linear Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load linear definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Linear Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class LinearLoadListener + + /** Reacts on all Save As Linear Definition actions. */ + class LinearSaveAsListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if ( null == linear ) { + JOptionPane.showMessageDialog( + Gaze.this,"The linear definition is null and cannot be saved.", + "Linear Definition Save As Failure.",JOptionPane.ERROR_MESSAGE); + } else { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showSaveDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + URL lurl; + try { + lurl = new URL("file:///"+selected.getAbsolutePath()); + linear.setURL(lurl); + linear.store(); + JOptionPane.showMessageDialog( + Gaze.this, + "Linear Definition saved sucessfuly.\n" + +lurl, + "Linear Definition Save As", + JOptionPane.PLAIN_MESSAGE); + reinitializeGazetteer(); + } catch (MalformedURLException x) { + JOptionPane.showMessageDialog(Gaze.this,"Cannot save linear definition.\n" + +"Due to "+x.getClass()+":"+x.getMessage(), + "Linear Definition Save As failure",JOptionPane.ERROR_MESSAGE); + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog( + Gaze.this, + "Unable to save the linear defintion.\n" + +"Due to : "+x.getClass()+":"+x.getMessage(), + "Linear Definition Save failure.", + JOptionPane.ERROR_MESSAGE); + } // catch + } // approved + } // else + } + }// class LinearSaveListener + + /** Reacts on all Linear Definition Save As events */ + class LinearSaveListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if ( null == linear ) { + JOptionPane.showMessageDialog( + Gaze.this,"The Linear Definition is null and cannot be saved.", + "Linear Definition Save failure.",JOptionPane.ERROR_MESSAGE); + } else { + + try { + linear.store(); + JOptionPane.showMessageDialog( + Gaze.this, + "Linear Definition saved sucessfuly.\n"+ + linear.getURL(), + "Linear Definition Save", + JOptionPane.PLAIN_MESSAGE); + + reinitializeGazetteer(); + + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog( + Gaze.this, + "Unable to save the Linear Definition.\n" + +"Due to : "+x.getClass()+":"+x.getMessage(), + "Linear Definition Save failure.", + JOptionPane.ERROR_MESSAGE); + } // catch + } // else + } // actionPerformed(ActionEvent) + } // class LinearSaveListener + + /**Reacts on all Create New Gaz List Events */ + class ListNewListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showDialog(Gaze.this, "New"); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + if (!selected.createNewFile()){ + JOptionPane.showMessageDialog( + Gaze.this, + "Cannot Create Gazetteer List.\n"+ + selected.getAbsolutePath(), + "Gazetteer List Create Failure", + JOptionPane.ERROR_MESSAGE + ); + } // if + URL lurl = new URL("file:///"+selected.getAbsolutePath()); + gazList = new GazetteerList(); + gazList.setURL(lurl); + gazList.load(); + gazList.setMode(gazList.STRING_MODE); + // set the list data with the nodes of the gaz + listArea.setText(gazList.toString()); + gazList.setModified(false); + + String lName = gazList.getURL().getFile(); + int slash = lName.lastIndexOf('/'); + lName = lName.substring(slash+1); + listSet.add(lName); + + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Gazetteer List (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\nResourceInstantiationException:"+x.getMessage() + ,"Gazetteer List Load Failure", + JOptionPane.ERROR_MESSAGE); + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Gazetteer List (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Gazetteer List Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class ListNewListener + + + /**Reacts on all Gaz List Load Events */ + class ListLoadListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showOpenDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + URL lurl = new URL("file:///"+selected.getAbsolutePath()); + gazList = new GazetteerList(); + gazList.setURL(lurl); + gazList.load(); + gazList.setMode(gazList.STRING_MODE); + + listArea.setText(gazList.toString()); + + gazList.setModified(false); + + String lName = gazList.getURL().getFile(); + int slash = lName.lastIndexOf('/'); + lName = lName.substring(slash+1); + listSet.add(lName); + + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Gazetteer List (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\nResourceInstantiationException:"+x.getMessage() + ,"Gazetteer List Load Failure", + JOptionPane.ERROR_MESSAGE); + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Gazetteer List (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Gazetteer List Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class ListLoadListener + + /** Gazetteer list Save As action listener */ + class ListSaveAsListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if ( null == gazList ) { + JOptionPane.showMessageDialog( + Gaze.this,"The Gazetteer List is null and cannot be saved.", + "Gazetteer List Save failure.",JOptionPane.ERROR_MESSAGE); + } else { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showSaveDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + URL lurl; + try { + lurl = new URL("file:///"+selected.getAbsolutePath()); + gazList.setURL(lurl); + gazList.updateContent(listArea.getText()); + gazList.setMode(gazList.LIST_MODE); + gazList.store(); + JOptionPane.showMessageDialog( + Gaze.this, + "Gazetteer List saved sucessfuly.\n" + +lurl, + "Gazetteer List Save As", + JOptionPane.PLAIN_MESSAGE); + + reinitializeGazetteer(); + + } catch (MalformedURLException x) { + JOptionPane.showMessageDialog(Gaze.this,"Cannot save Gazetteer List.\n" + +"Due to "+x.getClass()+":"+x.getMessage(), + "Gazetteer List Save As failure",JOptionPane.ERROR_MESSAGE); + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog( + Gaze.this, + "Unable to save the Gazetteer List.\n" + +"Due to : "+x.getClass()+":"+x.getMessage(), + "Gazetteer List save failure.", + JOptionPane.ERROR_MESSAGE); + } // catch + } // approved + } // else + } + }//class ListSaveAsListener + + /** Gaz List Save Action Listener */ + class ListSaveListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if ( null == gazList ) { + JOptionPane.showMessageDialog( + Gaze.this,"The Gazetteer List is null and cannot be saved.", + "Gazetteer List Save failure.",JOptionPane.ERROR_MESSAGE); + } else { + + try { + gazList.updateContent(listArea.getText()); + gazList.setMode(gazList.LIST_MODE); + gazList.store(); + JOptionPane.showMessageDialog( + Gaze.this, + "Gazetteer List saved sucessfully.\n" + +gazList.getURL(), + "Gazetteer List Save", + JOptionPane.PLAIN_MESSAGE); + + reinitializeGazetteer(); + + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog( + Gaze.this, + "Unable to save the Gazetteer List.\n" + +"Due to : "+x.getClass()+":"+x.getMessage(), + "Gazetteer List Save failure.", + JOptionPane.ERROR_MESSAGE); + } // catch + } // else + } + }//gaz list save action listener + + /** Gaz List Save All Action Listener */ + class ListSaveAllListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (null!=gazList && null!=listArea) { + boolean mdf = gazList.isModified(); + gazList.updateContent(listArea.getText()); + gazList.setMode(gazList.LIST_MODE); + gazList.setModified(mdf); + } + + GazetteerList gl = null ; + StringBuffer allListsStr = new StringBuffer(); + boolean totalSuccess = true; + boolean totalFailure = true; + boolean anythingHappened = false; + + LinearNode node = null; + + for ( int i = 0 ; i < linear.size() ; i++ ) { + node = (LinearNode)linear.get(i); + gl = (GazetteerList)linear.getListsByNode().get(node); + try { + if (gl.isModified()) { + anythingHappened = true; + gl.setMode(gl.LIST_MODE); + gl.store(); + allListsStr.append("\nSAVED : "+ + node.getList()); + totalFailure = false; + } + } catch (ResourceInstantiationException x ) { + allListsStr.append("\nFAILED : "); + allListsStr.append(node.getList()); + totalSuccess = false; + } + }//for + + String msg = null; + if (!anythingHappened) { + msg = "There were no modified Gazetteer Lists to be saved.\n"; + } else { + if (totalFailure) { + msg = "Not even one modified Gazetteer List was saved.\n"; + } else { + if (totalSuccess) { + msg = "All Modified Gazetteer Lists saved sucessfuly.\n"; + } else { + msg = "Some of the Modified Gazetteer Lists were saved sucessfuly.\n"; + } // else + } // else + } //else + JOptionPane.showMessageDialog( + Gaze.this, + msg+allListsStr, + "Gazetteer List Save All", + JOptionPane.PLAIN_MESSAGE); + + reinitializeGazetteer(); + } + }//gaz list save all action listener + + /** Listener for right click on the Linear Definition list */ + class LinearPopupListener extends MouseAdapter { + public void mouseClicked(MouseEvent e) { + if(SwingUtilities.isRightMouseButton(e)){ + /* invoke popup*/ + linearPopup.show(linearList,e.getX(),e.getY()); + } // if right button + } // mouse clicked + } // class LinearPopupListener + + /**Listener for the Edit action of the LinearDefinition popup*/ + class LinearPopupEditListener implements ActionListener{ + public void actionPerformed(ActionEvent e) { + LinearNode lnode = + (LinearNode) linearList.getSelectedValue(); + + Vector lists = new Vector(listSet); + Vector majors = new Vector(linear.getMajors()); + Vector minors = new Vector(linear.getMinors()); + Vector languages = new Vector(linear.getLanguages()); + + Collections.sort(lists); + Collections.sort(majors); + Collections.sort(minors); + Collections.sort(languages); + + LinearNodeInput dialog = + new LinearNodeInput( + LDA_EDIT, + linearList.getSelectedIndex(), + lists, + majors, + minors, + languages, + lnode.getList(), + lnode.getMajorType(), + lnode.getMinorType(), + lnode.getLanguage()); + dialog.setTitle("Edit Linear Node"); + dialog.setLocationRelativeTo(linearLabel); + dialog.setResizable(false); + dialog.setVisible(true); + } // actionPerformed + } // class LinearPopupEditListener + + /**Listener for the Insert action of the LinearDefinition popup*/ + class LinearPopupInsertListener implements ActionListener{ + public void actionPerformed(ActionEvent e) { + + Vector lists = new Vector(listSet); + Vector majors = new Vector(linear.getMajors()); + Vector minors = new Vector(linear.getMinors()); + Vector languages = new Vector(linear.getLanguages()); + + Collections.sort(lists); + Collections.sort(majors); + Collections.sort(minors); + Collections.sort(languages); + + LinearNodeInput dialog = + new LinearNodeInput( + LDA_INSERT, + linearList.getSelectedIndex(), + lists, + majors, + minors, + languages); + + dialog.setTitle("Insert Linear Node"); + dialog.setLocationRelativeTo(linearLabel); + dialog.setResizable(false); + dialog.setVisible(true); + } // actionPerformed + } // class LinearPopupInsertListener + + /**Listener for the Remove action of the LinearDefinition popup*/ + class LinearPopupRemoveListener implements ActionListener{ + public void actionPerformed(ActionEvent e) { + int [] indices = linearList.getSelectedIndices(); + for ( int i = (indices.length-1) ; i > -1 ; i-- ){ + linear.remove(indices[i]); + } // for + linearList.setListData(linear.toArray()); + } + } // class LinearPopupRemoveListener + + /**A dialog for input of a LinearNode. */ + class LinearNodeInput extends JDialog { + /** the action that has been performed */ + private int action = -1; + /** the position at which the action has been performed */ + private int position = -1; + + protected JPanel jPanel1 = new JPanel(); + protected JLabel jLabel1 = new JLabel(); + protected JComboBox listCombo = new JComboBox(); + protected JLabel jLabel2 = new JLabel(); + protected JComboBox majorCombo = new JComboBox(); + protected JLabel jLabel3 = new JLabel(); + protected JComboBox minorCombo = new JComboBox(); + protected JLabel jLabel4 = new JLabel(); + protected JComboBox languagesCombo = new JComboBox(); + protected JLabel jLabel5 = new JLabel(); + protected JLabel jLabel6 = new JLabel(); + protected GridBagLayout gridBagLayout1 = new GridBagLayout(); + protected JButton btnOk = new JButton(); + protected JButton btnCancel = new JButton(); + + /** default constructor + * @param anAction one of a set of predefined actions + * @param pos the position/index where the action occured + * */ + public LinearNodeInput(int anAction, int pos) { + try { + action = anAction; + position = pos; + jbInit(); + } + catch(Exception e) { + e.printStackTrace(); + } + } // default constructor + + /** Construct with providing the combobox lists + * @param anAction one of a set of predefined actions + * @param pos the position/index where the action occured + * @param lists the lists to be loaded in the lists combo box + * @param majors the major types to be loaded in the major type combo box + * @param minors the minor types to be loaded in the minor type combo box + * @param languages the languages to be loaded in the languages combo box*/ + public LinearNodeInput(int anAction,int pos,Vector lists, Vector majors, + Vector minors, Vector languages) + { + try { + action = anAction; + position = pos; + if (null!=lists) + listCombo = new JComboBox(lists); + + if (null!=majors) + majorCombo = new JComboBox(majors); + + if (null!=minors) + minorCombo = new JComboBox(minors); + + if (null!=languages) + languagesCombo = new JComboBox(languages); + + jbInit(); + } + catch(Exception e) { + e.printStackTrace(); + } + } // constructor with combo lists + + /** Construct with providing the combobox lists and the current values of the members + * @param anAction one of a set of predefined actions + * @param pos the position/index where the action occured + * @param lists the lists to be loaded in the lists combo box + * @param majors the major types to be loaded in the major type combo box + * @param minors the minor types to be loaded in the minor type combo box + * @param languagesList the languages to be loaded in the languages combo box + */ + public LinearNodeInput(int anAction,int pos, + Vector lists, Vector majors, Vector minors, + Vector languagesList, + String list,String major, String minor, String languages) + { + try { + action = anAction; + position = pos; + if (null!=lists) + listCombo = new JComboBox(lists); + + if (null!=majors) + majorCombo = new JComboBox(majors); + + if (null!=minors) + minorCombo = new JComboBox(minors); + + if (null!=languagesList) + languagesCombo = new JComboBox(languagesList); + + if (null!=list) + listCombo.setSelectedItem(list); + + + if (null!=major) + majorCombo.setSelectedItem(major); + + if (null!=minor) + minorCombo.setSelectedItem(minor); + else + minorCombo.setSelectedItem(""); + + if (null!=languages) + languagesCombo.setSelectedItem(languages); + else + languagesCombo.setSelectedItem(""); + + jbInit(); + } + catch(Exception e) { + e.printStackTrace(); + } + } // constructor with combo lists + + private void jbInit() throws Exception { + jLabel1.setAlignmentX((float) 0.5); + jLabel1.setAlignmentY((float) 0.0); + jLabel1.setText("Gazetteer List*"); + jPanel1.setLayout(gridBagLayout1); + jLabel2.setText("Major Type*"); + jLabel3.setText("Minor Type"); + jLabel4.setText("Languages (comma-separated)"); + jLabel5.setText("Select, enter or alter the members of the Linear Node"); + jLabel6.setToolTipText(""); + jLabel6.setText("The members marked with \"*\" are mandatory."); + btnOk.setText("OK"); + btnCancel.setText("Cancel"); + listCombo.setEditable(true); + majorCombo.setEditable(true); + minorCombo.setEditable(true); + languagesCombo.setEditable(true); + this.getContentPane().add(jPanel1, BorderLayout.CENTER); + jPanel1.add(jLabel5, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 10, 10, 0), 22, 0)); + jPanel1.add(jLabel1, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 20, 0, 0), 0, 0)); + jPanel1.add(listCombo, new GridBagConstraints(0, 2, 2, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 20, 0, 60), 0, 0)); + jPanel1.add(jLabel2, new GridBagConstraints(0, 3, 2, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 20, 0, 0), 0, 0)); + jPanel1.add(majorCombo, new GridBagConstraints(0, 4, 2, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 20, 0, 60), 0, 0)); + jPanel1.add(jLabel3, new GridBagConstraints(0, 5, 2, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 20, 0, 60), 0, 0)); + jPanel1.add(minorCombo, new GridBagConstraints(0, 6, 2, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 20, 0, 60), 0, 0)); + jPanel1.add(jLabel4, new GridBagConstraints(0, 7, 2, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 20, 0, 0), 0, 0)); + jPanel1.add(languagesCombo, new GridBagConstraints(0, 8, 2, 1, 1.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 20, 0, 60), 0, 0)); + jPanel1.add(jLabel6, new GridBagConstraints(0, 9, 2, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 15, 0), 0, 0)); + jPanel1.add(btnOk, new GridBagConstraints(0, 10, 1, 1, 0.0, 0.0 + ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 150, 0, 0), 0, 0)); + jPanel1.add(btnCancel, new GridBagConstraints(1, 10, 1, 1, 0.0, 0.0 + ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 50), 0, 0)); + + this.setSize(new Dimension(338, 318)); + + createListeners(); + } + + /** Create the Action Listeners for the dialog*/ + private void createListeners() { + btnOk.addActionListener( new ActionListener() { + public void actionPerformed(ActionEvent e) { + LinearNode ln = new LinearNode( + (String)listCombo.getSelectedItem(), + (String)majorCombo.getSelectedItem(), + (String)minorCombo.getSelectedItem(), + (String)languagesCombo.getSelectedItem() + ); + if ((0 == ln.getList().trim().length()) + || + (0 == ln.getMajorType().trim().length())) { + JOptionPane.showMessageDialog(Gaze.this, + "This is not a valid Linear Node.\n"+ + "List and Major Type are mandatory\n"+ + "List : "+ln.getList()+ + "\nMajor Type : "+ln.getMajorType(), + "Invalid Linear Node",JOptionPane.ERROR_MESSAGE ); + } else { + performLinearAction(action,position,ln); + } + dispose(); + } + }); + + btnCancel.addActionListener( new ActionListener() { + public void actionPerformed(ActionEvent e) { + dispose(); } }); + + addKeyListener(new KeyListener(){ + + public void keyTyped(KeyEvent kev){} + + public void keyReleased(KeyEvent kev) { + if (kev.VK_ENTER == kev.getKeyCode()) { + LinearNode ln = new LinearNode( + (String)listCombo.getSelectedItem(), + (String)majorCombo.getSelectedItem(), + (String)minorCombo.getSelectedItem(), + (String)languagesCombo.getSelectedItem() + ); + performLinearAction(action,position,ln); + dispose(); + } // if enter + else { + if (kev.VK_ESCAPE == kev.getKeyCode()) { + dispose(); + } // if escape + } // else + } // keyReleased() + + public void keyPressed(KeyEvent kev) {} + + }); // add esc enter key listener + + } // createListeners() + + }// class LinearNodeInput + + + /** Reacts on all Create New Mapping actions performed either + * through the menu, either through the new buton. */ + class MappingNewListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showDialog(Gaze.this, "New"); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + if (!selected.createNewFile()){ + JOptionPane.showMessageDialog( + Gaze.this, + "Cannot Create Mapping Definition.\n"+ + selected.getAbsolutePath(), + "Mapping Definition Create Failure", + JOptionPane.ERROR_MESSAGE + ); + } // if + URL lurl = new URL("file:///"+selected.getAbsolutePath()); + mapping = new MappingDefinition(); + mapping.setURL(lurl); + mapping.load(); + + // remove the old tree from the scroll pane + if (null != oTree) + ontologyScroll.getViewport().remove(oTree); + + oTree = new JTree(); + ontologyScroll.getViewport().add(oTree); + oTree.setVisible(false); + oTree.updateUI(); + + // set the list data with the nodes of the gaz + mappingList.setListData(mapping.toArray()); + + + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Mapping Definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\nResourceInstantiationException:"+x.getMessage() + ,"Mapping Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load linear definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Linear Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class MappingNewListener + + + /** Reacts on all Load Mapping actions performed either + * through the menu, wither through the load buton. */ + class MappingLoadListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showOpenDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + URL lurl = new URL("file:///"+selected.getAbsolutePath()); + mapping = new MappingDefinition(); + mapping.setURL(lurl); + mapping.load(); + + // set the list data with the nodes of the gaz + mappingList.setListData(mapping.toArray()); + + reinitializeGazetteer(); + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Mapping Definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\nResourceInstantiationException:"+x.getMessage() + ,"Mapping Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load linear definition (corrupted format).\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Linear Definition Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class MappingLoadListener + + /** Reacts on all Save As Mapping Definition actions. */ + class MappingSaveAsListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if ( null == mapping ) { + JOptionPane.showMessageDialog( + Gaze.this,"The Mapping Definition is null and cannot be saved.", + "Mapping Definition Save As Failure.",JOptionPane.ERROR_MESSAGE); + } else { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showSaveDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + URL lurl; + try { + lurl = new URL("file:///"+selected.getAbsolutePath()); + mapping.setURL(lurl); + mapping.store(); + JOptionPane.showMessageDialog( + Gaze.this, + "Mapping Definition saved sucessfuly.\n" + +lurl, + "Mapping Definition Save As", + JOptionPane.PLAIN_MESSAGE); + + reinitializeGazetteer(); + + } catch (MalformedURLException x) { + JOptionPane.showMessageDialog(Gaze.this,"Cannot save Mapping Definition.\n" + +"Due to "+x.getClass()+":"+x.getMessage(), + "Mapping Definition Save As Failure",JOptionPane.ERROR_MESSAGE); + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog( + Gaze.this, + "Unable to save the Mapping Defintion.\n" + +"Due to : "+x.getClass()+":"+x.getMessage(), + "Mapping Definition Save Failure.", + JOptionPane.ERROR_MESSAGE); + } // catch + } // approved + } // else + } + }// class MappingSaveListener + + /** Reacts on all Mapping Definition Save As events */ + class MappingSaveListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if ( null == mapping ) { + JOptionPane.showMessageDialog( + Gaze.this,"The Mapping Definition is null and cannot be saved.", + "Mapping Definition Save failure.",JOptionPane.ERROR_MESSAGE); + } else { + + try { + mapping.store(); + JOptionPane.showMessageDialog( + Gaze.this, + "Mapping Definition saved sucessfuly.", + "Mapping Definition Save", + JOptionPane.PLAIN_MESSAGE); + reinitializeGazetteer(); + } catch (ResourceInstantiationException x) { + JOptionPane.showMessageDialog( + Gaze.this, + "Unable to save the Mapping Definition.\n" + +"Due to : "+x.getClass()+":"+x.getMessage(), + "Mapping Definition Save failure.", + JOptionPane.ERROR_MESSAGE); + } // catch + } // else + } // actionPerformed(ActionEvent) + } // class MappingSaveListener + + /** Reacts on all Load Ontology actions performed either + * through the menu, wither through the load buton. */ + class OntologyLoadListener implements ActionListener { + @SuppressWarnings("deprecation") + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = MainFrame.getFileChooser(); + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + + int result = chooser.showOpenDialog(Gaze.this); + if ( result == JFileChooser.APPROVE_OPTION ) { + File selected = chooser.getSelectedFile(); + try { + URL ourl = new URL("file:///"+selected.getAbsolutePath()); + try { + ontology = OntologyUtilities.getOntology(ourl); + ontology.addOntologyModificationListener(Gaze.this); + } catch (ResourceInstantiationException x) { + x.printStackTrace(Err.getPrintWriter()); + } + if (null == ontology) + throw new GateRuntimeException("can not Load ontology by url.\n" + +"ontology is null.\n" + +"url = "+ourl); + + // remove the old tree from the scroll pane + if (null != oTree) + ontologyScroll.getViewport().remove(oTree); + + // check if there is already a tree for this ontology + oTree = (JTree) ontologyTrees.get(ontology); + + if (null == oTree) { + Map namesVsNodes = new HashMap(); + ClassNode root = ClassNode.createRootNode(ontology,mapping,namesVsNodes); + OntoTreeModel model = new OntoTreeModel(root); + MappingTreeView view = new MappingTreeView(model,mapping,Gaze.this); + oTree = view; + ontologyTrees.put(ontology,oTree); + } // ontology tree has not been previously creted + + ontologyScroll.getViewport().add(oTree,null); + oTree.setVisible(true); + + + } catch (Exception x) { + JOptionPane.showMessageDialog(Gaze.this, + "Unable to load Ontology.\n" + +"file:///"+selected.getAbsolutePath()+"\n" + +"Due to:\n"+x.getClass()+":"+x.getMessage() + ,"Ontology Load Failure", + JOptionPane.ERROR_MESSAGE); + } + } // approve + } // actionPerformed(ActionEvent) + } // class OntologyLoadListener + +} // class Gaze \ No newline at end of file Added: gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/GeneralEditorException.java =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/GeneralEditorException.java (rev 0) +++ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/GeneralEditorException.java 2017-07-12 09:33:41 UTC (rev 20251) @@ -0,0 +1,15 @@ +package com.ontotext.gate.vr; + +import gate.util.GateException; + +/** A general editor exception */ +public class GeneralEditorException extends GateException { + + /** The base of the exception message */ + private static final String BASE = "General Editor Exception:\n"; + + + public GeneralEditorException(String msg) { + super(BASE+msg); + } +} \ No newline at end of file Added: gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/IFolder.java =================================================================== --- gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/IFolder.java (rev 0) +++ gate/branches/sawdust2/plugins/Ontology_Tools/src/main/java/com/ontotext/gate/vr/IFolder.java 2017-07-12 09:33:41 UTC (rev 20251) @@ -0,0 +1,471 @@ +package com.ontotext.gate.vr; + +/**Additional interface to be impelmented by the nodes of the tree view. + * @author Miroslav Goranov*/ + +import java.util.*; + + + + +public interface IFolder +{ + + + + public int getIndexOfChild(Object child); + + public Iterator getChildren(); + + public Vector children(); + + public String toString(); + + public int getChildCount(); + @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ GATE-cvs mailing list GATE-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gate-cvs