public ConstructDocument(String filename) 
		throws FileNotFoundException
	{
		if(filename == null) {
			throw new IllegalArgumentException("filename cannot be null");
		}
		
		mConstructEditorStore = new ConstructEditorStore();
		
		// Ensure we can access & read the file
		File file = new File(filename);
		if(!file.exists() || !file.canRead()) { 
			throw new FileNotFoundException();
		}
		
		// Attempt to load the file from disk into constructs
		FileInputStream fis = new FileInputStream(filename);
		mRootConstruct = loadConstruct(fis);
		if(mRootConstruct == null) { 
			throw new NullPointerException("No construct returned for Document::loadConstruct()");
		}
		
		mRootConstruct.AddToUndoBuffer();
		
		// Create editors from the root document
		ConstructEditor editorFromRoot = editorsFromConstruct(mRootConstruct);
		if(editorFromRoot == null) { 
			throw new NullPointerException("No editor returned for construct root");
		}
		
		setRootComponent(editorFromRoot.get_component());
	}