/******************************************************************************* * Copyright (c) 2007, 2009 Innoopract Informationssysteme GmbH. * 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: * Innoopract Informationssysteme GmbH - initial API and implementation * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.rap.ui.internal.launch.tab; import java.util.*; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.pde.core.plugin.*; public final class EntryPointExtension extends AbstractExtension { private static final String EXTENSION_ID = "org.eclipse.rap.ui.entrypoint"; //$NON-NLS-1$ private static final String ATTR_PARAMETER = "parameter"; //$NON-NLS-1$ private static final String ATTR_ID = "id"; //$NON-NLS-1$ public static EntryPointExtension findById( final String id ) { EntryPointExtension result = null; if( id != null ) { EntryPointExtension[] extensions = findInWorkspace( null ); for( int i = 0; result == null && i < extensions.length; i++ ) { if( id.equals( extensions[ i ].getId() ) ) { result = extensions[ i ]; } } } return result; } public static EntryPointExtension[] findInPlugins( final String[] pluginIds, final IProgressMonitor monitor ) { IPluginExtension[] extensions = ExtensionUtil.getPluginExtensions( pluginIds, EXTENSION_ID, monitor ); return findInPluginExtensions( extensions ); } public static EntryPointExtension[] findInWorkspace( final IProgressMonitor monitor ) { IPluginExtension[] extensions = ExtensionUtil.getWorkspaceExtensions( EXTENSION_ID, monitor ); return findInPluginExtensions( extensions ); } private static EntryPointExtension[] findInPluginExtensions( final IPluginExtension[] extensions ) { List list = new ArrayList(); for( int i = 0; i < extensions.length; i++ ) { EntryPointExtension[] entryPoints; entryPoints = getEntryPointExtensions( extensions[ i ] ); list.addAll( Arrays.asList( entryPoints ) ); } EntryPointExtension[] result = new EntryPointExtension[ list.size() ]; list.toArray( result ); return result; } private static final EntryPointExtension[] getEntryPointExtensions( final IPluginExtension pluginExtension ) { IPluginObject[] children = pluginExtension.getChildren(); EntryPointExtension[] result = new EntryPointExtension[ children.length ]; for( int i = 0; i < children.length; i++ ) { String project = ExtensionUtil.getProjectName( pluginExtension ); IPluginElement element = ( IPluginElement )children[ i ]; String parameter = ExtensionUtil.getAttribute( element, ATTR_PARAMETER ); String id = ExtensionUtil.getAttribute( element, ATTR_ID ); result[ i ] = new EntryPointExtension( project, id, parameter ); } return result; } private final String id; private final String parameter; public EntryPointExtension( final String project, final String id, final String parameter ) { super( project ); this.id = id; this.parameter = parameter; } public final String getId() { return id; } public final String getParameter() { return parameter; } ///////////////////// // hashCode & equals public final int hashCode() { int prime = 31; int result = 1; int valueHashCode = parameter == null ? 0 : parameter.hashCode(); result = prime * result + valueHashCode; int projectHashCode = project == null ? 0 : project.hashCode(); result = prime * result + projectHashCode; return result; } public final boolean equals( final Object obj ) { boolean result; if( this == obj ) { result = true; } else if( obj == null ) { result = false; } else if( getClass() != obj.getClass() ) { result = false; } else { result = true; EntryPointExtension other = ( EntryPointExtension )obj; if( parameter == null ) { if( other.parameter != null ) { result = false; } } else if( !parameter.equals( other.parameter ) ) { result = false; } if( project == null ) { if( other.project != null ) { result = false; } } else if( !project.equals( other.project ) ) { result = false; } } return result; } }