Java tutorial
/* * 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(); } }