/*******************************************************************************
* Copyright (c) 2006, 2010 Intel Corporation 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:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.ui.properties;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.internal.core.OptionCategory;
/**
* This class represent the elements in the TreeViewer that displays the tools
* and categories in the tool options property pages. The reason for these
* elements is illustrated by bugzilla #123461. We used to use the ToolChain,
* Tool and OptionCategory objects themselves as the elements in the TreeViewer,
* but the same OptionCategory can appear more than once in the list of Tree
* Viewer items, and this caused problems.
*
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class ToolListElement {
/*
* Bookeeping variables
*/
private ToolListElement parent = null;
private List<ToolListElement> childElements = null;
private IHoldsOptions optionHolder = null;
private IOptionCategory optionCategory = null;
private ITool tool = null;
/*
* Constructor for an element tha represents an option category
*/
public ToolListElement(ToolListElement parent, IHoldsOptions optionHolder, IOptionCategory optionCategory) {
this.parent = parent;
this.optionHolder = optionHolder;
this.optionCategory = optionCategory;
}
/*
* Constructor for an element tha represents a tool
*/
public ToolListElement(ITool tool) {
this.tool = tool;
}
public boolean isEquivalentTo(ToolListElement e) {
if (tool != null) {
// Look for a matching tool
ITool matchTool = e.getTool();
if (matchTool == tool) return true;
if (matchTool == null) return false;
if (matchTool.getName().equals(tool.getUniqueRealName())) return true;
return false;
}
if (optionCategory != null) {
IOptionCategory matchCategory = e.getOptionCategory();
IHoldsOptions matchHolder = e.getHoldOptions();
if (matchCategory == optionCategory &&
matchHolder == optionHolder) return true;
if (matchCategory == null) return false;
//String matchCategoryName = matchCategory.getName();
//String optionCategoryName = optionCategory.getName();
String matchCategoryName = OptionCategory.makeMatchName(matchCategory);
String optionCategoryName = OptionCategory.makeMatchName(optionCategory);
if (matchHolder.getName().equals(optionHolder.getName()) &&
matchCategoryName.equals(optionCategoryName)) return true;
return false;
}
return false;
}
/*
* Field accessors
*/
public ToolListElement getParent() {
return parent;
}
public IHoldsOptions getHoldOptions() {
return optionHolder;
}
public IOptionCategory getOptionCategory() {
return optionCategory;
}
public ITool getTool() {
return tool;
}
/*
* Children handling
*/
public ToolListElement[] getChildElements() {
if (childElements != null)
return childElements.toArray(new ToolListElement[childElements.size()]);
else
return new ToolListElement[0];
}
public void addChildElement(ToolListElement element) {
if (childElements == null)
childElements = new ArrayList<ToolListElement>();
childElements.add(element);
}
}