/**
* Copyright (c) 2014 - 2017 Frank Appel
* 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:
* Frank Appel - initial API and implementation
*/
package com.codeaffine.eclipse.core.runtime;
import static com.codeaffine.eclipse.core.runtime.ArgumentVerification.verifyNotNull;
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
public class Extension {
private final IConfigurationElement element;
public Extension( IConfigurationElement element ) {
this.element = element;
}
public IConfigurationElement getConfigurationElement() {
return element;
}
public String getAttribute( String name ) {
return element.getAttribute( name );
}
public String getAttribute( String name, String locale ) {
return element.getAttribute( name, locale );
}
public Collection<String> getAttributeNames() {
return asList( element.getAttributeNames() );
}
public String getName() {
return element.getName();
}
public <T> T createExecutableExtension( Class <T> type ) throws ExtensionException {
return createExecutableExtension( "class", type );
}
public <T> T createExecutableExtension( String typeAttribute, Class <T> type ) throws ExtensionException {
verifyNotNull( typeAttribute, "typeAttribute" );
verifyNotNull( type, "type" );
try {
return type.cast( element.createExecutableExtension( typeAttribute ) );
} catch( CoreException ce ) {
throw new ExtensionException( ce );
}
}
public String getValue() {
return element.getValue();
}
public String getValue( String locale ) {
return element.getValue( locale );
}
public Collection<Extension> getChildren() {
List<Extension> result = new ArrayList<Extension>();
for( IConfigurationElement child : element.getChildren() ) {
result.add( new Extension( child ) );
}
return result;
}
public Collection<Extension> getChildren( String name ) {
List<Extension> result = new ArrayList<Extension>();
for( IConfigurationElement child : element.getChildren() ) {
if( child.getName().equals( name ) ) {
result.add( new Extension( child ) );
}
}
return result;
}
}