/******************************************************************************* * Copyright (c) 2006, 2007 Spring IDE Developers * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.ui; import java.util.LinkedList; import org.eclipse.jface.viewers.TreePath; /** * @author Torsten Juergeleit * @author Christian Dupuis */ public class TreePathBuilder { private final LinkedList<Object> segments = new LinkedList<Object>(); public TreePathBuilder() { } public TreePathBuilder(Object segment) { segments.add(segment); } public TreePathBuilder(TreePathBuilder builder) { segments.addAll(builder.segments); } public TreePathBuilder(TreePath path) { for (int i = 0; i < path.getSegmentCount(); i++) { segments.addLast(path.getSegment(i)); } } public void addParent(Object segment) throws IllegalArgumentException { if (segments.contains(segment)) { throw createCyclicPathException(segment); } segments.addFirst(segment); } public void addChild(Object segment) throws IllegalArgumentException { if (segments.contains(segment)) { throw createCyclicPathException(segment); } segments.addLast(segment); } public TreePath getPath() { return new TreePath(segments.toArray()); } public TreePath getParentPath() { LinkedList parentSegments = new LinkedList<Object>(segments); parentSegments.removeLast(); return new TreePath(parentSegments.toArray()); } public Object getLastSegment() { return segments.getLast(); } public Object getFirstSegment() { return segments.getFirst(); } @Override public String toString() { StringBuffer buffer = new StringBuffer(); for (Object segment : segments) { buffer.append(segment).append("::"); } return buffer.toString(); } protected IllegalArgumentException createCyclicPathException( Object segment) { return new IllegalArgumentException("Cyclic in path '" + this + "' while adding segment '" + segment + "'"); } }