/v3.2/nimbits-sdk/src/com/nimbits/MainClass.java

http://nimbits-server.googlecode.com/ · Java · 187 lines · 148 code · 33 blank · 6 comment · 35 complexity · 4159de9c2d0b3308ac86f73b142d2e70 MD5 · raw file

  1. package com.nimbits;
  2. import com.nimbits.client.NimbitsClient;
  3. import com.nimbits.client.NimbitsClientFactory;
  4. import com.nimbits.client.model.Action;
  5. import com.nimbits.client.model.Const;
  6. import com.nimbits.client.model.common.CommonFactoryLocator;
  7. import com.nimbits.client.model.email.EmailAddress;
  8. import com.nimbits.client.model.point.PointName;
  9. import com.nimbits.client.model.value.Value;
  10. import com.nimbits.client.model.value.ValueModelFactory;
  11. import com.nimbits.console.KeyFile;
  12. import com.nimbits.gson.GsonFactory;
  13. import com.nimbits.user.GoogleUser;
  14. import com.nimbits.user.NimbitsUser;
  15. import java.io.IOException;
  16. import java.util.Date;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. /**
  20. * Created by bsautner
  21. * User: benjamin
  22. * Date: 4/8/11
  23. * Time: 2:42 PM
  24. */
  25. public class MainClass {
  26. public static void main(final String[] args) throws IOException {
  27. final HashMap<String, String> argsMap = new HashMap<String, String>();
  28. if (args == null || args.length == 0) {
  29. printUsage();
  30. return;
  31. } else {
  32. processArgs(args, argsMap);
  33. }
  34. if (argsMap.containsKey(Const.PARAM_I)) {
  35. String[] fileArgs = KeyFile.processKeyFile(argsMap);
  36. processArgs(fileArgs, argsMap);
  37. }
  38. final boolean verbose = argsMap.containsKey(Const.PARAM_VERBOSE);
  39. final String host = argsMap.containsKey(Const.PARAM_HOST) ? argsMap.get(Const.PARAM_HOST) : Const.PATH_NIMBITS_PUBLIC_SERVER;
  40. final String emailParam = argsMap.containsKey(Const.PARAM_EMAIL) ? argsMap.get(Const.PARAM_EMAIL) : null;
  41. final String key = argsMap.containsKey(Const.PARAM_KEY) ? argsMap.get(Const.PARAM_KEY) : null;
  42. final String password = argsMap.containsKey(Const.PARAM_PASSWORD) ? argsMap.get(Const.PARAM_PASSWORD) : null;
  43. final EmailAddress email = CommonFactoryLocator.getInstance().createEmailAddress(emailParam);
  44. final NimbitsClient client = createClient(host, email, key, password);
  45. final boolean loggedIn = checkLoggedIn(client, verbose);
  46. if (!loggedIn) {
  47. out(true, "Access Denied.");
  48. return;
  49. }
  50. if (argsMap.containsKey(Const.PARAM_ACTION) && loggedIn) {
  51. Action action = Action.valueOf(argsMap.get(Const.PARAM_ACTION));
  52. switch (action) {
  53. case read:
  54. case readvalue:
  55. case readgps:
  56. case readjson:
  57. case readnote:
  58. readValue(client, argsMap, action);
  59. break;
  60. case record:
  61. case recordvalue:
  62. recordValue(client, argsMap, verbose);
  63. break;
  64. default:
  65. printUsage();
  66. }
  67. } else if (argsMap.containsKey(Const.PARAM_GENKEY) && argsMap.containsKey(Const.PARAM_OUT)) {
  68. out(true, KeyFile.genKey(argsMap));
  69. }
  70. }
  71. private static void readValue(final NimbitsClient client, final Map<String, String> argsMap, Action action) {
  72. final PointName pointName = CommonFactoryLocator.getInstance().createPointName(argsMap.get(Const.PARAM_POINT));
  73. final Value v = client.getCurrentRecordedValue(pointName);
  74. switch (action) {
  75. case read:
  76. case readvalue:
  77. out(true, String.valueOf(v.getValue()));
  78. break;
  79. case readgps:
  80. out(true, v.getLatitude() + "," + v.getLongitude());
  81. break;
  82. case readnote:
  83. out(true, v.getNote());
  84. break;
  85. case readjson:
  86. out(true, GsonFactory.getInstance().toJson(v));
  87. break;
  88. }
  89. }
  90. private static Value buildValue(final Map<String, String> argsMap) {
  91. final double d = argsMap.containsKey(Const.PARAM_VALUE) ? Double.valueOf(argsMap.get(Const.PARAM_VALUE)) : 0.0;
  92. final String note = argsMap.containsKey(Const.PARAM_NOTE) ? argsMap.get(Const.PARAM_NOTE) : null;
  93. final double lat = argsMap.containsKey(Const.PARAM_LAT) ? Double.valueOf(argsMap.get(Const.PARAM_LAT)) : 0.0;
  94. final double lng = argsMap.containsKey(Const.PARAM_LNG) ? Double.valueOf(argsMap.get(Const.PARAM_LNG)) : 0.0;
  95. return ValueModelFactory.createValueModel(lat, lng, d, new Date(), 0, note, "");
  96. }
  97. private static void recordValue(final NimbitsClient client, final Map<String, String> argsMap, final boolean verbose) throws IOException {
  98. out(verbose, "Recording values");
  99. final Value v = buildValue(argsMap);
  100. final PointName pointName = CommonFactoryLocator.getInstance().createPointName(argsMap.get(Const.PARAM_POINT));
  101. final Value result = client.recordValue(pointName, v);
  102. if (result == null) {
  103. out(verbose, "An error occurred recording your data");
  104. } else {
  105. out(verbose, result.getValue() + " recorded to " + pointName);
  106. }
  107. }
  108. private static boolean checkLoggedIn(final NimbitsClient client, final boolean verbose) throws IOException {
  109. boolean loggedIn = false;
  110. if (client != null) {
  111. out(verbose, "Authenticating...");
  112. loggedIn = client.isLoggedIn();
  113. if (loggedIn) {
  114. out(verbose, "Success");
  115. } else {
  116. out(verbose, "Authentication Failure");
  117. }
  118. }
  119. return loggedIn;
  120. }
  121. private static NimbitsClient createClient(final String host, final EmailAddress email, final String key, final String password) {
  122. NimbitsClient client = null;
  123. if (key != null && email != null) {
  124. NimbitsUser n = new NimbitsUser(email, key);
  125. client = NimbitsClientFactory.getInstance(n, host);
  126. } else if (password != null && email != null) {
  127. GoogleUser g = new GoogleUser(email, password);
  128. try {
  129. client = NimbitsClientFactory.getInstance(g, host);
  130. } catch (Exception e) {
  131. out(true, e.getMessage());
  132. }
  133. }
  134. return client;
  135. }
  136. private static void processArgs(final String[] args, final Map<String, String> argsMap) {
  137. for (String s : args) {
  138. String[] a = s.split("=");
  139. if (a.length == 2) {
  140. argsMap.put(a[0].replaceFirst("-", "").toLowerCase(), a[1].trim());
  141. } else {
  142. argsMap.put(s.replaceFirst("-", "").toLowerCase(), "");
  143. }
  144. }
  145. }
  146. private static void out(boolean verbose, final String message) {
  147. if (verbose) {
  148. System.out.println(message);
  149. }
  150. }
  151. private static void printUsage() {
  152. out(true, "Unexpected parameters. Please refer to the SDK Manual on www.nimbits.com.");
  153. }
  154. }