• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package autotest.moblab;
2 
3 import autotest.common.JsonRpcCallback;
4 import autotest.common.JsonRpcProxy;
5 import autotest.common.ui.NotifyManager;
6 import autotest.common.ui.TabView;
7 import autotest.common.ui.ToolTip;
8 import com.google.gwt.event.dom.client.ClickEvent;
9 import com.google.gwt.event.dom.client.ClickHandler;
10 import com.google.gwt.json.client.JSONObject;
11 import com.google.gwt.json.client.JSONString;
12 import com.google.gwt.json.client.JSONValue;
13 import com.google.gwt.user.client.ui.Button;
14 import com.google.gwt.user.client.ui.FileUpload;
15 import com.google.gwt.user.client.ui.FormPanel;
16 import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
17 import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
18 import java.util.HashMap;
19 import java.util.Map;
20 
21 /**
22  * Widget to upload all moblab credentials.
23  */
24 public class CredentialsUploadView extends TabView {
25   private static final String UPLOAD_KEY_BOTO_KEY = "boto_key";
26   private static final String UPLOAD_KEY_SERVICE_ACCOUNT = "service_account";
27   private static final String UPLOAD_KEY_LAUNCH_CONTROL_KEY = "launch_control_key";
28 
29   static Map<String, UploadInfo> uploadMap = new HashMap<String, UploadInfo>();
30   static {
uploadMap.put( UPLOAD_KEY_BOTO_KEY, new UploadInfo( UPLOAD_KEY_BOTO_KEY, "set_boto_key", "boto_key", "Boto Key uploaded.", "Boto key is for legacy access to Google Storage."))31     uploadMap.put(
32         UPLOAD_KEY_BOTO_KEY,
33         new UploadInfo(
34             UPLOAD_KEY_BOTO_KEY, "set_boto_key", "boto_key", "Boto Key uploaded.",
35             "Boto key is for legacy access to Google Storage."));
uploadMap.put( UPLOAD_KEY_SERVICE_ACCOUNT, new UploadInfo( UPLOAD_KEY_SERVICE_ACCOUNT, "set_service_account_credential", "service_account_filename", "Service Account Credential file uploaded.", "Service Account Credential is for access to Google Cloud Platform resources, " + "such as Google Storage, Cloud PubSub or others."))36     uploadMap.put(
37         UPLOAD_KEY_SERVICE_ACCOUNT,
38         new UploadInfo(
39             UPLOAD_KEY_SERVICE_ACCOUNT,
40             "set_service_account_credential",
41             "service_account_filename",
42             "Service Account Credential file uploaded.",
43             "Service Account Credential is for access to Google Cloud Platform resources, "
44             + "such as Google Storage, Cloud PubSub or others."));
uploadMap.put( UPLOAD_KEY_LAUNCH_CONTROL_KEY, new UploadInfo( UPLOAD_KEY_LAUNCH_CONTROL_KEY, "set_launch_control_key", "launch_control_key", "Launch Control Key uploaded.", "Launch Control Key is for access to the android build."))45     uploadMap.put(
46         UPLOAD_KEY_LAUNCH_CONTROL_KEY,
47         new UploadInfo(
48             UPLOAD_KEY_LAUNCH_CONTROL_KEY,
49             "set_launch_control_key",
50             "launch_control_key",
51             "Launch Control Key uploaded.",
52             "Launch Control Key is for access to the android build."));
53   }
54 
55   @Override
getElementId()56   public String getElementId() {
57     return "moblab_credentials";
58   }
59 
60   @Override
initialize()61   public void initialize() {
62     super.initialize();
63 
64     addUploadWidget(uploadMap.get(UPLOAD_KEY_BOTO_KEY));
65     addUploadWidget(uploadMap.get(UPLOAD_KEY_SERVICE_ACCOUNT));
66     addUploadWidget(uploadMap.get(UPLOAD_KEY_LAUNCH_CONTROL_KEY));
67   }
68 
69   /**
70    * Creates widget for an upload.
71    *
72    * @param uploadInfo the upload information.
73    */
addUploadWidget(final UploadInfo uploadInfo)74   private void addUploadWidget(final UploadInfo uploadInfo) {
75     final FormPanel keyUploadForm = new FormPanel();
76     keyUploadForm.setAction(JsonRpcProxy.AFE_BASE_URL + "upload/");
77     keyUploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
78     keyUploadForm.setMethod(FormPanel.METHOD_POST);
79 
80     FileUpload keyUpload = new FileUpload();
81     keyUpload.setName(uploadInfo.fileUploadName);
82     keyUploadForm.setWidget(keyUpload);
83 
84     Button submitButton =
85         new Button(
86             "Submit",
87             new ClickHandler() {
88               @Override
89               public void onClick(ClickEvent event) {
90                 keyUploadForm.submit();
91               }
92             });
93 
94     keyUploadForm.addSubmitCompleteHandler(
95         new SubmitCompleteHandler() {
96           @Override
97           public void onSubmitComplete(SubmitCompleteEvent event) {
98             String fileName = event.getResults();
99             JSONObject params = new JSONObject();
100             params.put(uploadInfo.rpcArgName, new JSONString(fileName));
101             rpcCall(uploadInfo.rpcName, params, uploadInfo.successMessage);
102           }
103         });
104 
105     addWidget(keyUploadForm, uploadInfo.uploadViewId);
106     addWidget(submitButton, uploadInfo.submitButtonId);
107 
108     if (uploadInfo.helpMessage != null) {
109       ToolTip helpToolTip = new ToolTip("?", uploadInfo.helpMessage);
110       addWidget(helpToolTip, uploadInfo.helpToolTipId);
111     }
112   }
113 
rpcCall( final String rpcName, final JSONObject params, final String successMessage)114   private static void rpcCall(
115       final String rpcName, final JSONObject params, final String successMessage) {
116     JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy();
117     rpcProxy.rpcCall(
118         rpcName,
119         params,
120         new JsonRpcCallback() {
121           @Override
122           public void onSuccess(JSONValue result) {
123             NotifyManager.getInstance().showMessage(successMessage);
124           }
125         });
126   }
127 
128   /**
129    * Upload related information.
130    */
131   private static class UploadInfo {
132     final String keyName;
133     final String rpcName;
134     final String rpcArgName;
135     final String successMessage;
136     final String fileUploadName;
137     final String uploadViewId;
138     final String submitButtonId;
139     final String helpToolTipId;
140     final String helpMessage;
141 
UploadInfo( String keyName, String rpcName, String rpcArgName, String successMessage, String helpMessage)142     public UploadInfo(
143         String keyName,
144         String rpcName,
145         String rpcArgName,
146         String successMessage,
147         String helpMessage) {
148       this.keyName = keyName;
149       this.rpcName = rpcName;
150       this.rpcArgName = rpcArgName;
151       this.successMessage = successMessage;
152       this.fileUploadName = keyName;
153       this.uploadViewId = "view_" + this.keyName;
154       this.submitButtonId = "view_submit_" + this.keyName;
155       this.helpToolTipId = "view_help_" + this.keyName;
156       this.helpMessage = helpMessage;
157     }
158   }
159 }
160