/* * 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.io.IOException; import javax.swing.JOptionPane; 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; // extends DefaultMutableTreeNode /** * The Class AbstractRdfTreeNode. */ public abstract class AbstractRdfTreeNode implements RdfTreeNode { /** The dirty. */ private boolean dirty = true; /** The model. */ private Model model; /** The model filename. */ private String modelFilename; /** The node map. */ private final RdfNodeMap nodeMap; /** The parent statement. */ private Statement parentStatement; /** * Instantiates a new abstract rdf tree node. * * @param nodeMap * the node map * @param parentStatement * the parent statement */ public AbstractRdfTreeNode(RdfNodeMap nodeMap, Statement parentStatement) { this.nodeMap = nodeMap; this.parentStatement = parentStatement; model = nodeMap.getCurrentModel(); modelFilename = nodeMap.getCurrentModelFilename(); } /** * Delete dialog. * * @return true, if successful */ public boolean deleteDialog() { final int n = JOptionPane.showConfirmDialog(null, "Delete " + toString() + "?", "Delete", JOptionPane.YES_NO_OPTION); return n == 0; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#deleteRequest() */ @Override public void deleteRequest() { if (deleteDialog()) { // getNodeMap().deleteNode(this); delete(); try { RdfUtils.save(model, modelFilename); } catch (IOException exception) { // TODO error popup Log.exception(exception); } } } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getModel() */ @Override public Model getModel() { // return nodeMap.getCurrentModel(); return model; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getModelFilename() */ @Override public String getModelFilename() { return modelFilename; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getNodeMap() */ @Override public RdfNodeMap getNodeMap() { return nodeMap; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getNodeTypeName() */ @Override public String getNodeTypeName() { switch (getNodeType()) { case RdfTreeNode.LITERAL: return "Literal"; case RdfTreeNode.RESOURCE: return "Resource"; case RdfTreeNode.STATEMENT: return "Property"; case RdfTreeNode.MODEL: return "Model"; case RdfTreeNode.ROOT: return "Model"; } return "Unknown"; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getParentStatement() */ @Override public Statement getParentStatement() { return parentStatement; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#getRdfValue() */ @Override public String getRdfValue() { switch (getNodeType()) { case RdfTreeNode.LITERAL: return getRdfNode().toString(); case RdfTreeNode.RESOURCE: return getRdfNode().toString(); case RdfTreeNode.STATEMENT: return (getStatement()).getPredicate().toString(); case RdfTreeNode.MODEL: return getModelFilename(); case RdfTreeNode.ROOT: return getModelFilename(); } return "Unknown"; } /** * Gets the statement. * * @return the statement */ public Statement getStatement() { // dummy return null; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#isDirty() */ @Override public boolean isDirty() { return dirty; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#isValueEditable() */ @Override public boolean isValueEditable() { switch (getNodeType()) { case RdfTreeNode.LITERAL: return true; case RdfTreeNode.RESOURCE: if (!((Resource) getRdfNode()).isAnon()) return true; break; case RdfTreeNode.STATEMENT: return false; case RdfTreeNode.MODEL: return false; case RdfTreeNode.ROOT: return false; } return false; } /** * Removes the statement. * * @param statement * the statement */ public void removeStatement(Statement statement) { try { getModel().remove(statement); } catch (final Exception exception) { Log.exception(exception); } } /** * Rename dialog. * * @param oldName * the old name * @return the string */ public String renameDialog(String oldName) { System.out.println("RENAME"); final String input = JOptionPane.showInputDialog(null, "Rename " + oldName, "Rename", JOptionPane.PLAIN_MESSAGE); System.out.println("INPUT = " + input); return input; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#renameRequest() */ @Override public void renameRequest() { final String newName = renameDialog(toString()); if ((newName == null) || newName.equals(toString())) return; // getNodeMap().renameNode(this, newName); rename(newName); } /** * Sets the dirty. * * @param dirty * The dirty to set */ @Override public void setDirty(boolean dirty) { this.dirty = dirty; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#setModel(com.hp.hpl.jena.rdf.model.Model) */ @Override public void setModel(Model model) { // System.out.println("setting model = " + model); this.model = model; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#setModelFilename(java.lang.String) */ @Override public void setModelFilename(String string) { modelFilename = string; } /** * Sets the parent statement. * * @param statement * the new parent statement */ public void setParentStatement(Statement statement) { parentStatement = statement; } /* (non-Javadoc) * @see org.hyperdata.scute.tree.RdfTreeNode#setRdfValue(java.lang.String) */ @Override public void setRdfValue(String string) { // dummy - it can't be done with all types } }