Created a separated 'externaltools' plugin: initial check-in
[phpeclipse.git] / net.sourceforge.phpeclipse.externaltools / src / net / sourceforge / phpdt / externaltools / internal / registry / ExternalToolVariable.java
diff --git a/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/internal/registry/ExternalToolVariable.java b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/internal/registry/ExternalToolVariable.java
new file mode 100644 (file)
index 0000000..6fbbefb
--- /dev/null
@@ -0,0 +1,156 @@
+package net.sourceforge.phpdt.externaltools.internal.registry;
+
+/**********************************************************************
+Copyright (c) 2002 IBM Corp. and others. All rights reserved.
+This file is made available under the terms of the Common Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/cpl-v10.html
+�
+Contributors:
+**********************************************************************/
+
+import net.sourceforge.phpdt.externaltools.group.IGroupDialogPage;
+import net.sourceforge.phpdt.externaltools.internal.model.ExternalToolsModelMessages;
+import net.sourceforge.phpdt.externaltools.variable.IVariableComponent;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.jface.resource.JFaceColors;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * Abtract representation of the different variables.
+ */
+public abstract class ExternalToolVariable {
+       private static final IVariableComponent defaultComponent = new DefaultVariableComponent(false);
+       
+       private String tag;
+       private String description;
+       private IConfigurationElement element;
+
+       /**
+        * Creates an variable definition
+        * 
+        * @param tag the variable tag
+        * @param description a short description of what the variable will expand to
+        * @param element the configuration element
+        */
+       /*package*/ ExternalToolVariable(String tag, String description, IConfigurationElement element) {
+               super();
+               this.tag = tag;
+               this.description = description;
+               this.element = element;
+       }
+       
+       /**
+        * Creates an instance of the class specified by
+        * the given element attribute name. Can return
+        * <code>null</code> if none or if problems creating
+        * the instance.
+        */
+       protected final Object createObject(String attributeName) {
+               try {
+                       return element.createExecutableExtension(attributeName);
+               } catch (CoreException e) {
+      PHPeclipsePlugin.getDefault().getLog().log(e.getStatus());
+                       return null;
+               }
+       }
+       
+       /**
+        * Returns the component class to allow
+        * visual editing of the variable's value.
+        */
+       public final IVariableComponent getComponent() {
+               String className = element.getAttribute(ExternalToolVariableRegistry.TAG_COMPONENT_CLASS);
+               if (className == null || className.trim().length() == 0)
+                       return defaultComponent;
+                       
+               Object component = createObject(ExternalToolVariableRegistry.TAG_COMPONENT_CLASS);
+               if (component == null)
+                       return new DefaultVariableComponent(true);
+               else
+                       return (IVariableComponent)component;
+       }
+       
+       /**
+        * Returns the variable's description
+        */
+       public final String getDescription() {
+               return description;
+       }
+
+       /**
+        * Returns the variable's tag
+        */
+       public final String getTag() {
+               return tag;
+       }
+
+
+       /**
+        * Default variable component implementation which does not
+        * allow variable value editing visually.
+        */     
+       private static final class DefaultVariableComponent implements IVariableComponent {
+               private boolean showError = false;
+               private Label message = null;
+               
+               public DefaultVariableComponent(boolean showError) {
+                       super();
+                       this.showError = showError;
+               }
+               
+               /* (non-Javadoc)
+                * Method declared on IVariableComponent.
+                */
+               public Control getControl() {
+                       return message;
+               }
+                               
+               /* (non-Javadoc)
+                * Method declared on IVariableComponent.
+                */
+               public void createContents(Composite parent, String varTag, IGroupDialogPage page) {
+                       if (showError) {
+                               message = new Label(parent, SWT.NONE);
+                               GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+                               message.setLayoutData(data);
+                               message.setFont(parent.getFont());
+                               message.setText(ExternalToolsModelMessages.getString("ExternalToolVariable.componentErrorMessage")); //$NON-NLS-1$
+                               message.setForeground(JFaceColors.getErrorText(message.getDisplay()));
+                       }
+               }
+               
+               /* (non-Javadoc)
+                * Method declared on IVariableComponent.
+                */
+               public String getVariableValue() {
+                       return null;
+               }
+               
+               /* (non-Javadoc)
+                * Method declared on IVariableComponent.
+                */
+               public boolean isValid() {
+                       return true;
+               }
+               
+               /* (non-Javadoc)
+                * Method declared on IVariableComponent.
+                */
+               public void setVariableValue(String varValue) {
+               }
+
+               /* (non-Javadoc)
+                * Method declared on IVariableComponent.
+                */
+               public void validate() {
+               }
+       }
+}