schmitzm.data
Class ObjectStructureUtil

java.lang.Object
  extended by schmitzm.data.ObjectStructureUtil

public class ObjectStructureUtil
extends Object

Diese Klasse stellt statische Methoden fuer die Arbeit mit Objekt-Strukturen zur Verfuegung. Hierzu gehoeren insbesondere Vergleichsmethoden, mit denen auf strukturelle Gleichkeit oder Implikation getestet werden kann.

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)

Field Summary
static int DISJOINT
          Rueckgabe-Konstante fuer "die beiden Strukituren haben eine leere Schnittmenge".
static int EQUAL
          Rueckgabe-Konstante fuer "zwei Strukturen sind identisch".
static int LEFT_CONTAINS_RIGHT
          Rueckgabe-Konstante fuer "die linke Strukturen umfasst die rechte".
static int RIGHT_CONTAINS_LEFT
          Rueckgabe-Konstante fuer "die rechte Strukturen umfasst die linke".
static int UNEQUAL
          Rueckgabe-Konstante fuer "weder umfasst die linke Strukur die rechte, noch umgekehrt" (Ueberschneidung ist dennoch moeglich!).
 
Constructor Summary
ObjectStructureUtil()
           
 
Method Summary
static boolean checkStructureContainsStructure(ObjectStructure o1, ObjectStructure o2)
          Prueft, ob eine Objekt-Struktur eine andere umfasst.
static int compareObjectStructures(ObjectStructure o1, ObjectStructure o2)
          Vergleicht zwei Objekt-Strukturen.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EQUAL

public static final int EQUAL
Rueckgabe-Konstante fuer "zwei Strukturen sind identisch".

See Also:
Constant Field Values

LEFT_CONTAINS_RIGHT

public static final int LEFT_CONTAINS_RIGHT
Rueckgabe-Konstante fuer "die linke Strukturen umfasst die rechte".

See Also:
Constant Field Values

RIGHT_CONTAINS_LEFT

public static final int RIGHT_CONTAINS_LEFT
Rueckgabe-Konstante fuer "die rechte Strukturen umfasst die linke".

See Also:
Constant Field Values

UNEQUAL

public static final int UNEQUAL
Rueckgabe-Konstante fuer "weder umfasst die linke Strukur die rechte, noch umgekehrt" (Ueberschneidung ist dennoch moeglich!).

See Also:
Constant Field Values

DISJOINT

public static final int DISJOINT
Rueckgabe-Konstante fuer "die beiden Strukituren haben eine leere Schnittmenge".
Bemerke: wird z.Z. noch nicht verwendet!!

See Also:
Constant Field Values
Constructor Detail

ObjectStructureUtil

public ObjectStructureUtil()
Method Detail

compareObjectStructures

public static int compareObjectStructures(ObjectStructure o1,
                                          ObjectStructure o2)
Vergleicht zwei Objekt-Strukturen.

Parameters:
o1 - "linke" Objekt-Struktur
o2 - "rechte" Objekt-Struktur
Returns:
eine der Konstanten EQUAL, LEFT_CONTAINS_RIGHT, RIGHT_CONTAINS_LEFT, UNEQUAL
See Also:
checkStructureContainsStructure(ObjectStructure,ObjectStructure)

checkStructureContainsStructure

public static boolean checkStructureContainsStructure(ObjectStructure o1,
                                                      ObjectStructure o2)
Prueft, ob eine Objekt-Struktur eine andere umfasst.
Vorgehensweise:
  1. Kann die eine Struktur mehrere Werte aufnehmen und die andere nicht (ObjectStructure.containsMultipleValues()), kann die linke Struktur die rechte auf keinen Fall enthalten.
  2. Enhaelt die rechte Struktur mehr Attribute, als die linke, so kann die linke Struktur die rechte auf keinen Fall enthalten.
  3. Enthaelt die linke Struktur ein Attribut, welches (wiederum strukturell) nicht in der rechten Struktur vorhanden ist, so kann die linke Struktur die rechte nicht enthalten.
    Beim Vergleich der Attribute wird wiederum auf strukturelle Implikation geprueft:
    • Handelt es sich um zwei strukturierte Attribute, muss das "linke" Attribut das "rechte" strukturell umfassen (Rekursion!).
    • Handelt es sich um zwei statische Attribute (Typ Class), muss die "linke" Klasse eine Spezialisierung (Ableitung) der "rechten" Klasse sein.
    • Treffen beide Bedingungen nicht zu, kann das linke Attribut das rechte nicht umfassen.

Parameters:
o1 - "linke" Objekt-Struktur
o2 - "rechte" Objekt-Struktur