/*******************************************************************************
* Copyright (c) 2012 Pivotal Software, Inc.
* 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.frameworks.ui.internal.parameters.editors;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.springsource.ide.eclipse.commons.frameworks.core.internal.commands.ICommandParameter;
import org.springsource.ide.eclipse.commons.frameworks.core.internal.commands.ICommandParameterDescriptor;
import org.springsource.ide.eclipse.commons.frameworks.core.internal.commands.JavaParameterDescriptor;
import org.springsource.ide.eclipse.commons.frameworks.ui.internal.contentassist.AbstractJavaContentAsssitHandler;
import org.springsource.ide.eclipse.commons.frameworks.ui.internal.contentassist.IJavaContentAssistHandler;
import org.springsource.ide.eclipse.commons.frameworks.ui.internal.contentassist.JavaContentAssistUIAdapter;
/**
* Editor that creates controls for entering Java types, as well as browsing for
* types. Note that this requires a Java UI adapter that supports content
* assist, adapts controls to support content assist, as well as support for
* browsing Java types. If no adapter is provider, this editor will have a
* regular text control with no browse button.
* @author Nieraj Singh
*/
public class JavaParameterEditor extends BaseParameterEditor {
private JavaContentAssistUIAdapter adapter;
public JavaParameterEditor(ICommandParameter parameter,
JavaContentAssistUIAdapter adapter, boolean requiresLabel) {
super(parameter, requiresLabel);
this.adapter = adapter;
}
public Composite createControls(Composite parent) {
Composite parameterArea = super.createControls(parent);
// Must have a valid adapter to enable the browse button.
if (adapter == null) {
return parameterArea;
}
int numberOfControls = 1;
Composite fieldComposite = new Composite(parameterArea, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(numberOfControls)
.applyTo(fieldComposite);
GridDataFactory.fillDefaults().grab(false, false)
.applyTo(fieldComposite);
Button browse = new Button(fieldComposite, SWT.PUSH);
browse.setEnabled(true);
browse.setText("Browse...");
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER)
.grab(false, false).applyTo(browse);
GridData data = new GridData(SWT.FILL, SWT.CENTER, false, false);
data.heightHint = getButtonHeight();
browse.setLayoutData(data);
IJavaContentAssistHandler handler = new AbstractJavaContentAsssitHandler(
getTextControl(), browse) {
public void handleJavaTypeSelection(String qualifiedName) {
setParameterValueAndNotifyClear(qualifiedName);
}
};
adapter.adapt(handler);
return fieldComposite;
}
protected int getButtonHeight() {
return 21;
}
protected JavaParameterDescriptor getJavaParameterDescriptor() {
ICommandParameterDescriptor parameterDescriptor = getParameterDescriptor();
if (parameterDescriptor instanceof JavaParameterDescriptor) {
return (JavaParameterDescriptor) parameterDescriptor;
}
return null;
}
}