/*******************************************************************************
 * Copyright (c) 2005, 2011 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ant.internal.ui.model;

import java.io.File;

import org.apache.tools.ant.Task;
import org.apache.tools.ant.util.FileUtils;
import org.eclipse.ant.internal.core.IAntCoreConstants;
import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor;
import org.xml.sax.Attributes;

public class AntAntNode extends AntTaskNode {

	private String fFile;

	public AntAntNode(Task task, Attributes attributes) {
		super(task);
		StringBuffer label = new StringBuffer("ant "); //$NON-NLS-1$
		fFile = attributes.getValue(IAntCoreConstants.DIR);
		if (fFile != null) {
			if (!FileUtils.isAbsolutePath(fFile)) {
				File basedir = task.getProject().getBaseDir();
				if (basedir != null) {
					fFile = basedir.getAbsolutePath() + File.separatorChar + fFile;
				}
			}
			label.append(fFile);
			label.append(File.separatorChar);
		} else {
			File basedir = task.getProject().getBaseDir();
			if (basedir != null) {
				fFile = basedir.getAbsolutePath();
			}
		}
		String fileName = attributes.getValue(IAntModelConstants.ATTR_ANT_FILE);
		if (fileName == null) {
			fileName = "build.xml"; //$NON-NLS-1$
		}
		label.append(fileName);
		if (fFile == null || FileUtils.isAbsolutePath(fileName)) {
			fFile = fileName;
		} else {
			fFile += File.separatorChar + fileName;
		}

		String more = attributes.getValue(IAntModelConstants.ATTR_TARGET);
		if (more != null) {
			label.append(' ');
			label.append(more);
		}
		setBaseLabel(label.toString());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.ant.internal.ui.model.AntElementNode#getReferencedElement(int)
	 */
	@Override
	public String getReferencedElement(int offset) {
		if (fFile != null) {
			String textToSearch = getAntModel().getText(getOffset(), offset - getOffset());
			if (textToSearch != null && textToSearch.length() != 0) {
				String attributeString = AntEditorCompletionProcessor.getAttributeStringFromDocumentStringToPrefix(textToSearch);
				if (IAntModelConstants.ATTR_ANT_FILE.equals(attributeString)) {
					return fFile;
				}
			}
		}
		return null;
	}
}
