org.eclipse.wb.internal.rcp.databinding.model.beans.observables.DetailBeanObservableInfo.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.wb.internal.rcp.databinding.model.beans.observables.DetailBeanObservableInfo.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Google, 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:
 *    Google, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.wb.internal.rcp.databinding.model.beans.observables;

import org.eclipse.wb.internal.core.databinding.model.AstObjectInfoVisitor;
import org.eclipse.wb.internal.core.databinding.ui.editor.IUiContentProvider;
import org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesConfiguration;
import org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider;
import org.eclipse.wb.internal.rcp.databinding.Messages;
import org.eclipse.wb.internal.rcp.databinding.model.BindableInfo;
import org.eclipse.wb.internal.rcp.databinding.model.ObservableInfo;
import org.eclipse.wb.internal.rcp.databinding.model.context.BindingUiContentProviderContext;
import org.eclipse.wb.internal.rcp.databinding.ui.contentproviders.ObservableDetailUiContentProvider;

import org.apache.commons.lang.ClassUtils;
import org.apache.commons.lang.StringUtils;

import java.util.List;

/**
 * Abstract model for observable objects <code>BeansObservables.observeDetailXXX(...)</code>.
 * 
 * @author lobas_av
 * @coverage bindings.rcp.model.beans
 */
public abstract class DetailBeanObservableInfo extends ObservableInfo {
    private static ChooseClassAndPropertiesConfiguration m_configuration;
    protected final ObservableInfo m_masterObservable;
    protected Class<?> m_detailBeanClass;
    protected String m_detailPropertyReference;
    protected Class<?> m_detailPropertyType;
    protected boolean m_isPojoBindable;

    ////////////////////////////////////////////////////////////////////////////
    //
    // Constructor
    //
    ////////////////////////////////////////////////////////////////////////////
    public DetailBeanObservableInfo(ObservableInfo masterObservable, Class<?> detailBeanClass,
            String detailPropertyReference, Class<?> detailPropertyType) {
        m_masterObservable = masterObservable;
        m_detailBeanClass = detailBeanClass;
        m_detailPropertyReference = detailPropertyReference;
        m_detailPropertyType = detailPropertyType;
    }

    ////////////////////////////////////////////////////////////////////////////
    //
    // Access
    //
    ////////////////////////////////////////////////////////////////////////////
    public final ObservableInfo getMasterObservable() {
        return m_masterObservable;
    }

    public final Class<?> getDetailBeanClass() {
        return m_detailBeanClass;
    }

    public final String getDetailPropertyReference() {
        return m_detailPropertyReference;
    }

    public void setDetailPropertyReference(Class<?> detailBeanClass, String detailPropertyReference)
            throws Exception {
        if (!detailBeanClass.equals(m_detailBeanClass)) {
            m_detailBeanClass = detailBeanClass;
            m_isPojoBindable = isPojoBean(m_detailBeanClass);
        }
        m_detailPropertyReference = detailPropertyReference;
    }

    public final Class<?> getDetailPropertyType() {
        return m_detailPropertyType;
    }

    public final void setDetailPropertyType(Class<?> detailPropertyType) {
        m_detailPropertyType = detailPropertyType;
    }

    public final boolean isPojoBindable0() {
        return m_isPojoBindable;
    }

    public void setPojoBindable(boolean isPojoBindable) {
        m_isPojoBindable = isPojoBindable;
    }

    ////////////////////////////////////////////////////////////////////////////
    //
    // ObservableInfo
    //
    ////////////////////////////////////////////////////////////////////////////
    @Override
    public final BindableInfo getBindableObject() {
        return m_masterObservable.getBindableObject();
    }

    @Override
    public final BindableInfo getBindableProperty() {
        return m_masterObservable.getBindableProperty();
    }

    ////////////////////////////////////////////////////////////////////////////
    //
    // Presentation
    //
    ////////////////////////////////////////////////////////////////////////////
    @Override
    public String getPresentationText() throws Exception {
        String presentationProperty = StringUtils.defaultIfEmpty(m_detailPropertyReference, "?????");
        String presentationPropertyType = m_detailPropertyType == null ? "?????"
                : ClassUtils.getShortClassName(m_detailPropertyType);
        return m_masterObservable.getPresentationText() + ".detail" + getPresentationPrefix() + "("
                + presentationProperty + ", " + presentationPropertyType + ".class)";
    }

    /**
     * @return presentation prefix for this observable.
     */
    public abstract String getPresentationPrefix();

    ////////////////////////////////////////////////////////////////////////////
    //
    // Editing
    //
    ////////////////////////////////////////////////////////////////////////////
    @Override
    public void createContentProviders(List<IUiContentProvider> providers, BindingUiContentProviderContext context,
            DatabindingsProvider provider) throws Exception {
        m_masterObservable.createContentProviders(providers, context, provider);
        providers.add(new ObservableDetailUiContentProvider(getConfiguration(), this, provider));
    }

    protected ChooseClassAndPropertiesConfiguration getConfiguration() {
        if (m_configuration == null) {
            m_configuration = new ChooseClassAndPropertiesConfiguration();
            m_configuration.setDialogFieldLabel(Messages.DetailBeanObservableInfo_objectLabel);
            m_configuration.setValueScope("beans");
            m_configuration.setChooseInterfaces(true);
            m_configuration.setEmptyClassErrorMessage(Messages.DetailBeanObservableInfo_errorMessage);
            m_configuration.setErrorMessagePrefix(Messages.DetailBeanObservableInfo_errorMessagePrefix);
            m_configuration.setPropertiesLabel(Messages.DetailBeanObservableInfo_propertiesLabel);
            m_configuration.setPropertiesErrorMessage(Messages.DetailBeanObservableInfo_propertiesErrorMessage);
        }
        return m_configuration;
    }

    ////////////////////////////////////////////////////////////////////////////
    //
    // Visiting
    //
    ////////////////////////////////////////////////////////////////////////////
    @Override
    public final void accept(AstObjectInfoVisitor visitor) throws Exception {
        super.accept(visitor);
        m_masterObservable.accept(visitor);
    }
}