if (state == CLEAN) {
if (state == CLEAN && propname.charAt(0) != '_') {
    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);        }        if (dbmap != null) {            // check if this may have an effect on the node's parerent's child collection            // in combination with the accessname or order field.            Node parent = (parentHandle == null) ? null : (Node) getParent();            if ((parent != null) && (parent.getDbMapping() != null)) {                DbMapping parentmap = parent.getDbMapping();                Relation subrel = parentmap.getSubnodeRelation();                String dbcolumn = dbmap.propertyToColumnName(propname);                if (subrel != null && dbcolumn != null) {                    // inlined version of notifyPropertyChange();                    if (subrel.order != null && subrel.order.indexOf(dbcolumn) > -1) {                        parent.registerSubnodeChange();                    }                    // check if accessname has changed                    if (subrel.accessName != null &&                            subrel.accessName.equals(dbcolumn)) {                        // if any other node is contained with the new value, remove it                        INode n = (INode) parent.getChildElement(value);                        if ((n != null) && (n != this)) {                            parent.unset(value);                            parent.removeNode(n);                        }                        // check if this node is already registered with the old name;                        // if so, remove it, then add again with the new acessname                        if (oldvalue != null) {                            n = (INode) parent.getChildElement(oldvalue);                            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 SyntheticKey(parent.getKey(), oldvalue));                            }                        }                        setName(value);                    }                }            }            // check if the property we're setting specifies the prototype of this object.            if (dbmap.getPrototypeField() != null &&                    propname.equals(dbmap.columnNameToProperty(dbmap.getPrototypeField()))) {                DbMapping newmap = nmgr.getDbMapping(value);                if (newmap != null) {                    // see if old and new prototypes have same storage - otherwise type change is ignored                    String oldStorage = dbmap.getStorageTypeName();                    String newStorage = newmap.getStorageTypeName();                    if (((oldStorage == null) && (newStorage == null)) ||                            ((oldStorage != null) && oldStorage.equals(newStorage))) {                        long now = System.currentTimeMillis();                        dbmap.setLastDataChange(now);                        newmap.setLastDataChange(now);                        this.dbmap = newmap;                        this.prototype = value;                    }                }            }        }        lastmodified = System.currentTimeMillis();        if (state == CLEAN) {            markAs(MODIFIED);        }    }