// Path: src/ym2151/Utils.java
// public class Utils {
// 	
// 	/**
// 	 * Get the extension of a file.
// 	 */  
// 	public static String getExtension(File f) {
// 	    String ext = null;
// 	    String s = f.getName();
// 	    int i = s.lastIndexOf('.');
// 
// 	    if (i > 0 &&  i < s.length() - 1) {
// 	        ext = s.substring(i+1).toLowerCase();
// 	    }
// 	    if(ext == null) {
// 	    	return "";
// 	    }
// 	    return ext;
// 	}
// 	
// 	/**
// 	 * Adds all Elements from an Array to a DefaultListModel
// 	 * @param m the Model to add the Entries to
// 	 * @param o the Entries to add
// 	 * */
// 	public static <B> void addAll(DefaultListModel<B> m, B[] o){
// 		for(int i = 0 ; i < o.length; i++){
// 			m.addElement(o[i]);
// 		}		
// 	}
// 	
// 	/**
// 	 * Adds all Elements from a List to a DefaultListModel
// 	 * @param m the Model to add the Entries to
// 	 * @param o the Entries to add
// 	 * */
// 	public static <B> void addAll(DefaultListModel<B> m, List<B> o){
// 		for(int i = 0 ; i < o.size(); i++){
// 			m.addElement(o.get(i));
// 		}	
// 	}
// 	
// 	/**
// 	 * Removes all entries of the List from a DefaultListModel
// 	 * @param m the Model to remove the Entries from
// 	 * @param o the Entries to remove
// 	 * */
// 	public static <B> void removeAll(DefaultListModel<B> m, List<B> o){
// 		for(int i = 0 ; i < o.size(); i++){
// 			m.removeElement(o.get(i));
// 		}		
// 	}
// 	
// 	/**
// 	 * Fills a centered circle
// 	 * @param g the Graphics Context to draw to
// 	 * @param x the x-coordinate 
// 	 * @param y the y-coordinate
// 	 * @param r the Radius
// 	 * */
// 	public static void fillCenteredCircle(Graphics2D g, int x, int y, int r) {
// 		  x = x-(r/2);
// 		  y = y-(r/2);
// 		  g.fillOval(x,y,r,r);
// 	}
// 
// 	/**
// 	 * Draws a centered circle
// 	 * @param g the Graphics Context to draw to
// 	 * @param x the x-coordinate 
// 	 * @param y the y-coordinate
// 	 * @param r the Radius
// 	 * */
// 	public static void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
// 		  x = x-(r/2);
// 		  y = y-(r/2);
// 		  g.drawOval(x,y,r,r);
// 	}
// 	
// 	
// 	/**
// 	 * creates a DefaultListModel from an Array
// 	 * */
// 	public static<T>  DefaultListModel<T> getListModel(T[] data){
// 		DefaultListModel<T> lm = new DefaultListModel<T>();
// 		for(T t : data){
// 			lm.addElement(t);
// 		}
// 		return lm;
// 	}	
// }


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import javax.swing.JOptionPane;
import ym2151.Utils;
					String name = instrHead.substring(instrHead.indexOf(' '));
					var = Integer.parseInt(instrHead.substring(0, instrHead.indexOf(' ')));

					ins = new Instrument(name);	
					opm.addInstrument(ins,var);
					
				}else if(!line.equals("")){ //everything else (parts of a Instrument)
					if(ins == null) {
						r.close();
						throw new IOException("Could not Parse File");						
					}
					if(!ins.parseLine(line)){
						r.close();
						throw new IOException("Could not Parse File");
					};
				}	
					
			}	
		r.close();
		return opm;
	}
	
	/**
	 * Saves a OPMFile
	 * @param file the File to save
	 * @param path the path to save the file to.
	 * */
	public static void saveFile(OPMFile file, File path) throws IOException {
		
		//add right extension (if not existent)
// Path: src/ym2151/Utils.java
// public class Utils {
// 	
// 	/**
// 	 * Get the extension of a file.
// 	 */  
// 	public static String getExtension(File f) {
// 	    String ext = null;
// 	    String s = f.getName();
// 	    int i = s.lastIndexOf('.');
// 
// 	    if (i > 0 &&  i < s.length() - 1) {
// 	        ext = s.substring(i+1).toLowerCase();
// 	    }
// 	    if(ext == null) {
// 	    	return "";
// 	    }
// 	    return ext;
// 	}
// 	
// 	/**
// 	 * Adds all Elements from an Array to a DefaultListModel
// 	 * @param m the Model to add the Entries to
// 	 * @param o the Entries to add
// 	 * */
// 	public static <B> void addAll(DefaultListModel<B> m, B[] o){
// 		for(int i = 0 ; i < o.length; i++){
// 			m.addElement(o[i]);
// 		}		
// 	}
// 	
// 	/**
// 	 * Adds all Elements from a List to a DefaultListModel
// 	 * @param m the Model to add the Entries to
// 	 * @param o the Entries to add
// 	 * */
// 	public static <B> void addAll(DefaultListModel<B> m, List<B> o){
// 		for(int i = 0 ; i < o.size(); i++){
// 			m.addElement(o.get(i));
// 		}	
// 	}
// 	
// 	/**
// 	 * Removes all entries of the List from a DefaultListModel
// 	 * @param m the Model to remove the Entries from
// 	 * @param o the Entries to remove
// 	 * */
// 	public static <B> void removeAll(DefaultListModel<B> m, List<B> o){
// 		for(int i = 0 ; i < o.size(); i++){
// 			m.removeElement(o.get(i));
// 		}		
// 	}
// 	
// 	/**
// 	 * Fills a centered circle
// 	 * @param g the Graphics Context to draw to
// 	 * @param x the x-coordinate 
// 	 * @param y the y-coordinate
// 	 * @param r the Radius
// 	 * */
// 	public static void fillCenteredCircle(Graphics2D g, int x, int y, int r) {
// 		  x = x-(r/2);
// 		  y = y-(r/2);
// 		  g.fillOval(x,y,r,r);
// 	}
// 
// 	/**
// 	 * Draws a centered circle
// 	 * @param g the Graphics Context to draw to
// 	 * @param x the x-coordinate 
// 	 * @param y the y-coordinate
// 	 * @param r the Radius
// 	 * */
// 	public static void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
// 		  x = x-(r/2);
// 		  y = y-(r/2);
// 		  g.drawOval(x,y,r,r);
// 	}
// 	
// 	
// 	/**
// 	 * creates a DefaultListModel from an Array
// 	 * */
// 	public static<T>  DefaultListModel<T> getListModel(T[] data){
// 		DefaultListModel<T> lm = new DefaultListModel<T>();
// 		for(T t : data){
// 			lm.addElement(t);
// 		}
// 		return lm;
// 	}	
// }


// Path: src/ym2151/DataModel/OPMFile.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import javax.swing.JOptionPane;
import ym2151.Utils;

					String name = instrHead.substring(instrHead.indexOf(' '));
					var = Integer.parseInt(instrHead.substring(0, instrHead.indexOf(' ')));

					ins = new Instrument(name);	
					opm.addInstrument(ins,var);
					
				}else if(!line.equals("")){ //everything else (parts of a Instrument)
					if(ins == null) {
						r.close();
						throw new IOException("Could not Parse File");						
					}
					if(!ins.parseLine(line)){
						r.close();
						throw new IOException("Could not Parse File");
					};
				}	
					
			}	
		r.close();
		return opm;
	}
	
	/**
	 * Saves a OPMFile
	 * @param file the File to save
	 * @param path the path to save the file to.
	 * */
	public static void saveFile(OPMFile file, File path) throws IOException {
		
		//add right extension (if not existent)
		if(!Utils.getExtension(path).equalsIgnoreCase("opm")){