/******************************************************************************* * Copyright (c) 2002, 2011 IBM 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: * Timesys - Initial API and implementation * IBM Rational Software * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; import org.eclipse.cdt.managedbuilder.core.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IOptionCategoryApplicability; import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; /** * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ public class ToolListContentProvider implements ITreeContentProvider{ public static final int FILE = 0x1; public static final int FOLDER = 0x2; public static final int PROJECT = 0x4; private IResourceInfo fInfo; private int elementType; private ToolListElement[] elements; /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() {} public ToolListContentProvider(int elementType) { this.elementType = elementType; } private ToolListElement[] createElements(IConfiguration config) { IOptionCategory toolChainCategories[]; ITool filteredTools[]; List<ToolListElement> elementList = new ArrayList<ToolListElement>(); if (config != null) { // Get the the option categories of the toolChain IToolChain toolChain = config.getToolChain(); toolChainCategories = toolChain.getChildCategories(); // Create an element for each one for (int i=0; i<toolChainCategories.length; i++) { ToolListElement e = new ToolListElement(null, toolChain, toolChainCategories[i]); elementList.add(e); createChildElements(e); } // Get the tools to be displayed filteredTools = config.getFilteredTools(); // Create an element for each one for (int i=0; i<filteredTools.length; i++) { ToolListElement e = new ToolListElement(filteredTools[i]); elementList.add(e); createChildElements(e,config); } } return elementList.toArray(new ToolListElement[elementList.size()]); } private ToolListElement[] createElements(IResourceInfo info) { List<ToolListElement> elementList = new ArrayList<ToolListElement>(); if (info != null) { ITool[] tools = null; if(info instanceof IFolderInfo){ tools = ((IFolderInfo)info).getFilteredTools(); } else { tools = info.getTools(); } // Create an element for each one for (int i=0; i<tools.length; i++) { if (tools[i].getCustomBuildStep()) continue; ToolListElement e = new ToolListElement(tools[i]); elementList.add(e); createChildElements(e); } } return elementList.toArray(new ToolListElement[elementList.size()]); } private void createChildElements(ToolListElement parentElement) { createChildElements(parentElement,null); } private void createChildElements(ToolListElement parentElement, IConfiguration config) { IOptionCategory parent = parentElement.getOptionCategory(); IHoldsOptions optHolder = parentElement.getHoldOptions(); IOptionCategoryApplicability applicabilityCalculator = null; if (parent == null) { parent = parentElement.getTool().getTopOptionCategory(); // Must be an ITool optHolder = parentElement.getTool(); } IOptionCategory[] cats = parent.getChildCategories(); // Create an element for each one for (int i=0; i<cats.length; i++) { ToolListElement e = new ToolListElement(parentElement, optHolder, cats[i]); applicabilityCalculator = e.getOptionCategory().getApplicabilityCalculator(); if (applicabilityCalculator == null || applicabilityCalculator.isOptionCategoryVisible(config, optHolder, parent)) { parentElement.addChildElement(e); createChildElements(e,config); } } } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ public Object[] getChildren(Object parentElement) { if (parentElement instanceof IConfiguration || parentElement instanceof IResourceConfiguration ) { return elements; } return ((ToolListElement)parentElement).getChildElements(); } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return elements; } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) */ public Object getParent(Object element) { return ((ToolListElement)element).getParent(); } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) */ public boolean hasChildren(Object element) { return getChildren(element).length > 0; } /** * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (newInput == null) return; fInfo = (IResourceInfo)newInput; if (elementType == PROJECT) elements = createElements(fInfo.getParent()); else elements = createElements(fInfo); } }