-/*
- * 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;
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;
* 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");
// 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);
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) {
}
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()) {
}
/**
- * 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("")) {
/**
* 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