]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.repo/src/org/argeo/slc/repo/RepoSync.java
Adapt to changes in Argeo Commons
[gpl/argeo-slc.git] / org.argeo.slc.repo / src / org / argeo / slc / repo / RepoSync.java
index ba6281917505dc631bdd7647206d2c77b9edba5c..567ea36d502ccb37341a89df1972afb573437cf1 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
 package org.argeo.slc.repo;
 
 import java.io.InputStream;
@@ -42,11 +27,10 @@ import javax.jcr.query.Query;
 import javax.jcr.query.QueryResult;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.argeo.api.cms.CmsLog;
+import org.argeo.cms.jcr.CmsJcrUtils;
 import org.argeo.jcr.JcrMonitor;
 import org.argeo.jcr.JcrUtils;
-import org.argeo.node.NodeUtils;
 import org.argeo.slc.SlcException;
 import org.xml.sax.SAXException;
 
@@ -59,7 +43,7 @@ import org.xml.sax.SAXException;
  * we copy the content of the source workspace into the target one.
  */
 public class RepoSync implements Runnable {
-       private final static Log log = LogFactory.getLog(RepoSync.class);
+       private final static CmsLog log = CmsLog.getLog(RepoSync.class);
 
        // Centralizes definition of workspaces that must be ignored by the sync.
        private final static List<String> IGNORED_WKSP_LIST = Arrays.asList("security", "localrepo");
@@ -119,14 +103,14 @@ public class RepoSync implements Runnable {
 
                        // Setup
                        if (sourceRepository == null)
-                               sourceRepository = NodeUtils.getRepositoryByUri(repositoryFactory, sourceRepoUri);
+                               sourceRepository = CmsJcrUtils.getRepositoryByUri(repositoryFactory, sourceRepoUri);
                        if (sourceCredentials == null && sourceUsername != null)
                                sourceCredentials = new SimpleCredentials(sourceUsername, sourcePassword);
                        // FIXME make it more generic
                        sourceDefaultSession = sourceRepository.login(sourceCredentials, RepoConstants.DEFAULT_DEFAULT_WORKSPACE);
 
                        if (targetRepository == null)
-                               targetRepository = NodeUtils.getRepositoryByUri(repositoryFactory, targetRepoUri);
+                               targetRepository = CmsJcrUtils.getRepositoryByUri(repositoryFactory, targetRepoUri);
                        if (targetCredentials == null && targetUsername != null)
                                targetCredentials = new SimpleCredentials(targetUsername, targetPassword);
                        targetDefaultSession = targetRepository.login(targetCredentials);
@@ -213,16 +197,28 @@ public class RepoSync implements Runnable {
                        if (log.isDebugEnabled())
                                log.debug(msg);
 
-                       if (filesOnly) {
-                               JcrUtils.copyFiles(sourceSession.getRootNode(), targetSession.getRootNode(), true, monitor);
-                       } else {
-                               for (NodeIterator it = sourceSession.getRootNode().getNodes(); it.hasNext();) {
-                                       Node node = it.nextNode();
-                                       if (node.getName().equals("jcr:system"))
-                                               continue;
-                                       syncNode(node, targetSession);
-                               }
+                       for (NodeIterator it = sourceSession.getRootNode().getNodes(); it.hasNext();) {
+                               Node node = it.nextNode();
+                               if (node.getName().contains(":"))
+                                       continue;
+                               if (node.getName().equals("download"))
+                                       continue;
+                               if (!node.isNodeType(NodeType.NT_HIERARCHY_NODE))
+                                       continue;
+                               syncNode(node, targetSession);
                        }
+                       // if (filesOnly) {
+                       // JcrUtils.copyFiles(sourceSession.getRootNode(), targetSession.getRootNode(),
+                       // true, monitor);
+                       // } else {
+                       // for (NodeIterator it = sourceSession.getRootNode().getNodes(); it.hasNext();)
+                       // {
+                       // Node node = it.nextNode();
+                       // if (node.getName().equals("jcr:system"))
+                       // continue;
+                       // syncNode(node, targetSession);
+                       // }
+                       // }
                        if (log.isDebugEnabled())
                                log.debug("Synced " + sourceSession.getWorkspace().getName());
                } catch (Exception e) {
@@ -238,6 +234,15 @@ public class RepoSync implements Runnable {
        }
 
        protected void syncNode(Node sourceNode, Session targetSession) throws RepositoryException, SAXException {
+               if (filesOnly) {
+                       Node targetNode;
+                       if (targetSession.itemExists(sourceNode.getPath()))
+                               targetNode = targetSession.getNode(sourceNode.getPath());
+                       else
+                               targetNode = JcrUtils.mkdirs(targetSession, sourceNode.getPath(), NodeType.NT_FOLDER);
+                       JcrUtils.copyFiles(sourceNode, targetNode, true, monitor, true);
+                       return;
+               }
                // Boolean singleLevel = singleLevel(sourceNode);
                try {
                        if (monitor != null && monitor.isCanceled()) {
@@ -494,8 +499,7 @@ public class RepoSync implements Runnable {
        }
 
        /**
-        * Synchronises only one workspace, retrieved by name without changing its
-        * name.
+        * Synchronises only one workspace, retrieved by name without changing its name.
         */
        public void setSourceWksp(String sourceWksp) {
                if (sourceWksp != null && !sourceWksp.trim().equals("")) {
@@ -507,8 +511,8 @@ public class RepoSync implements Runnable {
 
        /**
         * Synchronises a map of workspaces that will be retrieved by name. If the
-        * target name is not defined (eg null or an empty string) for a given
-        * source workspace, we use the source name as target name.
+        * target name is not defined (eg null or an empty string) for a given source
+        * workspace, we use the source name as target name.
         */
        public void setWkspMap(Map<String, String> workspaceMap) {
                // clean the list to ease later use