]> git.gag.com Git - debian/openrocket/commitdiff
Refactor TCQueryAction so it can be used from the motor browser or when resolving...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sun, 5 Feb 2012 02:00:00 +0000 (02:00 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sun, 5 Feb 2012 02:00:00 +0000 (02:00 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@394 180e2498-e6e9-4542-8430-84ac67f01cd8

android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java [new file with mode: 0644]
android/src/net/sf/openrocket/android/thrustcurve/TCQueryAction.java
android/src/net/sf/openrocket/android/thrustcurve/TCQueryActivity.java
android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java [new file with mode: 0644]

diff --git a/android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java b/android/src/net/sf/openrocket/android/thrustcurve/TCMissingMotorDownloadAction.java
new file mode 100644 (file)
index 0000000..7f6cb70
--- /dev/null
@@ -0,0 +1,109 @@
+package net.sf.openrocket.android.thrustcurve;\r
+\r
+import java.util.Set;\r
+\r
+import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
+import android.app.Activity;\r
+\r
+public class TCMissingMotorDownloadAction extends TCQueryAction {\r
+\r
+       private Set<ThrustCurveMotorPlaceholder> missingMotors;\r
+\r
+       public TCMissingMotorDownloadAction(Activity parent) {\r
+               super(parent);\r
+       }\r
+\r
+       public void setMissingMotors( Set<ThrustCurveMotorPlaceholder> missingMotors ) {\r
+               this.missingMotors = missingMotors;\r
+       }\r
+\r
+       protected Runnable getTask() {\r
+               return new Downloader();\r
+       }\r
+\r
+       private class Downloader implements Runnable {\r
+\r
+               private void downloadMissingMotor( ThrustCurveMotorPlaceholder motor ) {\r
+                       try {\r
+                               SearchRequest request = new SearchRequest();\r
+                               request.setManufacturer(motor.getManufacturer());\r
+                               request.setDesignation(motor.getDesignation());\r
+\r
+                               handler.post( new UpdateMessage("Looking for " + motor.getManufacturer() + " " + motor.getDesignation()));\r
+\r
+                               SearchResponse res = new ThrustCurveAPI().doSearch(request);\r
+\r
+                               int total = res.getResults().size();\r
+                               int count = 1;\r
+                               for( TCMotor mi : res.getResults() ) {\r
+                                       StringBuilder message = new StringBuilder();\r
+                                       message.append("Downloading details ");\r
+                                       if ( total > 1 ) {\r
+                                               message.append(count);\r
+                                               message.append(" of " );\r
+                                               message.append(total);\r
+                                               message.append("\n");\r
+                                       }\r
+                                       message.append(mi.getManufacturer());\r
+                                       message.append(" ");\r
+                                       message.append(mi.getCommon_name());\r
+                                       handler.post(new UpdateMessage(message.toString()));\r
+                                       count++;\r
+                                       if ( mi.getData_files() == null || mi.getData_files().intValue() == 0 ) {\r
+                                               continue;\r
+                                       }\r
+\r
+                                       MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id());\r
+\r
+                                       AndroidLogWrapper.d(TCQueryAction.class, mi.toString());\r
+\r
+                                       ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor();\r
+\r
+                                       m.setThrustCurveMotor( b.getThrustCurveMotor() );\r
+\r
+                                       // Convert impulse class.  ThrustCurve puts mmx, 1/4a and 1/2a as A.\r
+                                       m.setImpulseClass(mi.getImpulse_class());\r
+                                       if ( "a".equalsIgnoreCase(mi.getImpulse_class())) {\r
+                                               if( mi.getCommon_name().startsWith("1/2A") ) {\r
+                                                       m.setImpulseClass("1/2A");\r
+                                               } else if (mi.getCommon_name().startsWith("1/4A") ) {\r
+                                                       m.setImpulseClass("1/4A");\r
+                                               } else if (mi.getCommon_name().startsWith("Micro") ) {\r
+                                                       m.setImpulseClass("1/8A");\r
+                                               }\r
+                                       }\r
+\r
+                                       // Convert Case Info.\r
+                                       if ( mi.getCase_info() == null\r
+                                                       || "single use".equalsIgnoreCase(mi.getCase_info())\r
+                                                       || "single-use".equalsIgnoreCase(mi.getCase_info())) {\r
+                                               m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength());\r
+                                       } else {\r
+                                               m.setCaseInfo(mi.getCase_info());\r
+                                       }\r
+\r
+                                       AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString());\r
+                                       // Write motor.\r
+                                       mDbHelper.getMotorDao().insertOrUpdateMotor(m);\r
+                               }\r
+                       }\r
+                       catch( Exception ex){\r
+                               AndroidLogWrapper.d(TCQueryAction.class,ex.toString());\r
+                               handler.post( new Error(ex.toString()) );\r
+                       }\r
+\r
+               }\r
+\r
+       @Override\r
+       public void run() {\r
+               for ( ThrustCurveMotorPlaceholder motor : missingMotors ) {\r
+                       AndroidLogWrapper.d(TCMissingMotorDownloadAction.class, "Motor: {}", motor);\r
+                       downloadMissingMotor(motor);\r
+               }\r
+               handler.post( new Dismiss() );\r
+       }\r
+}\r
+\r
+}\r
index 81ce21044ded21c684a0121b22b036d0b48261fb..6cc486eb6bc13668848ace75650d6ad385793900 100644 (file)
@@ -1,8 +1,6 @@
 package net.sf.openrocket.android.thrustcurve;\r
 \r
 import net.sf.openrocket.android.db.DbAdapter;\r
-import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;\r
-import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import android.app.Activity;\r
 import android.app.AlertDialog;\r
 import android.app.ProgressDialog;\r
@@ -27,17 +25,17 @@ import android.os.Handler;
  * When the parent Activity is dismissed, it must call TCQueryAction.dismiss() to free resources.\r
  * \r
  */\r
-public class TCQueryAction {\r
+public abstract class TCQueryAction {\r
 \r
        public interface OnComplete {\r
                public void onComplete();\r
        }\r
 \r
-       private DbAdapter mDbHelper;\r
+       protected DbAdapter mDbHelper;\r
 \r
        private ProgressDialog progress;\r
        private Thread downloadThread;\r
-       private Handler handler;\r
+       protected Handler handler;\r
 \r
        private final Activity parent;\r
        private OnComplete onCompleteListener;\r
@@ -65,17 +63,18 @@ public class TCQueryAction {
                this.onCompleteListener = onCompleteListener;\r
        }\r
 \r
-       public void start( SearchRequest request) {\r
-               Downloader d = new Downloader(request);\r
-\r
+       protected abstract Runnable getTask();\r
+       \r
+       public void start() {\r
                handler = new Handler();\r
                progress = ProgressDialog.show(parent, null, "");\r
 \r
-               downloadThread = new Thread( d );\r
+               downloadThread = new Thread( getTask() );\r
                downloadThread.start();\r
 \r
        }\r
 \r
+\r
        public void dismiss() {\r
                // TODO - need to kill the thread.\r
 \r
@@ -86,7 +85,7 @@ public class TCQueryAction {
                }\r
        }\r
 \r
-       private class UpdateMessage implements Runnable {\r
+       protected class UpdateMessage implements Runnable {\r
                private String newMessage;\r
                UpdateMessage( String message ) {\r
                        this.newMessage = message;\r
@@ -97,7 +96,7 @@ public class TCQueryAction {
                }\r
        }\r
 \r
-       private class Dismiss implements Runnable {\r
+       protected class Dismiss implements Runnable {\r
                @Override\r
                public void run() {\r
                        progress.dismiss();\r
@@ -108,7 +107,7 @@ public class TCQueryAction {
                }\r
        }\r
 \r
-       private class Error implements Runnable {\r
+       protected class Error implements Runnable {\r
                private String newMessage;\r
                Error( String message ) {\r
                        this.newMessage = message;\r
@@ -130,85 +129,4 @@ public class TCQueryAction {
                }\r
        }\r
 \r
-       private class Downloader implements Runnable {\r
-\r
-               SearchRequest request;\r
-\r
-               Downloader( SearchRequest request ) {\r
-                       this.request = request;\r
-               }\r
-\r
-               @Override\r
-               public void run() {\r
-                       try {\r
-                               handler.post( new UpdateMessage("Quering Thrustcurve"));\r
-                               SearchResponse res = new ThrustCurveAPI().doSearch(request);\r
-\r
-                               int total = res.getResults().size();\r
-                               int count = 1;\r
-                               for( TCMotor mi : res.getResults() ) {\r
-                                       StringBuilder message = new StringBuilder();\r
-                                       message.append("Downloading details ");\r
-                                       if ( total > 1 ) {\r
-                                               message.append(count);\r
-                                               message.append(" of " );\r
-                                               message.append(total);\r
-                                               message.append("\n");\r
-                                       }\r
-                                       message.append(mi.getManufacturer());\r
-                                       message.append(" ");\r
-                                       message.append(mi.getCommon_name());\r
-                                       handler.post(new UpdateMessage(message.toString()));\r
-                                       count++;\r
-                                       if ( mi.getData_files() == null || mi.getData_files().intValue() == 0 ) {\r
-                                               continue;\r
-                                       }\r
-\r
-                                       MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id());\r
-\r
-                                       AndroidLogWrapper.d(TCQueryAction.class, mi.toString());\r
-\r
-                                       ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor();\r
-\r
-                                       m.setThrustCurveMotor( b.getThrustCurveMotor() );\r
-\r
-                                       // Convert impulse class.  ThrustCurve puts mmx, 1/4a and 1/2a as A.\r
-                                       m.setImpulseClass(mi.getImpulse_class());\r
-                                       if ( "a".equalsIgnoreCase(mi.getImpulse_class())) {\r
-                                               if( mi.getCommon_name().startsWith("1/2A") ) {\r
-                                                       m.setImpulseClass("1/2A");\r
-                                               } else if (mi.getCommon_name().startsWith("1/4A") ) {\r
-                                                       m.setImpulseClass("1/4A");\r
-                                               } else if (mi.getCommon_name().startsWith("Micro") ) {\r
-                                                       m.setImpulseClass("1/8A");\r
-                                               }\r
-                                       }\r
-\r
-                                       // Convert Case Info.\r
-                                       if ( mi.getCase_info() == null\r
-                                                       || "single use".equalsIgnoreCase(mi.getCase_info())\r
-                                                       || "single-use".equalsIgnoreCase(mi.getCase_info())) {\r
-                                               m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength());\r
-                                       } else {\r
-                                               m.setCaseInfo(mi.getCase_info());\r
-                                       }\r
-\r
-                                       AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString());\r
-                                       // Write motor.\r
-                                       mDbHelper.getMotorDao().insertOrUpdateMotor(m);\r
-                               }\r
-                               if ( total < res.getMatches() ) {\r
-                                       handler.post( new Error( total + " motors downloaded, " + res.getMatches() + " matched.  Try restricting the query more.") );\r
-                               } else {\r
-                                       handler.post( new Dismiss());\r
-                               }\r
-                       }\r
-                       catch( Exception ex){\r
-                               AndroidLogWrapper.d(TCQueryAction.class,ex.toString());\r
-                               handler.post( new Error(ex.toString()) );\r
-                       }\r
-\r
-               }\r
-       }\r
-\r
 }\r
index 6c5e4c8963282654122a126953fa4ef72429aa3e..619ed7a3ec0b19824ddc84e340559c843aafd4e5 100644 (file)
@@ -13,14 +13,14 @@ public class TCQueryActivity extends Activity
 implements TCQueryAction.OnComplete\r
 {\r
 \r
-       private TCQueryAction queryAction;\r
+       private TCSearchAction queryAction;\r
 \r
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
                setContentView(R.layout.tcqueryform);\r
-\r
-               queryAction = new TCQueryAction(this);\r
+               \r
+               queryAction = new TCSearchAction(this);\r
 \r
                final Spinner manufacturerField = (Spinner) findViewById(R.id.TCMotorSearchFormManufacturerField);\r
                final Spinner impulseField = (Spinner) findViewById(R.id.TCMotorSearchFormImpulseField);\r
@@ -33,7 +33,7 @@ implements TCQueryAction.OnComplete
                                        @Override\r
                                        public void onClick( View v ) {\r
                                                AndroidLogWrapper.d(TCQueryActivity.class,"submit button clicked");\r
-\r
+                                               \r
                                                String commonName = commonNameField.getText().toString();\r
 \r
                                                SearchRequest r = new SearchRequest();\r
@@ -54,7 +54,8 @@ implements TCQueryAction.OnComplete
                                                }\r
                                                r.setCommon_name(commonName);\r
 \r
-                                               queryAction.start(r);\r
+                                               queryAction.setRequest(r);\r
+                                               queryAction.start();\r
                                        }\r
                                }\r
                                );\r
diff --git a/android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java b/android/src/net/sf/openrocket/android/thrustcurve/TCSearchAction.java
new file mode 100644 (file)
index 0000000..33ca9e9
--- /dev/null
@@ -0,0 +1,98 @@
+package net.sf.openrocket.android.thrustcurve;\r
+\r
+import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import android.app.Activity;\r
+\r
+public class TCSearchAction extends TCQueryAction {\r
+\r
+       private SearchRequest request;\r
+       \r
+       public TCSearchAction(Activity parent) {\r
+               super(parent);\r
+       }\r
+       \r
+       public void setRequest( SearchRequest request ) {\r
+               this.request = request;\r
+       }\r
+\r
+       protected Runnable getTask() {\r
+               return new Downloader();\r
+       }\r
+       \r
+       private class Downloader implements Runnable {\r
+\r
+               @Override\r
+               public void run() {\r
+                       try {\r
+                               handler.post( new UpdateMessage("Quering Thrustcurve"));\r
+                               SearchResponse res = new ThrustCurveAPI().doSearch(request);\r
+\r
+                               int total = res.getResults().size();\r
+                               int count = 1;\r
+                               for( TCMotor mi : res.getResults() ) {\r
+                                       StringBuilder message = new StringBuilder();\r
+                                       message.append("Downloading details ");\r
+                                       if ( total > 1 ) {\r
+                                               message.append(count);\r
+                                               message.append(" of " );\r
+                                               message.append(total);\r
+                                               message.append("\n");\r
+                                       }\r
+                                       message.append(mi.getManufacturer());\r
+                                       message.append(" ");\r
+                                       message.append(mi.getCommon_name());\r
+                                       handler.post(new UpdateMessage(message.toString()));\r
+                                       count++;\r
+                                       if ( mi.getData_files() == null || mi.getData_files().intValue() == 0 ) {\r
+                                               continue;\r
+                                       }\r
+\r
+                                       MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id());\r
+\r
+                                       AndroidLogWrapper.d(TCQueryAction.class, mi.toString());\r
+\r
+                                       ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor();\r
+\r
+                                       m.setThrustCurveMotor( b.getThrustCurveMotor() );\r
+\r
+                                       // Convert impulse class.  ThrustCurve puts mmx, 1/4a and 1/2a as A.\r
+                                       m.setImpulseClass(mi.getImpulse_class());\r
+                                       if ( "a".equalsIgnoreCase(mi.getImpulse_class())) {\r
+                                               if( mi.getCommon_name().startsWith("1/2A") ) {\r
+                                                       m.setImpulseClass("1/2A");\r
+                                               } else if (mi.getCommon_name().startsWith("1/4A") ) {\r
+                                                       m.setImpulseClass("1/4A");\r
+                                               } else if (mi.getCommon_name().startsWith("Micro") ) {\r
+                                                       m.setImpulseClass("1/8A");\r
+                                               }\r
+                                       }\r
+\r
+                                       // Convert Case Info.\r
+                                       if ( mi.getCase_info() == null\r
+                                                       || "single use".equalsIgnoreCase(mi.getCase_info())\r
+                                                       || "single-use".equalsIgnoreCase(mi.getCase_info())) {\r
+                                               m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength());\r
+                                       } else {\r
+                                               m.setCaseInfo(mi.getCase_info());\r
+                                       }\r
+\r
+                                       AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString());\r
+                                       // Write motor.\r
+                                       mDbHelper.getMotorDao().insertOrUpdateMotor(m);\r
+                               }\r
+                               if ( total < res.getMatches() ) {\r
+                                       handler.post( new Error( total + " motors downloaded, " + res.getMatches() + " matched.  Try restricting the query more.") );\r
+                               } else {\r
+                                       handler.post( new Dismiss());\r
+                               }\r
+                       }\r
+                       catch( Exception ex){\r
+                               AndroidLogWrapper.d(TCQueryAction.class,ex.toString());\r
+                               handler.post( new Error(ex.toString()) );\r
+                       }\r
+\r
+               }\r
+       }\r
+\r
+}\r