/*******************************************************************************
* 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();
}
}