public SortedSet<Cube> read() throws CubeXmlFileNotExistsException, IOException,
            DocumentException {
        Configuration conf = CubeConfiguration.getConfiguration();
        FileSystem hdfs = FileSystem.get(conf);
        Path cubeXmlFile = new Path(PathConf.getCubeXmlFilePath());
        if (!hdfs.exists(cubeXmlFile)) {
            throw new CubeXmlFileNotExistsException();
        }
        FSDataInputStream in = hdfs.open(cubeXmlFile);
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);
        List<?> list = document.selectNodes("//cubes/cube");
        Node node;
        String identifier;
        String dataType;
        String schemaName;
        SortedSet<Cube> cubes = new TreeSet<Cube>();
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); ) {
            node = (Node) iter.next();
            identifier = node.selectSingleNode("identifier").getText();
            dataType = node.selectSingleNode("dataType").getText();
            schemaName = node.selectSingleNode("schemaName").getText();
            cubes.add(new Cube(identifier, dataType, schemaName));
        }
        return cubes;
    }