Skip to content

Commit 5927b7c

Browse files
committed
Extract common triple-based analyzer code into a superclass
See https://gitlab.com/oersi/oersi-etl/-/issues/238
1 parent 8c4f718 commit 5927b7c

File tree

4 files changed

+157
-216
lines changed

4 files changed

+157
-216
lines changed

metafix/src/main/java/org/metafacture/metafix/Metafix.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public class Metafix implements StreamPipe<StreamReceiver>, Maps {
6464
public static final String VAR_START = "$[";
6565

6666
public static final Strictness DEFAULT_STRICTNESS = Strictness.PROCESS;
67+
public static final String DEFAULT_ENTITY_MEMBER_NAME = "%d";
6768

6869
public static final Map<String, String> NO_VARS = Collections.emptyMap();
6970

@@ -87,7 +88,7 @@ public class Metafix implements StreamPipe<StreamReceiver>, Maps {
8788
private Strictness strictness = DEFAULT_STRICTNESS;
8889
private String fixFile;
8990
private String recordIdentifier;
90-
private String entityMemberName = "%d";
91+
private String entityMemberName = DEFAULT_ENTITY_MEMBER_NAME;
9192
private boolean repeatedFieldsToEntities;
9293
private boolean strictnessHandlesProcessExceptions;
9394
private int entityCount;

metafix/src/main/java/org/metafacture/metafix/MetafixListPaths.java

Lines changed: 6 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,15 @@
1616

1717
package org.metafacture.metafix;
1818

19-
import org.metafacture.formatting.ObjectTemplate;
2019
import org.metafacture.framework.FluxCommand;
21-
import org.metafacture.framework.ObjectReceiver;
22-
import org.metafacture.framework.Sender;
2320
import org.metafacture.framework.StreamReceiver;
2421
import org.metafacture.framework.annotations.Description;
2522
import org.metafacture.framework.annotations.In;
2623
import org.metafacture.framework.annotations.Out;
27-
import org.metafacture.framework.helpers.DefaultStreamPipe;
28-
import org.metafacture.mangling.DuplicateObjectFilter;
29-
import org.metafacture.mangling.StreamFlattener;
3024
import org.metafacture.triples.AbstractTripleSort.Compare;
31-
import org.metafacture.triples.AbstractTripleSort.Order;
32-
import org.metafacture.triples.StreamToTriples;
33-
import org.metafacture.triples.TripleCount;
34-
import org.metafacture.triples.TripleSort;
35-
36-
import java.io.FileNotFoundException;
3725

3826
/**
39-
* Provide a user-friendly way to list all paths available for processing in fix.
27+
* Provide a user-friendly way to list all paths available for processing in fix (see also {@link MetafixListValues}).
4028
*
4129
* @author Fabian Steeg
4230
*/
@@ -46,107 +34,18 @@
4634
@In(StreamReceiver.class)
4735
@Out(String.class)
4836
@FluxCommand("fix-list-paths")
49-
public class MetafixListPaths extends DefaultStreamPipe<ObjectReceiver<String>> {
50-
51-
private Metafix fix;
52-
private boolean count = true;
53-
private boolean index;
37+
public class MetafixListPaths extends MetafixStreamAnalyzer {
5438

5539
public MetafixListPaths() {
56-
try {
57-
fix = new Metafix("nothing()");
58-
fix.setRepeatedFieldsToEntities(true);
59-
}
60-
catch (final FileNotFoundException e) {
61-
e.printStackTrace();
62-
}
63-
}
64-
65-
@Override
66-
protected void onSetReceiver() {
67-
fix.setEntityMemberName(index ? "%d" : "*");
68-
final StreamToTriples triples = fix
69-
.setReceiver(new StreamFlattener())
70-
.setReceiver(new StreamToTriples());
71-
(count ? counted(triples) : unique(triples))
72-
.setReceiver(getReceiver());
73-
}
74-
75-
private Sender<ObjectReceiver<String>> counted(final StreamToTriples triples) {
76-
return triples
77-
.setReceiver(tripleCount())
78-
.setReceiver(tripleSort())
79-
.setReceiver(new ObjectTemplate<>("${s}\t ${o}"));
80-
}
81-
82-
private Sender<ObjectReceiver<String>> unique(final StreamToTriples triples) {
83-
return triples
84-
.setReceiver(new ObjectTemplate<>("${p}"))
85-
.setReceiver(new DuplicateObjectFilter<>());
86-
}
87-
88-
private TripleCount tripleCount() {
89-
final TripleCount tripleCount = new TripleCount();
90-
tripleCount.setCountBy(Compare.PREDICATE);
91-
return tripleCount;
92-
}
93-
94-
private TripleSort tripleSort() {
95-
final TripleSort tripleSort = new TripleSort();
96-
tripleSort.setNumeric(true);
97-
tripleSort.setBy(Compare.OBJECT);
98-
tripleSort.setOrder(Order.DECREASING);
99-
return tripleSort;
100-
}
101-
102-
@Override
103-
public void startRecord(final String identifier) {
104-
fix.startRecord(identifier);
105-
}
106-
107-
@Override
108-
public void endRecord() {
109-
fix.endRecord();
110-
}
111-
112-
@Override
113-
public void startEntity(final String name) {
114-
fix.startEntity(name);
115-
}
116-
117-
@Override
118-
public void endEntity() {
119-
fix.endEntity();
120-
}
121-
122-
@Override
123-
public void literal(final String name, final String value) {
124-
fix.literal(name, value);
125-
}
126-
127-
@Override
128-
protected void onCloseStream() {
129-
fix.closeStream();
130-
}
131-
132-
@Override
133-
protected void onResetStream() {
134-
fix.resetStream();
135-
}
136-
137-
public void setCount(final boolean count) {
138-
this.count = count;
139-
}
140-
141-
public boolean getCount() {
142-
return this.count;
40+
super("nothing()", Compare.PREDICATE, "${s}\t ${o}", "${p}");
41+
setIndex(false);
14342
}
14443

14544
public void setIndex(final boolean index) {
146-
this.index = index;
45+
super.getFix().setEntityMemberName(index ? Metafix.DEFAULT_ENTITY_MEMBER_NAME : "*");
14746
}
14847

14948
public boolean getIndex() {
150-
return this.index;
49+
return super.getFix().getEntityMemberName().equals(Metafix.DEFAULT_ENTITY_MEMBER_NAME);
15150
}
15251
}

metafix/src/main/java/org/metafacture/metafix/MetafixListValues.java

Lines changed: 2 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,12 @@
1616

1717
package org.metafacture.metafix;
1818

19-
import org.metafacture.formatting.ObjectTemplate;
2019
import org.metafacture.framework.FluxCommand;
21-
import org.metafacture.framework.ObjectReceiver;
22-
import org.metafacture.framework.Sender;
2320
import org.metafacture.framework.StreamReceiver;
2421
import org.metafacture.framework.annotations.Description;
2522
import org.metafacture.framework.annotations.In;
2623
import org.metafacture.framework.annotations.Out;
27-
import org.metafacture.framework.helpers.DefaultStreamPipe;
28-
import org.metafacture.mangling.DuplicateObjectFilter;
2924
import org.metafacture.triples.AbstractTripleSort.Compare;
30-
import org.metafacture.triples.AbstractTripleSort.Order;
31-
import org.metafacture.triples.StreamToTriples;
32-
import org.metafacture.triples.TripleCount;
33-
import org.metafacture.triples.TripleSort;
34-
35-
import java.io.FileNotFoundException;
3625

3726
/**
3827
* Provide a user-friendly way to list all values for a given path (see {@link MetafixListPaths}).
@@ -44,105 +33,10 @@
4433
@In(StreamReceiver.class)
4534
@Out(String.class)
4635
@FluxCommand("fix-list-values")
47-
public class MetafixListValues extends DefaultStreamPipe<ObjectReceiver<String>> {
48-
49-
private String path;
50-
private Metafix fix;
51-
private boolean count = true;
36+
public class MetafixListValues extends MetafixStreamAnalyzer {
5237

5338
public MetafixListValues(final String path) {
54-
this.path = path;
55-
try {
56-
fix = new Metafix("retain(\"" + path + "\")");
57-
}
58-
catch (final FileNotFoundException e) {
59-
e.printStackTrace();
60-
}
39+
super("retain(\"" + path + "\")", Compare.OBJECT, "${o}\t ${s}", "${o}");
6140
}
6241

63-
@Override
64-
protected void onSetReceiver() {
65-
final StreamToTriples triples = fix
66-
.setReceiver(new StreamToTriples());
67-
(count ? counted(triples) : unique(triples))
68-
.setReceiver(getReceiver());
69-
}
70-
71-
private Sender<ObjectReceiver<String>> counted(final StreamToTriples triples) {
72-
return triples
73-
.setReceiver(tripleCount())
74-
.setReceiver(tripleSort())
75-
.setReceiver(new ObjectTemplate<>("${o}\t ${s}"));
76-
}
77-
78-
private Sender<ObjectReceiver<String>> unique(final StreamToTriples triples) {
79-
return triples
80-
.setReceiver(new ObjectTemplate<>("${o}"))
81-
.setReceiver(new DuplicateObjectFilter<>());
82-
}
83-
84-
private TripleCount tripleCount() {
85-
final TripleCount tripleCount = new TripleCount();
86-
tripleCount.setCountBy(Compare.OBJECT);
87-
return tripleCount;
88-
}
89-
90-
private TripleSort tripleSort() {
91-
final TripleSort tripleSort = new TripleSort();
92-
tripleSort.setNumeric(true);
93-
tripleSort.setBy(Compare.OBJECT);
94-
tripleSort.setOrder(Order.DECREASING);
95-
return tripleSort;
96-
}
97-
98-
@Override
99-
public void startRecord(final String identifier) {
100-
fix.startRecord(identifier);
101-
}
102-
103-
@Override
104-
public void endRecord() {
105-
fix.endRecord();
106-
}
107-
108-
@Override
109-
public void startEntity(final String name) {
110-
fix.startEntity(name);
111-
}
112-
113-
@Override
114-
public void endEntity() {
115-
fix.endEntity();
116-
}
117-
118-
@Override
119-
public void literal(final String name, final String value) {
120-
fix.literal(name, value);
121-
}
122-
123-
@Override
124-
protected void onCloseStream() {
125-
fix.closeStream();
126-
}
127-
128-
@Override
129-
protected void onResetStream() {
130-
fix.resetStream();
131-
}
132-
133-
public void setCount(final boolean count) {
134-
this.count = count;
135-
}
136-
137-
public boolean getCount() {
138-
return this.count;
139-
}
140-
141-
public void setPath(final String path) {
142-
this.path = path;
143-
}
144-
145-
public String getPath() {
146-
return this.path;
147-
}
14842
}

0 commit comments

Comments
 (0)