blob: 09ce41816f480a0369190479ed63d390b0a21ff2 [file] [log] [blame]
package org.eclipse.emf.emfatic.core;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Map;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
import org.eclipse.emf.emfatic.core.generator.ecore.Builder;
import org.eclipse.emf.emfatic.core.generator.ecore.Connector;
import org.eclipse.emf.emfatic.core.generator.emfatic.Writer;
import org.eclipse.emf.emfatic.core.lang.gen.parser.EmfaticParserDriver;
import org.eclipse.gymnast.runtime.core.parser.ParseContext;
public class EmfaticResource extends ResourceImpl {
public EmfaticResource(URI uri) {
super(uri);
}
@Override
protected void doLoad(InputStream inputStream, Map<?, ?> options) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
EmfaticParserDriver parser = new EmfaticParserDriver(uri);
ParseContext parseContext = parser.parse(reader);
Builder builder = new Builder();
NullProgressMonitor monitor = new NullProgressMonitor();
builder.build(parseContext, this, monitor);
if (!parseContext.hasErrors()) {
Connector connector = new Connector(builder);
connector.connect(parseContext, this, monitor);
}
}
@Override
protected void doSave(OutputStream outputStream, Map<?, ?> options) throws IOException {
Writer writer = new Writer();
String emfaticText = writer.write(this, new NullProgressMonitor(), null);
outputStream.write(emfaticText.getBytes());
outputStream.flush();
outputStream.close();
}
}