Skip to main content
summaryrefslogblamecommitdiffstats
blob: 29e5327152289b82a7b0dcb55300a32495717d0c (plain) (tree)













































































































































































































































































































                                                                                                                                             
package org.eclipse.ui.externaltools.internal.ant.preferences;

import java.util.ArrayList;
import java.util.Arrays;

import org.eclipse.ant.core.AntCorePlugin;
import org.eclipse.ant.core.Property;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.externaltools.internal.model.ExternalToolsPlugin;

/**
 * Preference page for setting global Ant user properties.
 * All properties specified here will be set as user properties on the 
 * project for any Ant build
 */
public class AntPropertiesPage extends AntPage {
	
	private static final int ADD_BUTTON = IDialogConstants.CLIENT_ID + 1;
	private static final int EDIT_BUTTON = IDialogConstants.CLIENT_ID + 2;
	private static final int REMOVE_BUTTON = IDialogConstants.CLIENT_ID + 3;
	
	private static final int ADD_PROPERTY_FILE_BUTTON = IDialogConstants.CLIENT_ID + 4;
	private static final int EDIT_PROPERTY_FILE_BUTTON = IDialogConstants.CLIENT_ID + 5;
	private static final int REMOVE_PROPERTY_FILE_BUTTON = IDialogConstants.CLIENT_ID + 6;
	
	private Button addButton;
	private Button addFileButton;
	private Button editFileButton;
	private Button removeFileButton;
	
	private TableViewer fileTableViewer;
	private AntPageContentProvider fileContentProvider;
	
	private final AntPropertiesLabelProvider labelProvider = new AntPropertiesLabelProvider();
	
	/**
	 * Creates an instance.
	 */
	public AntPropertiesPage(AntPreferencePage preferencePage) {
		super(preferencePage);
	}
	
	/* (non-Javadoc)
	 * Method declared on AntPage.
	 */
	protected ITableLabelProvider getLabelProvider() {
		return labelProvider;
	}

	/* (non-Javadoc)
	 * Method declared on AntPage.
	 */
	protected void addButtonsToButtonGroup(Composite parent) {
		if (editButton == null) {
			addButton= createButton(parent, "AntPropertiesPage.addButton", ADD_BUTTON); //$NON-NLS-1$;
			editButton= createButton(parent, "AntPropertiesPage.editButton", EDIT_BUTTON); //$NON-NLS-1$;
			removeButton= createButton(parent, "AntPropertiesPage.removeButton", REMOVE_BUTTON); //$NON-NLS-1$;
		} else {
			addFileButton= createButton(parent, "AntPropertiesPage.addFileButton", ADD_PROPERTY_FILE_BUTTON); //$NON-NLS-1$;
			editFileButton= createButton(parent, "AntPropertiesPage.editFileButton", EDIT_PROPERTY_FILE_BUTTON); //$NON-NLS-1$;
			removeFileButton= createButton(parent, "AntPropertiesPage.removeButton", REMOVE_PROPERTY_FILE_BUTTON); //$NON-NLS-1$;
		}
	}
	
	/**
	 * Creates the tab item that contains this sub-page.
	 */
	public TabItem createTabItem(TabFolder folder) {
		TabItem item = new TabItem(folder, SWT.NONE);
		item.setText(AntPreferencesMessages.getString("AntPropertiesPage.title"));
		item.setImage(labelProvider.getPropertyImage());
		item.setData(this);
		item.setControl(createControl(folder));
		return item;
	}
	
	/**
	 * Creates the table viewer.
	 */
	protected void createTable(Composite parent) {
		if (getTableViewer() == null) {
			super.createTable(parent);
		} else {
			Table table = new Table(parent, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
			GridData data= new GridData(GridData.FILL_BOTH);
			data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
			table.setLayoutData(data);
			fileContentProvider = getContentProvider();
			fileTableViewer = new TableViewer(table);
			fileTableViewer.setContentProvider(fileContentProvider);
			fileTableViewer.setLabelProvider(getLabelProvider());
			fileTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
				public void selectionChanged(SelectionChangedEvent event) {
					fileTableSelectionChanged((IStructuredSelection) event.getSelection());
				}
			});
			
			fileTableViewer.addDoubleClickListener(new IDoubleClickListener() {
				public void doubleClick(DoubleClickEvent event) {
					//editFile((IStructuredSelection)event.getSelection());
				}
			});
		}
	}
	
	/**
	 * Creates this page's controls
	 */
	public Control createControl(Composite parent) {
		Composite top = (Composite)super.createControl(parent);
		
		Label separator = new Label(parent, SWT.NONE);
		GridData gd = new GridData(GridData.GRAB_HORIZONTAL);
		gd.heightHint = 4;
		separator.setLayoutData(gd);
		
		createTable(top);
		createButtonGroup(top);
		
		return top;
	}
	
	/* (non-Javadoc)
	 * Method declared on AntPage.
	 */
	protected void buttonPressed(int buttonId) {
		switch (buttonId) {
			case ADD_BUTTON :
				addProperty();
				break;
			case EDIT_BUTTON :
				edit(getSelection());
				break;
			case REMOVE_BUTTON :
				removeButtonPressed();
				break;
			case ADD_PROPERTY_FILE_BUTTON :
				//addFile();
				break;
			case EDIT_PROPERTY_FILE_BUTTON :
				//editFile(getSelection());
				break;
			case REMOVE_PROPERTY_FILE_BUTTON :
				//removeFile();
				break;
		}
	}
	
	/**
	 * Allows the user to enter a global user property
	 */
	private void addProperty() {
		String title = "Add Property"; 
		String msg = "Enter a name and value for the user property:"; 
		AddCustomDialog dialog = new AddCustomDialog(getShell(), null, title, msg, "&Value:");
		if (dialog.open() == Dialog.CANCEL) {
			return;
		}

		Property prop = new Property();
		prop.setName(dialog.getName());
		prop.setValue(dialog.getClassName());
		addContent(prop);
	}
	
	protected void edit(IStructuredSelection selection) {
		Property prop = (Property) selection.getFirstElement();
		if (prop == null) {
			return;
		}
		String title = "Edit User Property";
		String msg = "Modify the name or value of a user property:";
		AddCustomDialog dialog = new AddCustomDialog(getShell(), null, title, msg, "Value:");
		
		dialog.setClassName(prop.getValue());
		dialog.setName(prop.getName());
		if (dialog.open() == Dialog.CANCEL) {
			return;
		}

		prop.setName(dialog.getName());
		prop.setValue(dialog.getClassName());
		updateContent(prop);
	}
	
	protected void performDefaults() {
		setInput(Arrays.asList(AntCorePlugin.getPlugin().getPreferences().getCustomProperties()));
	}

	/**
	 * Label provider for classpath elements
	 */
	private static final class AntPropertiesLabelProvider extends LabelProvider implements ITableLabelProvider {
		private static final String IMG_CLASSPATH = "icons/full/obj16/classpath.gif"; //$NON-NLS-1$;
		private static final String IMG_PROPERTY = "icons/full/obj16/prop_ps.gif"; //$NON-NLS-1$;

		private Image classpathImage;
		private Image folderImage;
		private Image propertyImage;
	
		/**
		 * Creates an instance.
		 */
		public AntPropertiesLabelProvider() {
		}
		
		/* (non-Javadoc)
		 * Method declared on IBaseLabelProvider.
		 */
		public void dispose() {
			// Folder image is shared, do not dispose.
			folderImage = null;
			if (classpathImage != null) {
				classpathImage.dispose();
				classpathImage = null;
			}
			if (propertyImage != null) {
				propertyImage.dispose();
				propertyImage = null;
			}
		}
		
		/* (non-Javadoc)
		 * Method declared on ITableLabelProvider.
		 */
		public Image getColumnImage(Object element, int columnIndex) {
			return getPropertyImage();
		}
		
		/* (non-Javadoc)
		 * Method declared on ITableLabelProvider.
		 */
		public String getColumnText(Object element, int columnIndex) {
			return element.toString();
		}

		private Image getFolderImage() {
			if (folderImage == null)
				folderImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
			return folderImage;
		}
		
		private Image getPropertyImage() {
			if (propertyImage == null) {
				ImageDescriptor desc= ExternalToolsPlugin.getDefault().getImageDescriptor(IMG_PROPERTY);
				propertyImage = desc.createImage();
			} 
			return propertyImage;
		}
		
		private Image getClasspathImage() {
			if (classpathImage == null) {
				ImageDescriptor desc = ExternalToolsPlugin.getDefault().getImageDescriptor(IMG_CLASSPATH);
				classpathImage = desc.createImage();
			}
			return classpathImage;
		}
	}
	
	/**
	 * Handles selection changes in the Property file table viewer.
	 */
	protected void fileTableSelectionChanged(IStructuredSelection newSelection) {
		int size = newSelection.size();
		editFileButton.setEnabled(size == 1);
		removeFileButton.setEnabled(size > 0);
		addFileButton.setEnabled(false);
	}
	
	/**
	 * Sets the contents of the table on this page.  Has no effect
	 * if this widget has not yet been created or has been disposed.
	 */
	public void initialize() {
		getTableViewer().setInput(Arrays.asList(AntCorePlugin.getPlugin().getPreferences().getCustomProperties()));
		fileTableViewer.setInput(new ArrayList());
		tableSelectionChanged((IStructuredSelection) getTableViewer().getSelection());
		fileTableSelectionChanged((IStructuredSelection)fileTableViewer.getSelection());
	}
}

Back to the top