public RackProperties(File file) throws Exception {
		super();
		
		try {
	    	  Field fld;
	    	  String val;
	    	  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	  DocumentBuilder db = dbf.newDocumentBuilder();
	    	  Document doc = db.parse(file);

	    	  doc.getDocumentElement().normalize();
	    	  NodeList properties = doc.getElementsByTagName("properties");
	    	  if (properties == null) return;
	    	  properties = properties.item(0).getChildNodes();
	    	  //Loop through all the children of "properties" and use reflection to set the property values.
	    	  for (int i = 0; i < properties.getLength(); i++){
	    		  if (properties.item(i).getNodeType() == Node.ELEMENT_NODE) {
	    			  try {
		    			  fld = this.getClass().getDeclaredField(properties.item(i).getNodeName());
		    			  val = properties.item(i).getFirstChild().getNodeValue();
		    			  //Only integers, doubles and strings are allowed thus far. 
		    			  //Easy to add more, just copy the int.class code here to double.class, etc.
		    			  if (fld.getType().equals(int.class)){
		    				  fld.set(this, Integer.valueOf(val));
		    			  } else if (fld.getType().equals(double.class)){
		    				  fld.set(this, Double.valueOf(val));
		    			  } else {
		    				  fld.set(this, val);
		    			  }
	    			  } catch (NoSuchFieldException e1){
	    				  //Do not attempt to deal with unknown properties.
	    			  }
	    		  }  
	    	  }	    				  
	    } catch (Exception e) {
	    	throw e;
	    	/*
	  		String msg = "Rack Planner has a problem with the rack xml file: " + file + "\n" +
				"\n" +
				e.getMessage();
	  			JOptionPane.showMessageDialog(parent, msg, "Rack XML Problem", JOptionPane.ERROR_MESSAGE);
	  			System.exit(0);
	  		*/
	    }	
	}