public static RunData loadFromFile(File file) throws XMLParsingExeption, ParserConfigurationException, SAXException, IOException
	{
	    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	    factory.setIgnoringElementContentWhitespace(true);

	    DocumentBuilder builder = factory.newDocumentBuilder();
	    Document doc = builder.parse(file);
	        
	    // Get all circles
	    NodeList circles = doc.getElementsByTagName(CustomNode.Circle.getTagName());
	        
	    List<Circle> loadedCircles = new ArrayList<Circle>();
	    
	    for(int i = 0; i < circles.getLength(); i++)
	    {
	    	Element circleElement = (Element) circles.item(i);
	    	
	    	NodeList idNL = circleElement.getElementsByTagName(CustomNode.Id.getTagName());
	    	NodeList heightNL = circleElement.getElementsByTagName(CustomNode.Height.getTagName());
	        	
	    	if(idNL.getLength() != 1 || heightNL.getLength() != 1)
	    		throw new CustomExceptions.XMLParsingExeption("Invalid id or height value for for circle " + (i+1));
	        	
	    	int id = Integer.valueOf(idNL.item(0).getFirstChild().getNodeValue());
	    	double height = Double.valueOf(heightNL.item(0).getFirstChild().getNodeValue());
	        int y = (int) Utils.convert(height * MainWindow._scaleFactor, Utils.UNIT.MM, Utils.UNIT.CM);
	    	loadedCircles.add(new Circle(y, id));
	    }
	    
	    System.out.println("Loaded data from file " + file.getAbsolutePath() + " (" + loadedCircles.size() + " circles)");
	    
	    return new RunData(loadedCircles.toArray(new Circle[0]));
	}