All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.uni.freiburg.iig.telematik.jagal.ts.parser.TSParser Maven / Gradle / Ivy

package de.uni.freiburg.iig.telematik.jagal.ts.parser;

import java.io.File;
import java.io.IOException;

import de.invation.code.toval.parser.ParserException;
import de.invation.code.toval.parser.ParserException.ErrorCode;
import de.invation.code.toval.validate.ParameterException;
import de.invation.code.toval.validate.Validate;
import de.uni.freiburg.iig.telematik.jagal.ts.labeled.abstr.AbstractEvent;
import de.uni.freiburg.iig.telematik.jagal.ts.labeled.abstr.AbstractLTSState;
import de.uni.freiburg.iig.telematik.jagal.ts.labeled.abstr.AbstractLabeledTransitionRelation;
import de.uni.freiburg.iig.telematik.jagal.ts.labeled.abstr.AbstractLabeledTransitionSystem;
import de.uni.freiburg.iig.telematik.jagal.ts.parser.petrify.PetrifyTSParser;

public class TSParser {
	

	public static synchronized , 
	 							T extends AbstractLabeledTransitionRelation,
	 							O>
	
								AbstractLabeledTransitionSystem
	
	parse(File file) throws IOException, ParserException{
		validateFile(file);
		TSParsingFormat format = guessFormat(file);
		if(format == null)
			throw new ParserException(ErrorCode.UNKNOWN_FILE_EXTENSION);
		TSParserInterface parser = getParser(file, format);
		return parser.parse(file);
	}
	
	public static synchronized , 
	 							T extends AbstractLabeledTransitionRelation,
	 							O>
	
								AbstractLabeledTransitionSystem
	
	parse(String fileName) throws IOException, ParserException, ParameterException {
		Validate.notNull(fileName);
		return TSParser.parse(prepareFile(fileName));
	}
	
	public static synchronized , 
								T extends AbstractLabeledTransitionRelation,
								O>
	
								AbstractLabeledTransitionSystem
	
	parse(File file, TSParsingFormat format) throws IOException, ParserException, ParameterException {
		validateFile(file);
		Validate.notNull(format);
		TSParserInterface parser = getParser(file, format);
		return parser.parse(file);
	}
	
	public static synchronized , 
	 							T extends AbstractLabeledTransitionRelation,
	 							O>
	
								AbstractLabeledTransitionSystem
	
	parse(String fileName, TSParsingFormat format) throws IOException, ParserException, ParameterException {
		Validate.notNull(fileName);
		return TSParser.parse(prepareFile(fileName), format);
	}
	
	private static File prepareFile(String fileName) throws IOException{
		File file = new File(fileName);
		validateFile(file);
		return file;
	}
	
	private static void validateFile(File file) throws IOException{
		if(!file.exists())
			throw new IOException("I/O Error on opening file: File does not exist!");
		if(file.isDirectory())
			throw new IOException("I/O Error on opening file: File is a directory!");
		if(!file.canRead())
			throw new IOException("I/O Error on opening file: Unable to read file!");
	}

	public static synchronized TSParserInterface getParser(File file, TSParsingFormat format) throws ParserException {
		switch(format){
		case PETRIFY: return new PetrifyTSParser();
		}
		throw new ParserException(ErrorCode.UNSUPPORTED_FORMAT);
	}
	
	public static TSParsingFormat guessFormat(File file){
		for(TSParsingFormat format: TSParsingFormat.values()){
			if(file.getName().endsWith(format.getFileFormat().getFileExtension())){
				return format;
			}
		}
		return null;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy