package org.eclipse.nebula.widgets.nattable.core.example.index

import org.eclipse.nebula.widgets.nattable.core.example.index.node.CategoryNode
import org.eclipse.nebula.widgets.nattable.core.example.index.node.IndexNode

/**
 * The examples index. The index is generated by {@link GenerateNatExamplesIndex} and stored as a properties file.
 * The properties file has the following format:
 * <ul>
 *   <li>exampleName=fully.qualified.example.class.name|Display name</li>
 * </ul>
 */
class NatExamplesIndex {
	
	public static val INDEX_FILE_NAME = "index.properties"
	public static val BASE_PACKAGE = "org.eclipse.nebula.widgets.nattable.core.example.impl"
	public static val BASE_PACKAGE_PATH = "/" + BASE_PACKAGE.replace('.', '/')
	
	static IndexNode rootNode
	
	def static getRootNode() {
		if (rootNode == null)
			rootNode = new CategoryNode(BASE_PACKAGE_PATH, "")
		rootNode
	}
	
	/**
	 * @param nodePath A '/'-separated path string.
	 *   Each segment prior to the last segment corresponds to a category node.
	 *   The last segment of the path corresponds to a category or an example.
	 * @return The index node associated with the given node path.
	 */
	def static IndexNode getNode(String nodePath) {
		if (nodePath == null)
			getRootNode
		else
			nodePath.split('/').fold(getRootNode, [ node, pathSegment | node.getChildNode(pathSegment) ])
	}
	
}