diff --git a/src/fr/inrialpes/exmo/align/impl/BasicOntologyNetwork.java b/src/fr/inrialpes/exmo/align/impl/BasicOntologyNetwork.java index 7094f09c1828c2e48340b72295255ecbab14125b..e79faca1d977115776075606f12bfc39609efb38 100644 --- a/src/fr/inrialpes/exmo/align/impl/BasicOntologyNetwork.java +++ b/src/fr/inrialpes/exmo/align/impl/BasicOntologyNetwork.java @@ -24,7 +24,9 @@ import java.lang.Cloneable; import java.lang.Iterable; import java.util.Collections; import java.util.Enumeration; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.Set; import java.util.HashSet; import java.util.Hashtable; @@ -47,10 +49,13 @@ public class BasicOntologyNetwork implements OntologyNetwork { protected Hashtable<URI,OntologyTriple> ontologies; protected HashSet<Alignment> alignments; + + protected HashMap<URI,Map<URI,Set<Alignment>>> onto2Align; public BasicOntologyNetwork(){ ontologies = new Hashtable<URI,OntologyTriple>(); alignments = new HashSet<Alignment>(); + onto2Align = new HashMap<URI,Map<URI,Set<Alignment>>>(); } public void addOntology( URI onto ){ @@ -67,6 +72,10 @@ public class BasicOntologyNetwork implements OntologyNetwork { remAlignment( al ); } ontologies.remove( onto ); // Or set to null + + onto2Align.remove(onto); + for (Map<URI,Set<Alignment>> m : onto2Align.values()) + m.remove(onto); } }; public void addAlignment( Alignment al ) throws AlignmentException { @@ -77,11 +86,24 @@ public class BasicOntologyNetwork implements OntologyNetwork { addOntology( o2 ); ontologies.get( o2 ).targettingAlignments.add( al ); alignments.add( al ); + + Map<URI,Set<Alignment>> m = onto2Align.get(al.getOntology1URI()); + if (m==null) { + m=new HashMap<URI,Set<Alignment>>(); + onto2Align.put(al.getOntology1URI(), m); + } + Set<Alignment> aligns=m.get(al.getOntology2URI()); + if (aligns==null) { + aligns = new HashSet<Alignment>(); + m.put(al.getOntology2URI(), aligns); + } + aligns.add(al); }; public void remAlignment( Alignment al ) throws AlignmentException { ontologies.get( al.getOntology1URI() ).sourceAlignments.remove( al ); ontologies.get( al.getOntology2URI() ).targettingAlignments.remove( al ); alignments.remove( al ); + onto2Align.get(al.getOntology1URI()).get(al.getOntology2URI()).remove(al); }; public Set<Alignment> getAlignments(){ return alignments; @@ -103,6 +125,15 @@ public class BasicOntologyNetwork implements OntologyNetwork { for ( Alignment al : newal ) addAlignment( al ); } + public Set<Alignment> getAlignments(URI srcOnto, URI dstOnto) { + Map<URI,Set<Alignment>> m = onto2Align.get(srcOnto); + if (m!=null) { + Set<Alignment> aligns = m.get(dstOnto); + if (aligns!=null) return Collections.unmodifiableSet(aligns); + } + return Collections.emptySet(); + } + } class OntologyTriple { diff --git a/src/org/semanticweb/owl/align/OntologyNetwork.java b/src/org/semanticweb/owl/align/OntologyNetwork.java index 9a485650909a23fda754845d1dbc395c95749899..30a18955b98167575287c4d4988a454569184756 100644 --- a/src/org/semanticweb/owl/align/OntologyNetwork.java +++ b/src/org/semanticweb/owl/align/OntologyNetwork.java @@ -32,7 +32,7 @@ import fr.inrialpes.exmo.ontowrap.Ontology; /** * Represents a distributed system of aligned ontologies or network of ontologies. * - * @author Jérôme Euzenat + * @author Jďż˝rďż˝me Euzenat * @version $Id$ */ @@ -46,6 +46,7 @@ public interface OntologyNetwork extends Cloneable { public Set<URI> getOntologies(); public Set<Alignment> getTargetingAlignments( URI onto ); public Set<Alignment> getSourceAlignments( URI onto ); + public Set<Alignment> getAlignments(URI srcOnto, URI dstOnto); /** * close reflexively the network.