/*
* 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.spi.commons.conversion;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
import javax.jcr.RepositoryException;
import java.util.List;
import java.util.ArrayList;
import java.util.UUID;
/**
* <code>DummyIdentifierResolver</code>...
*/
class DummyIdentifierResolver implements IdentifierResolver {
private static final PathFactory FACTORY = PathFactoryImpl.getInstance();
public static final String JCR_PATH = "/a/b/c";
private final List<String> validIds;
private final List<String> invalidFormats;
private final List<String> invalidPaths;
private final Path path;
DummyIdentifierResolver() throws RepositoryException {
path = FACTORY.create(FACTORY.getRootPath(), FACTORY.create("{}a\t{}b\t{}c"), true);
validIds = new ArrayList<String>();
validIds.add(UUID.randomUUID().toString());
validIds.add("a:b");
validIds.add("a[3]");
validIds.add("34a[2[");
validIds.add("34a/]");
validIds.add(" 3-4a/'\"]");
validIds.add("/a[3]/b/c:d/");
validIds.add("{}\"\"\t{}a[3]\t{}b\t{}c:d");
String invalidID = UUID.randomUUID().toString();
String invalidIdSegment = "[" + invalidID + "]";
String validSegment = "[" + validIds.get(0) + "]";
invalidFormats = new ArrayList<String>();
invalidPaths = new ArrayList<String>();
for (String validId : validIds) {
if (!validId.endsWith("]")) {
invalidFormats.add("[" + validId);
} else {
invalidPaths.add("[" + validId);
}
if (!validId.startsWith("[")) {
invalidFormats.add(validId + "]");
} else {
invalidPaths.add(validId + "]");
}
}
invalidFormats.add(validSegment + "abc/abc");
invalidFormats.add(validSegment + "/a/b/c");
invalidFormats.add("/" + validSegment);
invalidFormats.add("/a/b/" + validSegment + "/c");
invalidFormats.add("/a/b/c" + validSegment);
invalidFormats.add("/" + invalidIdSegment);
// path starting with [ and ending with ] -> valid format but
// might be invalid path.
invalidPaths.add(validSegment + "/a/b[2]");
invalidPaths.add(validSegment + "/" + validSegment);
invalidPaths.add(validSegment + "[2]");
invalidPaths.add(invalidIdSegment);
invalidPaths.addAll(invalidFormats);
}
List<String> getValidIdentifiers() {
return validIds;
}
List<String> getInvalidIdentifierPaths() {
return invalidPaths;
}
List<String> getInvalidIdentifierFormats() {
return invalidFormats;
}
public Path getPath(String identifier) throws MalformedPathException {
if (validIds.contains(identifier)) {
return path;
} else {
throw new MalformedPathException("Invalid path: identifier '"+ identifier +"' cannot be resolved.");
}
}
public void checkFormat(String identifier) throws MalformedPathException {
if (validIds.contains(identifier)) {
return;
}
throw new MalformedPathException("Invalid identifier.");
}
}