public void loadFromFile(String filePath) throws Exception {
		if (filePath == null || filePath.equals("")) {
			throw new NullPointerException("File path is null.");
		}
				
		DocumentBuilderFactory docFactory = DocumentBuilderFactory
				.newInstance();
		DocumentBuilder dBuilder = docFactory.newDocumentBuilder();
		FileInputStream stream = new FileInputStream(new File(filePath));
		Document doc = dBuilder.parse(stream);
		
		Element docEle = doc.getDocumentElement();
		
		NodeList nl = docEle.getElementsByTagName(Constants.GlyphsNodeName);
		
		Element glyphs = (Element) nl.item(0);
		
		nl = glyphs.getChildNodes();
		
		this.children.clear();
		
		for (int i = 0 ; i < nl.getLength(); i++){
			
			Node nNode = nl.item(i);
			if (nNode.getNodeType() == Node.ELEMENT_NODE) {
				Element eElement = (Element) nNode;
				if (eElement.getNodeName() == Constants.CharNodeName) {
					NodeList nlList = eElement.getElementsByTagName(Constants.ContentString).item(0).getChildNodes();
					Node nValue = (Node) nlList.item(0);
					char content = nValue.getNodeValue().charAt(0);						
					Node fontNode = eElement.getElementsByTagName(Constants.FontNodeName).item(0);
					Element fontElemtn = (Element) fontNode;
					String fontName = fontElemtn.getAttribute(Constants.FontNameAttributeName);
					int style = Integer.parseInt(fontElemtn.getAttribute(Constants.FontStyleAttributeName));
					int size = Integer.parseInt(fontElemtn.getAttribute(Constants.FontSizeAttributeName));
					Font font = new Font(fontName, style, size);
					Char ch = new Char(content, font);						
					this.children.add(ch);
				}
				else if (eElement.getNodeName() == Constants.PictureNodeName) {
					Picture pic = new Picture(eElement.getAttribute(Constants.FilePathAttributeName));
					this.children.add(pic);
				}
			}
		}
		
		stream.close();
		this.modelChanged();
	}