@Override public UpdateOperationResult execute() throws Exception { result.setAction(options.getAction()); switch (options.getAction()) { case CHECK: return executeCheck(); default: throw new Exception("Unknown action: " + options.getAction()); } }
private UpdateOperationAction parseAction(String actionStr) throws Exception { try { return UpdateOperationAction.valueOf(actionStr.toUpperCase()); } catch (Exception e) { throw new Exception("Invalid syntax, unknown action '" + actionStr + "'"); } }
public UpdateOperationResult update(UpdateOperationOptions options) throws Exception { return new UpdateOperation(config, options).execute(); }
@Override public void run() { try { UpdateOperation updateOperation = new UpdateOperation(null, concreteRequest.getOptions()); UpdateOperationResult operationResult = updateOperation.execute(); switch (operationResult.getResultCode()) { case OK: eventBus.post(new UpdateManagementResponse(UpdateManagementResponse.OK, operationResult, request.getId())); break; case NOK: eventBus.post(new UpdateManagementResponse(UpdateManagementResponse.NOK_FAILED_UNKNOWN, operationResult, request.getId())); break; } } catch (Exception e) { logger.log(Level.WARNING, "Error executing update management request.", e); eventBus.post(new UpdateManagementResponse(UpdateManagementResponse.NOK_OPERATION_FAILED, new UpdateOperationResult(), request.getId())); } } }, "UpdRq/" + concreteRequest.getOptions().getAction());
private UpdateOperationResult executeCheck() throws Exception { Version localAppVersion = Version.valueOf(Client.getApplicationVersion()); String appInfoResponseStr = getAppInfoResponseStr(); AppInfoResponse appInfoResponse = new Persister().read(AppInfoResponse.class, appInfoResponseStr); ArrayList<AppInfo> appInfoList = appInfoResponse.getAppInfoList(); if (appInfoList.size() > 0) { AppInfo remoteAppInfo = appInfoList.get(0); Version remoteAppVersion = Version.valueOf(remoteAppInfo.getAppVersion()); boolean newVersionAvailable = remoteAppVersion.greaterThan(localAppVersion); result.setResultCode(UpdateResultCode.OK); result.setAppInfo(remoteAppInfo); result.setNewVersionAvailable(newVersionAvailable); return result; } else { result.setResultCode(UpdateResultCode.NOK); return result; } }
private void printResultCheck(UpdateOperationResult operationResult) { if (operationResult.getResultCode() == UpdateResultCode.OK) { AppInfo remoteAppInfo = operationResult.getAppInfo(); String localAppVersion = Client.getApplicationVersionFull(); String remoteAppVersion = remoteAppInfo.getAppVersion(); if (operationResult.isNewVersionAvailable()) { out.println("A new version is available. Local version is " + localAppVersion + ", remote version is " + remoteAppVersion); out.println("Download at " + remoteAppInfo.getDownloadUrl()); } else { out.println("Up to date, at version " + localAppVersion); } } else { out.println("Checking for updates failed. No connection? Try -d to get more details."); out.println(); } }
private String getAppInfoResponseStr() throws Exception { boolean hasGuiPlugin = Plugins.get(GUI_PLUGIN_ID) != null; String typeStr = determineType(hasGuiPlugin); String distStr = determineDist(hasGuiPlugin, typeStr); String snapshotsEnabled = (options.isSnapshots()) ? "true" : "false"; String osStr = EnvironmentUtil.getOperatingSystemDescription(); String archStr = EnvironmentUtil.getArchDescription(); String apiEndpointUrl = (options.getApiEndpoint() != null) ? options.getApiEndpoint() : API_DEFAULT_ENDPOINT_URL; URL appListUrl = new URL(String.format(API_APP_LIST_REQUEST_FORMAT, apiEndpointUrl, distStr, typeStr, snapshotsEnabled, osStr, archStr)); logger.log(Level.INFO, "Querying " + appListUrl + " ..."); eventBus.post(new ConnectToHostExternalEvent(appListUrl.getHost())); URLConnection urlConnection = appListUrl.openConnection(); urlConnection.setConnectTimeout(2000); urlConnection.setReadTimeout(2000); BufferedReader urlStreamReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); StringBuilder responseStringBuilder = new StringBuilder(); String line; while ((line = urlStreamReader.readLine()) != null) { responseStringBuilder.append(line); } String responseStr = responseStringBuilder.toString(); logger.log(Level.INFO, "Response from api.syncany.org: " + responseStr); return responseStr; }
@Override public UpdateOperationOptions parseOptions(String[] operationArgs) throws Exception { UpdateOperationOptions operationOptions = new UpdateOperationOptions(); OptionParser parser = new OptionParser(); OptionSpec<Void> optionSnapshots = parser.acceptsAll(asList("s", "snapshot", "snapshots")); OptionSpec<String> optionApiEndpoint = parser.acceptsAll(asList("a", "api-endpoint")).withRequiredArg(); OptionSet options = parser.parse(operationArgs); // Action List<?> nonOptionArgs = options.nonOptionArguments(); if (nonOptionArgs.size() == 0) { throw new Exception("Invalid syntax, please specify an action (check)."); } // <action> String actionStr = nonOptionArgs.get(0).toString(); UpdateOperationAction action = parseAction(actionStr); operationOptions.setAction(action); // --snapshots operationOptions.setSnapshots(options.has(optionSnapshots)); // --api-endpoint if (options.has(optionApiEndpoint)) { operationOptions.setApiEndpoint(options.valueOf(optionApiEndpoint)); } return operationOptions; }
public UpdateOperation(Config config, UpdateOperationOptions options) { super(config); this.options = options; this.result = new UpdateOperationResult(); this.eventBus = LocalEventBus.getInstance(); }
@Override public void printResults(OperationResult operationResult) { UpdateOperationResult concreteOperationResult = (UpdateOperationResult) operationResult; switch (concreteOperationResult.getAction()) { case CHECK: printResultCheck(concreteOperationResult); return; default: out.println("Unknown action: " + concreteOperationResult.getAction()); } }
@Override public Response handleRequest(final ManagementRequest request) { final UpdateManagementRequest concreteRequest = (UpdateManagementRequest) request; logger.log(Level.SEVERE, "Executing UpdateOperation for action " + concreteRequest.getOptions().getAction() + " ..."); }, "UpdRq/" + concreteRequest.getOptions().getAction());
@Override public int execute(String[] operationArgs) throws Exception { UpdateOperationOptions operationOptions = parseOptions(operationArgs); UpdateOperationResult operationResult = new UpdateOperation(config, operationOptions).execute(); printResults(operationResult); return 0; }