/******************************************************************************* * Copyright (c) 2007, 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.wizards; import org.eclipse.cdt.internal.ui.wizards.ICDTCommonProjectWizard; import org.eclipse.cdt.managedbuilder.core.IInputType; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.ui.properties.ManagedBuilderUIImages; import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.cdt.ui.wizards.CNewWizard; import org.eclipse.cdt.ui.wizards.IWizardItemsListListener; import org.eclipse.jface.wizard.IWizard; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; public abstract class AbstractCWizard extends CNewWizard { protected static final Image IMG0 = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_CFOLDER); protected static final Image IMG1 = ManagedBuilderUIImages.get(ManagedBuilderUIImages.IMG_BUILD_CAT); protected static final Image IMG2 = ManagedBuilderUIImages.get(ManagedBuilderUIImages.IMG_BUILD_TOOL); protected Composite parent; protected IWizardItemsListListener listener; @Override public void setDependentControl(Composite _parent, IWizardItemsListListener _listener) { parent = _parent; listener = _listener; } /** * Checks whether toolchain can be displayed * @param tc * @return */ protected boolean isValid(IToolChain tc, boolean supportedOnly, IWizard w) { // Check for langiuage compatibility first in any case if (!isLanguageCompatible(tc, w)) return false; // Do not do further check if all toolchains are permitted if (!supportedOnly) return true; // Filter off unsupported and system toolchains if (tc == null || !tc.isSupported() || tc.isAbstract() || tc.isSystemObject()) return false; // Check for platform compatibility return ManagedBuildManager.isPlatformOk(tc); } /** * Checks toolchain for Language ID, Content type ID * and Extensions, if they are required by wizard. * * @param tc - toolchain to check * @param w - wizard which provides selection criteria * @return */ protected boolean isLanguageCompatible(IToolChain tc, IWizard w) { if (w == null) return true; if (!(w instanceof ICDTCommonProjectWizard)) return true; ITool[] tools = tc.getTools(); ICDTCommonProjectWizard wz = (ICDTCommonProjectWizard)w; String[] langIDs = wz.getLanguageIDs(); String[] ctypeIDs = wz.getContentTypeIDs(); String[] exts = wz.getExtensions(); // nothing requied ? if (empty(langIDs) && empty(ctypeIDs) && empty(exts)) return true; for (int i=0; i<tools.length; i++) { IInputType[] its = tools[i].getInputTypes(); // no input types - check only extensions if (empty(its)) { if (!empty(exts)) { String[] s = tools[i].getAllInputExtensions(); if (contains(exts, s)) return true; // extension fits } continue; } // normal tool with existing input type(s) for (int j = 0; j<its.length; j++) { // Check language IDs if (!empty(langIDs)) { String lang = its[j].getLanguageId(tools[i]); if (contains(langIDs, new String[] {lang})) { return true; // Language ID fits } } // Check content types if (!empty(ctypeIDs)) { String[] ct1 = its[j].getSourceContentTypeIds(); String[] ct2 = its[j].getHeaderContentTypeIds(); if (contains(ctypeIDs, ct1) || contains(ctypeIDs, ct2)) { return true; // content type fits } } // Check extensions if (!empty(exts)) { String[] ex1 =its[j].getHeaderExtensions(tools[i]); String[] ex2 =its[j].getSourceExtensions(tools[i]); if (contains(exts, ex1) || contains(exts, ex2)) { return true; // extension fits fits } } } } return false; // no one value fits to required } private boolean empty(Object[] s) { return (s == null || s.length == 0); } private boolean contains(String[] s1, String[] s2) { for (int i=0; i<s1.length; i++) for (int j=0; j<s2.length; j++) if (s1[i].equals(s2[j])) return true; return false; } /* comment it out for now.. protected boolean isSupportedForTemplate(TemplateInfo templateInfo, IToolChain tc) { String[] tcIds = templateInfo.getToolChainIds(); if (tcIds.length != 0) { for (int i=0; i< tcIds.length; i++) { if (tcIds[i].equals(tc.getId()) || tcIds[i].equals(tc.getSuperClass().getId())) { return true; } } return false; } else { return true; } } */ }