| /******************************************************************************* |
| * Copyright (c) 2005, 2006 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.commands; |
| |
| import org.eclipse.core.commands.AbstractParameterValueConverter; |
| import org.eclipse.core.commands.ParameterValueConversionException; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; |
| |
| /** |
| * A proxy for a parameter value converter that has been defined in the regisry. |
| * This delays the class loading until the converter is really asked to do |
| * string/object conversions. |
| * |
| * @since 3.2 |
| */ |
| public final class ParameterValueConverterProxy extends |
| AbstractParameterValueConverter { |
| |
| /** |
| * The configuration element providing the executable extension that will |
| * extend <code>AbstractParameterValueConverter</code>. This value will |
| * not be <code>null</code>. |
| */ |
| private final IConfigurationElement converterConfigurationElement; |
| |
| /** |
| * The real parameter value converter instance. This will be |
| * <code>null</code> until one of the conversion methods are used. |
| */ |
| private AbstractParameterValueConverter parameterValueConverter; |
| |
| /** |
| * Constructs a <code>ParameterValueConverterProxy</code> to represent the |
| * real converter until it is needed. |
| * |
| * @param converterConfigurationElement |
| * The configuration element from which the real converter can be |
| * loaded. |
| */ |
| public ParameterValueConverterProxy( |
| final IConfigurationElement converterConfigurationElement) { |
| if (converterConfigurationElement == null) { |
| throw new NullPointerException( |
| "converterConfigurationElement must not be null"); //$NON-NLS-1$ |
| } |
| |
| this.converterConfigurationElement = converterConfigurationElement; |
| } |
| |
| public final Object convertToObject(final String parameterValue) |
| throws ParameterValueConversionException { |
| return getConverter().convertToObject(parameterValue); |
| } |
| |
| public final String convertToString(final Object parameterValue) |
| throws ParameterValueConversionException { |
| return getConverter().convertToString(parameterValue); |
| } |
| |
| /** |
| * Returns the real parameter value converter for this proxy or throws an |
| * exception indicating the converter could not be obtained. |
| * |
| * @return the real converter for this proxy; never <code>null</code>. |
| * @throws ParameterValueConversionException |
| * if the converter could not be obtained |
| */ |
| private AbstractParameterValueConverter getConverter() |
| throws ParameterValueConversionException { |
| if (parameterValueConverter == null) { |
| try { |
| parameterValueConverter = (AbstractParameterValueConverter) converterConfigurationElement |
| .createExecutableExtension(IWorkbenchRegistryConstants.ATT_CONVERTER); |
| } catch (final CoreException e) { |
| throw new ParameterValueConversionException( |
| "Problem creating parameter value converter", e); //$NON-NLS-1$ |
| } catch (final ClassCastException e) { |
| throw new ParameterValueConversionException( |
| "Parameter value converter was not a subclass of AbstractParameterValueConverter", e); //$NON-NLS-1$ |
| } |
| } |
| return parameterValueConverter; |
| } |
| } |