]> git.gag.com Git - debian/openrocket/commitdiff
Checkpoint commit adding missing motor download workflow.
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sun, 5 Feb 2012 02:01:12 +0000 (02:01 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sun, 5 Feb 2012 02:01:12 +0000 (02:01 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@395 180e2498-e6e9-4542-8430-84ac67f01cd8

android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java [new file with mode: 0644]
android/src/net/sf/openrocket/android/rocket/MissingMotorHelpers.java [new file with mode: 0644]
android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderActivity.java
android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderTask.java
android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java [new file with mode: 0644]

diff --git a/android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java b/android/src/net/sf/openrocket/android/rocket/MissingMotorDialogFragment.java
new file mode 100644 (file)
index 0000000..4cbb31d
--- /dev/null
@@ -0,0 +1,52 @@
+package net.sf.openrocket.android.rocket;\r
+\r
+import java.util.Set;\r
+\r
+import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
+import android.content.DialogInterface;\r
+import android.os.Bundle;\r
+import android.support.v4.app.DialogFragment;\r
+\r
+public class MissingMotorDialogFragment extends DialogFragment {\r
+\r
+       Set<ThrustCurveMotorPlaceholder> missingMotors;\r
+\r
+       public static MissingMotorDialogFragment newInstance( Set<ThrustCurveMotorPlaceholder> missingMotors ) {\r
+               MissingMotorDialogFragment frag = new MissingMotorDialogFragment();\r
+               frag.missingMotors = missingMotors;\r
+               return frag;\r
+       }\r
+\r
+       @Override\r
+       public Dialog onCreateDialog(Bundle savedInstanceState) {\r
+\r
+               AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());\r
+               //                      .setIcon(android.R.drawable.alert_dialog_icon)\r
+               builder.setTitle("Missing Motors");\r
+               StringBuilder sb = new StringBuilder();\r
+               sb.append("The following motors are missing:");\r
+               for( ThrustCurveMotorPlaceholder m : missingMotors ) {\r
+                       sb.append("\n").append(m.getManufacturer()).append(" ").append(m.getDesignation());\r
+               }\r
+               sb.append("\nWould you like to download them from Thrustcurve?");\r
+               builder.setMessage(sb.toString());\r
+               builder.setPositiveButton("OK",\r
+                               new DialogInterface.OnClickListener() {\r
+                       public void onClick(DialogInterface dialog, int whichButton) {\r
+                               ((OpenRocketLoaderActivity)getActivity()).doFixMissingMotors();\r
+                       }\r
+               }\r
+                               );\r
+               builder.setNegativeButton("Cancel",\r
+                               new DialogInterface.OnClickListener() {\r
+                       public void onClick(DialogInterface dialog, int whichButton) {\r
+                               ((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors();\r
+                       }\r
+               }\r
+                               );\r
+               return builder.create();\r
+       }\r
+}\r
+\r
diff --git a/android/src/net/sf/openrocket/android/rocket/MissingMotorHelpers.java b/android/src/net/sf/openrocket/android/rocket/MissingMotorHelpers.java
new file mode 100644 (file)
index 0000000..a0179d7
--- /dev/null
@@ -0,0 +1,76 @@
+package net.sf.openrocket.android.rocket;\r
+\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
+import net.sf.openrocket.aerodynamics.WarningSet;\r
+import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import net.sf.openrocket.file.DatabaseMotorFinder;\r
+import net.sf.openrocket.motor.Motor;\r
+import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
+import net.sf.openrocket.rocketcomponent.Configuration;\r
+import net.sf.openrocket.rocketcomponent.MotorMount;\r
+import net.sf.openrocket.rocketcomponent.Rocket;\r
+\r
+public abstract class MissingMotorHelpers {\r
+\r
+       public static Set<ThrustCurveMotorPlaceholder> findMissingMotors( Rocket rocket ) {\r
+\r
+               Set<ThrustCurveMotorPlaceholder> missingMotors = new HashSet<ThrustCurveMotorPlaceholder>();\r
+               Configuration config = rocket.getDefaultConfiguration();\r
+               for( String configID : rocket.getMotorConfigurationIDs() ) {\r
+                       config.setMotorConfigurationID(configID);\r
+                       Iterator<MotorMount> mmts = config.motorIterator();\r
+                       while ( mmts.hasNext() ) {\r
+                               MotorMount mmt = mmts.next();\r
+                               Motor m = mmt.getMotor(configID);\r
+                               if ( m instanceof ThrustCurveMotorPlaceholder ) {\r
+                                       missingMotors.add( (ThrustCurveMotorPlaceholder) m );\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+               for ( ThrustCurveMotorPlaceholder m : missingMotors ) {\r
+                       AndroidLogWrapper.d(MissingMotorHelpers.class, "Missing Motor: {}", m);\r
+               }\r
+\r
+               return missingMotors;\r
+       }\r
+\r
+       public static void updateMissingMotors( Rocket rocket, WarningSet warnings ) {\r
+       \r
+               DatabaseMotorFinder finder = new DatabaseMotorFinder();\r
+               \r
+               Configuration config = rocket.getDefaultConfiguration();\r
+               for( String configID : rocket.getMotorConfigurationIDs() ) {\r
+                       config.setMotorConfigurationID(configID);\r
+                       Iterator<MotorMount> mmts = config.motorIterator();\r
+                       while ( mmts.hasNext() ) {\r
+                               MotorMount mmt = mmts.next();\r
+                               Motor m = mmt.getMotor(configID);\r
+                               if ( m instanceof ThrustCurveMotorPlaceholder ) {\r
+                                       \r
+                                       ThrustCurveMotorPlaceholder placeholder = (ThrustCurveMotorPlaceholder)m;\r
+                                       Motor newMotor = finder.findMotor(placeholder.getMotorType(),\r
+                                                       placeholder.getManufacturer(),\r
+                                                       placeholder.getDesignation(),\r
+                                                       placeholder.getDiameter(),\r
+                                                       placeholder.getLength(),\r
+                                                       placeholder.getDigest(),\r
+                                                       warnings);\r
+\r
+                                       if ( newMotor != null ) {\r
+                                               // one is now here so replace it\r
+                                               mmt.setMotor(configID, newMotor);\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+               \r
+       }\r
+       \r
+}\r
index caf3a5f99bdfe584072c40c09bdae6b341a6e4f7..30c313448be5bbb573a7ad905f3d4cd68d98ded3 100644 (file)
@@ -1,32 +1,52 @@
 package net.sf.openrocket.android.rocket;\r
 \r
 import java.io.File;\r
+import java.util.Set;\r
 \r
 import net.sf.openrocket.R;\r
 import net.sf.openrocket.aerodynamics.WarningSet;\r
 import net.sf.openrocket.android.Application;\r
+import net.sf.openrocket.android.thrustcurve.TCMissingMotorDownloadAction;\r
+import net.sf.openrocket.android.thrustcurve.TCQueryAction;\r
 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
-import android.app.AlertDialog;\r
-import android.app.Dialog;\r
+import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;\r
 import android.app.ProgressDialog;\r
-import android.content.DialogInterface;\r
 import android.content.Intent;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.support.v4.app.DialogFragment;\r
 import android.support.v4.app.FragmentActivity;\r
 \r
-public class OpenRocketLoaderActivity extends FragmentActivity {\r
+public class OpenRocketLoaderActivity extends FragmentActivity\r
+implements TCQueryAction.OnComplete\r
+{\r
 \r
+       private OpenRocketLoaderResult result;\r
+       \r
+       private Set<ThrustCurveMotorPlaceholder> missingMotors;\r
+       private OpenRocketLoaderTask task;\r
        private ProgressDialog progress;\r
+       private DialogFragment missingMotorDialog;\r
+       private TCMissingMotorDownloadAction missingMotorDownloadAction;\r
 \r
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
                setContentView(R.layout.main);\r
-               Intent i = getIntent();\r
-               Uri file = i.getData();\r
-               loadOrkFile(file);\r
+               missingMotorDownloadAction = new TCMissingMotorDownloadAction(this);\r
+               if ( savedInstanceState == null || savedInstanceState.getBoolean("isLoading", false) == false ) {\r
+                       Intent i = getIntent();\r
+                       Uri file = i.getData();\r
+                       loadOrkFile(file);\r
+               } else {\r
+                       progress = ProgressDialog.show(this, "Loading file", "");\r
+               }\r
+       }\r
+\r
+       @Override\r
+       protected void onSaveInstanceState(Bundle outState) {\r
+               super.onSaveInstanceState(outState);\r
+               outState.putBoolean("isLoading", true);\r
        }\r
 \r
        @Override\r
@@ -37,6 +57,10 @@ public class OpenRocketLoaderActivity extends FragmentActivity {
                        }\r
                        progress = null;\r
                }\r
+               if ( missingMotorDownloadAction != null ) {\r
+                       missingMotorDownloadAction.dismiss();\r
+               }\r
+\r
                super.onDestroy();\r
        }\r
 \r
@@ -46,84 +70,83 @@ public class OpenRocketLoaderActivity extends FragmentActivity {
                File orkFile = new File(path);\r
                progress = ProgressDialog.show(this, "Loading file", "");\r
 \r
-               final OpenRocketLoaderTask task = new OpenRocketLoaderTask() {\r
-\r
-                       /* (non-Javadoc)\r
-                        * @see android.os.AsyncTask#onPostExecute(java.lang.Object)\r
-                        */\r
-                       @Override\r
-                       protected void onPostExecute(OpenRocketLoaderResult result) {\r
-                               super.onPostExecute(result);\r
-                               AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderActivity.this);\r
-                               finishedLoading(result);\r
-                       }\r
-\r
-               };\r
+               task = new OpenRocketLoaderTask(this);\r
 \r
                task.execute(orkFile);\r
 \r
        }\r
-       \r
-       private void finishedLoading(OpenRocketLoaderResult result) {\r
-               if ( progress.isShowing() ) {\r
+\r
+       /**\r
+        * Called by the OpenRocketLoaderTask when it completes.\r
+        * is default visibility so it can be called from this package.\r
+        * \r
+        * @param result\r
+        */\r
+       void finishedLoading(OpenRocketLoaderResult result) {\r
+               if ( progress != null && progress.isShowing() ) {\r
                        progress.dismiss();\r
                }\r
+               this.result = result;\r
+               ((Application)OpenRocketLoaderActivity.this.getApplication()).setRocketDocument( result.rocket );\r
+\r
+               updateMissingMotors();\r
+\r
+       }\r
+\r
+       private void updateMissingMotors() {\r
+               missingMotors = MissingMotorHelpers.findMissingMotors(result.rocket.getRocket());\r
+\r
+               if ( missingMotors.size() > 0 ) {\r
+                       missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );\r
+                       missingMotorDialog.show(getSupportFragmentManager(), "missing motors");\r
+                       return;\r
+               }\r
+\r
+               displayWarningDialog();\r
+       }\r
+\r
+       /**\r
+        * Called when the TCMissingMotorDownload process finishes.\r
+        */\r
+       @Override\r
+       public void onComplete() {\r
+\r
+               // Need to update the motor references.\r
+               MissingMotorHelpers.updateMissingMotors(result.rocket.getRocket(), result.warnings);\r
+\r
+               displayWarningDialog();\r
+       }\r
 \r
+       private void displayWarningDialog() {\r
                WarningSet warnings = result.warnings;\r
                if (warnings == null || warnings.isEmpty()) {\r
-                       ((Application)OpenRocketLoaderActivity.this.getApplication()).setRocketDocument( result.rocket );\r
-                       Intent i = new Intent(this,OpenRocketViewer.class);\r
-                       startActivity(i);\r
-                       finish();\r
                } else {\r
                        // TODO - Build a warning listing dialog\r
                        DialogFragment newFragment = WarningDialogFragment.newInstance();\r
                        newFragment.show(getSupportFragmentManager(), "dialog");\r
+                       return;\r
                }\r
+\r
+               moveOnToViewer();\r
+       }\r
+\r
+       public void doFixMissingMotors() {\r
+\r
+               missingMotorDialog.dismiss();\r
+\r
+               missingMotorDownloadAction.setMissingMotors(missingMotors);\r
+               missingMotorDownloadAction.start();\r
+\r
+       }\r
+\r
+       public void doNotFixMissingMotors() {\r
+               missingMotorDialog.dismiss();\r
+               displayWarningDialog();\r
        }\r
 \r
-    public void doPositiveClick() {\r
-        // Do stuff here.\r
-        AndroidLogWrapper.i(OpenRocketLoaderActivity.class, "Positive click!");\r
-        finish();\r
-    }\r
-\r
-    public void doNegativeClick() {\r
-        // Do stuff here.\r
-       AndroidLogWrapper.i(OpenRocketLoaderActivity.class, "Negative click!");\r
-        finish();\r
-    }\r
-\r
-    public static class WarningDialogFragment extends DialogFragment {\r
-\r
-           public static WarningDialogFragment newInstance() {\r
-               WarningDialogFragment frag = new WarningDialogFragment();\r
-               Bundle args = new Bundle();\r
-               frag.setArguments(args);\r
-               return frag;\r
-           }\r
-\r
-           @Override\r
-           public Dialog onCreateDialog(Bundle savedInstanceState) {\r
-\r
-               return new AlertDialog.Builder(getActivity())\r
-//                     .setIcon(android.R.drawable.alert_dialog_icon)\r
-                       .setTitle("Warnings")\r
-                       .setPositiveButton("OK",\r
-                           new DialogInterface.OnClickListener() {\r
-                               public void onClick(DialogInterface dialog, int whichButton) {\r
-                                   ((OpenRocketLoaderActivity)getActivity()).doPositiveClick();\r
-                               }\r
-                           }\r
-                       )\r
-                       .setNegativeButton("Cancel",\r
-                           new DialogInterface.OnClickListener() {\r
-                               public void onClick(DialogInterface dialog, int whichButton) {\r
-                                   ((OpenRocketLoaderActivity)getActivity()).doNegativeClick();\r
-                               }\r
-                           }\r
-                       )\r
-                       .create();\r
-           }\r
+       private void moveOnToViewer() {\r
+               Intent i = new Intent(this,OpenRocketViewer.class);\r
+               startActivity(i);\r
+               finish();\r
        }\r
 }\r
index ccacf94d9917248b2001c339dd77940bd49ab7d8..a4cb55883367bf9ec3b3c2132a601e7ab05ac48b 100644 (file)
@@ -4,13 +4,20 @@ import java.io.File;
 \r
 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import net.sf.openrocket.document.OpenRocketDocument;\r
-import net.sf.openrocket.file.DatabaseMotorFinder;\r
+import net.sf.openrocket.file.DatabaseMotorFinderWithMissingMotors;\r
 import net.sf.openrocket.file.RocketLoadException;\r
 import net.sf.openrocket.file.openrocket.importt.OpenRocketLoader;\r
+import android.app.Activity;\r
 import android.os.AsyncTask;\r
 \r
 public class OpenRocketLoaderTask extends AsyncTask<File, Void, OpenRocketLoaderResult> {\r
        \r
+       private OpenRocketLoaderActivity parent;\r
+       \r
+       public OpenRocketLoaderTask( OpenRocketLoaderActivity parent ) {\r
+               this.parent = parent;\r
+       }\r
+       \r
        /* (non-Javadoc)\r
         * @see android.os.AsyncTask#doInBackground(Params[])\r
         */\r
@@ -21,7 +28,7 @@ public class OpenRocketLoaderTask extends AsyncTask<File, Void, OpenRocketLoader
                OpenRocketLoader rocketLoader = new OpenRocketLoader();\r
                try {\r
                        OpenRocketLoaderResult result = new OpenRocketLoaderResult();\r
-                       OpenRocketDocument rocket = rocketLoader.load(arg0[0], new DatabaseMotorFinder());\r
+                       OpenRocketDocument rocket = rocketLoader.load(arg0[0], new DatabaseMotorFinderWithMissingMotors());\r
                        result.rocket = rocket;\r
                        result.warnings = result.warnings;\r
                        return result;\r
@@ -31,5 +38,12 @@ public class OpenRocketLoaderTask extends AsyncTask<File, Void, OpenRocketLoader
                return null;\r
                \r
        }\r
-       \r
+\r
+       @Override\r
+       protected void onPostExecute(OpenRocketLoaderResult result) {\r
+               super.onPostExecute(result);\r
+               AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderTask.this);\r
+               parent.finishedLoading(result);\r
+       }\r
+\r
 }\r
diff --git a/android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java b/android/src/net/sf/openrocket/android/rocket/WarningDialogFragment.java
new file mode 100644 (file)
index 0000000..e84c973
--- /dev/null
@@ -0,0 +1,36 @@
+package net.sf.openrocket.android.rocket;\r
+\r
+import android.app.AlertDialog;\r
+import android.app.Dialog;\r
+import android.content.DialogInterface;\r
+import android.os.Bundle;\r
+import android.support.v4.app.DialogFragment;\r
+\r
+public class WarningDialogFragment extends DialogFragment {\r
+\r
+       public static WarningDialogFragment newInstance() {\r
+               WarningDialogFragment frag = new WarningDialogFragment();\r
+               Bundle args = new Bundle();\r
+               frag.setArguments(args);\r
+               return frag;\r
+       }\r
+\r
+       @Override\r
+       public Dialog onCreateDialog(Bundle savedInstanceState) {\r
+\r
+               AlertDialog.Builder builder =  new AlertDialog.Builder(getActivity());\r
+               //                      .setIcon(android.R.drawable.alert_dialog_icon)\r
+               builder.setTitle("Warnings");\r
+               builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {\r
+                       public void onClick(DialogInterface dialog, int whichButton) {\r
+                               getActivity().finish();\r
+                       }\r
+               });\r
+               builder.setOnCancelListener(new DialogInterface.OnCancelListener() {\r
+                       public void onCancel(DialogInterface dialog) {\r
+                               getActivity().finish();\r
+                       }\r
+               });\r
+               return builder.create();\r
+       }\r
+}\r