Author: pnedonosko
Date: 2009-11-23 12:09:12 -0500 (Mon, 23 Nov 2009)
New Revision: 814
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientItemData.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
Log:
EXOJCR-245: node move new impl.
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2009-11-23
17:05:27 UTC (rev 813)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2009-11-23
17:09:12 UTC (rev 814)
@@ -29,7 +29,6 @@
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
import org.exoplatform.services.jcr.core.nodetype.PropertyDefinitionData;
import org.exoplatform.services.jcr.dataflow.ItemState;
-import org.exoplatform.services.jcr.dataflow.LockPlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
import org.exoplatform.services.jcr.datamodel.Identifier;
@@ -58,7 +57,6 @@
import org.exoplatform.services.jcr.impl.dataflow.session.SessionChangesLog;
import org.exoplatform.services.jcr.impl.dataflow.session.TransactionableDataManager;
import org.exoplatform.services.jcr.impl.util.EntityCollection;
-import org.exoplatform.services.jcr.observation.ExtendedEvent;
import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientItemData.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientItemData.java 2009-11-23
17:05:27 UTC (rev 813)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientItemData.java 2009-11-23
17:09:12 UTC (rev 814)
@@ -41,6 +41,26 @@
public abstract class TransientItemData implements MutableItemData, Externalizable
{
+ /**
+ * Transitive state: is not set.
+ */
+ public static final int TRANSITIVE_NONE = 0;
+
+ /**
+ * Transitive state: Item path updated.
+ */
+ public static final int TRANSITIVE_PATH_UPDATED = 1;
+
+ /**
+ * Transitive state: Node mixin updated.
+ */
+ public static final int TRANSITIVE_MIXIN_UPDATED = 2;
+
+ /**
+ * Transitive state: Node ACL updated.
+ */
+ public static final int TRANSITIVE_ACL_UPDATED = 4;
+
protected static final Log LOG =
ExoLogger.getLogger("jcr.TransientItemData");
protected String identifier;
@@ -49,18 +69,28 @@
protected int persistedVersion;
+ /**
+ * For transitive state storing. Used in JBossCache.
+ */
+ protected int state = TRANSITIVE_NONE;
+
protected QPath qpath;
private int NOT_NULL_VALUE = 1;
private int NULL_VALUE = -1;
- // serializable --------------
+ /**
+ * Serializable TransientItemData constructor.
+ *
+ */
TransientItemData()
{
}
/**
+ * TransientItemData contructor.
+ *
* @param path QPath
* @param identifier id
* @param version persisted version
@@ -74,10 +104,8 @@
this.persistedVersion = version;
}
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#equals(java.lang.Object)
+ /**
+ * {@inheritDoc}
*/
@Override
public boolean equals(Object obj)
@@ -97,30 +125,24 @@
return false;
}
- /*
- * (non-Javadoc)
- *
- * @see org.exoplatform.services.jcr.datamodel.ItemData#getIdentifier()
+ /**
+ * {@inheritDoc}
*/
public String getIdentifier()
{
return identifier;
}
- /*
- * (non-Javadoc)
- *
- * @see org.exoplatform.services.jcr.datamodel.ItemData#getParentUUID()
+ /**
+ * {@inheritDoc}
*/
public String getParentIdentifier()
{
return parentIdentifier;
}
- /*
- * (non-Javadoc)
- *
- * @see org.exoplatform.services.jcr.datamodel.ItemData#getPersistedVersion()
+ /**
+ * {@inheritDoc}
*/
public int getPersistedVersion()
{
@@ -135,26 +157,52 @@
return qpath.getName();
}
- /*
- * (non-Javadoc)
- *
- * @see org.exoplatform.services.jcr.datamodel.ItemData#getQPath()
+ /**
+ * {@inheritDoc}
*/
public QPath getQPath()
{
return qpath;
}
- /*
- * (non-Javadoc)
- *
- * @see
org.exoplatform.services.jcr.datamodel.MutableItemData#increasePersistedVersion()
+ /**
+ * {@inheritDoc}
*/
public void increasePersistedVersion()
{
this.persistedVersion++;
}
+ /**
+ * Return transitive state. Used in JBossCache.
+ *
+ * @return the state
+ */
+ public int getState()
+ {
+ return state;
+ }
+
+ /**
+ * Set transitive state. Used in JBossCache.
+ *
+ * @param state the state to set
+ */
+ public void setState(int state)
+ {
+ this.state = state;
+ }
+
+ /**
+ * Add transitive state to existing one using OR operation. Used in JBossCache.
+ *
+ * @param state the state to add to existing
+ */
+ public void addState(int state)
+ {
+ this.state = this.state | state;
+ }
+
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{
byte[] buf;
@@ -195,6 +243,8 @@
}
persistedVersion = in.readInt();
+
+ state = in.readInt();
}
public void writeExternal(ObjectOutput out) throws IOException
@@ -216,6 +266,8 @@
out.writeInt(NULL_VALUE);
out.writeInt(persistedVersion);
+
+ out.writeInt(state);
}
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-23
17:05:27 UTC (rev 813)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCacheWorkspaceDataManager.java 2009-11-23
17:09:12 UTC (rev 814)
@@ -72,7 +72,7 @@
if (readOnly && !(changesLog instanceof ReadOnlyThroughChanges))
throw new ReadOnlyWorkspaceException("Workspace container '" +
dataContainer.getName() + "' is read-only.");
- final Set<QPath> addedNodes = new HashSet<QPath>();
+ final Set<QPath> addedNodes = new HashSet<QPath>(); //TODO
LOG.info(changesLog.dump());
WorkspaceStorageConnection thisConnection = null;
WorkspaceStorageConnection systemConnection = null;
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-23
17:05:27 UTC (rev 813)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-23
17:09:12 UTC (rev 814)
@@ -21,9 +21,12 @@
import org.exoplatform.services.jcr.datamodel.ItemData;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.PropertyData;
+import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.core.lock.LockData;
+import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
+import org.exoplatform.services.jcr.impl.dataflow.TransientPropertyData;
import org.exoplatform.services.jcr.impl.dataflow.ValueDataConvertor;
import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
import org.exoplatform.services.log.ExoLogger;
@@ -91,7 +94,7 @@
// helpers
@Deprecated
- protected NodeData getNodeData(Node<Serializable, Object> node)
+ protected ItemData readItemData(Node<Serializable, Object> node)
{
Object data = node.get(ITEM_DATA);
if (data != null)
@@ -110,7 +113,7 @@
Object freshData = freshNode.get(ITEM_DATA);
if (freshData != null)
{
- return (NodeData)freshData;
+ return (ItemData)freshData;
}
else
{
@@ -126,7 +129,7 @@
}
else
{
- return (NodeData)data;
+ return (ItemData)data;
}
}
else
@@ -451,6 +454,7 @@
throw new RepositoryException("FATAL Node record not found(" +
nodeId
+ "), but listed in child nodes of " +
parent.getQPath().getAsString());
}
+
NodeData nodeData = (NodeData)node.get(ITEM_DATA);
if (nodeData == null)
{
@@ -474,6 +478,11 @@
return childs;
}
+ /**
+ * Print tree of given node. For dev purpose only (TODO).
+ *
+ * @param node Node
+ */
private void treePrint(Node<Serializable, Object> node)
{
for (Node<Serializable, Object> child : node.getChildren())
@@ -550,7 +559,7 @@
*/
public List<PropertyData> listChildPropertiesData(NodeData parent) throws
RepositoryException, IllegalStateException
{
- // TODO it's same as getChild... now
+ // TODO it's same as getChild... now, but should be without ValueData
return getChildPropertiesData(parent);
}
@@ -571,10 +580,10 @@
Node<Serializable, Object> node =
nodesRoot.getChild(makeNodeFqn(nodeId));
if (node != null)
{
- Object itemData = node.get(ITEM_DATA);
+ NodeData itemData = (NodeData)node.get(ITEM_DATA);
if (itemData != null)
{
- return (NodeData)itemData;
+ return itemData;
}
else
{
@@ -650,10 +659,10 @@
Node<Serializable, Object> node =
nodesRoot.getChild(makeNodeFqn(identifier));
if (node != null)
{
- Object itemData = node.get(ITEM_DATA);
+ NodeData itemData = (NodeData)node.get(ITEM_DATA);
if (itemData != null)
{
- return (NodeData)itemData;
+ return itemData;
}
else
{
@@ -724,57 +733,60 @@
{
//TODO we expecting that on session.move() there will be only one rename() method
call
- // startBatch();
- //
- // String nodeId = data.getIdentifier();
- //
- // //1. Update renamed node and also get old nodeData
- // Node<Serializable, Object> node =
nodesRoot.getChild(makeNodeFqn(nodeId));
- // if (node == null)
- // {
- // throw new InvalidItemStateException("Renamed node is not
exist" + data.getQPath().getAsString());
- // }
- //
- // NodeData prevData = (NodeData)node.put(ITEM_DATA, data);
- // if (prevData == null)
- // {
- // throw new RepositoryException("FATAL NodeData is empty " +
data.getQPath().getAsString());
- // }
- //
- // // 2. remove renamed node from child list of previous parent node
- // // check if parent is cached
- // Node<Serializable, Object> prevParent =
nodesRoot.getChild(makeNodeFqn(prevData.getParentIdentifier()));
- // if (prevParent == null)
- // {
- // throw new InvalidItemStateException("Node's previous parent
doesn't exist "
- // + prevData.getQPath().getAsString() + ". Node " +
data.getQPath().getAsString());
- // }
- //
- // // remove node form old parent child list
- // if (!prevParent
- //
.removeChild(makeChildNodeFqn(prevData.getQPath().getEntries()[prevData.getQPath().getEntries().length
- 1])))
- // {
- // throw new RepositoryException("FATAL Node doesn't listed in
children nodes of previous parent "
- // + prevData.getQPath().getAsString() + ". Node " +
data.getQPath().getAsString());
- // }
- //
- // // 3. add node to child list of new parent node
- // // check if parent is cached
- // Node<Serializable, Object> newParent =
nodesRoot.getChild(makeNodeFqn(data.getParentIdentifier()));
- // if (newParent == null)
- // {
- // throw new InvalidItemStateException("Node's new parent
doesn't exist " + data.getParentIdentifier()
- // + ". Node " + data.getQPath().getAsString());
- // }
- //
- // // add child to Parent
- // Node<Serializable, Object> childNode =
- //
newParent.addChild(makeChildNodeFqn(data.getQPath().getEntries()[data.getQPath().getEntries().length
- 1]));
- //
- // // set child id attr
- // childNode.put(ITEM_ID, data.getIdentifier());
- //
- // // 4. update all child nodes
+ startBatch();
+
+ String nodeId = data.getIdentifier();
+
+ //1. Update renamed node and also get old nodeData
+ Node<Serializable, Object> node = nodesRoot.getChild(makeNodeFqn(nodeId));
+ if (node == null)
+ {
+ throw new InvalidItemStateException("Renamed node is not exist" +
data.getQPath().getAsString());
+ }
+
+ NodeData prevData = (NodeData)node.put(ITEM_DATA, data);
+ if (prevData == null)
+ {
+ throw new RepositoryException("FATAL NodeData is empty " +
data.getQPath().getAsString());
+ }
+
+ // 2. remove renamed node from child list of previous parent node
+ // check if parent is cached
+ Node<Serializable, Object> prevParent =
nodesRoot.getChild(makeNodeFqn(prevData.getParentIdentifier()));
+ if (prevParent == null)
+ {
+ throw new InvalidItemStateException("Node's previous parent doesn't
exist "
+ + prevData.getQPath().getAsString() + ". Node " +
data.getQPath().getAsString());
+ }
+
+ // remove node form old parent child list
+ if (!prevParent
+
.removeChild(makeChildNodeFqn(prevData.getQPath().getEntries()[prevData.getQPath().getEntries().length
- 1])))
+ {
+ throw new RepositoryException("FATAL Node doesn't listed in children
nodes of previous parent "
+ + prevData.getQPath().getAsString() + ". Node " +
data.getQPath().getAsString());
+ }
+
+ // 3. add node to child list of new parent node
+ // check if parent is cached
+ Node<Serializable, Object> newParent =
nodesRoot.getChild(makeNodeFqn(data.getParentIdentifier()));
+ if (newParent == null)
+ {
+ throw new InvalidItemStateException("Node's new parent doesn't
exist " + data.getParentIdentifier()
+ + ". Node " + data.getQPath().getAsString());
+ }
+
+ // add child to Parent
+ Node<Serializable, Object> childNode =
+
newParent.addChild(makeChildNodeFqn(data.getQPath().getEntries()[data.getQPath().getEntries().length
- 1]));
+
+ // set child id attr
+ childNode.put(ITEM_ID, data.getIdentifier());
+
+ // 4. update all child nodes
+ updateTreePath(node, data.getQPath());//treePrint(node)
+
+ // TODO cleanup
// for (Node<Serializable, Object> child : node.getChildren())
// {
// String childNodeId = (String)child.get(ITEM_ID);
@@ -809,6 +821,123 @@
}
/**
+ * Update Nodes tree with new path.
+ *
+ * @param node Node - cache node containing root of JCR subtree.
+ * @throws RepositoryException on error state detected
+ */
+ protected void updateTreePath(Node<Serializable, Object> node, QPath rootPath)
+ throws RepositoryException
+ {
+ QPath nodePath = rootPath;
+
+ // update path of properties
+ for (Object key : node.getKeys())
+ {
+ if (key.equals(ITEM_DATA))
+ {
+ NodeData prevData = (NodeData)node.get(ITEM_DATA);
+ if (prevData == null)
+ {
+ throw new RepositoryException("FATAL Node data " + rootPath +
" is empty at " + node.getFqn());
+ }
+
+ if (!prevData.getQPath().equals(nodePath))
+ {
+ // recreate with new path for child Nodes only
+ nodePath =
+ QPath.makeChildPath(rootPath,
prevData.getQPath().getEntries()[prevData.getQPath()
+ .getEntries().length - 1]);
+ TransientNodeData newData =
+ new TransientNodeData(nodePath, prevData.getIdentifier(),
prevData.getPersistedVersion(),
+ prevData.getPrimaryTypeName(), prevData.getMixinTypeNames(),
prevData
+ .getOrderNumber(), prevData.getParentIdentifier(),
prevData.getACL());
+ newData.addState(TransientPropertyData.TRANSITIVE_PATH_UPDATED);
+ node.put(ITEM_DATA, newData);
+ }
+ }
+ else
+ {
+ // property
+ String propId = (String)node.get((String)key);
+ if (propId != null)
+ {
+ Node<Serializable, Object> prop =
propsRoot.getChild(Fqn.fromElements(propId));
+ if (prop == null)
+ {
+ throw new IllegalStateException("Property not exists or was
deleted by another Session " + rootPath
+ + key);
+ }
+
+ // get prev PropertyData
+ PropertyData prevData = (PropertyData)prop.get(ITEM_DATA);
+ if (prevData == null)
+ {
+ throw new RepositoryException("FATAL Property data is empty "
+ rootPath + key);
+ }
+
+ // recreate the property data with new path
+ QPath newPath =
+ QPath.makeChildPath(rootPath,
prevData.getQPath().getEntries()[prevData.getQPath()
+ .getEntries().length - 1]);
+ TransientPropertyData newData =
+ new TransientPropertyData(newPath, prevData.getIdentifier(),
prevData.getPersistedVersion(),
+ prevData.getType(), prevData.getParentIdentifier(),
prevData.isMultiValued());
+ newData.addState(TransientPropertyData.TRANSITIVE_PATH_UPDATED);
+ newData.setValues(prevData.getValues());
+ prop.put(ITEM_DATA, newData);
+ }
+ else
+ {
+ throw new RepositoryException("FATAL Property extists but ITEM_ID is
empty " + node.getFqn()
+ + ". Update of " + rootPath);
+ }
+ }
+ }
+
+ if (nodePath == null)
+ {
+ throw new RepositoryException("FATAL Broken JCR Nodes tree. Node's
ITEM_DATA was not found at "
+ + node.getFqn() + ". Update of " + rootPath);
+ }
+
+ // update path of child nodes
+ for (Node<Serializable, Object> child : node.getChildren())
+ {
+ String childNodeId = (String)child.get(ITEM_ID);
+ if (childNodeId == null)
+ {
+ throw new RepositoryException("FATAL Child Node Id key is null. Parent
" + rootPath);
+ }
+
+ Node<Serializable, Object> childNode =
nodesRoot.getChild(makeNodeFqn(childNodeId));
+ if (childNode == null)
+ {
+ throw new RepositoryException("FATAL Node record not found (" +
childNodeId + "), but listed in childs of "
+ + rootPath);
+ }
+
+ updateTreePath(childNode, nodePath);
+
+ // TODO cleanup
+ // NodeData cacheNodeData = (NodeData)childNode.get(ITEM_DATA);
+ // if (cacheNodeData == null)
+ // {
+ // throw new RepositoryException("Child node data is null.
Parent " + rootPath);
+ // }
+ //
+ // // recreate child Node with new path
+ // QPath newPath = QPath.makeChildPath(rootPath,
cacheNodeData.getQPath().getName());
+ // TransientNodeData newNodeData =
+ // new TransientNodeData(newPath, cacheNodeData.getIdentifier(),
cacheNodeData.getPersistedVersion(),
+ // cacheNodeData.getPrimaryTypeName(),
cacheNodeData.getMixinTypeNames(), cacheNodeData.getOrderNumber(),
+ // cacheNodeData.getParentIdentifier(), cacheNodeData.getACL());
+ // newNodeData.addState(TransientPropertyData.TRANSITIVE_PATH_UPDATED);
+ // childNode.put(ITEM_DATA, newNodeData);
+ }
+ }
+
+ /**
* {@inheritDoc}
*/
public void update(NodeData data) throws RepositoryException,
UnsupportedOperationException,
@@ -886,7 +1015,7 @@
{
startBatch();
- Fqn propFqn = Fqn.fromElements(data.getIdentifier());
+ final Fqn propFqn = Fqn.fromElements(data.getIdentifier());
// update in PROPERTIES
Node<Serializable, Object> prop = propsRoot.getChild(propFqn);
@@ -895,22 +1024,21 @@
throw new IllegalStateException("Property was deleted " +
data.getQPath().getAsString());
}
- // get old PropertyData
- prop.get(ITEM_DATA);
- PropertyData propData = (PropertyData)prop.get(ITEM_DATA);
- if (propData == null)
+ // get prev PropertyData
+ PropertyData prevData = (PropertyData)prop.get(ITEM_DATA);
+ if (prevData == null)
{
throw new RepositoryException("FATAL Old Property data is null. Parent
" + data.getQPath().getAsString());
}
- if (propData.getType() == PropertyType.REFERENCE || data.getType() ==
PropertyType.REFERENCE)
+ if (prevData.getType() == PropertyType.REFERENCE || data.getType() ==
PropertyType.REFERENCE)
{
//get Set of old values
Set<String> removeSet = new HashSet<String>();
- if (propData.getType() == PropertyType.REFERENCE)
+ if (prevData.getType() == PropertyType.REFERENCE)
{
- for (ValueData value : propData.getValues())
+ for (ValueData value : prevData.getValues())
{
try
{
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-23
17:05:27 UTC (rev 813)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java 2009-11-23
17:09:12 UTC (rev 814)
@@ -23,6 +23,7 @@
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
+import org.exoplatform.services.jcr.impl.dataflow.TransientItemData;
import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCStorageConnection;
import org.exoplatform.services.jcr.impl.storage.jdbc.PropertyDataInfo;
import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
@@ -272,20 +273,30 @@
private void doUpdate(Modification modification, WorkspaceStorageConnection conn)
throws IllegalStateException,
RepositoryException
{
- if (modification.getValue() instanceof NodeData)
+ if (modification.getValue() instanceof ItemData)
{
- //update node data
- NodeData nodeData = (NodeData)modification.getValue();
+ TransientItemData item = (TransientItemData)modification.getValue();
- conn.update(nodeData);
+ if ((item.getState() & TransientItemData.TRANSITIVE_PATH_UPDATED) == 0)
+ {
+ // update if it's non transitive update
+ if (item.isNode())
+ {
+ //update node data
+ conn.update((NodeData)item);
+ }
+ else
+ {
+ //update property data
+ conn.update((PropertyData)item);
+ }
+ }
+ else
+ {
+ // TODO for debug
+ LOG.info("TRANSITIVE_PATH_UPDATED " +
item.getQPath().getAsString());
+ }
}
- else if (modification.getValue() instanceof PropertyData)
- {
- //update property data
- PropertyData propertyData = (PropertyData)modification.getValue();
-
- conn.update(propertyData);
- }
}
/**