All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jackrabbit.spi.commons.name.PathBuilder Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
/*
 * 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.name;

import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;

/**
 * Helper class used to build a path from pre-parsed path elements.
 * 

* Note that this class does neither validate the format of the path elements nor * does it validate the format of the entire path. * This class should therefore only be used in situations, where the elements * and the resulting path are known to be valid. The regular way of creating * a Path object is by calling any of the * PathFactory.create()methods. */ public final class PathBuilder { /** * The path factory */ private final PathFactory factory; /** * The current path */ private Path path = null; /** * Creates a new PathBuilder to create a Path using the * {@link PathFactoryImpl default PathFactory}. See * {@link PathBuilder#PathBuilder(PathFactory)} for a constructor explicitly * specifying the factory to use. */ public PathBuilder() { this(PathFactoryImpl.getInstance()); } /** * Creates a new PathBuilder. * * @param factory The PathFactory used to create the elements and the final path. */ public PathBuilder(PathFactory factory) { this.factory = factory; } /** * Creates a new PathBuilder and initialized it with the given path * elements. * * @param elements */ public PathBuilder(Path.Element[] elements) { this(); path = factory.create(elements); } /** * Creates a new PathBuilder and initialized it with elements of the * given path. * * @param parent */ public PathBuilder(Path parent) { this(); path = parent; } /** * Adds the {@link org.apache.jackrabbit.spi.PathFactory#getRootElement()}. */ public void addRoot() { if (path != null) { path = RootPath.ROOT_PATH.resolve(path); } else { path = RootPath.ROOT_PATH; } } /** * Adds the given elements * * @param elements */ public void addAll(Path.Element[] elements) { for (Path.Element element : elements) { if (path != null) { path = path.resolve(element); } else { path = factory.create(element); } } } /** * Inserts the element at the beginning of the path to be built. * * @param elem */ public void addFirst(Path.Element elem) { Path first = factory.create(elem); if (path != null) { path = first.resolve(path); } else { path = first; } } /** * Inserts the element at the beginning of the path to be built. * * @param name */ public void addFirst(Name name) { addFirst(factory.createElement(name)); } /** * Inserts the element at the beginning of the path to be built. * * @param name * @param index */ public void addFirst(Name name, int index) { addFirst(factory.createElement(name, index)); } /** * Inserts the element at the end of the path to be built. * * @param elem */ public void addLast(Path.Element elem) { if (path != null) { path = path.resolve(elem); } else { path = factory.create(elem); } } /** * Inserts the element at the end of the path to be built. * * @param name */ public void addLast(Name name) { addLast(name, Path.INDEX_UNDEFINED); } /** * Inserts the element at the end of the path to be built. * * @param name * @param index */ public void addLast(Name name, int index) { path = new NamePath(path, name, index); } /** * Assembles the built path and returns a new {@link Path}. * * @return a new {@link Path} * @throws MalformedPathException if the internal path element queue is empty. */ public Path getPath() throws MalformedPathException { if (path != null) { return path; } else { throw new MalformedPathException("empty path"); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy