001    package org.dllearner.algorithms.refinement2;
002    
003    import java.util.Comparator;
004    
005    import org.dllearner.core.ReasonerComponent;
006    import org.dllearner.core.owl.Description;
007    import org.dllearner.utilities.owl.ConceptComparator;
008    
009    public class SubsumptionComparator implements Comparator<Description> {
010    
011            private ReasonerComponent rs;
012            private ConceptComparator cc = new ConceptComparator();
013            
014            public SubsumptionComparator(ReasonerComponent rs) {
015                    this.rs = rs;
016            }
017            
018            public int compare(ExampleBasedNode arg0, ExampleBasedNode arg1) {
019                    Description concept1 = arg0.getConcept();
020                    Description concept2 = arg1.getConcept();
021                    return compare(concept1, concept2);
022            }
023    
024            public int compare(Description concept1, Description concept2) {
025                    // return true if concept1 is a super concept of concept2
026                    boolean value1 = rs.isSuperClassOf(concept1, concept2);
027                    if(value1)
028                            return 1;
029                    
030                    boolean value2 = rs.isSuperClassOf(concept2, concept1);
031                    if(value2)
032                            return -1;
033                    
034    //              System.out.println("Incomparable: " + concept1 + " " + concept2);
035                    
036                    // both concepts are incomparable => order them syntactically
037                    return cc.compare(concept1, concept2);
038            }
039    
040    }