/******************************************************************************* * Copyright (c) 2004, 2007 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.internal.intro; 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.ui.PlatformUI; import org.eclipse.ui.internal.WorkbenchPlugin; import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; import org.eclipse.ui.internal.registry.RegistryReader; /** * Registry for introduction elements. * * @since 3.0 */ public class IntroRegistry implements IIntroRegistry { private static final String TAG_INTRO = "intro";//$NON-NLS-1$ private static final String TAG_INTROPRODUCTBINDING = "introProductBinding";//$NON-NLS-1$ private static final String ATT_INTROID = "introId"; //$NON-NLS-1$ private static final String ATT_PRODUCTID = "productId"; //$NON-NLS-1$ /* * (non-Javadoc) * * @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntroCount() */ public int getIntroCount() { return getIntros().length; } /* * (non-Javadoc) * * @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntros() */ public IIntroDescriptor[] getIntros() { IExtensionPoint point = Platform.getExtensionRegistry() .getExtensionPoint(PlatformUI.PLUGIN_ID, IWorkbenchRegistryConstants.PL_INTRO); if (point == null) { return new IIntroDescriptor[0]; } IExtension[] extensions = point.getExtensions(); extensions = RegistryReader.orderExtensions(extensions); ArrayList list = new ArrayList(extensions.length); for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] elements = extensions[i] .getConfigurationElements(); for (int j = 0; j < elements.length; j++) { if (elements[j].getName().equals(TAG_INTRO)) { try { IIntroDescriptor descriptor = new IntroDescriptor( elements[j]); list.add(descriptor); } catch (CoreException e) { // log an error since its not safe to open a dialog here WorkbenchPlugin .log( IntroMessages.Intro_could_not_create_descriptor, e.getStatus()); } } } } return (IIntroDescriptor[]) list.toArray(new IIntroDescriptor[list .size()]); } /* * (non-Javadoc) * * @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntroForProduct(java.lang.String) */ public IIntroDescriptor getIntroForProduct(String targetProductId) { IExtensionPoint point = Platform.getExtensionRegistry() .getExtensionPoint(PlatformUI.PLUGIN_ID, IWorkbenchRegistryConstants.PL_INTRO); if (point == null) { return null; } IExtension[] extensions = point.getExtensions(); extensions = RegistryReader.orderExtensions(extensions); String targetIntroId = getIntroForProduct(targetProductId, extensions); if (targetIntroId == null) { return null; } IIntroDescriptor descriptor = null; IIntroDescriptor[] intros = getIntros(); for (int i = 0; i < intros.length; i++) { if (intros[i].getId().equals(targetIntroId)) { descriptor = intros[i]; break; } } return descriptor; } /** * @param targetProductId * @param extensions * @return */ private String getIntroForProduct(String targetProductId, IExtension[] extensions) { for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] elements = extensions[i] .getConfigurationElements(); for (int j = 0; j < elements.length; j++) { if (elements[j].getName().equals(TAG_INTROPRODUCTBINDING)) { String introId = elements[j].getAttribute(ATT_INTROID); String productId = elements[j].getAttribute(ATT_PRODUCTID); if (introId == null || productId == null) { IStatus status = new Status( IStatus.ERROR, elements[j].getDeclaringExtension() .getNamespace(), IStatus.ERROR, "introId and productId must be defined.", new IllegalArgumentException()); //$NON-NLS-1$ WorkbenchPlugin.log("Invalid intro binding", status); //$NON-NLS-1$ continue; } if (targetProductId.equals(productId)) { return introId; } } } } return null; } /* * (non-Javadoc) * * @see org.eclipse.ui.internal.intro.IIntroRegistry#getIntro(java.lang.String) */ public IIntroDescriptor getIntro(String id) { IIntroDescriptor[] intros = getIntros(); for (int i = 0; i < intros.length; i++) { IIntroDescriptor desc = intros[i]; if (desc.getId().equals(id)) { return desc; } } return null; } }