Android Open Source - openhds-tablet State Machine






From Project

Back to project page openhds-tablet.

License

The source code is released under:

OPENHDS PLATFORM OPENSOURCE LICENSE AGREEMENT Copyright (c) 2013 University of Southern Maine. All rights reserved. Redistribution and use in source and binary forms, with or without mo...

If you think the Android project openhds-tablet 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

package org.openhds.mobile.model;
/*from  w  ww . j  a  v a  2s.co  m*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * The state machine represents the user interactions using the update activity.
 * The tasks the user completes can be thought of as a state machine. For
 * example, selecting the initial location hierarchy:<br />
 * State 1: Select Region <br />
 * State 2: Select Subregion <br />
 * State 3: Select village <br />
 * As the user transitions through the states, certain actions need to happen.
 * For example, when the user selects a round, then the select location and
 * create location buttons need to become enabled. Interested clients can
 * register to listen on transitions from one state to the next. A transition
 * out of a state signifies the user has made a selection.
 */
public class StateMachine {

    public enum State {
        SELECT_HIERARCHY_1, SELECT_HIERARCHY_2, SELECT_HIERARCHY_3, SELECT_HIERARCHY_4, SELECT_ROUND, SELECT_LOCATION, CREATE_VISIT, SELECT_INDIVIDUAL, SELECT_EVENT, FINISH_VISIT, INMIGRATION
    }

    private static final List<State> STATE_SEQUENCE = new ArrayList<State>();

    static {
        STATE_SEQUENCE.add(State.SELECT_HIERARCHY_1);
        STATE_SEQUENCE.add(State.SELECT_HIERARCHY_2);
        STATE_SEQUENCE.add(State.SELECT_HIERARCHY_3);
        STATE_SEQUENCE.add(State.SELECT_HIERARCHY_4);
        STATE_SEQUENCE.add(State.SELECT_ROUND);
        STATE_SEQUENCE.add(State.SELECT_LOCATION);
        STATE_SEQUENCE.add(State.CREATE_VISIT);
        STATE_SEQUENCE.add(State.SELECT_INDIVIDUAL);
        STATE_SEQUENCE.add(State.SELECT_EVENT);
        STATE_SEQUENCE.add(State.FINISH_VISIT);
        STATE_SEQUENCE.add(State.INMIGRATION);
    }

    public interface StateListener {
        void onEnterState();

        void onLeaveState();
    }

    private State currentState;
    private Map<State, List<StateListener>> listeners = new HashMap<State, List<StateListener>>();

    public StateMachine() {
        currentState = State.SELECT_HIERARCHY_1;
    }

    public void transitionTo(State state) {
        fireOnExitListeners();
        currentState = state;
        fireOnEnterListeners();
    }

    private void fireOnExitListeners() {
        List<StateListener> listenersToFire = listeners.get(currentState);
        if (listenersToFire == null) {
            return;
        }

        for (StateListener listener : listenersToFire) {
            listener.onLeaveState();
        }
    }

    private void fireOnEnterListeners() {
        List<StateListener> listenersToFire = listeners.get(currentState);
        if (listenersToFire == null) {
            return;
        }

        for (StateListener listener : listenersToFire) {
            listener.onEnterState();
        }
    }

    public State getState() {
        return currentState;
    }

    public void registerListener(State state, StateListener stateListener) {
        if (listeners.get(state) == null) {
            listeners.put(state, new ArrayList<StateListener>());
        }

        listeners.get(state).add(stateListener);
    }

    public void transitionInSequence(State toState) {
        for (int i = 0; i < STATE_SEQUENCE.size(); i++) {
            State state = STATE_SEQUENCE.get(i);
            if (state.equals(toState)) {
                break;
            }

            transitionTo(state);
        }

        transitionTo(toState);
    }

}




Java Source Code List

org.openhds.mobile.BadXmlException.java
org.openhds.mobile.Converter.java
org.openhds.mobile.FieldWorkerProvider.java
org.openhds.mobile.FormsProviderAPI.java
org.openhds.mobile.InstanceProviderAPI.java
org.openhds.mobile.OpenHDS.java
org.openhds.mobile.Queries.java
org.openhds.mobile.activity.AbstractActivity.java
org.openhds.mobile.activity.FieldWorkerLoginActivity.java
org.openhds.mobile.activity.FilterActivity.java
org.openhds.mobile.activity.FilterFormActivity.java
org.openhds.mobile.activity.FilterLocationActivity.java
org.openhds.mobile.activity.FilterVisitActivity.java
org.openhds.mobile.activity.FormListActivity.java
org.openhds.mobile.activity.FormViewActivity.java
org.openhds.mobile.activity.OpeningActivity.java
org.openhds.mobile.activity.ServerPreferencesActivity.java
org.openhds.mobile.activity.ShowMapActivity.java
org.openhds.mobile.activity.SupervisorLoginActivity.java
org.openhds.mobile.activity.SupervisorMainActivity.java
org.openhds.mobile.activity.SyncDatabaseActivity.java
org.openhds.mobile.activity.UpdateActivity.java
org.openhds.mobile.adapter.AdapterContent.java
org.openhds.mobile.adapter.MapAdapter.java
org.openhds.mobile.database.DatabaseAdapter.java
org.openhds.mobile.database.DeathUpdate.java
org.openhds.mobile.database.ExternalInMigrationUpdate.java
org.openhds.mobile.database.HouseholdUpdate.java
org.openhds.mobile.database.InternalInMigrationUpdate.java
org.openhds.mobile.database.LocationUpdate.java
org.openhds.mobile.database.MembershipUpdate.java
org.openhds.mobile.database.OutMigrationUpdate.java
org.openhds.mobile.database.PregnancyOutcomeUpdate.java
org.openhds.mobile.database.RelationshipUpdate.java
org.openhds.mobile.database.Updatable.java
org.openhds.mobile.database.VisitUpdate.java
org.openhds.mobile.fragment.EventFragment.java
org.openhds.mobile.fragment.ProgressFragment.java
org.openhds.mobile.fragment.SelectionFilterFragment.java
org.openhds.mobile.fragment.SelectionFilterLocFragment.java
org.openhds.mobile.fragment.SelectionFormFragment.java
org.openhds.mobile.fragment.SelectionFragment.java
org.openhds.mobile.fragment.ValueFormFragment.java
org.openhds.mobile.fragment.ValueFragment.java
org.openhds.mobile.fragment.ValueLocFragment.java
org.openhds.mobile.listener.CollectEntitiesListener.java
org.openhds.mobile.listener.OdkFormLoadListener.java
org.openhds.mobile.listener.RetrieveFieldWorkersListener.java
org.openhds.mobile.listener.TaskCompleteListener.java
org.openhds.mobile.listener.ValueSelectedListener.java
org.openhds.mobile.model.Child.java
org.openhds.mobile.model.FieldWorker.java
org.openhds.mobile.model.FilledForm.java
org.openhds.mobile.model.FilledParams.java
org.openhds.mobile.model.FormFiller.java
org.openhds.mobile.model.FormSubmissionRecord.java
org.openhds.mobile.model.FormXmlReader.java
org.openhds.mobile.model.Form.java
org.openhds.mobile.model.HierarchySelection.java
org.openhds.mobile.model.Individual.java
org.openhds.mobile.model.LocationHierarchy.java
org.openhds.mobile.model.LocationVisit.java
org.openhds.mobile.model.Location.java
org.openhds.mobile.model.Membership.java
org.openhds.mobile.model.PregnancyObservationUpdate.java
org.openhds.mobile.model.PregnancyOutcome.java
org.openhds.mobile.model.Relationship.java
org.openhds.mobile.model.Result.java
org.openhds.mobile.model.Round.java
org.openhds.mobile.model.SocialGroup.java
org.openhds.mobile.model.StateMachine.java
org.openhds.mobile.model.Supervisor.java
org.openhds.mobile.model.UpdateEvent.java
org.openhds.mobile.model.UpdateParams.java
org.openhds.mobile.model.UpdateStatus.java
org.openhds.mobile.model.Visit.java
org.openhds.mobile.provider.OpenHDSProvider.java
org.openhds.mobile.task.AbstractHttpTask.java
org.openhds.mobile.task.AuthenticateTask.java
org.openhds.mobile.task.DownloadFormsTask.java
org.openhds.mobile.task.FieldWorkerLoginTask.java
org.openhds.mobile.task.OdkFormLoadTask.java
org.openhds.mobile.task.OdkGeneratedFormLoadTask.java
org.openhds.mobile.task.SupervisorLoginTask.java
org.openhds.mobile.task.SyncEntitiesTask.java
org.openhds.mobile.task.SyncFormsTask.java
org.openhds.mobile.utilities.L.java
org.openhds.mobile.utilities.Logg.java
org.openhds.mobile.utilities.UrlUtils.java