Android Open Source - RoboMVVM Base View Model






From Project

Back to project page RoboMVVM.

License

The source code is released under:

Project RoboMVVM(https://github.com/debdattabasu/RoboMVVM) Copyright (c) 2014, Debdatta Basu All rights reserved. Redistribution and use in source and binary forms, with or without modification, are ...

If you think the Android project RoboMVVM listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * @project RoboMVVM//w  w w .ja va2 s  .  c o  m
 * @project RoboMVVM(https://github.com/debdattabasu/RoboMVVM)
 * @author Debdatta Basu
 *
 * @license 3-clause BSD license(http://opensource.org/licenses/BSD-3-Clause).
 *      Copyright (c) 2014, Debdatta Basu. All rights reserved.
 *
 *      Redistribution and use in source and binary forms, with or without modification, are permitted provided that
 *      the following conditions are met:
 *
 *          1. Redistributions of source code must retain the above copyright notice, this list of
 *             conditions and the following disclaimer.
 *
 *          2. Redistributions in binary form must reproduce the above copyright notice, this list of
 *             conditions and the following disclaimer in the documentation and/or other materials
 *             provided with the distribution.
 *
 *          3. Neither the name of the copyright holder nor the names of its contributors may be used
 *             to endorse or promote products derived from this software without specific prior
 *             written permission.
 *
 *      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 *      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 *      IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
 *      OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 *      OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 *      OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 *      POSSIBILITY OF SUCH DAMAGE.
 */

package org.dbasu.robomvvm.viewmodel;

import android.content.Context;

import com.google.common.base.Preconditions;

import org.dbasu.robomvvm.annotation.SetLayout;
import org.dbasu.robomvvm.binding.BindMode;
import org.dbasu.robomvvm.binding.Binding;
import org.dbasu.robomvvm.binding.DefaultValueConverter;
import org.dbasu.robomvvm.binding.ValueConverter;
import org.dbasu.robomvvm.componentmodel.Component;
import org.dbasu.robomvvm.componentmodel.EventArg;

/**
 * Abstract base class for view models. All view models are associated with a context
 * and must contain a {@link org.dbasu.robomvvm.annotation.SetLayout} annotation specifying the resource id to use
 * for its layout.
 */
public abstract class BaseViewModel extends Component {


    protected final Context context;


    /**
     * Construct a BaseViewModel from a context.
     * @param context
     *          The supplied context.
     */
    public BaseViewModel(Context context) {
        this.context = Preconditions.checkNotNull(context);
    }


    /**
     * Get the associated context.
     * @return
     *          The associated context.
     */
    public Context getContext() {
        return context;
    }

    /**
     * Get the layout resource id associated with this view model. The id is
     * set using the {@link org.dbasu.robomvvm.annotation.SetLayout} annotation.
     * @return
     *          The associated resource Id.
     */
    public int getLayoutId() {
        Class thisClass = this.getClass();

        if(!thisClass.isAnnotationPresent(SetLayout.class)) {
            throw new RuntimeException("Missing InjectLayout annotation in " + thisClass.getName());
        }
        return ((SetLayout) thisClass.getAnnotation(SetLayout.class)).value();
    }


    /**
     * Override this in subclasses to set up the bindings between the view model and its layout.
     */
    protected void bind() {

    }

    /**
     * Bind a property of this view model to a property of an element in its layout.
     * @param property
     *          The property of the view model
     * @param elementId
     *          The id of the target element.
     * @param elementProperty
     *          The property of the target element.
     * @param valueConverter
     *          The value converter to use for conversion.
     * @param bindMode
     *          The bind mode to use.
     * @return
     *          The created binding.
     */
    protected abstract Binding bindProperty(String property, int elementId, String elementProperty, ValueConverter valueConverter, BindMode bindMode);


    /**
     * Binds an event of this view model to an action of an element in its layout.
     * @param elementId
     *          The id of the target element.
     * @param eventType
     *          The event arg class to bind.
     * @param action
     *          The action of the target element.
     * @return
     *          The created binding.
     */
    protected abstract Binding bindAction(int elementId, Class<? extends EventArg> eventType, String action);


    /**
     * Bind a property of this view model to a property of an element in its layout. Performs no conversion.
     * Uses {@link org.dbasu.robomvvm.binding.BindMode#SOURCE_TO_TARGET} which results in one-way
     * binding from this view model to the target element.
     *
     * @param property
     *          The property of the view model
     * @param elementId
     *          The id of the target element.
     * @param elementProperty
     *          The property of the target element.
     * @return
     *          The created binding.
     */
    protected final Binding bindProperty(String property, int elementId, String elementProperty) {

        return bindProperty(property, elementId, elementProperty, new DefaultValueConverter(), BindMode.SOURCE_TO_TARGET);
    }


    /**
     * Bind a property of this view model to a property of an element in its layout. Performs no conversion.
     * @param property
     *          The property of the view model
     * @param elementId
     *          The id of the target element.
     * @param elementProperty
     *          The property of the target element.
     * @param bindMode
     *          The bind mode to use.
     * @return
     *          The created binding.
     */
    protected final Binding bindProperty(String property, int elementId, String elementProperty, BindMode bindMode) {

        return bindProperty(property, elementId, elementProperty, new DefaultValueConverter(), bindMode);
    }
}




Java Source Code List

org.dbasu.robomvvm.annotation.SetLayout.java
org.dbasu.robomvvm.binding.ActionBinding.java
org.dbasu.robomvvm.binding.BindMode.java
org.dbasu.robomvvm.binding.Binding.java
org.dbasu.robomvvm.binding.DefaultValueConverter.java
org.dbasu.robomvvm.binding.PropertyBinding.java
org.dbasu.robomvvm.binding.TypedValueConverter.java
org.dbasu.robomvvm.binding.ValueConverter.java
org.dbasu.robomvvm.componentadapter.adapterview.AdapterViewAdapter.java
org.dbasu.robomvvm.componentadapter.adapterview.ItemSelectEventArg.java
org.dbasu.robomvvm.componentadapter.compoundbutton.CheckedChangeEventArg.java
org.dbasu.robomvvm.componentadapter.compoundbutton.CheckedEventArg.java
org.dbasu.robomvvm.componentadapter.compoundbutton.CompoundButtonViewAdapter.java
org.dbasu.robomvvm.componentadapter.compoundbutton.UncheckedEventArg.java
org.dbasu.robomvvm.componentadapter.edittext.EditTextViewAdapter.java
org.dbasu.robomvvm.componentadapter.edittext.TextChangeEventArg.java
org.dbasu.robomvvm.componentadapter.imageview.ImageViewAdapter.java
org.dbasu.robomvvm.componentadapter.listview.ItemClickEventArg.java
org.dbasu.robomvvm.componentadapter.listview.ItemLongClickEventArg.java
org.dbasu.robomvvm.componentadapter.listview.ListViewAdapter.java
org.dbasu.robomvvm.componentadapter.listview.ScrollEventArg.java
org.dbasu.robomvvm.componentadapter.listview.ScrollStateChangeEventArg.java
org.dbasu.robomvvm.componentadapter.menuitem.MenuItemAdapter.java
org.dbasu.robomvvm.componentadapter.menuitem.MenuItemClickEventArg.java
org.dbasu.robomvvm.componentadapter.menuitem.MenuItemCollapsedEventArg.java
org.dbasu.robomvvm.componentadapter.menuitem.MenuItemExpandedChangeEventArg.java
org.dbasu.robomvvm.componentadapter.menuitem.MenuItemExpandedEventArg.java
org.dbasu.robomvvm.componentadapter.progressbar.ProgressBarViewAdapter.java
org.dbasu.robomvvm.componentadapter.ratingbar.RatingBarViewAdapter.java
org.dbasu.robomvvm.componentadapter.ratingbar.RatingChangeEventArg.java
org.dbasu.robomvvm.componentadapter.seekbar.ProgressChangeEventArg.java
org.dbasu.robomvvm.componentadapter.seekbar.SeekBarViewAdapter.java
org.dbasu.robomvvm.componentadapter.textview.TextViewAdapter.java
org.dbasu.robomvvm.componentadapter.view.ClickEventArg.java
org.dbasu.robomvvm.componentadapter.view.FocusChangeEventArg.java
org.dbasu.robomvvm.componentadapter.view.FocusEventArg.java
org.dbasu.robomvvm.componentadapter.view.FocusLostEventArg.java
org.dbasu.robomvvm.componentadapter.view.LongClickEventArg.java
org.dbasu.robomvvm.componentadapter.view.ViewAdapter.java
org.dbasu.robomvvm.componentmodel.ActionManager.java
org.dbasu.robomvvm.componentmodel.ComponentAdapter.java
org.dbasu.robomvvm.componentmodel.Component.java
org.dbasu.robomvvm.componentmodel.EventArg.java
org.dbasu.robomvvm.componentmodel.EventListener.java
org.dbasu.robomvvm.componentmodel.GarbageCollectionEventArg.java
org.dbasu.robomvvm.componentmodel.PropertyChangeEventArg.java
org.dbasu.robomvvm.componentmodel.PropertyManager.java
org.dbasu.robomvvm.samples.itemlist.AboutPopupViewModel.java
org.dbasu.robomvvm.samples.itemlist.MainActivityViewModel.java
org.dbasu.robomvvm.samples.itemlist.MainActivity.java
org.dbasu.robomvvm.samples.itemlist.MainMenuViewModel.java
org.dbasu.robomvvm.samples.itemlist.StringViewModel.java
org.dbasu.robomvvm.samples.textsync.MainActivity.java
org.dbasu.robomvvm.samples.textsync_no_mvvm.MainActivity.java
org.dbasu.robomvvm.samples.tipcalc.MainActivity.java
org.dbasu.robomvvm.samples.tipcalc.TipCalcViewModel.java
org.dbasu.robomvvm.util.ObjectTagger.java
org.dbasu.robomvvm.util.ThreadUtil.java
org.dbasu.robomvvm.viewmodel.BaseViewModel.java
org.dbasu.robomvvm.viewmodel.ItemCheckedEventArg.java
org.dbasu.robomvvm.viewmodel.MenuViewModel.java
org.dbasu.robomvvm.viewmodel.ViewModelArrayAdapter.java
org.dbasu.robomvvm.viewmodel.ViewModelCollection.java
org.dbasu.robomvvm.viewmodel.ViewModel.java