Skip to content
Snippets Groups Projects
Commit 1a78b73a authored by Piotr Gawron's avatar Piotr Gawron
Browse files

generic set comparator added

parent 1afa2c3a
No related branches found
No related tags found
1 merge request!186Resolve "upload of sbml"
package lcsb.mapviewer.common.comparator;
import java.util.Comparator;
import java.util.Set;
import org.apache.log4j.Logger;
/**
* Comparator used for comparing sets of strings.
*
* @author Piotr Gawron
*
*/
public class SetComparator<T> implements Comparator<Set<T>> {
/**
* Default class logger.
*/
private Logger logger = Logger.getLogger(SetComparator.class);
private Comparator<T> objectComparator;
public SetComparator(Comparator<T> objectComparator) {
this.objectComparator = objectComparator;
}
@Override
public int compare(Set<T> arg0, Set<T> arg1) {
if (arg0 == null) {
if (arg1 == null) {
return 0;
} else {
return 1;
}
} else if (arg1 == null) {
return -1;
}
for (T objectInList1 : arg1) {
boolean found = false;
for (T objectInList0 : arg0) {
if (objectComparator.compare(objectInList0, objectInList1) == 0) {
found = true;
}
}
if (!found) {
logger.debug("Cannot find object " + objectInList1 + " in set: " + arg0);
return 1;
}
}
for (T objectInList0 : arg0) {
boolean found = false;
for (T objectInList1 : arg1) {
if (objectComparator.compare(objectInList0, objectInList1) == 0) {
found = true;
}
}
if (!found) {
logger.debug("Cannot find object " + objectInList0 + " in set: " + arg1);
return 1;
}
}
return 0;
}
}
......@@ -6,13 +6,14 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({ BooleanComparatorTest.class, //
ColorComparatorTest.class, //
DoubleComparatorTest.class, //
IntegerComparatorTest.class, //
PointComparatorTest.class, //
StringComparatorTest.class, //
StringListComparatorTest.class, //
StringSetComparatorTest.class, //
ColorComparatorTest.class, //
DoubleComparatorTest.class, //
IntegerComparatorTest.class, //
PointComparatorTest.class, //
StringComparatorTest.class, //
StringListComparatorTest.class, //
StringSetComparatorTest.class, //
SetComparatorTest.class,//
})
public class AllComparatorTests {
......
package lcsb.mapviewer.common.comparator;
import static org.junit.Assert.*;
import java.awt.Color;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
public class SetComparatorTest {
@Test
public void testEqual() {
Set<Color> set1 = new HashSet<>();
Set<Color> set2 = new HashSet<>();
set1.add(Color.BLACK);
set2.add(Color.BLACK);
SetComparator<Color> comparator = new SetComparator<>(new ColorComparator());
assertEquals(0, comparator.compare(set1, set2));
}
@Test
public void testEqualWithCustomClass() {
class Data {
int x;
Data(int x) {
this.x = x;
}
}
class DataComparator implements Comparator<Data> {
@Override
public int compare(Data o1, Data o2) {
return o1.x - o2.x;
}
}
Set<Data> set1 = new HashSet<>();
Set<Data> set2 = new HashSet<>();
set1.add(new Data(1));
set2.add(new Data(1));
SetComparator<Data> comparator = new SetComparator<>(new DataComparator());
assertEquals(0, comparator.compare(set1, set2));
set2.add(new Data(2));
assertTrue(0 != comparator.compare(set1, set2));
assertTrue(0 != comparator.compare(set2, set1));
}
}
#Set root logger 's level and its appender to an appender called CONSOLE which is defined below.
log4j.rootLogger=info, CONSOLE, R
log4j.rootLogger=info, CONSOLE
#Set the behavior of the CONSOLE appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment