use of org.eclipse.wb.internal.rcp.databinding.model.widgets.bindables.WidgetBindableInfo in project windowbuilder by eclipse.
the class ViewerInputParser method parseExpression.
@Override
public AstObjectInfo parseExpression(AstEditor editor, String signature, MethodInvocation invocation, Expression[] arguments, IModelResolver resolver) throws Exception {
if (signature.endsWith("setContentProvider(org.eclipse.jface.viewers.IContentProvider)")) {
// prepare viewer
WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(invocation.getExpression());
if (viewerBindable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, invocation.getExpression()), new Throwable());
return null;
}
// prepare binding
AbstractViewerInputBindingInfo viewerBinding = getViewerBindingInfo(viewerBindable);
if (viewerBinding == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_modelViewerNotFound, invocation.getExpression()), new Throwable());
return null;
}
//
if (viewerBinding instanceof TreeViewerInputBindingInfo) {
// prepare content provider
ObservableCollectionTreeContentProviderInfo contentProvider = (ObservableCollectionTreeContentProviderInfo) resolver.getModel(arguments[0]);
if (contentProvider == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]), new Throwable());
return null;
}
TreeViewerInputBindingInfo viewerInputBinding = (TreeViewerInputBindingInfo) viewerBinding;
viewerInputBinding.setContentProvider(contentProvider);
} else if (viewerBinding instanceof ViewerInputBindingInfo) {
// prepare content provider
ObservableCollectionContentProviderInfo contentProvider = (ObservableCollectionContentProviderInfo) resolver.getModel(arguments[0]);
if (contentProvider == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]), new Throwable());
return null;
}
ViewerInputBindingInfo viewerInputBinding = (ViewerInputBindingInfo) viewerBinding;
viewerInputBinding.setContentProvider(contentProvider);
} else {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]), new Throwable());
return null;
}
} else if (signature.endsWith("setLabelProvider(org.eclipse.jface.viewers.IBaseLabelProvider)")) {
// prepare viewer
WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(invocation.getExpression());
if (viewerBindable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, invocation.getExpression()), new Throwable());
return null;
}
// prepare binding
AbstractViewerInputBindingInfo viewerBinding = getViewerBindingInfo(viewerBindable);
if (viewerBinding == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_modelViewerNotFound, invocation.getExpression()), new Throwable());
return null;
}
//
if (viewerBinding instanceof ViewerInputBindingInfo) {
// prepare label provider
ObservableMapLabelProviderInfo labelProvider = (ObservableMapLabelProviderInfo) resolver.getModel(arguments[0]);
if (labelProvider == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_labelProviderArgumentNotFound, arguments[0]), new Throwable());
//
m_viewers.remove(viewerBindable);
m_contextInfo.getBindings().remove(viewerBinding);
//
return null;
}
// sets label provider
ViewerInputBindingInfo viewerInputBinding = (ViewerInputBindingInfo) viewerBinding;
viewerInputBinding.setLabelProvider(labelProvider);
} else if (viewerBinding instanceof TreeViewerInputBindingInfo) {
// prepare label provider
AbstractLabelProviderInfo labelProvider = (AbstractLabelProviderInfo) resolver.getModel(arguments[0]);
if (labelProvider == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_labelProviderArgumentNotFound, arguments[0]), new Throwable());
//
m_viewers.remove(viewerBindable);
m_contextInfo.getBindings().remove(viewerBinding);
//
return null;
}
// sets label provider
TreeViewerInputBindingInfo viewerInputBinding = (TreeViewerInputBindingInfo) viewerBinding;
viewerInputBinding.setLabelProvider(labelProvider);
} else {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_labelProviderArgumentNotFound, arguments[0]), new Throwable());
return null;
}
} else if (signature.endsWith("setInput(java.lang.Object)")) {
// prepare viewer
WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(invocation.getExpression());
if (viewerBindable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, invocation.getExpression()), new Throwable());
return null;
}
// prepare binding
AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
if (viewerBinding == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerInputModelNotFound, invocation.getExpression()), new Throwable());
return null;
}
// prepare input observable
ObservableInfo inputObservable = (ObservableInfo) resolver.getModel(arguments[0]);
if (inputObservable == null) {
//
if (viewerBinding instanceof TreeViewerInputBindingInfo) {
BeanBindableInfo bindableObject = m_beansContainer.getBindableObject(arguments[0]);
if (bindableObject != null) {
TreeViewerInputBindingInfo treeViewerBinding = (TreeViewerInputBindingInfo) viewerBinding;
ObservableFactoryInfo factoryInfo = treeViewerBinding.getContentProvider().getFactoryInfo();
//
if (factoryInfo instanceof BeansObservableFactoryInfo) {
BeansObservableFactoryInfo beansFactoryInfo = (BeansObservableFactoryInfo) factoryInfo;
String propertyName = beansFactoryInfo.getPropertyName();
PropertyBindableInfo propertyObject = propertyName == null ? null : bindableObject.resolvePropertyReference(propertyName);
//
if (propertyObject != null) {
inputObservable = new BeanFieldInputObservableInfo(bindableObject, propertyObject);
}
}
}
}
//
if (inputObservable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerInputArgumentNotFound, arguments[0]), new Throwable());
//
m_viewers.remove(viewerBindable);
m_contextInfo.getBindings().remove(viewerBinding);
//
return null;
}
}
// sets input observable
viewerBinding.setInputObservable(inputObservable);
} else if (VIEWER_SUPPORT_LIST_SIGNATURE.equals(signature) || VIEWER_SUPPORT_SET_SIGNATURE.equals(signature)) {
// prepare viewer
WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(arguments[0]);
if (viewerBindable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]), new Throwable());
return null;
}
if (m_viewers.get(viewerBindable) != null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerDoubleInvocation, invocation, arguments[0]), new Throwable());
return null;
}
// prepare input observable
ObservableInfo inputObservable = (ObservableInfo) resolver.getModel(arguments[1]);
if (inputObservable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerInputArgumentNotFound, arguments[1]), new Throwable());
return null;
}
// prepare label provider properties
Assert.instanceOf(MethodInvocation.class, arguments[2]);
MethodInvocation labelPropertiesMethod = (MethodInvocation) arguments[2];
String labelPropertiesSignature = CoreUtils.getMethodSignature(labelPropertiesMethod);
Assert.isTrue(BEAN_PROPERTIES_VALUES.equals(labelPropertiesSignature) || POJO_PROPERTIES_VALUES.equals(labelPropertiesSignature));
List<Expression> labelPropertiesArguments = DomGenerics.arguments(labelPropertiesMethod);
// prepare element type
Class<?> elementType = CoreUtils.evaluate(Class.class, editor, labelPropertiesArguments.get(0));
// prepare properties
String[] properties = CoreUtils.evaluate(String[].class, editor, labelPropertiesArguments.get(1));
// create binding
ViewerInputBindingInfo viewerBinding = new ViewerInputBindingInfo(viewerBindable);
viewerBinding.setInputObservable(inputObservable);
viewerBinding.setDefaultProviders(VIEWER_SUPPORT_LIST_SIGNATURE.equals(signature), elementType, true);
viewerBinding.getLabelProvider().getMapsObservable().setProperties(properties);
// add binding
m_contextInfo.getBindings().add(viewerBinding);
m_viewers.put(viewerBindable, viewerBinding);
} else if (OBSERVABLE_VALUE_EDITING_SUPPORT.equals(signature)) {
// prepare viewer
WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(arguments[0]);
if (viewerBindable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]), new Throwable());
return null;
}
//
AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
if (viewerBinding == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]), new Throwable());
return null;
}
// prepare context
DataBindingContextInfo bindingContextInfo = (DataBindingContextInfo) resolver.getModel(arguments[1]);
if (bindingContextInfo != m_contextInfo) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_undefinedDataBindingContext, arguments[1]), new Throwable());
return null;
}
// prepare CellEditor
CellEditorInfo cellEditorInfo = (CellEditorInfo) resolver.getModel(arguments[2]);
if (cellEditorInfo == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_cellEditorNotFound, arguments[2]), new Throwable());
return null;
}
// prepare CellEditor property
CellEditorValuePropertyCodeSupport cellEditorProperty = null;
AstObjectInfo cellEditorPropertyInfo = resolver.getModel(arguments[3]);
//
if (cellEditorPropertyInfo instanceof CellEditorValuePropertyCodeSupport) {
cellEditorProperty = (CellEditorValuePropertyCodeSupport) cellEditorPropertyInfo;
} else if (cellEditorPropertyInfo instanceof ValuePropertyCodeSupport) {
ValuePropertyCodeSupport value = (ValuePropertyCodeSupport) cellEditorPropertyInfo;
cellEditorProperty = new CellEditorValuePropertyCodeSupport(value);
}
//
if (cellEditorProperty == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_cellEditorPropertyNotFound, arguments[3]), new Throwable());
return null;
}
// prepare element property
ValuePropertyCodeSupport elementProperty = (ValuePropertyCodeSupport) resolver.getModel(arguments[4]);
if (elementProperty == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_elementPropertyNotFound, arguments[4]), new Throwable());
return null;
}
//
return new EditingSupportInfo(viewerBinding, cellEditorInfo, cellEditorProperty, elementProperty);
} else if (VIEWER_COLUMN_SET_EDITING_SUPPORT.equals(signature)) {
// prepare viewer column
WidgetBindableInfo viewerColumnBindable = m_widgetsContainer.getBindableWidget(invocation.getExpression());
if (viewerColumnBindable == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_viewerColumnNotFound, invocation.getExpression()), new Throwable());
return null;
}
// prepare support
EditingSupportInfo editingSupportInfo = (EditingSupportInfo) resolver.getModel(arguments[0]);
if (editingSupportInfo == null) {
AbstractParser.addError(editor, MessageFormat.format(Messages.ViewerInputParser_editingSupportNotFound, arguments[0]), new Throwable());
return null;
}
//
editingSupportInfo.setViewerColumn(viewerColumnBindable);
} else if (CELL_EDITOR_PROPERTIES_CONTROL.equals(signature)) {
// CellEditor
return new CellEditorControlPropertyCodeSupport();
}
return null;
}
use of org.eclipse.wb.internal.rcp.databinding.model.widgets.bindables.WidgetBindableInfo in project windowbuilder by eclipse.
the class AbstractViewerInputBindingInfo method getViewerInutElementType.
// //////////////////////////////////////////////////////////////////////////
//
// Utils
//
// //////////////////////////////////////////////////////////////////////////
/**
* @return {@link Class} of element into given viewer input or <code>null</code> if its not set.
*/
public static Class<?> getViewerInutElementType(ObservableInfo observable, DatabindingsProvider provider) throws Exception {
if (observable.getBindableObject() instanceof WidgetBindableInfo) {
// prepare widget
WidgetBindableInfo widget = (WidgetBindableInfo) observable.getBindableObject();
// prepare input property
WidgetPropertyBindableInfo property = widget.resolvePropertyReference("setInput");
// find input binding
for (AbstractBindingInfo binding : provider.getBindings0()) {
if (binding.getTarget() == widget && binding.getTargetProperty() == property) {
AbstractViewerInputBindingInfo viewerBinding = (AbstractViewerInputBindingInfo) binding;
return viewerBinding.getElementType();
}
}
}
//
return null;
}
use of org.eclipse.wb.internal.rcp.databinding.model.widgets.bindables.WidgetBindableInfo in project windowbuilder by eclipse.
the class BindingsProperty method checkEquals.
// //////////////////////////////////////////////////////////////////////////
//
// Menu
//
// //////////////////////////////////////////////////////////////////////////
@Override
protected boolean checkEquals(IObserveInfo observe) throws Exception {
if (observe instanceof WidgetBindableInfo) {
WidgetBindableInfo bindable = (WidgetBindableInfo) observe;
if (m_context.objectInfo == bindable.getJavaInfo()) {
return true;
}
}
//
String reference = JavaInfoReferenceProvider.getReference(m_context.javaInfo());
BindableInfo bindable = (BindableInfo) observe;
return reference.equals(bindable.getReference());
}
use of org.eclipse.wb.internal.rcp.databinding.model.widgets.bindables.WidgetBindableInfo in project windowbuilder by eclipse.
the class CodeGenerationTest method test_ViewerObservableInfo.
public void test_ViewerObservableInfo() throws Exception {
CompositeInfo shell = DatabindingTestUtils.parseTestSource(this, new String[] { "public class Test {", " protected Shell m_shell;", " private CheckboxTableViewer m_viewer;", " public static void main(String[] args) {", " Test test = new Test();", " test.open();", " }", " public void open() {", " Display display = new Display();", " createContents();", " m_shell.open();", " m_shell.layout();", " while (!m_shell.isDisposed()) {", " if (!display.readAndDispatch()) {", " display.sleep();", " }", " }", " }", " protected void createContents() {", " m_shell = new Shell();", " m_shell.setLayout(new FillLayout());", " m_viewer = new CheckboxTableViewer(m_shell, SWT.NONE);", " }", "}" });
assertNotNull(shell);
//
DatabindingsProvider provider = getDatabindingsProvider();
List<IObserveInfo> observes = provider.getObserves(ObserveType.WIDGETS);
//
WidgetBindableInfo viewerBindable = (WidgetBindableInfo) observes.get(0).getChildren(ChildrenContext.ChildrenForMasterTable).get(0).getChildren(ChildrenContext.ChildrenForMasterTable).get(0);
//
WidgetPropertyBindableInfo singleSelection = (WidgetPropertyBindableInfo) viewerBindable.getChildren(ChildrenContext.ChildrenForPropertiesTable).get(0);
assertObservableInfo(new SingleSelectionObservableInfo(viewerBindable, singleSelection), new SingleSelectionObservableCodeSupport(), "viewerObservable", "org.eclipse.core.databinding.observable.value.IObservableValue viewerObservable = org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(m_viewer);", "org.eclipse.core.databinding.observable.value.IObservableValue viewerObserveSingleSelection = org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(m_viewer);");
//
WidgetPropertyBindableInfo multiSelection = (WidgetPropertyBindableInfo) viewerBindable.getChildren(ChildrenContext.ChildrenForPropertiesTable).get(2);
assertObservableInfo(new MultiSelectionObservableInfo(viewerBindable, multiSelection), new MultiSelectionObservableCodeSupport(), "viewerObservable", "org.eclipse.core.databinding.observable.list.IObservableList viewerObservable = org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(m_viewer);", "org.eclipse.core.databinding.observable.list.IObservableList viewerObserveMultiSelection = org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(m_viewer);");
//
CheckedElementsObservableInfo checkedObservable = new CheckedElementsObservableInfo(viewerBindable);
checkedObservable.setElementType(String.class);
assertObservableInfo(checkedObservable, new CheckedElementsObservableCodeSupport(), "viewerObservable", "org.eclipse.core.databinding.observable.set.IObservableSet viewerObservable = org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(m_viewer, java.lang.String.class);", "org.eclipse.core.databinding.observable.set.IObservableSet viewerObserveCheckedElements = org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(m_viewer, java.lang.String.class);");
}
use of org.eclipse.wb.internal.rcp.databinding.model.widgets.bindables.WidgetBindableInfo in project windowbuilder by eclipse.
the class WidgetBindableTest method test_widget_noProperties.
public void test_widget_noProperties() throws Exception {
DialogInfo dialog = parseJavaInfo("import java.io.File;", "public class Test extends org.eclipse.jface.dialogs.Dialog {", " public Test(Shell parentShell) {", " super(parentShell);", " }", " protected Control createDialogArea(Composite parent) {", " Composite container = (Composite) super.createDialogArea(parent);", " return container;", " }", "}");
assertNotNull(dialog);
//
DatabindingsProvider provider = getDatabindingsProvider();
List<IObserveInfo> observes = provider.getObserves(ObserveType.WIDGETS);
assertNotNull(observes);
assertEquals(1, observes.size());
//
WidgetBindableInfo dialogBindable = (WidgetBindableInfo) observes.get(0);
assertEquals("(org.eclipse.jface.dialogs.Dialog)", dialogBindable.getPresentation().getText());
assertTrue(dialogBindable.getChildren(ChildrenContext.ChildrenForPropertiesTable).isEmpty());
//
WidgetBindableInfo parentInCreateDialogArea = (WidgetBindableInfo) dialogBindable.getChildren(ChildrenContext.ChildrenForMasterTable).get(0);
assertEquals("parent in createDialogArea(...)", parentInCreateDialogArea.getPresentation().getText());
assertTrue(parentInCreateDialogArea.getChildren(ChildrenContext.ChildrenForPropertiesTable).isEmpty());
}
Aggregations