INode parent = getParent ();
INode parent = parentID == null ? null : getParent ();
    public void setString (String propname, String value) {	// nmgr.logEvent ("setting String prop");	checkWriteLock ();	if (propMap == null)	    propMap = new Hashtable ();	propname = propname.trim ();	String p2 = propname.toLowerCase ();	Property prop = (Property) propMap.get (p2);	String oldvalue = null;	if (prop != null) {	    oldvalue = prop.getStringValue ();	    // check if the value has changed	    if (value != null && value.equals (oldvalue))	        return;	    prop.setStringValue (value);	} else {	    prop = new Property (propname, this);	    prop.setStringValue (value);	    propMap.put (p2, prop);	}	// check if this may have an effect on the node's URL when using subnodesAreProperties	INode parent = getParent ();	if (parent != null && parent.getDbMapping() != null) {	    // check if this node is already registered with the old name; if so, remove it.	    // then set parent's property to this node for the new name value	    parentmap = parent.getDbMapping ();	    Relation prel = parentmap.getPropertyRelation ();	    if (prel != null && prel.subnodesAreProperties && propname.equals (prel.getRemoteField())) {	        INode n = parent.getNode (value, false);	        if (n != null && n != this) {	            parent.unset (value);	            parent.removeNode (n);	        }	        if (oldvalue != null) {	            n = parent.getNode (oldvalue, false);	            if (n == this) {	                parent.unset (oldvalue);	                parent.addNode (this);	                // let the node cache know this key's not for this node anymore.	                nmgr.evictKey (new Key (prel.other, prel.getKeyID (parent, oldvalue)));	            }	        }	        parent.setNode (value, this);	        setName (value);	    }	}	// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.PROPERTIES_CHANGED));	lastmodified = System.currentTimeMillis ();	if (state == CLEAN) markAs (MODIFIED);    }