1 package net.sourceforge.phpdt.externaltools.internal.registry;
 
   3 /**********************************************************************
 
   4 Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 
   5 This file is made available under the terms of the Common Public License v1.0
 
   6 which accompanies this distribution, and is available at
 
   7 http://www.eclipse.org/legal/cpl-v10.html
 
  10 **********************************************************************/
 
  12 import net.sourceforge.phpdt.externaltools.group.IGroupDialogPage;
 
  13 import net.sourceforge.phpdt.externaltools.internal.model.ExternalToolsModelMessages;
 
  14 import net.sourceforge.phpdt.externaltools.variable.IVariableComponent;
 
  15 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
  17 import org.eclipse.core.runtime.CoreException;
 
  18 import org.eclipse.core.runtime.IConfigurationElement;
 
  19 import org.eclipse.jface.resource.JFaceColors;
 
  20 import org.eclipse.swt.SWT;
 
  21 import org.eclipse.swt.layout.GridData;
 
  22 import org.eclipse.swt.widgets.Composite;
 
  23 import org.eclipse.swt.widgets.Control;
 
  24 import org.eclipse.swt.widgets.Label;
 
  27  * Abtract representation of the different variables.
 
  29 public abstract class ExternalToolVariable {
 
  30         private static final IVariableComponent defaultComponent = new DefaultVariableComponent(false);
 
  33         private String description;
 
  34         private IConfigurationElement element;
 
  37          * Creates an variable definition
 
  39          * @param tag the variable tag
 
  40          * @param description a short description of what the variable will expand to
 
  41          * @param element the configuration element
 
  43         /*package*/ ExternalToolVariable(String tag, String description, IConfigurationElement element) {
 
  46                 this.description = description;
 
  47                 this.element = element;
 
  51          * Creates an instance of the class specified by
 
  52          * the given element attribute name. Can return
 
  53          * <code>null</code> if none or if problems creating
 
  56         protected final Object createObject(String attributeName) {
 
  58                         return element.createExecutableExtension(attributeName);
 
  59                 } catch (CoreException e) {
 
  60       PHPeclipsePlugin.getDefault().getLog().log(e.getStatus());
 
  66          * Returns the component class to allow
 
  67          * visual editing of the variable's value.
 
  69         public final IVariableComponent getComponent() {
 
  70                 String className = element.getAttribute(ExternalToolVariableRegistry.TAG_COMPONENT_CLASS);
 
  71                 if (className == null || className.trim().length() == 0)
 
  72                         return defaultComponent;
 
  74                 Object component = createObject(ExternalToolVariableRegistry.TAG_COMPONENT_CLASS);
 
  75                 if (component == null)
 
  76                         return new DefaultVariableComponent(true);
 
  78                         return (IVariableComponent)component;
 
  82          * Returns the variable's description
 
  84         public final String getDescription() {
 
  89          * Returns the variable's tag
 
  91         public final String getTag() {
 
  97          * Default variable component implementation which does not
 
  98          * allow variable value editing visually.
 
 100         private static final class DefaultVariableComponent implements IVariableComponent {
 
 101                 private boolean showError = false;
 
 102                 private Label message = null;
 
 104                 public DefaultVariableComponent(boolean showError) {
 
 106                         this.showError = showError;
 
 110                  * Method declared on IVariableComponent.
 
 112                 public Control getControl() {
 
 117                  * Method declared on IVariableComponent.
 
 119                 public void createContents(Composite parent, String varTag, IGroupDialogPage page) {
 
 121                                 message = new Label(parent, SWT.NONE);
 
 122                                 GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 
 123                                 message.setLayoutData(data);
 
 124                                 message.setFont(parent.getFont());
 
 125                                 message.setText(ExternalToolsModelMessages.getString("ExternalToolVariable.componentErrorMessage")); //$NON-NLS-1$
 
 126                                 message.setForeground(JFaceColors.getErrorText(message.getDisplay()));
 
 131                  * Method declared on IVariableComponent.
 
 133                 public String getVariableValue() {
 
 138                  * Method declared on IVariableComponent.
 
 140                 public boolean isValid() {
 
 145                  * Method declared on IVariableComponent.
 
 147                 public void setVariableValue(String varValue) {
 
 151                  * Method declared on IVariableComponent.
 
 153                 public void validate() {