/*******************************************************************************
* Copyright (c) 2007, 2016 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 Incorporated - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.autotools.ui.editors.parser;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
public class AutoconfElement {
protected String name;
protected String var;
protected int startOffset;
protected int endOffset;
protected List<AutoconfElement> children;
protected AutoconfElement parent;
private IDocument document;
public AutoconfElement(String name) {
this(name, null);
}
public AutoconfElement(String name, String var) {
this.name = name;
this.var = var;
this.startOffset = 0;
this.children = new ArrayList<>();
}
@Override
public String toString() {
String source = getSource();
if (source == null) {
StringBuilder kids = new StringBuilder();
for (AutoconfElement kid : children) {
kids.append(kid.toString());
kids.append(","); //$NON-NLS-1$
}
source = kids.toString();
}
return getClass().getSimpleName() + ": '" + source + "'"; //$NON-NLS-1$ //$NON-NLS-2$
}
public void addChild(AutoconfElement element) {
children.add(element);
if (element.getParent() == null)
element.setParent(this);
}
public void addSibling(AutoconfElement element) {
parent.addChild(element);
}
public AutoconfElement getLastChild() {
if (hasChildren())
return children.get(children.size() - 1);
return null;
}
public AutoconfElement getParent() {
return parent;
}
public void setParent(AutoconfElement parent) {
this.parent = parent;
}
public AutoconfElement[] getChildren() {
return children.toArray(new AutoconfElement[children.size()]);
}
public boolean hasChildren() {
return !children.isEmpty();
}
public String getName() {
return name;
}
public void setName(String string) {
this.name = string;
}
public String getVar() {
return var;
}
public void setVar(String value) {
var = value;
}
public void setDocument(IDocument document) {
this.document = document;
}
public IDocument getDocument() {
return document;
}
public void setStartOffset(int offset) {
this.startOffset = offset;
}
public int getStartOffset() {
return startOffset;
}
public void setEndOffset(int offset) {
this.endOffset = offset;
}
public int getEndOffset() {
return endOffset;
}
public String getSource() {
if (document != null && startOffset >= 0 && endOffset >= startOffset) {
try {
return document.get(startOffset, endOffset - startOffset);
} catch (BadLocationException e) {
return null;
}
}
return null;
}
/**
* Return the length of this element.
* @return the length of this element.
*/
public int getLength() {
return endOffset - startOffset;
}
}