Skip to content

Commit f328a13

Browse files
committed
Re-approach record-based Metafix implementation (#35)
Starting from a record map, not the event-based morph classes Following Catmandu Fix cheat sheet at https://github.com/LibreCat/Catmandu/wiki/Fixes-Cheat-Sheet
1 parent 112d7c7 commit f328a13

File tree

19 files changed

+1492
-2585
lines changed

19 files changed

+1492
-2585
lines changed

org.metafacture.fix.web/src/main/java/org/metafacture/fix/web/FixServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.metafacture.fix.web;
22

3-
import org.metafacture.metamorph.Metafix;
3+
import org.metafacture.fix.FixStandaloneSetup;
44
import org.metafacture.runner.Flux;
55

66
import org.antlr.runtime.RecognitionException;
@@ -106,7 +106,7 @@ private boolean process(final HttpServletRequest request, final HttpServletRespo
106106
}
107107

108108
private String absPathToTempFile(final String content, final String suffix) throws IOException {
109-
return Metafix.absPathToTempFile(new StringReader(content), suffix);
109+
return FixStandaloneSetup.absPathToTempFile(new StringReader(content), suffix);
110110
}
111111

112112
}

org.metafacture.fix/src/main/java/org/metafacture/fix/FixStandaloneSetup.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
package org.metafacture.fix;
22

3+
import org.metafacture.fix.fix.Fix;
4+
5+
import org.eclipse.emf.common.util.URI;
6+
import org.eclipse.emf.ecore.resource.Resource;
7+
import org.eclipse.xtext.resource.XtextResource;
8+
import org.eclipse.xtext.resource.XtextResourceSet;
9+
import org.eclipse.xtext.util.CancelIndicator;
10+
import org.eclipse.xtext.validation.CheckMode;
11+
import org.eclipse.xtext.validation.IResourceValidator;
12+
import org.eclipse.xtext.validation.Issue;
13+
import com.google.common.io.CharStreams;
14+
import com.google.inject.Injector;
15+
16+
import java.io.File;
17+
import java.io.FileWriter;
18+
import java.io.IOException;
19+
import java.io.Reader;
20+
321
/**
422
* Initialization support for running Xtext languages without Equinox extension registry.
523
*/
@@ -12,4 +30,38 @@ public static void doSetup() {
1230
new FixStandaloneSetup().createInjectorAndDoEMFRegistration();
1331
}
1432

33+
public static Fix parseFix(final Reader fixDef) {
34+
// TODO: do this only once per application
35+
final Injector injector = new FixStandaloneSetup().createInjectorAndDoEMFRegistration();
36+
FixStandaloneSetup.doSetup();
37+
38+
try {
39+
final URI uri = URI.createFileURI(absPathToTempFile(fixDef, ".fix"));
40+
final Resource resource = injector.getInstance(XtextResourceSet.class).getResource(uri, true);
41+
final IResourceValidator validator = ((XtextResource) resource).getResourceServiceProvider().getResourceValidator();
42+
43+
for (final Issue issue : validator.validate(resource, CheckMode.ALL, CancelIndicator.NullImpl)) {
44+
System.err.println(issue.getMessage());
45+
}
46+
47+
return (Fix) resource.getContents().get(0);
48+
}
49+
catch (final IOException e) {
50+
e.printStackTrace();
51+
return null;
52+
}
53+
}
54+
55+
public static String absPathToTempFile(final Reader fixDef, final String suffix) throws IOException {
56+
// TODO: avoid temp file creation
57+
final File file = File.createTempFile("metafix", suffix);
58+
file.deleteOnExit();
59+
60+
try (FileWriter out = new FileWriter(file)) {
61+
CharStreams.copy(fixDef, out);
62+
}
63+
64+
return file.getAbsolutePath();
65+
}
66+
1567
}

0 commit comments

Comments
 (0)