package com.github.jknack.antlr4ide.parser.antlr; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.nio.channels.FileChannel; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.log4j.Logger; import org.eclipse.xtext.generator.parser.antlr.ex.common.AbstractAntlrGeneratorFragmentEx; public abstract class BaseAntlrGeneratorFragmentEx extends AbstractAntlrGeneratorFragmentEx { private Logger log = Logger.getLogger(getClass()); protected void copy(final File source, final File dest) { FileChannel sourceChannel = null; FileChannel destChannel = null; try { log.info("copying: " + source.getCanonicalPath() + " to " + dest); sourceChannel = new FileInputStream(source).getChannel(); destChannel = new FileOutputStream(dest).getChannel(); destChannel.transferFrom(sourceChannel, 0, sourceChannel.size()); } catch (IOException ex) { throw new IllegalStateException("Can't copy: " + source, ex); } finally { try { sourceChannel.close(); destChannel.close(); } catch (IOException ex) { throw new IllegalStateException("Can't close: " + source, ex); } } } protected void writeFile(final String fileName, final String data) { try { log.info("using: " + new File(fileName).getCanonicalPath()); PrintWriter writer = new PrintWriter(new File(fileName)); writer.write(data); writer.close(); } catch (IOException ex) { throw new IllegalStateException("Can't write file: " + fileName, ex); } } protected String readFile(final String fileName) { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream( "InternalAntlr4Lexer.g"))); StringBuilder sb = new StringBuilder(); String line = br.readLine(); while (line != null) { sb.append(line); sb.append("\n"); line = br.readLine(); } br.close(); return process(sb.toString()); } catch (IOException ex) { throw new IllegalStateException("Can't read file: " + fileName, ex); } } private String process(final String content) { String result = content; Set<Entry<String, Object>> vars = vars().entrySet(); for (Entry<String, Object> var : vars) { result = result.replace("{{" + var.getKey() + "}}", var.getValue().toString()); } return result; } protected abstract Map<String, Object> vars(); }