Skip to content

Commit 43ed872

Browse files
author
mgeipel
committed
fixed #43
1 parent f47c291 commit 43ed872

File tree

4 files changed

+77
-44
lines changed

4 files changed

+77
-44
lines changed

examples/sort/sort-gnd.flux

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
default fileName = FLUX_DIR + "gnd-sample.pica";
2-
3-
fileName|
4-
open-file|
5-
as-lines|
6-
decode-pica|
7-
morph(FLUX_DIR + "gnd-pref-label.xml")|
8-
stream-to-triples|
9-
sort-triples(sortBy="object")|
10-
template("${s}\t${o}")|
1+
default fileName = FLUX_DIR + "gnd-sample.pica";
2+
3+
fileName|
4+
open-file|
5+
as-lines|
6+
decode-pica|
7+
morph(FLUX_DIR + "gnd-pref-label.xml")|
8+
stream-to-triples|
9+
sort-triples(by="object")|
10+
template("${s}\t${o}")|
1111
write("stdout");

src/main/java/org/culturegraph/mf/stream/pipe/sort/AbstractTripleSort.java

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,39 @@ public abstract class AbstractTripleSort extends DefaultObjectPipe<Triple, Objec
3939
/**
4040
* specifies the comparator
4141
*/
42-
public enum CompareBy {
42+
public enum Compare {
4343
SUBJECT, PREDICATE, OBJECT, ALL;
4444
}
45+
46+
/**
47+
* sort order
48+
*
49+
*/
50+
public enum Order {
51+
INCREASING {
52+
@Override
53+
public int order(final int indicator) {
54+
return indicator;
55+
}
56+
}, DECREASING {
57+
@Override
58+
public int order(final int indicator) {
59+
return -indicator;
60+
}
61+
};
62+
public abstract int order(int indicator);
63+
}
4564

4665

47-
//public static final String OBJECT = "Object";
48-
//public static final String PREDICATE = "Predicate";
49-
//public static final String SUBJECT = "Subject";
50-
5166
private static final int KILO = 1024;
5267
private static final int DEFUALT_BLOCKSIZE = 128 * KILO * KILO;
5368
private static final int STRING_OVERHEAD = 124;
5469

5570
private final List<Triple> buffer = new ArrayList<Triple>();
5671
private final List<File> tempFiles = new ArrayList<File>();
57-
private CompareBy compareBy = CompareBy.SUBJECT;
58-
private Comparator<Triple> comparator = createComparator(compareBy);
72+
private Compare compare = Compare.SUBJECT;
73+
private Order order = Order.INCREASING;
74+
//private Comparator<Triple> comparator = createComparator(compareBy, order);
5975
private long bufferSizeEstimate;
6076

6177
private long blockSize = DEFUALT_BLOCKSIZE;
@@ -67,16 +83,20 @@ public final void setBlockSize(final int blockSize) {
6783
this.blockSize = blockSize * KILO * KILO;
6884
}
6985

70-
protected final void setComparator(final CompareBy compareBy) {
71-
comparator = createComparator(compareBy);
72-
this.compareBy = compareBy;
86+
protected final void setCompare(final Compare compare) {
87+
this.compare = compare;
7388
}
7489

75-
protected final CompareBy getComparatorType() {
76-
return compareBy;
90+
protected final Compare getCompare() {
91+
return compare;
92+
}
93+
94+
protected final void setSortOrder(final Order order){
95+
this.order = order;
7796
}
7897

7998

99+
80100
@Override
81101
public final void process(final Triple namedValue) {
82102

@@ -96,7 +116,7 @@ public final void process(final Triple namedValue) {
96116
}
97117

98118
private void nextBatch() throws IOException {
99-
Collections.sort(buffer, comparator);
119+
Collections.sort(buffer, createComparator(compare, order));
100120
final File tempFile = File.createTempFile("sort", "namedValues", null);
101121
tempFile.deleteOnExit();
102122
final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(tempFile));
@@ -112,24 +132,22 @@ private void nextBatch() throws IOException {
112132
tempFiles.add(tempFile);
113133
}
114134

115-
protected final Comparator<Triple> getComparator() {
116-
return comparator;
117-
}
118135

119136
@Override
120137
public final void onCloseStream() {
121138

122139

123140
if (tempFiles.isEmpty()) {
124-
Collections.sort(buffer, comparator);
141+
Collections.sort(buffer, createComparator(compare, order));
125142
for (Triple triple : buffer) {
126143
sortedTriple(triple);
127144
}
128145
onFinished();
129146
} else {
147+
final Comparator<Triple> comparator = createComparator(compare, order);
130148
final PriorityQueue<SortedTripleFileFacade> queue = new PriorityQueue<SortedTripleFileFacade>(11,
131149
new Comparator<SortedTripleFileFacade>() {
132-
private final Comparator<Triple> comparator = getComparator();
150+
// private final Comparator<Triple> comparator = getComparator();
133151

134152
@Override
135153
public int compare(final SortedTripleFileFacade o1, final SortedTripleFileFacade o2) {
@@ -170,30 +188,34 @@ protected void onFinished() {
170188

171189
protected abstract void sortedTriple(Triple namedValue);
172190

173-
public static Comparator<Triple> createComparator(final CompareBy compareBy) {
191+
public final Comparator<Triple> createComparator(){
192+
return createComparator(compare, order);
193+
}
194+
195+
public static Comparator<Triple> createComparator(final Compare compareBy, final Order order) {
174196
final Comparator<Triple> comparator;
175197
switch (compareBy) {
176198
case ALL:
177199
comparator = new Comparator<Triple>() {
178200
@Override
179201
public int compare(final Triple o1, final Triple o2) {
180-
return o1.compareTo(o2);
202+
return order.order(o1.compareTo(o2));
181203
}
182204
};
183205
break;
184206
case OBJECT:
185207
comparator = new Comparator<Triple>() {
186208
@Override
187209
public int compare(final Triple o1, final Triple o2) {
188-
return o1.getObject().compareTo(o2.getObject());
210+
return order.order(o1.getObject().compareTo(o2.getObject()));
189211
}
190212
};
191213
break;
192214
case SUBJECT:
193215
comparator = new Comparator<Triple>() {
194216
@Override
195217
public int compare(final Triple o1, final Triple o2) {
196-
return o1.getSubject().compareTo(o2.getSubject());
218+
return order.order(o1.getSubject().compareTo(o2.getSubject()));
197219
}
198220
};
199221
break;
@@ -202,7 +224,7 @@ public int compare(final Triple o1, final Triple o2) {
202224
comparator = new Comparator<Triple>() {
203225
@Override
204226
public int compare(final Triple o1, final Triple o2) {
205-
return o1.getPredicate().compareTo(o2.getPredicate());
227+
return order.order(o1.getPredicate().compareTo(o2.getPredicate()));
206228
}
207229
};
208230
break;

src/main/java/org/culturegraph/mf/stream/pipe/sort/TripleCount.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.culturegraph.mf.stream.pipe.sort;
1717

18+
import java.util.Comparator;
19+
1820
import org.culturegraph.mf.framework.annotations.Description;
1921
import org.culturegraph.mf.framework.annotations.In;
2022
import org.culturegraph.mf.framework.annotations.Out;
@@ -29,20 +31,25 @@
2931
@In(NamedValue.class)
3032
@Out(NamedValue.class)
3133
public final class TripleCount extends AbstractTripleSort {
32-
34+
3335
public static final String DEFAULT_COUNTP_REDICATE = "count";
34-
private Triple current;
36+
37+
private static final Triple INIT = new Triple("", "", "");
38+
39+
private Triple current = INIT;
3540
private int count;
3641
private String countPredicate = DEFAULT_COUNTP_REDICATE;
42+
private Comparator<Triple> comparator;
3743

3844
@Override
3945
protected void sortedTriple(final Triple triple) {
4046

41-
if(current==null){
47+
if(current==INIT){
4248
current = triple;
49+
comparator = createComparator();
4350
}
4451

45-
if(getComparator().compare(current, triple)==0){
52+
if(comparator.compare(current, triple)==0){
4653
++count;
4754
}else{
4855
writeResult();
@@ -61,7 +68,7 @@ protected void onFinished() {
6168
}
6269

6370
private void writeResult() {
64-
final CompareBy compareBy = getComparatorType();
71+
final Compare compareBy = getCompare();
6572
switch (compareBy) {
6673
case ALL:
6774
getReceiver().process(new Triple(current.toString(), countPredicate , String.valueOf(count)));
@@ -79,8 +86,7 @@ private void writeResult() {
7986
}
8087
}
8188

82-
public void setCountBy(final CompareBy countBy){
83-
setComparator(countBy);
89+
public void setCountBy(final Compare countBy){
90+
setCompare(countBy);
8491
}
85-
8692
}

src/main/java/org/culturegraph/mf/stream/pipe/sort/TripleSort.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,13 @@ protected void sortedTriple(final Triple triple) {
3434
getReceiver().process(triple);
3535
}
3636

37-
public void setSortBy(final CompareBy sortBy){
38-
setComparator(sortBy);
37+
public void setBy(final Compare compare){
38+
setCompare(compare);
3939
}
40-
40+
41+
public void setOrder(final Order order){
42+
setSortOrder(order);
43+
}
44+
45+
4146
}

0 commit comments

Comments
 (0)