+
+ copyTimestamps(sourceNode, targetNode);
+
+ if (sourceNode.isNodeType(NodeType.NT_HIERARCHY_NODE)) {
+ if (targetSession.hasPendingChanges()) {
+ if (sourceNode.isNodeType(NodeType.NT_FILE))
+ updateMonitor((isNew ? "Added " : "Updated ")
+ + targetNode.getPath(), true);
+ // if (doSave)
+ targetSession.save();
+ } else {
+ if (sourceNode.isNodeType(NodeType.NT_FILE))
+ updateMonitor("Checked " + targetNode.getPath(), false);
+ }
+ }
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot sync source node " + sourceNode, e);
+ }
+ }
+
+ private void copyTimestamps(Node sourceNode, Node targetNode)
+ throws RepositoryException {
+ if (sourceNode.getDefinition().isProtected())
+ return;
+ if (targetNode.getDefinition().isProtected())
+ return;
+ copyTimestamp(sourceNode, targetNode, Property.JCR_CREATED);
+ copyTimestamp(sourceNode, targetNode, Property.JCR_CREATED_BY);
+ copyTimestamp(sourceNode, targetNode, Property.JCR_LAST_MODIFIED);
+ copyTimestamp(sourceNode, targetNode, Property.JCR_LAST_MODIFIED_BY);
+ }
+
+ private void copyTimestamp(Node sourceNode, Node targetNode, String property)
+ throws RepositoryException {
+ if (sourceNode.hasProperty(property)) {
+ Property p = sourceNode.getProperty(property);
+ if (p.getDefinition().isProtected())
+ return;
+ if (targetNode.hasProperty(property)
+ && targetNode
+ .getProperty(property)
+ .getValue()
+ .equals(sourceNode.getProperty(property).getValue()))
+ return;
+ targetNode.setProperty(property, sourceNode.getProperty(property)
+ .getValue());