Author: reto
Date: Fri Mar 5 01:42:25 2010
New Revision: 919266
URL: http://svn.apache.org/viewvc?rev=919266&view=rev
Log:
fixed bug in joining equivalence set
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/Smusher.java
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/Smusher.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/Smusher.java?rev=919266&r1=919265&r2=919266&view=diff
==============================================================================
---
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/Smusher.java
(original)
+++
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.utils/src/main/java/org/apache/clerezza/rdf/utils/Smusher.java
Fri Mar 5 01:42:25 2010
@@ -72,7 +72,7 @@
}
equivalentNodes.add(triple.getSubject());
}
- Set<Set<NonLiteral>> unitedEquivalenceSets =
uniteEquivalenceSets(ifp2nodesMap.values());
+ Set<Set<NonLiteral>> unitedEquivalenceSets =
uniteSetsWithCommonElement(ifp2nodesMap.values());
Map<NonLiteral, NonLiteral> current2ReplacementMap = new
HashMap<NonLiteral, NonLiteral>();
final MGraph owlSameAsGraph = new SimpleMGraph();
for (Set<NonLiteral> equivalenceSet : unitedEquivalenceSets) {
@@ -147,31 +147,44 @@
return first;
}
- private static Set<Set<NonLiteral>> uniteEquivalenceSets(
- Collection<Set<NonLiteral>> originalSets) {
- final Map<NonLiteral, Set<Set<NonLiteral>>> node2OriginalSets =
- new HashMap<NonLiteral, Set<Set<NonLiteral>>>();
- for (Set<NonLiteral> set : originalSets) {
- for (NonLiteral nonLiteral : set) {
- Set<Set<NonLiteral>> sets =
node2OriginalSets.get(nonLiteral);
- if (sets == null) {
- sets = new HashSet<Set<NonLiteral>>();
- node2OriginalSets.put(nonLiteral, sets);
- }
- sets.add(set);
- }
+ private static <T> Set<Set<T>> uniteSetsWithCommonElement(
+ Collection<Set<T>> originalSets) {
+ Set<Set<T>> result = new HashSet<Set<T>>();
+ Iterator<Set<T>> iter = originalSets.iterator();
+ while (iter.hasNext()) {
+ Set<T> originalSet = iter.next();
+ Set<T> matchingSet = getMatchinSet(originalSet, result);
+ if (matchingSet != null) {
+ matchingSet.addAll(originalSet);
+ } else {
+ result.add(new HashSet<T>(originalSet));
+ }
+ }
+ if (result.size() < originalSets.size()) {
+ return uniteSetsWithCommonElement(result);
+ } else {
+ return result;
}
- Set<Set<NonLiteral>> result = new HashSet<Set<NonLiteral>>();
- for (Set<Set<NonLiteral>> sets2Unite :
node2OriginalSets.values()) {
- Set<NonLiteral> newSet = new HashSet<NonLiteral>();
- for (Set<NonLiteral> existingSet : sets2Unite) {
- newSet.addAll(existingSet);
+ }
+
+ private static <T> Set<T> getMatchinSet(Set<T> set, Set<Set<T>>
setOfSet) {
+ for (Set<T> current : setOfSet) {
+ if (shareElements(set,current)) {
+ return current;
}
- result.add(newSet);
}
- return result;
+ return null;
+ }
+ private static <T> boolean shareElements(Set<T> set1, Set<T> set2) {
+ for (T elem : set2) {
+ if (set1.contains(elem)) {
+ return true;
+ }
+ }
+ return false;
}
+
static class PredicateObject {