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