All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.unibz.inf.ontop.protege.gui.treemodels.QueryControllerTreeModel Maven / Gradle / Ivy

There is a newer version: 5.2.1.1
Show newest version
package it.unibz.inf.ontop.protege.gui.treemodels;

/*
 * #%L
 * ontop-protege4
 * %%
 * Copyright (C) 2009 - 2013 KRDB Research Centre. Free University of Bozen Bolzano.
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import it.unibz.inf.ontop.querymanager.QueryControllerEntity;
import it.unibz.inf.ontop.querymanager.QueryControllerGroup;
import it.unibz.inf.ontop.querymanager.QueryControllerListener;
import it.unibz.inf.ontop.querymanager.QueryControllerQuery;

import java.util.Enumeration;
import java.util.List;
import java.util.Vector;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;

public class QueryControllerTreeModel extends DefaultTreeModel implements QueryControllerListener {

	private static final long serialVersionUID = -5182895959682699380L;

	public QueryControllerTreeModel() {
		super(new DefaultMutableTreeNode(""));
	}

	/**
	 * Takes all the existing nodes and constructs the tree.
	 */
	public void synchronize(List queryEntities) {
	  if (queryEntities.size() > 0) {
			for (QueryControllerEntity queryEntity : queryEntities) {
				if (queryEntity instanceof QueryControllerGroup) {
					QueryControllerGroup group = (QueryControllerGroup) queryEntity;
					QueryGroupTreeElement queryGroupEle = new QueryGroupTreeElement(group.getID());
					Vector queries = group.getQueries();
					for (QueryControllerQuery query : queries) {
						QueryTreeElement queryTreeEle = new QueryTreeElement(query.getID(), query.getQuery());
						insertNodeInto(queryTreeEle, queryGroupEle, queryGroupEle.getChildCount());
					}
					insertNodeInto(queryGroupEle, (DefaultMutableTreeNode) root, root.getChildCount());
				} else {
					QueryControllerQuery query = (QueryControllerQuery) queryEntity;
					QueryTreeElement queryTreeEle = new QueryTreeElement(query.getID(), query.getQuery());
					insertNodeInto(queryTreeEle, (DefaultMutableTreeNode) root, root.getChildCount());
				}
			}
		}
	}

	/**
	 * Remove all the nodes from the Tree
	 */
	public void reset() {
		Enumeration children = root.children();
		while (children.hasMoreElements()) {
			removeNodeFromParent((MutableTreeNode) children.nextElement());
			children = root.children();
		}
	}

	/**
	 * Inserts a new node group or query into the Tree
	 */
	public void elementAdded(QueryControllerEntity element) {
		if (element instanceof QueryControllerGroup) {
			QueryControllerGroup group = (QueryControllerGroup) element;
			QueryGroupTreeElement ele = new QueryGroupTreeElement(group.getID());
			insertNodeInto(ele, (DefaultMutableTreeNode) root, root.getChildCount());
			nodeStructureChanged(root);
		} else if (element instanceof QueryControllerQuery) {
			QueryControllerQuery query = (QueryControllerQuery) element;
			QueryTreeElement ele = new QueryTreeElement(query.getID(), query.getQuery());
			insertNodeInto(ele, (DefaultMutableTreeNode) root, root.getChildCount());
			nodeStructureChanged(root);
		}
	}

	/**
	 * Removes a TreeNode group or query from the Tree
	 */
	public void elementRemoved(QueryControllerEntity element) {
		if (element instanceof QueryControllerGroup) {
			QueryControllerGroup group = (QueryControllerGroup) element;
			QueryGroupTreeElement ele = new QueryGroupTreeElement(group.getID());
			Enumeration groups = root.children();
			while (groups.hasMoreElements()) {
				Object temporal = groups.nextElement();
				if (!(temporal instanceof QueryGroupTreeElement)) {
					continue;
				}
				QueryGroupTreeElement groupTElement = (QueryGroupTreeElement) temporal;
				if (groupTElement.getID().equals(ele.getID())) {
					removeNodeFromParent(groupTElement);
					nodeStructureChanged(root);
					break;
				}
			}
		} else if (element instanceof QueryControllerQuery) {
			QueryControllerQuery query = (QueryControllerQuery) element;
			QueryTreeElement elementQuery = new QueryTreeElement(query.getID(), query.getQuery());
			Enumeration elements = root.children();
			while (elements.hasMoreElements()) {
				TreeNode currentElement = elements.nextElement();
				if (currentElement instanceof QueryGroupTreeElement) {
					continue;
				}
				if (currentElement instanceof QueryTreeElement) {
					QueryTreeElement deleteQuery = (QueryTreeElement) currentElement;
					if (deleteQuery.getID().equals(elementQuery.getID())) {
						removeNodeFromParent(deleteQuery);
						nodeStructureChanged(root);
						break;
					}
				}
			}
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	/*
	 * * Inserts a new TreeNode query in a group into the tree
	 */
	public void elementAdded(QueryControllerQuery query, QueryControllerGroup group) {
		QueryGroupTreeElement groupTElement = null;
		QueryTreeElement elemQ = new QueryTreeElement(query.getID(), query.getQuery());
		Enumeration groups = root.children();
		while (groups.hasMoreElements()) {
			Object temporal = groups.nextElement();
			if (!(temporal instanceof QueryGroupTreeElement)) {
				continue;
			}
			groupTElement = (QueryGroupTreeElement) temporal;
			if (groupTElement.getID().equals(group.getID())) {
				insertNodeInto(elemQ, groupTElement, groupTElement.getChildCount());
				nodeStructureChanged(root);
				break;
			}
		}
	}

	@Override
	/*
	 * * Removes a TreeNode query from a group into the tree
	 */
	public void elementRemoved(QueryControllerQuery query, QueryControllerGroup group) {
		QueryGroupTreeElement ele = new QueryGroupTreeElement(group.getID());
		QueryTreeElement elemQ = new QueryTreeElement(query.getID(), query.getQuery());

		Enumeration groups = root.children();
		while (groups.hasMoreElements()) {
			TreeNode node = groups.nextElement();
			if (node instanceof QueryGroupTreeElement) {
			QueryGroupTreeElement groupTElement = (QueryGroupTreeElement) node;
				if (groupTElement.getID().equals(ele.getID())) {
					Enumeration queries = groupTElement.children();
					while (queries.hasMoreElements()) {
						QueryTreeElement queryTElement = (QueryTreeElement) queries.nextElement();
						if (queryTElement.getID().equals(elemQ.getID())) {
							removeNodeFromParent(queryTElement);
							nodeStructureChanged(root);
							break;
						}
					}
				}
			}
		}
	}

	@Override
	public void elementChanged(QueryControllerQuery query) {
		QueryTreeElement node = getTreeNode(root, query);
		node.setQuery(query.getQuery());
		nodeChanged(node);
	}

	@Override
	public void elementChanged(QueryControllerQuery query,
			QueryControllerGroup group) {
		QueryTreeElement node = getTreeNode(root, group, query);
		node.setQuery(query.getQuery());
		nodeChanged(node);
	}

	private QueryTreeElement getTreeNode(TreeNode root, QueryControllerQuery query) {
		Enumeration parent = root.children();
		while (parent.hasMoreElements()) {
			TreeNode node = parent.nextElement();
			if (node instanceof QueryTreeElement) {
				QueryTreeElement queryNode = (QueryTreeElement) node;
				if (queryNode.getID().equals(query.getID())) {
					return queryNode;
				}
			}
		}
		return null;
	}

	private QueryTreeElement getTreeNode(TreeNode root, QueryControllerGroup group, QueryControllerQuery query) {
		Enumeration parent = root.children();
		while (parent.hasMoreElements()) {
			TreeNode node = parent.nextElement();
			if (node instanceof QueryGroupTreeElement) {
				QueryGroupTreeElement groupNode = (QueryGroupTreeElement) node;
				if (groupNode.getID().equals(group.getID())) {
					return getTreeNode(groupNode, query);
				}
			}
		}
		return null;
	}

	/**
	 * Search a TreeElement node group or query and returns the object else
	 * returns null.
	 */
	public TreeElement getNode(String element) {
		TreeElement node = null;
		Enumeration elements = root.children();
		while (elements.hasMoreElements()) {
			TreeElement currentNode = (TreeElement) elements.nextElement();
			if (currentNode instanceof QueryGroupTreeElement) {
				QueryGroupTreeElement groupTElement = (QueryGroupTreeElement) currentNode;
				if (groupTElement.getID().equals(element)) {
					node = groupTElement;
					break;
				}
			}
			if (currentNode instanceof QueryTreeElement) {
				QueryTreeElement queryTreeElement = (QueryTreeElement) currentNode;
				if (queryTreeElement.getID().equals(element)) {
					node = queryTreeElement;
					break;
				}
			}
		}
		return node;
	}

	/**
	 * Search a query node in a group and returns the object else returns null.
	 */
	public QueryTreeElement getElementQuery(String element, String group) {
		QueryTreeElement node = null;
		Enumeration elements = root.children();
		while (elements.hasMoreElements()) {
			TreeElement currentNode = (TreeElement) elements.nextElement();
			if (currentNode instanceof QueryGroupTreeElement && currentNode.getID().equals(group)) {
				QueryGroupTreeElement groupTElement = (QueryGroupTreeElement) currentNode;
				Enumeration queries = groupTElement.children();
				while (queries.hasMoreElements()) {
					QueryTreeElement queryTElement = (QueryTreeElement) queries.nextElement();
					if (queryTElement.getID().equals(element)) {
						node = queryTElement;
						break;
					}
				}
			} else {
				continue;
			}
		}
		return node;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy