content: /*
   * Copyright (C) 2010-2014 Mathias Unberath
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  package edu.stanford.rsl.conrad.phantom.asmheart;
  
  import java.io.BufferedReader;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.io.UnsupportedEncodingException;
  import java.util.StringTokenizer;
  
  import edu.stanford.rsl.apps.activeshapemodel.BuildCONRADCardiacModel.heartComponents;
  
  public class CONRADCardiacModelConfig {
  
  	/**
  	 * Directory-name for input or output operation.
  	 */
  	private String dir;
  	/**
  	 * Default configuration file name.
  	 */
  	private static final String CONFIG_FILE_NAME = "cnfg.ccc";
  	
  	public int numPhases;
  	public int[] principalComp;
  	public int numAnatComp;
  	public int totalVertex;
  	public int vertexDim;
  	public int[] vertexOffs;
  	public int totalTriangles;
  	public int[] triangleOffs;
  	
  	//==========================================================================================
  	// METHODS
  	//==========================================================================================
  
  	/**
  	 * Constructs the object and sets the directory for I/O operations.
  	 * @param directory The directory.
  	 */
  	public CONRADCardiacModelConfig(String directory){
  		this.dir = directory;
  	}
  	
  	/**
  	 * Writes the configuration to the config file specified in CONFIG_FILE_NAME
  	 * @param numPhases
  	 * @param principalComp
  	 * @param numComponents
  	 * @param numVertices
  	 * @param vertexDim
  	 * @param vertices
  	 * @param numTriangles
  	 * @param triangles
  	 */
  	public void write(int numPhases, int[] principalComp, int numComponents, int numVertices,int vertexDim, int[] vertices, int numTriangles, int[] triangles){
  		try {
  			PrintWriter writer = new PrintWriter(dir + "\\" + CONFIG_FILE_NAME,"UTF-8");
  			writer.println("ANATOMICAL_COMPONENTS: " + numComponents);
  			String componentS = "COMPONENT_ORDER:";
  			for(heartComponents hc : heartComponents.values()){
  				componentS += " " + hc.getName();
  			}
  			writer.println(componentS);
  			writer.println("CARDIAC_PHASES: " + numPhases);
  			String phasepc = "NUMBER_PRINCIPAL_COMPONENTS_EACH_PHASE:";
  			for(int i = 0; i < numPhases; i++){
  				phasepc += " " + Integer.valueOf(principalComp[i]);
  			}
  			writer.println(phasepc);
  			writer.println("TOTAL_VERTEX_COUNT: " + numVertices);
  			writer.println("VERTEX_DIMENSION: " + vertexDim);
  			String vert = "VERTEX_COMPONENT_OFFSETS:";
  			for(int i = 0; i < numComponents; i++){
  				vert += " " + Integer.valueOf(vertices[i]);
  			}
  			writer.println(vert);
  			writer.println("TOTAL_TRIANGLE_COUNT: " + numTriangles);
  			String tri = "TRIANGLE_COMPONENT_OFFSETS:";
  			for(int i = 0; i < numComponents; i++){
  				tri += " " + Integer.valueOf(triangles[i]);
  			}
  			writer.println(tri);
  			writer.close();			
  		} catch (FileNotFoundException e) {
  			e.printStackTrace();
  		} catch (UnsupportedEncodingException e) {
  			e.printStackTrace();
  		}
  	}
  	
  	public void read(){
  		try {
  			FileReader fr = new FileReader(dir + "\\" + CONFIG_FILE_NAME);
  			BufferedReader br = new BufferedReader(fr);
  			
  			String line = br.readLine();
  			StringTokenizer tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "ANATOMICAL_COMPONENTS:"
  			numAnatComp = Integer.parseInt(tok.nextToken());
  			line = br.readLine(); // skip "COMPONENT_ORDER"
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "PHASES:"
  			numPhases = Integer.parseInt(tok.nextToken());
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "NUMBER_PRINCIPAL_COMPONENTS_EACH_PHASE:"
  			this.principalComp = new int[numPhases];
  			for(int i = 0; i < numPhases; i++){
  				principalComp[i] = Integer.parseInt(tok.nextToken());
  			}
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "TOTAL_VERTEX_COUNT:"
  			this.totalVertex = Integer.parseInt(tok.nextToken());
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "VERTEX_DIM:"
  			this.vertexDim = Integer.parseInt(tok.nextToken());
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "VERTEX_COMPONENT_OFFS:"
  			this.vertexOffs = new int[numAnatComp];
  			for(int k = 0; k < numAnatComp; k++){
  				vertexOffs[k] = Integer.parseInt(tok.nextToken());
  			}
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "TOTAL_TRIANGLE_COUNT:"
  			this.totalTriangles = Integer.parseInt(tok.nextToken());
  			line = br.readLine();
  			tok = new StringTokenizer(line);
  			tok.nextToken(); // skip "TRIANGLE_COMPONENT_OFFS:"
  			this.triangleOffs = new int[numAnatComp];
  			for(int k = 0; k < numAnatComp; k++){
  				triangleOffs[k] = Integer.parseInt(tok.nextToken());
  			}		
  			
  			br.close();
  			fr.close();
  			
  		} catch (FileNotFoundException e) {
  			e.printStackTrace();
  		} catch (IOException e) {
  			e.printStackTrace();
  		}
  	}
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
  