Refactor TCQueryAction so it can be used from the motor browser or when resolving...
[debian/openrocket] / android / src / net / sf / openrocket / android / thrustcurve / TCSearchAction.java
1 package net.sf.openrocket.android.thrustcurve;\r
2 \r
3 import net.sf.openrocket.android.motor.ExtendedThrustCurveMotor;\r
4 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
5 import android.app.Activity;\r
6 \r
7 public class TCSearchAction extends TCQueryAction {\r
8 \r
9         private SearchRequest request;\r
10         \r
11         public TCSearchAction(Activity parent) {\r
12                 super(parent);\r
13         }\r
14         \r
15         public void setRequest( SearchRequest request ) {\r
16                 this.request = request;\r
17         }\r
18 \r
19         protected Runnable getTask() {\r
20                 return new Downloader();\r
21         }\r
22         \r
23         private class Downloader implements Runnable {\r
24 \r
25                 @Override\r
26                 public void run() {\r
27                         try {\r
28                                 handler.post( new UpdateMessage("Quering Thrustcurve"));\r
29                                 SearchResponse res = new ThrustCurveAPI().doSearch(request);\r
30 \r
31                                 int total = res.getResults().size();\r
32                                 int count = 1;\r
33                                 for( TCMotor mi : res.getResults() ) {\r
34                                         StringBuilder message = new StringBuilder();\r
35                                         message.append("Downloading details ");\r
36                                         if ( total > 1 ) {\r
37                                                 message.append(count);\r
38                                                 message.append(" of " );\r
39                                                 message.append(total);\r
40                                                 message.append("\n");\r
41                                         }\r
42                                         message.append(mi.getManufacturer());\r
43                                         message.append(" ");\r
44                                         message.append(mi.getCommon_name());\r
45                                         handler.post(new UpdateMessage(message.toString()));\r
46                                         count++;\r
47                                         if ( mi.getData_files() == null || mi.getData_files().intValue() == 0 ) {\r
48                                                 continue;\r
49                                         }\r
50 \r
51                                         MotorBurnFile b = new ThrustCurveAPI().downloadData(mi.getMotor_id());\r
52 \r
53                                         AndroidLogWrapper.d(TCQueryAction.class, mi.toString());\r
54 \r
55                                         ExtendedThrustCurveMotor m = new ExtendedThrustCurveMotor();\r
56 \r
57                                         m.setThrustCurveMotor( b.getThrustCurveMotor() );\r
58 \r
59                                         // Convert impulse class.  ThrustCurve puts mmx, 1/4a and 1/2a as A.\r
60                                         m.setImpulseClass(mi.getImpulse_class());\r
61                                         if ( "a".equalsIgnoreCase(mi.getImpulse_class())) {\r
62                                                 if( mi.getCommon_name().startsWith("1/2A") ) {\r
63                                                         m.setImpulseClass("1/2A");\r
64                                                 } else if (mi.getCommon_name().startsWith("1/4A") ) {\r
65                                                         m.setImpulseClass("1/4A");\r
66                                                 } else if (mi.getCommon_name().startsWith("Micro") ) {\r
67                                                         m.setImpulseClass("1/8A");\r
68                                                 }\r
69                                         }\r
70 \r
71                                         // Convert Case Info.\r
72                                         if ( mi.getCase_info() == null\r
73                                                         || "single use".equalsIgnoreCase(mi.getCase_info())\r
74                                                         || "single-use".equalsIgnoreCase(mi.getCase_info())) {\r
75                                                 m.setCaseInfo(mi.getType()+ " " + mi.getDiameter() + "x" + mi.getLength());\r
76                                         } else {\r
77                                                 m.setCaseInfo(mi.getCase_info());\r
78                                         }\r
79 \r
80                                         AndroidLogWrapper.d(TCQueryAction.class,"adding motor " + m.toString());\r
81                                         // Write motor.\r
82                                         mDbHelper.getMotorDao().insertOrUpdateMotor(m);\r
83                                 }\r
84                                 if ( total < res.getMatches() ) {\r
85                                         handler.post( new Error( total + " motors downloaded, " + res.getMatches() + " matched.  Try restricting the query more.") );\r
86                                 } else {\r
87                                         handler.post( new Dismiss());\r
88                                 }\r
89                         }\r
90                         catch( Exception ex){\r
91                                 AndroidLogWrapper.d(TCQueryAction.class,ex.toString());\r
92                                 handler.post( new Error(ex.toString()) );\r
93                         }\r
94 \r
95                 }\r
96         }\r
97 \r
98 }\r