/*
*
* Copyright 2012 lexergen.
* This file is part of lexergen.
*
* lexergen is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* lexergen is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with lexergen. If not, see <http://www.gnu.org/licenses/>.
*
* lexergen:
* A tool to chunk source code into tokens for further processing in a compiler chain.
*
* Projectgroup: bi, bii
*
* Authors: Maximilian Schröder, Daniel Rotar, Johannes Dahlke
*
* Module: Softwareprojekt Übersetzerbau 2012
*
* Created: Apr. 2012
* Version: 1.0
*
*/
package de.fuberlin.bii.dfaprovider;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import de.fuberlin.bii.regextodfaconverter.MinimalDfa;
import de.fuberlin.bii.tokenmatcher.StatePayload;
/**
* Stellt einen Wrapper für die Parameter<Character, StatePayload> dar, der vom
* {@link MinimalDfaProvider} serialisiert bzw. deserialisert wird. Dabei sind
* im Wrapper alle benötigten Informationen für die Rückgabe des minimalen DFA
* enthalten.
*
* @author Maximilian Schröder
*
*/
public class MinimalDfaCharacterStatePayloadWrapper implements Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 6790273782667033324L;
/**
* Version des Lexers (mit dem der minimale DFA assoziiert ist)
*/
private String _version;
/**
* Hahswert der regulären Definitionsdatei, mit dem der minimale DFA erzeugt
* wurde
*/
private String _rdFileHash;
/**
* minimaler DFA, der serialisiert bzw. deserialisiert werden kann
*/
private MinimalDfa<Character, StatePayload> _mDfa;
/**
* Erzeugt einen Wrapper, der den minimalen DFA sowie die dazugehörigen
* Statusinformationen enthält.
*
* @param version
* Version des Lexers, mit dem der minimale DFA assoziiert ist.
* @param rdFileHash
* Hahswert der regulären Definitionsdatei, mit dem der minimale
* DFA erzeugt wurde.
* @param mDfa
* minimaler DFA, der serialisiert bzw. deserialisiert werden
* kann.
*/
public MinimalDfaCharacterStatePayloadWrapper(String version,
String rdFileHash, MinimalDfa<Character, StatePayload> mDfa) {
setVersion(version);
setRdFileHash(rdFileHash);
setMDfa(mDfa);
}
/**
* Gibt die Version des Lexers (mit dem der minimale DFA assoziiert ist)
* zurück.
*
* @return Version des Lexers.
*/
public String getVersion() {
return _version;
}
/**
* Setzt Version des Lexers (mit dem der minimale DFA assoziiert ist) neu.
*
* @param version
* Neue Version des Lexers.
*/
public void setVersion(String version) {
_version = version;
}
/**
* Gibt den Hahswert der regulären Definitionsdatei, mit dem der minimale
* DFA erzeugt wurde, zurück.
*
* @return: Hashwert der regulären Definitionsdatei.
*/
public String getRdFileHash() {
return _rdFileHash;
}
/**
* Setzt den Hahswert der regulären Definitionsdatei, mit dem der minimale
* DFA erzeugt wurde, neu.
*
* @param rdFileHash
* Neuer Hashwert der regulären Definitionsdatei.
*/
public void setRdFileHash(String rdFileHash) {
_rdFileHash = rdFileHash;
}
/**
* Gibt den minimalen DFA, der serialisiert bzw. deserialisiert werden kann,
* zurück.
*
* @return Aktueller minimaler DFA.
*/
public MinimalDfa<Character, StatePayload> getMDfa() {
return _mDfa;
}
/**
* Setzt den minimalen DFA, der serialisiert bzw. deserialisiert werden
* kann, neu.
*
* @param mDfa
* Neuer minimaler DFA.
*/
public void setMDfa(MinimalDfa<Character, StatePayload> mDfa) {
_mDfa = mDfa;
}
/**
* Deserialisiert einen serialisierten
* {@link MinimalDfaCharacterStatePayloadWrapper} auf Basis der übergebenen
* Datei.
*
* @param file
* Pfad (inkl. Datei) von dem deserialisiert werden soll.
* @return deserialisierter Wrapper, der die nötigen Informationen für
* {@link MinimalDfaProvider} enthält.
* @throws IOException
* Leseprobleme bzgl. der Input-Datei
* @throws MinimalDfaCharacterStatePayloadWrapperException
* Fehlerhafte Input-Datei - keine DFA enthalten
*/
public static MinimalDfaCharacterStatePayloadWrapper load(File file)
throws IOException, MinimalDfaCharacterStatePayloadWrapperException {
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
try {
return ((MinimalDfaCharacterStatePayloadWrapper) ois.readObject());
} catch (ClassNotFoundException e) {
throw new MinimalDfaCharacterStatePayloadWrapperException(
"Die angegebene Datei '" + file.getAbsolutePath()
+ "' enthält keinen gültigen minimalen DFA!");
}
}
/**
* Serialisiert die aktuelle Instanz des
* {@link MinimalDfaCharacterStatePayloadWrapper} und speichert sie in eine
* Datei.
*
* @param file
* Pfad (inkl. Datei) in dem serialisiert werden soll.
* @throws IOException
* Speicherproblem bzgl. der Ausgabe-Datei
*/
public void save(File file) throws IOException {
FileOutputStream fos = new FileOutputStream(file.getAbsolutePath());
ObjectOutputStream oOS = new ObjectOutputStream(fos);
oOS.writeObject(this);
oOS.close();
}
}