Search in sources :

Example 1 with BeanBindableInfo

use of org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo 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;
}
Also used : MethodInvocation(org.eclipse.jdt.core.dom.MethodInvocation) BeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo) AstObjectInfo(org.eclipse.wb.internal.core.databinding.model.AstObjectInfo) List(java.util.List) WidgetBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.widgets.bindables.WidgetBindableInfo) ObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.ObservableInfo) MapsBeanObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.MapsBeanObservableInfo) DataBindingContextInfo(org.eclipse.wb.internal.rcp.databinding.model.context.DataBindingContextInfo) BeansObservableFactoryInfo(org.eclipse.wb.internal.rcp.databinding.model.widgets.input.designer.BeansObservableFactoryInfo) PropertyBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.PropertyBindableInfo) BeansListObservableFactoryInfo(org.eclipse.wb.internal.rcp.databinding.model.widgets.input.designer.BeansListObservableFactoryInfo) BeansObservableFactoryInfo(org.eclipse.wb.internal.rcp.databinding.model.widgets.input.designer.BeansObservableFactoryInfo) BeansSetObservableFactoryInfo(org.eclipse.wb.internal.rcp.databinding.model.widgets.input.designer.BeansSetObservableFactoryInfo) ValuePropertyCodeSupport(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.properties.ValuePropertyCodeSupport)

Example 2 with BeanBindableInfo

use of org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo in project windowbuilder by eclipse.

the class BeansObserveTypeContainer method createSet.

/**
 * Create {@link SetBeanObservableInfo}.
 */
AstObjectInfo createSet(AstEditor editor, Expression[] arguments, int startIndex) throws Exception {
    // prepare object
    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
    if (bindableObject == null) {
        AbstractParser.addError(editor, MessageFormat.format(Messages.BeansObserveTypeContainer_argumentNotFound, arguments[startIndex]), new Throwable());
        return null;
    }
    // prepare property
    BeanPropertyBindableInfo bindableProperty = getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
    // create observable
    SetBeanObservableInfo observable = new SetBeanObservableInfo(bindableObject, bindableProperty);
    observable.setCodeSupport(new BeanObservableSetCodeSupport());
    return observable;
}
Also used : SetBeanObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.SetBeanObservableInfo) WritableSetBeanObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.WritableSetBeanObservableInfo) DetailSetBeanObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.DetailSetBeanObservableInfo) BeanObservableSetCodeSupport(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.standard.BeanObservableSetCodeSupport) FieldBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.FieldBeanBindableInfo) BeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo) MethodBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.MethodBeanBindableInfo) BeanPropertyBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanPropertyBindableInfo)

Example 3 with BeanBindableInfo

use of org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo in project windowbuilder by eclipse.

the class BeansObserveTypeContainer method createWritableSet.

/**
 * Create {@link WritableSetBeanObservableInfo}.
 */
AstObjectInfo createWritableSet(AstEditor editor, Expression[] arguments, IModelResolver resolver, int startIndex) throws Exception {
    // prepare object
    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
    if (bindableObject == null) {
        AbstractParser.addError(editor, MessageFormat.format(Messages.BeansObserveTypeContainer_argumentNotFound, arguments[startIndex]), new Throwable());
        return null;
    }
    // prepare property
    CollectionPropertyBindableInfo bindableProperty = (CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
    Assert.isNotNull(bindableProperty);
    // prepare element type
    Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 1]);
    // create observable
    WritableSetBeanObservableInfo observable = new WritableSetBeanObservableInfo(bindableObject, bindableProperty, elementType);
    observable.setCodeSupport(new WritableSetCodeSupport());
    return observable;
}
Also used : WritableSetBeanObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.WritableSetBeanObservableInfo) CollectionPropertyBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.CollectionPropertyBindableInfo) WritableSetCodeSupport(org.eclipse.wb.internal.rcp.databinding.model.beans.observables.standard.WritableSetCodeSupport) FieldBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.FieldBeanBindableInfo) BeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo) MethodBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.MethodBeanBindableInfo)

Example 4 with BeanBindableInfo

use of org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo in project windowbuilder by eclipse.

the class BeansObserveTypeContainer method resolve.

public BeanBindableInfo resolve(JavaInfo javaInfo) throws Exception {
    // prepare reference
    String reference = JavaInfoReferenceProvider.getReference(javaInfo);
    Assert.isNotNull(reference);
    // find object
    for (BeanBindableInfo bindableObject : m_observables) {
        BeanBindableInfo result = (BeanBindableInfo) bindableObject.resolveReference(reference);
        // 
        if (result != null) {
            return result;
        }
    }
    // 
    return null;
}
Also used : FieldBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.FieldBeanBindableInfo) BeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo) MethodBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.MethodBeanBindableInfo)

Example 5 with BeanBindableInfo

use of org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo in project windowbuilder by eclipse.

the class BeansObserveTypeContainer method createSingleSelection.

AstObjectInfo createSingleSelection(AstEditor editor, Expression[] arguments, IModelResolver resolver) throws Exception {
    BeanBindableInfo bindableObject = m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null ? getBindableObject(arguments[0]) : null;
    if (bindableObject != null) {
        SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(bindableObject);
        observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
        return observable;
    }
    return null;
}
Also used : SingleSelectionObservableCodeSupport(org.eclipse.wb.internal.rcp.databinding.model.widgets.observables.standard.SingleSelectionObservableCodeSupport) SingleSelectionObservableInfo(org.eclipse.wb.internal.rcp.databinding.model.widgets.observables.SingleSelectionObservableInfo) FieldBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.FieldBeanBindableInfo) BeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo) MethodBeanBindableInfo(org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.MethodBeanBindableInfo)

Aggregations

BeanBindableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanBindableInfo)25 FieldBeanBindableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.FieldBeanBindableInfo)11 MethodBeanBindableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.MethodBeanBindableInfo)11 BeanPropertyBindableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.BeanPropertyBindableInfo)7 IObserveInfo (org.eclipse.wb.internal.core.databinding.model.IObserveInfo)5 DatabindingsProvider (org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider)5 CompositeInfo (org.eclipse.wb.internal.swt.model.widgets.CompositeInfo)5 PropertyBindableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.PropertyBindableInfo)4 DetailListBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.DetailListBeanObservableInfo)4 DetailSetBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.DetailSetBeanObservableInfo)4 DetailValueBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.DetailValueBeanObservableInfo)4 WritableListBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.WritableListBeanObservableInfo)4 WritableSetBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.WritableSetBeanObservableInfo)4 CodeGenerationSupport (org.eclipse.wb.internal.core.databinding.model.CodeGenerationSupport)3 ObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.ObservableInfo)3 CollectionPropertyBindableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.bindables.CollectionPropertyBindableInfo)3 ListBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.ListBeanObservableInfo)3 SetBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.SetBeanObservableInfo)3 ValueBeanObservableInfo (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.ValueBeanObservableInfo)3 BeanObservableListCodeSupport (org.eclipse.wb.internal.rcp.databinding.model.beans.observables.standard.BeanObservableListCodeSupport)3