package com.tilisty.main;
import java.util.ArrayList;
import com.tilisty.data.DataServices;
import com.tilisty.models.IObserver;
import com.tilisty.models.TiViewModel;
import com.tilisty.models.TilistyModel;
/**
* This class simply observes all of the TiProperty instances
* that are managed by each of the views.
* If a property changes, we send the message to the device
* from here.
*
* @author Jason Simpson <jsnsnimpson@gmail.com>
* @version 1.0
*/
public class TiViewWatcher implements IObserver {
public TiViewWatcher() {
// TODO Auto-generated constructor stub
this.setupObserving();
}
private void setupObserving() {
TilistyModel.getInstance().addObserver(TilistyModel.UPDATE_VIEWS, this);
}
@Override
public void update(int ns, String message) {
switch(ns) {
case TilistyModel.UPDATE_VIEWS:
this.updateViews(TilistyModel.getInstance().getViews());
break;
case TilistyModel.UPDATE_PROPERTY:
DataServices.getInstance().sendToAll(message);
break;
}
}
/**
* Add observer to all properties of all views.
* @param views
*/
public void updateViews(ArrayList<TiViewModel> views) {
for(int i = 0; i < views.size(); i++) {
views.get(i).addObserver(TilistyModel.UPDATE_PROPERTY, this);
if(views.get(i).getChildren().size() > 0) {
this.recursiveChildren(views.get(i));
}
}
}
private void recursiveChildren(TiViewModel tiView) {
ArrayList<TiViewModel> children = tiView.getChildren();
for(int i = 0; i < children.size(); i++) {
children.get(i).addObserver(TilistyModel.UPDATE_PROPERTY, this);
if(children.get(i).getChildren().size() > 0) {
this.recursiveChildren(children.get(i));
}
}
}
}