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

de.uni.freiburg.iig.telematik.jagal.ts.serialize.TSSerialization Maven / Gradle / Ivy

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

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

import de.invation.code.toval.validate.ParameterException;
import de.invation.code.toval.validate.ParameterException.ErrorCode;
import de.invation.code.toval.validate.Validate;
import de.uni.freiburg.iig.telematik.jagal.ts.abstr.AbstractState;
import de.uni.freiburg.iig.telematik.jagal.ts.abstr.AbstractTransitionRelation;
import de.uni.freiburg.iig.telematik.jagal.ts.abstr.AbstractTransitionSystem;
import de.uni.freiburg.iig.telematik.jagal.ts.labeled.abstr.AbstractLabeledTransitionSystem;
import de.uni.freiburg.iig.telematik.jagal.ts.serialize.formats.TSSerializationFormat;
import de.uni.freiburg.iig.telematik.jagal.ts.serialize.serializer.LTSSerializer_Petrify;

public class TSSerialization {
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static , 
	   			   T extends AbstractTransitionRelation,
	   			   O extends Object>

	TSSerializer 

	getSerializer(AbstractTransitionSystem ts, TSSerializationFormat format) throws ParameterException, SerializationException{
		
		switch(format){
		case PETRIFY:
			if(ts instanceof AbstractLabeledTransitionSystem)
				return new LTSSerializer_Petrify((AbstractLabeledTransitionSystem) ts);
			throw new SerializationException(SerializationException.ErrorCode.UNSUPPORTED_NET_TYPE, ts.getClass());
		default:
			throw new SerializationException(SerializationException.ErrorCode.UNSUPPORTED_FORMAT, format);
		}
	}
	
	public static , 
	   			   T extends AbstractTransitionRelation,
	   			   O extends Object>

	String

	serialize(AbstractTransitionSystem ts, TSSerializationFormat format) 
			throws SerializationException, ParameterException{

		Validate.notNull(ts);
		Validate.notNull(format);
		
		StringBuilder builder = new StringBuilder();
		builder.append(format.getFileFormat().getFileHeader());
		builder.append(getSerializer(ts, format).serialize());
		builder.append(format.getFileFormat().getFileFooter());
		
		return builder.toString();
	}
	
	public static , 
	   			   T extends AbstractTransitionRelation,
	   			   O extends Object>
	
	void 
	
	serialize(AbstractTransitionSystem ts, TSSerializationFormat format, String fileName, String path) 
			throws SerializationException, ParameterException, IOException{
		
		Validate.notNull(ts);
		Validate.notNull(format);
		Validate.notNull(path);
		Validate.notNull(fileName);
		
		//Check if path and file name are valid
		File cPath = new File(path);
		if(!cPath.exists())
			cPath.mkdirs();
		if(!cPath.isDirectory())
			throw new IOException(path + " is not a valid path!");
		if(fileName.isEmpty())
			throw new ParameterException(ErrorCode.EMPTY);
		
		TSSerializer serializer = getSerializer(ts, format);
		File file = new File(String.format("%s%s.%s", path, fileName, format.getFileFormat().getFileExtension()));
		FileWriter output;
		if(file.exists()) 
			file.delete();
		file.createNewFile();
		output = new FileWriter(file, true);
		output.write(format.getFileFormat().getFileHeader());
		output.write(serializer.serialize());
		output.write(format.getFileFormat().getFileFooter());
		output.close();
	}
	
}