Changeset 1499

Show
Ignore:
Timestamp:
11/30/08 02:43:42 (5 weeks ago)
Author:
bderenzi
Message:

committing new formmmanager code that uses threads and the loading screening

Location:
branches/dev-bdr/j2merosa/org.javarosa.formmanager/org.javarosa.formmanager/src/org/javarosa/formmanager/activity
Files:
1 added
1 modified

Legend:

Unmodified
Added
Removed
  • branches/dev-bdr/j2merosa/org.javarosa.formmanager/org.javarosa.formmanager/src/org/javarosa/formmanager/activity/FormEntryActivity.java

    r1431 r1499  
    11package org.javarosa.formmanager.activity; 
    22 
    3 import java.io.IOException; 
    43import java.util.Enumeration; 
    54import java.util.Hashtable; 
     
    1918import org.javarosa.core.api.IView; 
    2019import org.javarosa.core.model.FormDef; 
    21 import org.javarosa.core.model.IFormDataModel; 
    22 import org.javarosa.core.model.condition.EvaluationContext; 
    23 import org.javarosa.core.model.condition.IFunctionHandler; 
    24 import org.javarosa.core.model.instance.DataModelTree; 
    25 import org.javarosa.core.model.storage.DataModelTreeRMSUtility; 
    26 import org.javarosa.core.model.utils.ContextPreloadHandler; 
    27 import org.javarosa.core.model.utils.IPreloadHandler; 
    28 import org.javarosa.core.util.externalizable.DeserializationException; 
    2920import org.javarosa.formmanager.controller.FormEntryController; 
    3021import org.javarosa.formmanager.controller.IControllerHost; 
    3122import org.javarosa.formmanager.model.FormEntryModel; 
    3223import org.javarosa.formmanager.properties.FormManagerProperties; 
    33 import org.javarosa.formmanager.utility.FormDefFetcher; 
    3424import org.javarosa.formmanager.utility.IFormDefRetrievalMethod; 
    35 import org.javarosa.formmanager.utility.RMSRetreivalMethod; 
    3625import org.javarosa.formmanager.view.IFormEntryView; 
    3726import org.javarosa.formmanager.view.IFormEntryViewFactory; 
     27import org.javarosa.polish.activity.loadingscreen.LoadingScreenActivity; 
    3828 
    39 public class FormEntryActivity implements IActivity, IControllerHost, CommandListener { 
     29public class FormEntryActivity  implements IActivity, IControllerHost, CommandListener { 
    4030 
    4131        /** Alert if the form cannot load **/ 
     
    5949        private IFormEntryViewFactory viewFactory; 
    6050 
    61         private ContextPreloadHandler contextHandler; 
     51        private FormLoadActivity formLoader = null; 
    6252         
    63         FormDefFetcher fetcher; 
    64  
     53        private LoadingScreenActivity loadingScreen = null; 
     54         
     55        private int instanceID = -1; 
    6556 
    6657        /** Loading error string **/ 
     
    7061                this.parent = parent; 
    7162                this.viewFactory = viewFactory; 
    72                 this.fetcher = new FormDefFetcher(); 
    73                 this.fetcher.setFetcher(new RMSRetreivalMethod()); 
     63                 
     64                this.formLoader = new FormLoadActivity(this); 
     65                this.loadingScreen = new LoadingScreenActivity(this.parent); 
    7466        } 
    7567 
     
    8678        } 
    8779 
    88         public void start (Context context) { 
    89                 FormDef theForm = null; 
    90                 int instanceID = -1; 
    91  
    92                 if (context instanceof FormEntryContext) { 
    93                         this.context = (FormEntryContext) context; 
    94                         instanceID = this.context.getInstanceID(); 
    95                 } 
     80        public void returnFromLoading(FormEntryContext context) { 
     81                // Kill the thread for the loading screen 
     82                this.loadingScreen.halt(); 
     83                this.loadingScreen = null; 
    9684                 
    97                 theForm = fetcher.getFormDef(context); 
    98                 if (theForm != null) { 
    99  
    100                         try { 
    101                                 if (instanceID != -1) { 
    102                                         DataModelTreeRMSUtility modelUtil = (DataModelTreeRMSUtility)JavaRosaServiceProvider.instance().getStorageManager().getRMSStorageProvider().getUtility(DataModelTreeRMSUtility.getUtilityName()); 
    103                                         IFormDataModel theModel = new DataModelTree(); 
    104                                         modelUtil.retrieveFromRMS(this.context.getInstanceID(), theModel); 
    105                                         theForm.setDataModel(theModel); 
    106                                 } 
    107                         } catch (IOException e) { 
    108                                 e.printStackTrace(); 
    109                         } catch (DeserializationException uee) { 
    110                                 uee.printStackTrace(); 
    111                         } 
    112                          
    113                         theForm.setEvaluationContext(initEvaluationContext()); 
    114                         initPreloadHandlers(theForm); // must always load; even if we won't preload, we may still post-process! 
    115  
    116                         theForm.initialize(instanceID == -1); 
    117  
    118                         model = new FormEntryModel(theForm, instanceID); 
     85                // get the form 
     86                FormDef theForm = (FormDef)context.getElement("theForm"); 
     87                context = null; 
     88         
     89                if( theForm != null){ 
     90                        model = new FormEntryModel(theForm, this.instanceID); 
    11991                        controller = new FormEntryController(model, this); 
    12092                        String viewString = JavaRosaServiceProvider.instance().getPropertyManager().getSingularProperty(FormManagerProperties.VIEW_TYPE_PROPERTY); 
     93                        System.out.println("making view! " + viewString + model + controller); 
    12194                        view = viewFactory.getFormEntryView(viewString, model, controller); 
     95                        System.out.println("setting context"); 
    12296                        view.setContext(this.context); 
    12397                        controller.setView(view); 
    124  
     98         
     99                        System.out.println("showing view!"); 
    125100                        view.show(); 
    126                          
    127101                } else { 
    128102                        displayError(LOAD_ERROR); 
    129103                } 
    130104        } 
    131  
    132         private void initPreloadHandlers (FormDef f) { 
    133                 Vector preloadHandlers = this.context.getPreloadHandlers(); 
    134                 if(preloadHandlers != null) { 
    135                         Enumeration en = preloadHandlers.elements(); 
    136                         while(en.hasMoreElements()) { 
    137                                 f.getPreloader().addPreloadHandler((IPreloadHandler)en.nextElement()); 
    138                         } 
    139                 } 
    140  
    141                 //set handler for preload context 
    142                 contextHandler = new ContextPreloadHandler(context); 
    143                 f.getPreloader().addPreloadHandler(contextHandler); 
    144         } 
    145105         
    146         private EvaluationContext initEvaluationContext () { 
    147                 EvaluationContext ec = new EvaluationContext(); 
     106        public void start (Context context) { 
     107                this.instanceID = -1; 
    148108                 
    149                 Vector functionHandlers = this.context.getFunctionHandlers(); 
    150                 if(functionHandlers != null) { 
    151                         Enumeration en = functionHandlers.elements(); 
    152                         while(en.hasMoreElements()) { 
    153                                 ec.addFunctionHandler((IFunctionHandler)en.nextElement()); 
    154                         } 
     109                if (context instanceof FormEntryContext) { 
     110                        this.context = (FormEntryContext) context; 
     111                        this.instanceID = this.context.getInstanceID(); 
    155112                } 
    156113                 
    157                 return ec; 
     114                System.out.println("almost starting loading screen"); 
     115                // Start the loading screen 
     116                System.out.println("starting loading screen"); 
     117                this.loadingScreen.start(context); 
     118                 
     119                // Start loading the form 
     120                this.formLoader.start(context); 
    158121        } 
    159122 
     
    206169         
    207170        public void setRetrievalMethod(IFormDefRetrievalMethod method) { 
    208                 fetcher.setFetcher(method); 
     171                this.formLoader.setRetrievalMethod(method); 
    209172        } 
    210173