/* * 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.RDFNode; 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 ResourceNode. */ public class ResourceNode extends AbstractRdfTreeNode implements RdfTreeNode { /** The children. */ private List<TreeNode> children; /** The resource. */ private Resource resource; /** * Instantiates a new resource node. * * @param nodeMap * the node map * @param parentStatement * the parent statement * @param resource * the resource */ public ResourceNode(RdfNodeMap nodeMap, Statement parentStatement, Resource resource) { super(nodeMap, parentStatement); this.resource = resource; // setTreeModel(treeModel); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#children() */ @Override @SuppressWarnings("unchecked") // javax.swing.tree.TreeNode is old-fashioned public Enumeration<?> children() { return (new Vector(getChildren())).elements(); } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#delete() */ @Override public void delete() { 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(".getChildAt = " + // (TreeNode)getChildren().get(childIndex)); return getChildren().get(childIndex); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getChildCount() */ @Override public int getChildCount() { return getChildren().size(); } /** * Gets the children. * * @return the children */ public List<TreeNode> getChildren() { if ((children == null) || isDirty()) { children = new ArrayList<TreeNode>(); try { // System.out.println("GRET class= "+ getClass()); // System.out.println("GRET MODEL = "+ getModel()); final StmtIterator iterator = getModel().listStatements(); Statement statement; while (iterator.hasNext()) { // System.out.println("*"); statement = iterator.next(); if (resource.equals(statement.getSubject())) { // System.out.println("\n+"); // System.out.println( // "ST = " + getNodeMap().getTreeNode(statement)); // (RDFNode)statement children.add(getNodeMap().getTreeNode(statement)); } } } catch (final Exception exception) { Log.exception(exception); } } return children; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getIcon() */ @Override public ImageIcon getIcon() { return TreeIcons.resourceIcon; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getIndex(TreeNode) */ @Override public int getIndex(TreeNode node) { return getChildren().indexOf(node); } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getNodeType() */ @Override public int getNodeType() { return RdfTreeNode.RESOURCE; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#getParent() */ @Override public TreeNode getParent() { return getNodeMap().getTreeNode( RdfUtils.getParent(getModel(), resource)); } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getRdfNode() */ @Override public RDFNode getRdfNode() { return resource; } /* * Returns the resource. * * @return Resource */ /** * Gets the resource. * * @return the resource */ public Resource getResource() { return resource; } /** * Checks if is anon. * * @return true, if is anon */ public boolean isAnon() { return ((Resource) getRdfNode()).isAnon(); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeNode#isLeaf() */ @Override public boolean isLeaf() { return getChildren().size() == 0; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#rename(java.lang.String) */ @Override public void rename(String newName) { } /* (non-Javadoc) * @see org.hyperdata.scute.tree.AbstractRdfTreeNode#setRdfValue(java.lang.String) */ @Override public void setRdfValue(String value) { if (isAnon()) return; try { final Resource newResource = getModel().createResource(value); RdfUtils.replaceResource(getModel(), resource, newResource); } catch (final Exception exception) { Log.exception(exception); } } /** * Sets the resource. * * @param resource * The resource to set */ public void setResource(Resource resource) { this.resource = resource; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return resource.getLocalName(); } }