/* * Scute * * Homepage: http://hyperdata.org/scute * * License : http://www.apache.org/licenses/LICENSE-2.0 * See also license.txt or http://hyperdata.org/wiki/Scute:License * * Danny Ayers 2011 */ package org.hyperdata.scute.tree; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Vector; import javax.swing.ImageIcon; import javax.swing.tree.TreeNode; import org.hyperdata.resources.tree.TreeIcons; import org.hyperdata.scute.rdf.RdfUtils; import org.hyperdata.scute.system.Log; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; /** * The Class ModelNode. */ public class ModelNode extends ResourceNode implements RdfTreeNode { /** The children. */ private List<TreeNode> children; /** The model. */ private final Model model; /** The node map. */ private RdfNodeMap nodeMap; /** The resource. */ private Resource resource; /** * Instantiates a new model node. * * @param nodeMap * the node map * @param model * the model * @param parentStatement * the parent statement * @param resource * the resource */ public ModelNode(RdfNodeMap nodeMap, Model model, Statement parentStatement, Resource resource) { super(nodeMap, parentStatement, resource); // @TODO this.resource = resource; this.nodeMap = nodeMap; this.model = model; // String filename = RdfUtils_.getFirstPropertyValue(resource, // FILESYSTEM.local).toString(); // setTreeModel(treeModel); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#children() * */ @Override @SuppressWarnings("unchecked") // javax.swing.tree.TreeNode is old-fashioned public Enumeration<?> children() { // Can make Iterator<type>? what type? return (new Vector(getChildren())).elements(); // Can make Array<type>? what type? } /* (non-Javadoc) * @see org.hyperdata.scute.tree.ResourceNode#delete() */ @Override public void delete() { /* * String filename = RdfUtils .getFirstPropertyValue(resource, * FILESYSTEM.local) .toString(); Model childModel = * RdfUtils.load(filename); * * getNodeMap().removeResource(resource); if (getParentStatement() != * null) { getNodeMap().removeStatement(getParentStatement()); * removeStatement(getParentStatement()); } */ } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getAllowsChildren() */ @Override public boolean getAllowsChildren() { return true; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getChildAt(int) */ @Override public TreeNode getChildAt(int childIndex) { // System.out.println("\nres.getChildAt " + childIndex); // System.out.println("MODEL.getChildAt = " + // (TreeNode)getChildren().get(childIndex)); return getChildren().get(childIndex); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getChildCount() */ @Override public int getChildCount() { return getChildren().size(); } /* (non-Javadoc) * @see org.hyperdata.scute.tree.ResourceNode#getChildren() */ @Override public List<TreeNode> getChildren() { if ((children == null) || isDirty()) { children = new ArrayList<TreeNode>(); try { final StmtIterator iterator = model.listStatements(); Statement statement; // RdfUtils_.show(model); while (iterator.hasNext()) { // System.out.println("*"); statement = iterator.next(); // if(resource.equals(statement.getSubject())) { // System.out.println("\n+"); // System.out.println( // "ST = " + nodeMap.getTreeNode(statement)); // @@ changed for Jena 2, was (RDFNode)statement children.add(nodeMap.getTreeNode(statement)); // } } } catch (final Exception exception) { Log.exception(exception); } } return children; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.ResourceNode#getIcon() */ @Override public ImageIcon getIcon() { return TreeIcons.modelIcon; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getIndex(TreeNode) */ @Override public int getIndex(TreeNode node) { return getChildren().indexOf(node); } /** * Returns the nodeMap. * * @return NodeMap */ @Override public RdfNodeMap getNodeMap() { return nodeMap; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.ResourceNode#getNodeType() */ @Override public int getNodeType() { return RdfTreeNode.MODEL; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getParent() */ @Override public TreeNode getParent() { return nodeMap.getTreeNode(RdfUtils.getParent(getModel(), resource)); } /** * Returns the resource. * * @return Resource */ @Override public Resource getResource() { return resource; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#isLeaf() */ @Override public boolean isLeaf() { // return getChildren().size() > 0; return getChildren().size() == 0; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.ResourceNode#rename(java.lang.String) */ @Override public void rename(String newName) { } /** * Sets the nodeMap. * * @param nodeMap * The nodeMap to set */ public void setNodeMap(RdfNodeMap nodeMap) { this.nodeMap = nodeMap; } /** * Sets the resource. * * @param resource * The resource to set */ @Override public void setResource(Resource resource) { this.resource = resource; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.ResourceNode#toString() */ @Override public String toString() { return resource.getLocalName(); } }