@@ -39,23 +39,39 @@ public abstract class AbstractTripleSort extends DefaultObjectPipe<Triple, Objec
39
39
/**
40
40
* specifies the comparator
41
41
*/
42
- public enum CompareBy {
42
+ public enum Compare {
43
43
SUBJECT , PREDICATE , OBJECT , ALL ;
44
44
}
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
+ }
45
64
46
65
47
- //public static final String OBJECT = "Object";
48
- //public static final String PREDICATE = "Predicate";
49
- //public static final String SUBJECT = "Subject";
50
-
51
66
private static final int KILO = 1024 ;
52
67
private static final int DEFUALT_BLOCKSIZE = 128 * KILO * KILO ;
53
68
private static final int STRING_OVERHEAD = 124 ;
54
69
55
70
private final List <Triple > buffer = new ArrayList <Triple >();
56
71
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);
59
75
private long bufferSizeEstimate ;
60
76
61
77
private long blockSize = DEFUALT_BLOCKSIZE ;
@@ -67,16 +83,20 @@ public final void setBlockSize(final int blockSize) {
67
83
this .blockSize = blockSize * KILO * KILO ;
68
84
}
69
85
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 ;
73
88
}
74
89
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 ;
77
96
}
78
97
79
98
99
+
80
100
@ Override
81
101
public final void process (final Triple namedValue ) {
82
102
@@ -96,7 +116,7 @@ public final void process(final Triple namedValue) {
96
116
}
97
117
98
118
private void nextBatch () throws IOException {
99
- Collections .sort (buffer , comparator );
119
+ Collections .sort (buffer , createComparator ( compare , order ) );
100
120
final File tempFile = File .createTempFile ("sort" , "namedValues" , null );
101
121
tempFile .deleteOnExit ();
102
122
final ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream (tempFile ));
@@ -112,24 +132,22 @@ private void nextBatch() throws IOException {
112
132
tempFiles .add (tempFile );
113
133
}
114
134
115
- protected final Comparator <Triple > getComparator () {
116
- return comparator ;
117
- }
118
135
119
136
@ Override
120
137
public final void onCloseStream () {
121
138
122
139
123
140
if (tempFiles .isEmpty ()) {
124
- Collections .sort (buffer , comparator );
141
+ Collections .sort (buffer , createComparator ( compare , order ) );
125
142
for (Triple triple : buffer ) {
126
143
sortedTriple (triple );
127
144
}
128
145
onFinished ();
129
146
} else {
147
+ final Comparator <Triple > comparator = createComparator (compare , order );
130
148
final PriorityQueue <SortedTripleFileFacade > queue = new PriorityQueue <SortedTripleFileFacade >(11 ,
131
149
new Comparator <SortedTripleFileFacade >() {
132
- private final Comparator <Triple > comparator = getComparator ();
150
+ // private final Comparator<Triple> comparator = getComparator();
133
151
134
152
@ Override
135
153
public int compare (final SortedTripleFileFacade o1 , final SortedTripleFileFacade o2 ) {
@@ -170,30 +188,34 @@ protected void onFinished() {
170
188
171
189
protected abstract void sortedTriple (Triple namedValue );
172
190
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 ) {
174
196
final Comparator <Triple > comparator ;
175
197
switch (compareBy ) {
176
198
case ALL :
177
199
comparator = new Comparator <Triple >() {
178
200
@ Override
179
201
public int compare (final Triple o1 , final Triple o2 ) {
180
- return o1 .compareTo (o2 );
202
+ return order . order ( o1 .compareTo (o2 ) );
181
203
}
182
204
};
183
205
break ;
184
206
case OBJECT :
185
207
comparator = new Comparator <Triple >() {
186
208
@ Override
187
209
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 () ));
189
211
}
190
212
};
191
213
break ;
192
214
case SUBJECT :
193
215
comparator = new Comparator <Triple >() {
194
216
@ Override
195
217
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 () ));
197
219
}
198
220
};
199
221
break ;
@@ -202,7 +224,7 @@ public int compare(final Triple o1, final Triple o2) {
202
224
comparator = new Comparator <Triple >() {
203
225
@ Override
204
226
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 () ));
206
228
}
207
229
};
208
230
break ;
0 commit comments