blob: ce961ae4c4eeb5dcbee025018c417019eeb074ca [file] [log] [blame]
/*
* 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 org.apache.jackrabbit.oak.upgrade.util;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.version.Version;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionIterator;
import javax.jcr.version.VersionManager;
import com.google.common.collect.ImmutableList;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.upgrade.version.VersionCopyConfiguration;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
public class VersionCopyTestUtils {
public static List<String> LABELS = ImmutableList.of("1.0", "1.1", "1.2");
public static Node getOrAddNode(Node parent, String relPath) throws RepositoryException {
Node currentParent = parent;
for (final String name : PathUtils.elements(relPath)) {
if (!currentParent.hasNode(name)) {
currentParent.addNode(name, JcrConstants.NT_UNSTRUCTURED);
}
currentParent = currentParent.getNode(name);
}
return currentParent;
}
public static Node getOrAddNodeWithMixins(Node parent, String name, String mixinType)
throws RepositoryException {
final Node node = getOrAddNode(parent, name);
node.addMixin(mixinType);
return node;
}
public static String createLabeledVersions(Node node)
throws RepositoryException, InterruptedException {
final Session session = node.getSession();
final VersionManager versionManager = session.getWorkspace().getVersionManager();
node.setProperty("version", "root");
session.save();
final String path = node.getPath();
final List<String> versionNames = new ArrayList<String>();
for (final String label : LABELS) {
node.setProperty("version", label);
session.save();
final Version v = versionManager.checkpoint(path);
versionNames.add(v.getName());
}
final VersionHistory history = versionManager.getVersionHistory(path);
for (final String versionName : versionNames) {
history.addVersionLabel(versionName, String.format("version %s", versionName), false);
}
return history.getPath();
}
public static void assertLabeledVersions(VersionHistory history) throws RepositoryException {
final VersionIterator versions = history.getAllVersions();
assertFalse(versions.nextVersion().getFrozenNode().hasProperty("version")); // root
for (final String label : LABELS) {
assertEquals(label, versions.nextVersion().getFrozenNode().getProperty("version").getString());
}
}
public interface VersionCopySetup {
void setup(VersionCopyConfiguration config);
}
}