/*******************************************************************************
* Copyright (c) 2007, 2013 Red Hat, Inc.
* 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:
* Red Hat - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.rpm.ui.editor.parser;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.linuxtools.internal.rpm.ui.editor.SpecfileLog;
import org.eclipse.linuxtools.internal.rpm.ui.editor.UiUtils;
import org.eclipse.linuxtools.internal.rpm.ui.editor.parser.Messages;
import org.eclipse.linuxtools.rpm.core.utils.RPMQuery;
import org.eclipse.osgi.util.NLS;
public class SpecfileElement {
private Specfile specfile;
private String name;
private int lineNumber;
private int lineStartPosition;
private int lineEndPosition;
public int getLineNumber() {
return lineNumber;
}
public void setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
}
public SpecfileElement() {
// weird
}
public SpecfileElement(String name) {
setName(name);
}
public String getName() {
return resolve(name);
}
public final void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
public int getLineEndPosition() {
return lineEndPosition;
}
public void setLineEndPosition(int lineEndPosition) {
this.lineEndPosition = lineEndPosition;
}
public int getLineStartPosition() {
return lineStartPosition;
}
public void setLineStartPosition(int lineStartPosition) {
this.lineStartPosition = lineStartPosition;
}
public Specfile getSpecfile() {
return specfile;
}
public void setSpecfile(Specfile specfile) {
this.specfile = specfile;
}
public String resolve(String toResolve) {
if (specfile == null || toResolve.equals("")) {//$NON-NLS-1$
if (toResolve.length() > 2
&& toResolve.substring(2, toResolve.length() - 1).equals(
name)) {
return toResolve;
}
}
return UiUtils.resolveDefines(specfile, toResolve);
}
/**
* Resolve using RPM to evaluate string
*
* @param toResolve
* The string to be evaluated
* @return The evaluated string
*/
public String resolveEval(String toResolve) {
String str = ""; //$NON-NLS-1$
try {
if ((specfile == null || toResolve.equals("")) && toResolve.length() > 2 && toResolve.substring(2, toResolve.length() - 1).equals(name)) { //$NON-NLS-1$
return toResolve;
}
str = RPMQuery.eval(UiUtils.resolveDefines(specfile, toResolve)).trim();
} catch (CoreException e) {
SpecfileLog.logError(NLS.bind(Messages.getString("SpecfileElement_unableToResolve"), toResolve), e); //$NON-NLS-1$
}
return str;
}
}