/******************************************************************************* * Copyright (c) 2004, 2012 QNX Software Systems 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: * QNX Software Systems - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.ui.dialogs.cpaths; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.swt.SWTException; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.osgi.framework.Bundle; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IContainerEntry; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.wizards.IPathEntryContainerPage; import org.eclipse.cdt.internal.ui.util.CoreUtility; /** * @deprecated as of CDT 4.0. This wizard was used in property pages/wizards * for 3.X style projects. */ @Deprecated public class CPathContainerDescriptor implements IContainerDescriptor { /** * Adapter class to adapter deprecated ICPathContainerPage to new IPathEntryContainerPage * @author Dave * @deprecated */ @Deprecated public static class PathEntryContainerPageAdapter implements IPathEntryContainerPage { public static IPathEntryContainerPage createAdapter(Object elem) { if (elem instanceof org.eclipse.cdt.ui.wizards.ICPathContainerPage) { return new PathEntryContainerPageAdapter((org.eclipse.cdt.ui.wizards.ICPathContainerPage) elem); } return null; } private final org.eclipse.cdt.ui.wizards.ICPathContainerPage fPage; protected PathEntryContainerPageAdapter(org.eclipse.cdt.ui.wizards.ICPathContainerPage page) { fPage = page; } /* (non-Javadoc) * @see org.eclipse.cdt.ui.wizards.IPathEntryContainerPage#initialize(org.eclipse.cdt.core.model.ICProject, org.eclipse.cdt.core.model.IPathEntry[]) */ @Override public void initialize(ICProject project, IPathEntry[] currentEntries) { fPage.initialize(project, currentEntries); } /* (non-Javadoc) * @see org.eclipse.cdt.ui.wizards.IPathEntryContainerPage#finish() */ @Override public boolean finish() { return fPage.finish(); } /* (non-Javadoc) * @see org.eclipse.cdt.ui.wizards.IPathEntryContainerPage#getNewContainers() */ @Override public IContainerEntry[] getNewContainers() { IPathEntry[] entries = fPage.getContainerEntries(); IContainerEntry[] containers = new IContainerEntry[entries.length]; System.arraycopy(entries, 0, containers, 0, entries.length); return containers; } /* (non-Javadoc) * @see org.eclipse.cdt.ui.wizards.IPathEntryContainerPage#setSelection(org.eclipse.cdt.core.model.IContainerEntry) */ @Override public void setSelection(IContainerEntry containerEntry) { fPage.setSelection(containerEntry); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { fPage.createControl(parent); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#canFlipToNextPage() */ @Override public boolean canFlipToNextPage() { return fPage.canFlipToNextPage(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#getName() */ @Override public String getName() { return fPage.getName(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#getNextPage() */ @Override public IWizardPage getNextPage() { return fPage.getNextPage(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#getPreviousPage() */ @Override public IWizardPage getPreviousPage() { return fPage.getPreviousPage(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#getWizard() */ @Override public IWizard getWizard() { return fPage.getWizard(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#isPageComplete() */ @Override public boolean isPageComplete() { return fPage.isPageComplete(); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#setPreviousPage(org.eclipse.jface.wizard.IWizardPage) */ @Override public void setPreviousPage(IWizardPage page) { fPage.setPreviousPage(page); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#setWizard(org.eclipse.jface.wizard.IWizard) */ @Override public void setWizard(IWizard newWizard) { fPage.setWizard(newWizard); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#dispose() */ @Override public void dispose() { fPage.dispose(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#getControl() */ @Override public Control getControl() { return fPage.getControl(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#getDescription() */ @Override public String getDescription() { return fPage.getDescription(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#getErrorMessage() */ @Override public String getErrorMessage() { return fPage.getErrorMessage(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#getImage() */ @Override public Image getImage() { return fPage.getImage(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#getMessage() */ @Override public String getMessage() { return fPage.getMessage(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#getTitle() */ @Override public String getTitle() { return fPage.getTitle(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#performHelp() */ @Override public void performHelp() { fPage.performHelp(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setDescription(java.lang.String) */ @Override public void setDescription(String description) { fPage.setDescription(description); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setImageDescriptor(org.eclipse.jface.resource.ImageDescriptor) */ @Override public void setImageDescriptor(ImageDescriptor image) { fPage.setImageDescriptor(image); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setTitle(java.lang.String) */ @Override public void setTitle(String title) { fPage.setTitle(title); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean) */ @Override public void setVisible(boolean visible) { fPage.setVisible(visible); } } private IConfigurationElement fConfigElement; private static final String ATT_EXTENSION = "PathContainerPage"; //$NON-NLS-1$ private static final String ATT_ID = "id"; //$NON-NLS-1$ private static final String ATT_NAME = "name"; //$NON-NLS-1$ private static final String ATT_ICON = "icon"; //$NON-NLS-1$ private static final String ATT_PAGE_CLASS = "class"; //$NON-NLS-1$ private Image pageImage; public CPathContainerDescriptor(IConfigurationElement configElement) throws CoreException { super(); fConfigElement = configElement; String id = fConfigElement.getAttribute(ATT_ID); String name = configElement.getAttribute(ATT_NAME); String pageClassName = configElement.getAttribute(ATT_PAGE_CLASS); if (name == null) { throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, "Invalid extension (missing name): " + id, //$NON-NLS-1$ null)); } if (pageClassName == null) { throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, "Invalid extension (missing page class name): " + id, null)); //$NON-NLS-1$ } } @Override public IPathEntryContainerPage createPage() throws CoreException { Object elem = CoreUtility.createExtension(fConfigElement, ATT_PAGE_CLASS); if (elem instanceof IPathEntryContainerPage) { return (IPathEntryContainerPage) elem; } IPathEntryContainerPage result= PathEntryContainerPageAdapter.createAdapter(elem); if (result != null) { return result; } String id = fConfigElement.getAttribute(ATT_ID); throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, "Invalid extension (page not of type IClasspathContainerPage): " + id, null)); //$NON-NLS-1$ } @Override public String getName() { return fConfigElement.getAttribute(ATT_NAME); } @Override public Image getImage() { if (pageImage == null) { String imageName = fConfigElement.getAttribute(ATT_ICON); if (imageName != null) { IExtension extension = fConfigElement.getDeclaringExtension(); String plugin = extension.getContributor().getName(); Image image = getImageFromPlugin(plugin, imageName); pageImage = image; } } return pageImage; } public Image getImageFromPlugin(String plugin, String subdirectoryAndFilename) { Bundle bundle = Platform.getBundle(plugin); URL iconURL = bundle.getEntry("/"); //$NON-NLS-1$ return getImageFromURL(iconURL, subdirectoryAndFilename); } public Image getImageFromURL(URL installURL, String subdirectoryAndFilename) { Image image = null; try { URL newURL = new URL(installURL, subdirectoryAndFilename); ImageDescriptor desc = ImageDescriptor.createFromURL(newURL); image = desc.createImage(); } catch (MalformedURLException e) { } catch (SWTException e) { } return image; } public String getPageClass() { return fConfigElement.getAttribute(ATT_PAGE_CLASS); } @Override public boolean canEdit(IPathEntry entry) { String id = fConfigElement.getAttribute(ATT_ID); if (entry.getEntryKind() == IPathEntry.CDT_CONTAINER) { String type = entry.getPath().segment(0); return id.equals(type); } return false; } public static IContainerDescriptor[] getDescriptors() { ArrayList<IContainerDescriptor> containers = new ArrayList<IContainerDescriptor>(); IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(CUIPlugin.PLUGIN_ID, ATT_EXTENSION); if (extensionPoint != null) { IContainerDescriptor defaultPage = null; String defaultPageName = CPathContainerDefaultPage.class.getName(); IConfigurationElement[] elements = extensionPoint.getConfigurationElements(); for (IConfigurationElement element : elements) { try { CPathContainerDescriptor curr = new CPathContainerDescriptor(element); if (defaultPageName.equals(curr.getPageClass())) { defaultPage = curr; } else { containers.add(curr); } } catch (CoreException e) { CUIPlugin.log(e); } } if (defaultPageName != null && containers.isEmpty()) { // default page only added if no other extensions found containers.add(defaultPage); } } return containers.toArray(new CPathContainerDescriptor[containers.size()]); } }