/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 jackrabbit.app; import java.util.List; import jackrabbit.node.NodeCopier; import jackrabbit.repository.RepositoryFactory; import jackrabbit.repository.RepositoryFactoryImpl; import jackrabbit.repository.RepositoryManager; import jackrabbit.session.SessionFactory; import jackrabbit.session.SessionFactoryImpl; import jackrabbit.util.NodePathModifier; import jackrabbit.util.NodeUtils; import jackrabbit.util.PathTransformer; import jackrabbit.util.RegexModifier; import javax.jcr.AccessDeniedException; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; import javax.jcr.lock.LockException; import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.version.VersionException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jackrabbit.api.JackrabbitRepository; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Unit test for simple App. */ public class AppTest { protected static Log log=LogFactory.getLog(AppTest.class); //change the following paths as appropriate private static final String REPO_ROOT="/root/sites"; private static final String REPO_PATH="/repository"; private final String srcRepoDir=REPO_PATH+"/folder"; private final String srcRepoPath=REPO_ROOT+"/folder"; private final String destRepoDir=REPO_PATH+"/all-mysql-1"; private final String srcConf="config/repository_derby.xml"; private final String destConf="config/repository-mysql-1.xml"; private final String cndPath="config/base_nodetypes.cnd"; private JackrabbitRepository src; private JackrabbitRepository dest; private SessionFactory srcSf; private SessionFactory destSf; private Session srcSession; private Session destSession; @Before public void setUp() throws Exception { RepositoryFactory srcRf=new RepositoryFactoryImpl(srcConf, srcRepoDir); RepositoryFactory destRf=new RepositoryFactoryImpl(destConf, destRepoDir); try { src=srcRf.getRepository(); } catch (AssertionError e){ //if the src repository was indexed using pre-2.4.1 Lucene, an assert error about del count mismatch may occur (https://issues.apache.org/jira/browse/LUCENE-1474). log.error(e.getMessage(), e); } dest=destRf.getRepository(); SimpleCredentials credentials=new SimpleCredentials("username", "password".toCharArray()); if (src==null) return; srcSf=new SessionFactoryImpl(src, credentials); destSf=new SessionFactoryImpl(dest, credentials); srcSession=srcSf.getSession(); destSession=destSf.getSession(); RepositoryManager.registerCustomNodeTypes(destSession, cndPath); } @Test public void testApp() throws Exception { if (src==null) return; NodePathModifier modifier=new RegexModifier("(.*)\\/(\\w)(\\w+)$", "$1/$2"); String destRepoPath=PathTransformer.transform(srcRepoPath, modifier); NodeCopier.copy(srcSession, destSession, srcRepoPath, destRepoPath, true); List<String> destWkspaces=RepositoryManager.getDestinationWorkspaces(srcSession, destSession); for (String workspace:destWkspaces) { Session wsSession=srcSf.getSession(workspace); Session wsDestSession=destSf.getSession(workspace); RepositoryManager.registerCustomNodeTypes(wsDestSession, cndPath); NodeCopier.copy(wsSession, wsDestSession, srcRepoPath, destRepoPath, true); wsSession.logout(); wsDestSession.logout(); } NodeUtils.explore(destSession.getNode("/fsp_root/sites/a/aeellp")); } @Test public void testAppWithNodeLimit() throws Exception { if (src==null) return; NodePathModifier modifier=new RegexModifier("(.*)\\/(\\w)(\\w+)$", "$1/$2"); String destRepoPath=PathTransformer.transform(srcRepoPath, modifier); NodeCopier.copy(srcSession, destSession, srcRepoPath, destRepoPath, 10000, true); List<String> destWkspaces=RepositoryManager.getDestinationWorkspaces(srcSession, destSession); for (String workspace:destWkspaces) { Session wsSession=srcSf.getSession(workspace); Session wsDestSession=destSf.getSession(workspace); RepositoryManager.registerCustomNodeTypes(wsDestSession, cndPath); NodeCopier.copy(wsSession, wsDestSession, srcRepoPath, destRepoPath, 10000, true); wsSession.logout(); wsDestSession.logout(); } NodeUtils.explore(destSession.getNode("/fsp_root/sites/a/aeellp")); } @After public void tearDown() throws AccessDeniedException, VersionException, LockException, ConstraintViolationException, PathNotFoundException, RepositoryException { if (srcSession!=null) srcSession.logout(); if (src!=null) src.shutdown(); if (destSession!=null) destSession.logout(); if (dest!=null) dest.shutdown(); } }