org.eclipse.e4.xwt.tools.ui.designer.databinding.ui.ObserveTargetGroup.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.e4.xwt.tools.ui.designer.databinding.ui.ObserveTargetGroup.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others.
 * 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:
 *     Soyatec - initial API and implementation
 *******************************************************************************/
package org.eclipse.e4.xwt.tools.ui.designer.databinding.ui;

import java.beans.PropertyChangeEvent;

import org.eclipse.e4.xwt.tools.ui.designer.databinding.BindingContext;
import org.eclipse.e4.xwt.tools.ui.designer.databinding.IObservable;
import org.eclipse.e4.xwt.tools.ui.designer.databinding.Observable;
import org.eclipse.e4.xwt.tools.ui.designer.databinding.ObservableUtil;
import org.eclipse.e4.xwt.tools.ui.designer.databinding.Property;
import org.eclipse.e4.xwt.tools.ui.designer.parts.ViewerEditPart;
import org.eclipse.e4.xwt.tools.ui.designer.parts.WidgetEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;

/**
 * @author jliu (jin.liu@soyatec.com)
 */
public class ObserveTargetGroup extends ObserveGroup {

    public ObserveTargetGroup(BindingContext bindingContext, EditPart rootEditPart) {
        super(bindingContext, rootEditPart);
    }

    protected String computeMessage() {
        String message = "Target:";
        BindingContext bc = getBindingContext();
        IObservable target = bc.getTarget();
        Property targetProperty = bc.getTargetProperty();
        if (target != null) {
            message += target.getDisplayName();
            if (targetProperty != null) {
                message += "." + targetProperty;
            }
        } else {
            message += "<empty>";
        }
        return message;
    }

    protected void handleSelection(IStructuredSelection selection) {
        Object element = selection.getFirstElement();
        BindingContext bindingContext = getBindingContext();
        if (element == null) {
            bindingContext.setTarget(null);
            bindingContext.setTargetProperty(null);
        } else if (element instanceof IObservable) {
            bindingContext.setTarget((IObservable) element);
            bindingContext.setTargetProperty(null);
        } else if (element instanceof Property) {
            bindingContext.setTargetProperty((Property) element);
        }
    }

    protected void selectAndReveal(PropertyChangeEvent evt) {
        Object newValue = evt.getNewValue();
        if ("target".equals(evt.getPropertyName())) {
            TreeViewer treeViewer = observableList.getTreeViewer();
            treeViewer.setExpandedElements(new Object[] { newValue });
            treeViewer.setSelection(createSelection(newValue), true);
        } else if ("targetProperty".equals(evt.getPropertyName())) {
            propertiesTree.setSelection(createSelection(newValue), true);
        }
    }

    protected IObservable[] computeObservables(EditPart rootEditPart) {
        if (rootEditPart == null) {
            return new IObservable[0];
        }
        Object root = null;
        if (rootEditPart instanceof WidgetEditPart) {
            root = ((WidgetEditPart) rootEditPart).getWidget();
        } else if (rootEditPart instanceof ViewerEditPart) {
            root = ((ViewerEditPart) rootEditPart).getViewer();
        }
        if (root == null) {
            return new IObservable[0];
        }
        Observable widgets = ObservableUtil.getObservable(root);
        if (widgets != null) {
            return new IObservable[] { widgets };
        }
        return new IObservable[0];
    }

}