/******************************************************************************* * Copyright (c) 2008, 2010 Freescale Semiconductor 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: * Freescale Semiconductor - initial API and implementation * IBM Corporation - ongoing development *******************************************************************************/ package org.eclipse.core.internal.resources.projectvariables; import java.net.URI; import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.variableresolvers.PathVariableResolver; /** * Path Variable representing the parent directory of the variable provided in argument, following * the syntax: * * "${PARENT-COUNT-MyVariable}" * */ public class ParentVariableResolver extends PathVariableResolver { final public static String NAME= "PARENT"; //$NON-NLS-1$ public ParentVariableResolver() { // nothing } public String getValue(String variable, IResource resource) { int index= variable.indexOf('-'); if (index == -1 || index == (variable.length() - 1)) return null; String countRemaining= variable.substring(index + 1); index= countRemaining.indexOf('-'); if (index == -1 || index == (variable.length() - 1)) return null; String countString= countRemaining.substring(0, index); int count= 0; try { count= Integer.parseInt(countString); if (count < 0) return null; } catch (NumberFormatException e) { return null; } String argument= countRemaining.substring(index + 1); URI value= resource.getPathVariableManager().getURIValue(argument); if (value == null) return null; value= resource.getPathVariableManager().resolveURI(value); value= URIUtil.toURI(URIUtil.toPath(value).removeLastSegments(count)); return value.toASCIIString(); } }