package vroom.common.modeling.io; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import vroom.common.modeling.dataModel.IVRPInstance; /** * <code>FlatFilePersistenceHelper</code> is an implementation of {@link IPersistenceHelper} that manages plain text * files. * <p> * Creation date: Jan 27, 2011 - 2:56:19 PM * * @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a * href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a * href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a> * @version 1.0 */ public abstract class FlatFilePersistenceHelper implements IPersistenceHelper<java.io.File> { private boolean mWorking = false; @Override public IVRPInstance readInstance(File input, Object... params) throws IOException { if (mWorking) { throw new IllegalStateException("The parser is already being used"); } else { mWorking = true; } BufferedReader reader = new BufferedReader(new FileReader(input)); IVRPInstance instance = initializeInstance(input, reader, params); int lineNumber = 0; String line = reader.readLine(); while (line != null) { if (line.startsWith(" ")) line = line.replaceFirst(" +", ""); parseLine(instance, line, lineNumber, params); line = reader.readLine(); lineNumber++; } mWorking = false; finalizeInstance(instance, params); reader.close(); return instance; } /** * Method called to finalize the instance * * @param instance * @param params */ protected abstract void finalizeInstance(IVRPInstance instance, Object... params); /** * Method called when a new line has been read * * @param instance * @param line * @param lineNumber * @param params */ protected abstract void parseLine(IVRPInstance instance, String line, int lineNumber, Object... params); /** * Method call to initialize the instance object * * @param input * @param reader * @param params * @return * @throws IOException */ protected abstract IVRPInstance initializeInstance(File input, BufferedReader reader, Object... params) throws IOException; @Override public boolean writeInstance(IVRPInstance instance, File output, Object params) throws IOException { throw new UnsupportedOperationException(); } /* * (non-Javadoc) * * @see vroom.common.modeling.io.IPersistenceHelper#reset() */ @Override public void reset() { mWorking = false; } }