// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/DataItem.java
// public class DataItem extends URIEntity {
// 	private static final long serialVersionUID = 1L;
// 	
// 	public static int DATATYPE = 1;
// 	public static int DATA = 2;
// 
// 	int type;
// 
// 	public DataItem(String id, int type) {
// 		super(id);
// 		this.type = type;
// 	}
// 
// 	public int getType() {
// 		return type;
// 	}
// 
// 	public void setType(int type) {
// 		this.type = type;
// 	}
// }
// 
// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/DataTree.java
// public class DataTree {
// 	DataTreeNode root;
// 
// 	public DataTree(DataTreeNode root) {
// 		this.root = root;
// 	}
// 
// 	public DataTreeNode getRoot() {
// 		return root;
// 	}
// 
// 	public void setRoot(DataTreeNode root) {
// 		this.root = root;
// 	}
// 
// 	public ArrayList<DataTreeNode> flatten() {
// 		ArrayList<DataTreeNode> list = new ArrayList<DataTreeNode>();
// 		ArrayList<DataTreeNode> queue = new ArrayList<DataTreeNode>();
// 		queue.add(root);
// 		while (!queue.isEmpty()) {
// 			DataTreeNode node = queue.remove(0);
// 			list.add(node);
// 			queue.addAll(node.getChildren());
// 		}
// 		return list;
// 	}
// 
// 	public DataTreeNode findNode(String nodeid) {
// 		ArrayList<DataTreeNode> queue = new ArrayList<DataTreeNode>();
// 		queue.add(root);
// 		while (!queue.isEmpty()) {
// 			DataTreeNode node = queue.remove(0);
// 			if (node.getItem().getID().equals(nodeid))
// 				return node;
// 			queue.addAll(node.getChildren());
// 		}
// 		return null;
// 	}
// }
// 
// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/MetadataProperty.java
// public class MetadataProperty extends URIEntity {
// 	private static final long serialVersionUID = 1L;
// 
// 	int type;
// 	ArrayList<String> domains;
// 	String range;
// 
// 	public static int DATATYPE = 1;
// 	public static int OBJECT = 2;
// 
// 	public MetadataProperty(String id, int type) {
// 		super(id);
// 		this.type = type;
// 		this.domains = new ArrayList<String>();
// 	}
// 
// 	public void setType(int type) {
// 		this.type = type;
// 	}
// 
// 	public int getType() {
// 		return this.type;
// 	}
// 
// 	public boolean isDatatypeProperty() {
// 		if (this.type == DATATYPE)
// 			return true;
// 		return false;
// 	}
// 
// 	public boolean isObjectProperty() {
// 		if (this.type == OBJECT)
// 			return true;
// 		return false;
// 	}
// 
// 	public ArrayList<String> getDomains() {
// 		return this.domains;
// 	}
// 
// 	public String getRange() {
// 		return this.range;
// 	}
// 
// 	public void addDomain(String id) {
// 		this.domains.add(id);
// 	}
// 
// 	public void setRange(String id) {
// 		this.range = id;
// 	}
// 
// 	public String toString() {
// 		String str = "";
// 		str += "\n" + getName() + "(" + type + ")\nDomains:" + domains + "\nRange:" + range + "\n";
// 		return str;
// 	}
// }
// 
// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/MetadataValue.java
// public class MetadataValue {
// 	public final static int OBJECT = 1;
// 	public final static int DATATYPE = 2;
// 
// 	String propertyId;
// 	Object value;
// 	int type;
// 
// 	public MetadataValue(String propertyId, Object value, int type) {
// 		this.propertyId = propertyId;
// 		this.value = value;
// 		this.type = type;
// 	}
// 
// 	public String getPropertyId() {
// 		return propertyId;
// 	}
// 
// 	public void setPropertyId(String propertyId) {
// 		this.propertyId = propertyId;
// 	}
// 
// 	public Object getValue() {
// 		return value;
// 	}
// 
// 	public void setValue(Object value) {
// 		this.value = value;
// 	}
// 
// 	public int getType() {
// 		return type;
// 	}
// 
// 	public void setType(int type) {
// 		this.type = type;
// 	}
// }


import java.util.ArrayList;
import org.earthcube.geosoft.data.classes.DataItem;
import org.earthcube.geosoft.data.classes.DataTree;
import org.earthcube.geosoft.data.classes.MetadataProperty;
import org.earthcube.geosoft.data.classes.MetadataValue;
package org.earthcube.geosoft.data.api;



/**
 * The interface used by data catalog viewers to query the data. Read/Only
 * access
 */
public interface DataAPI {
	// Query
	DataTree getDataHierarchy(); // Tree List of Data and Datatypes
	
	DataTree getDatatypeHierarchy(); // Tree List of Datatypes

	DataTree getMetricsHierarchy(); // Tree List of Metrics and Metric
											// types

	ArrayList<String> getAllDatatypeIds();

// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/DataItem.java
// public class DataItem extends URIEntity {
// 	private static final long serialVersionUID = 1L;
// 	
// 	public static int DATATYPE = 1;
// 	public static int DATA = 2;
// 
// 	int type;
// 
// 	public DataItem(String id, int type) {
// 		super(id);
// 		this.type = type;
// 	}
// 
// 	public int getType() {
// 		return type;
// 	}
// 
// 	public void setType(int type) {
// 		this.type = type;
// 	}
// }
// 
// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/DataTree.java
// public class DataTree {
// 	DataTreeNode root;
// 
// 	public DataTree(DataTreeNode root) {
// 		this.root = root;
// 	}
// 
// 	public DataTreeNode getRoot() {
// 		return root;
// 	}
// 
// 	public void setRoot(DataTreeNode root) {
// 		this.root = root;
// 	}
// 
// 	public ArrayList<DataTreeNode> flatten() {
// 		ArrayList<DataTreeNode> list = new ArrayList<DataTreeNode>();
// 		ArrayList<DataTreeNode> queue = new ArrayList<DataTreeNode>();
// 		queue.add(root);
// 		while (!queue.isEmpty()) {
// 			DataTreeNode node = queue.remove(0);
// 			list.add(node);
// 			queue.addAll(node.getChildren());
// 		}
// 		return list;
// 	}
// 
// 	public DataTreeNode findNode(String nodeid) {
// 		ArrayList<DataTreeNode> queue = new ArrayList<DataTreeNode>();
// 		queue.add(root);
// 		while (!queue.isEmpty()) {
// 			DataTreeNode node = queue.remove(0);
// 			if (node.getItem().getID().equals(nodeid))
// 				return node;
// 			queue.addAll(node.getChildren());
// 		}
// 		return null;
// 	}
// }
// 
// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/MetadataProperty.java
// public class MetadataProperty extends URIEntity {
// 	private static final long serialVersionUID = 1L;
// 
// 	int type;
// 	ArrayList<String> domains;
// 	String range;
// 
// 	public static int DATATYPE = 1;
// 	public static int OBJECT = 2;
// 
// 	public MetadataProperty(String id, int type) {
// 		super(id);
// 		this.type = type;
// 		this.domains = new ArrayList<String>();
// 	}
// 
// 	public void setType(int type) {
// 		this.type = type;
// 	}
// 
// 	public int getType() {
// 		return this.type;
// 	}
// 
// 	public boolean isDatatypeProperty() {
// 		if (this.type == DATATYPE)
// 			return true;
// 		return false;
// 	}
// 
// 	public boolean isObjectProperty() {
// 		if (this.type == OBJECT)
// 			return true;
// 		return false;
// 	}
// 
// 	public ArrayList<String> getDomains() {
// 		return this.domains;
// 	}
// 
// 	public String getRange() {
// 		return this.range;
// 	}
// 
// 	public void addDomain(String id) {
// 		this.domains.add(id);
// 	}
// 
// 	public void setRange(String id) {
// 		this.range = id;
// 	}
// 
// 	public String toString() {
// 		String str = "";
// 		str += "\n" + getName() + "(" + type + ")\nDomains:" + domains + "\nRange:" + range + "\n";
// 		return str;
// 	}
// }
// 
// Path: reasoner/src/main/java/org/earthcube/geosoft/data/classes/MetadataValue.java
// public class MetadataValue {
// 	public final static int OBJECT = 1;
// 	public final static int DATATYPE = 2;
// 
// 	String propertyId;
// 	Object value;
// 	int type;
// 
// 	public MetadataValue(String propertyId, Object value, int type) {
// 		this.propertyId = propertyId;
// 		this.value = value;
// 		this.type = type;
// 	}
// 
// 	public String getPropertyId() {
// 		return propertyId;
// 	}
// 
// 	public void setPropertyId(String propertyId) {
// 		this.propertyId = propertyId;
// 	}
// 
// 	public Object getValue() {
// 		return value;
// 	}
// 
// 	public void setValue(Object value) {
// 		this.value = value;
// 	}
// 
// 	public int getType() {
// 		return type;
// 	}
// 
// 	public void setType(int type) {
// 		this.type = type;
// 	}
// }


// Path: reasoner/src/main/java/org/earthcube/geosoft/data/api/DataAPI.java
import java.util.ArrayList;
import org.earthcube.geosoft.data.classes.DataItem;
import org.earthcube.geosoft.data.classes.DataTree;
import org.earthcube.geosoft.data.classes.MetadataProperty;
import org.earthcube.geosoft.data.classes.MetadataValue;

package org.earthcube.geosoft.data.api;



/**
 * The interface used by data catalog viewers to query the data. Read/Only
 * access
 */
public interface DataAPI {
	// Query
	DataTree getDataHierarchy(); // Tree List of Data and Datatypes
	
	DataTree getDatatypeHierarchy(); // Tree List of Datatypes

	DataTree getMetricsHierarchy(); // Tree List of Metrics and Metric
											// types

	ArrayList<String> getAllDatatypeIds();

	MetadataProperty getMetadataProperty(String propid);