/******************************************************************************* * Copyright (c) 2006 Oracle Corporation and others. * 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: * Oracle Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.bpel.xpath10; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Location path expression in XPath. * * @author Michal Chmielewski (michal.chmielewski@oracle.com) * @date Aug 26, 2008 * */ @SuppressWarnings("nls") public class LocationPath extends Expr { List<Step> fSteps = new ArrayList<Step>(); boolean fAbsolute = false; /** * A brand new shiny LocationPath expression. * * @param abs is it an absolute path ? true/false * @param steps the steps in the path. */ public LocationPath ( boolean abs, Step ... steps) { super(null); fAbsolute = abs; for(Step s : steps) { addStep(s); } } /** * Add a step to this path expression. * * @param s step */ public void addStep (Step s) { if (s != null) { fSteps.add(s); } } /** * Add as the first step of the path (from the beginning). * * @param s */ public void addFirstStep (Step s) { if (s != null) { fSteps.add(0, s); } } /** * @return the steps in the location path expression. */ public List<Step> getSteps () { return fSteps; } /** * @return is it an absolute path expression ? */ public boolean isAbsolute() { return fAbsolute; } /** * Set if expression is absolute (from parser). * @param v true/false */ public void setIsAbsolute (boolean v) { fAbsolute = v; } @Override protected String asText() { StringBuilder buf = new StringBuilder(); if (isAbsolute()) { buf.append("/"); } Iterator<Step> stepIter = getSteps().iterator(); while (stepIter.hasNext()) { buf.append(stepIter.next().getText()); if (stepIter.hasNext()) { buf.append("/"); } } return buf.toString(); } /** * @see org.eclipse.bpel.xpath10.Expr#toString() */ @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append("{"); buf.append(getClass().getSimpleName()); buf.append(",").append(isAbsolute()).append(","); Iterator<Step> stepIter = getSteps().iterator(); while (stepIter.hasNext()) { buf.append( stepIter.next() ); if (stepIter.hasNext()) { buf.append("/"); } } buf.append("}"); return buf.toString(); } /** * @see org.eclipse.bpel.xpath10.Expr#getPosition() */ @Override public int getPosition () { return fSteps.size() > 0 ? fSteps.get(0).getPosition() : -1; } /** * @see org.eclipse.bpel.xpath10.Expr#getEndPosition() */ @Override public int getEndPosition () { int size = fSteps.size(); return size > 0 ? fSteps.get(size-1).getEndPosition() : -1; } }