1 package net.sf.openrocket.android.thrustcurve;
\r
3 import net.sf.openrocket.R;
\r
4 import net.sf.openrocket.android.db.DbAdapter;
\r
5 import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;
\r
6 import android.app.Activity;
\r
7 import android.app.AlertDialog;
\r
8 import android.app.ProgressDialog;
\r
9 import android.content.DialogInterface;
\r
10 import android.os.Bundle;
\r
11 import android.os.Handler;
\r
12 import android.util.Log;
\r
13 import android.view.View;
\r
14 import android.widget.Button;
\r
15 import android.widget.EditText;
\r
16 import android.widget.Spinner;
\r
18 public class TCQueryActivity extends Activity {
\r
20 private static final String TAG = "ThrustCurveQueryActivity";
\r
22 private DbAdapter mDbHelper;
\r
24 private ProgressDialog progress;
\r
25 private Thread downloadThread;
\r
26 private Handler handler;
\r
29 protected void onCreate(Bundle savedInstanceState) {
\r
30 super.onCreate(savedInstanceState);
\r
31 setContentView(R.layout.tcqueryform);
\r
33 mDbHelper = new DbAdapter(this);
\r
36 final Spinner manufacturerField = (Spinner) findViewById(R.id.TCMotorSearchFormManufacturerField);
\r
37 final Spinner impulseField = (Spinner) findViewById(R.id.TCMotorSearchFormImpulseField);
\r
38 final Spinner diameterField = (Spinner) findViewById(R.id.TCMotorSearchFormDiameterField);
\r
39 final EditText commonNameField = (EditText) findViewById(R.id.TCMotorSearchFormCommonNameField);
\r
41 Button submitButton = (Button) findViewById(R.id.TCMotorSearchFromSubmitButton);
\r
42 submitButton.setOnClickListener(
\r
43 new View.OnClickListener() {
\r
45 public void onClick( View v ) {
\r
46 Log.d(TAG,"submit button clicked");
\r
48 String commonName = commonNameField.getText().toString();
\r
50 SearchRequest r = new SearchRequest();
\r
51 if ( manufacturerField.getSelectedItemPosition() != 0) {
\r
52 String m = (String) manufacturerField.getSelectedItem();
\r
53 Log.d(TAG,"manufacturer = " + m);
\r
54 r.setManufacturer(m);
\r
56 if ( impulseField.getSelectedItemPosition() != 0 ) {
\r
57 String impulse = (String) impulseField.getSelectedItem();
\r
58 Log.d(TAG,"impulse = " + impulse);
\r
59 r.setImpulse_class(impulse);
\r
61 if ( diameterField.getSelectedItemPosition() != 0 ) {
\r
62 String diameter = (String)diameterField.getSelectedItem();
\r
63 Log.d(TAG,"diameter = " + diameter);
\r
64 r.setDiameter(diameter);
\r
66 r.setCommon_name(commonName);
\r
68 Downloader d = new Downloader(r);
\r
70 handler = new Handler();
\r
71 progress = ProgressDialog.show(TCQueryActivity.this, null, "");
\r
73 downloadThread = new Thread( d );
\r
74 downloadThread.start();
\r
81 public Object onRetainNonConfigurationInstance() {
\r
82 return downloadThread;
\r
86 protected void onDestroy() {
\r
88 if ( progress != null ) {
\r
89 if ( progress.isShowing() ) {
\r
97 private class UpdateMessage implements Runnable {
\r
98 private String newMessage;
\r
99 UpdateMessage( String message ) {
\r
100 this.newMessage = message;
\r
103 public void run() {
\r
104 progress.setMessage(newMessage);
\r
108 private class Dismiss implements Runnable {
\r
110 public void run() {
\r
111 progress.dismiss();
\r
112 TCQueryActivity.this.finish();
\r
116 private class Error implements Runnable {
\r
117 private String newMessage;
\r
118 Error( String message ) {
\r
119 this.newMessage = message;
\r
122 public void run() {
\r
123 progress.dismiss();
\r
124 final AlertDialog dialog = new AlertDialog.Builder(TCQueryActivity.this).create();
\r
125 dialog.setMessage(newMessage);
\r
126 dialog.setButton(DialogInterface.BUTTON_NEUTRAL,"Dismiss", new DialogInterface.OnClickListener() {
\r
129 public void onClick(DialogInterface arg0, int arg1) {
\r
137 private class Downloader implements Runnable {
\r
139 SearchRequest request;
\r
141 Downloader( SearchRequest request ) {
\r
142 this.request = request;
\r
146 public void run() {
\r
148 handler.post( new UpdateMessage("Quering Thrustcurve"));
\r
149 SearchResponse res = new ThrustCurveAPI().doSearch(request);
\r
151 int total = res.getResults().size();
\r
153 for( TCMotor mi : res.getResults() ) {
\r
154 handler.post(new UpdateMessage("Downloading details " + count + " of " + total));
\r
156 if ( mi.getData_files() == null || mi.getData_files().intValue() == 0 ) {
\r
160 MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id());
\r
162 Log.d(TAG, mi.toString());
\r
164 ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor();
\r
166 m.setThrustCurveMotor( b.getThrustCurveMotor() );
\r
168 // Convert impulse class. ThrustCurve puts mmx, 1/4a and 1/2a as A.
\r
169 m.setImpulseClass(mi.getImpulse_class());
\r
170 if ( "a".equalsIgnoreCase(mi.getImpulse_class())) {
\r
171 if( mi.getCommon_name().startsWith("1/2A") ) {
\r
172 m.setImpulseClass("1/2A");
\r
173 } else if (mi.getCommon_name().startsWith("1/4A") ) {
\r
174 m.setImpulseClass("1/4A");
\r
175 } else if (mi.getCommon_name().startsWith("Micro") ) {
\r
176 m.setImpulseClass("1/8A");
\r
180 // Convert Case Info.
\r
181 if ( mi.getCase_info() == null
\r
182 || "single use".equalsIgnoreCase(mi.getCase_info())
\r
183 || "single-use".equalsIgnoreCase(mi.getCase_info())) {
\r
184 m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength());
\r
186 m.setCaseInfo(mi.getCase_info());
\r
189 Log.d(TAG,"adding motor " + m.toString());
\r
191 mDbHelper.getMotorDao().insertOrUpdateMotor(m);
\r
193 if ( total < res.getMatches() ) {
\r
194 handler.post( new Error( total + " motors downloaded, " + res.getMatches() + " matched. Try restricting the query more.") );
\r
196 handler.post( new Dismiss());
\r
199 catch( Exception ex){
\r
200 Log.d(TAG,ex.toString());
\r
201 handler.post( new Error(ex.toString()) );
\r