@Override public String apply(ExtendedPluginInfo pluginInfo) { return pluginInfo.getLocalPluginInfo().getPluginId(); } });
@Override public boolean apply(ExtendedPluginInfo pluginInfo) { return !pluginInfo.isInstalled() || !pluginInfo.canUninstall() || !pluginInfo.isOutdated(); } });
private PluginOperationResult executeRemove() throws Exception { return executeRemove(options.getPluginId()); }
private PluginOperationResult executeInstallFromUrl(String downloadJarUrl) throws Exception { eventBus.post(new PluginInstallExternalEvent(downloadJarUrl)); File tempPluginJarFile = downloadPluginJar(downloadJarUrl); PluginInfo pluginInfo = readPluginInfoFromJar(tempPluginJarFile); checkPluginNotInstalled(pluginInfo.getPluginId()); checkPluginCompatibility(pluginInfo); File targetPluginJarFile = installPlugin(tempPluginJarFile, pluginInfo); result.setSourcePluginPath(downloadJarUrl); result.setTargetPluginPath(targetPluginJarFile.getPath()); result.setAffectedPluginInfo(pluginInfo); result.setResultCode(PluginResultCode.OK); return result; }
private PluginOperationResult executeInstallFromApiHost(String pluginId) throws Exception { checkPluginNotInstalled(pluginId); PluginInfo pluginInfo = getRemotePluginInfo(pluginId); if (pluginInfo == null) { throw new Exception("Plugin with ID '" + pluginId + "' not found"); } checkPluginCompatibility(pluginInfo); eventBus.post(new PluginInstallExternalEvent(pluginInfo.getDownloadUrl())); File tempPluginJarFile = downloadPluginJar(pluginInfo.getDownloadUrl()); String expectedChecksum = pluginInfo.getSha256sum(); String actualChecksum = calculateChecksum(tempPluginJarFile); if (expectedChecksum == null || !expectedChecksum.equals(actualChecksum)) { throw new Exception("Checksum mismatch. Expected: " + expectedChecksum + ", but was: " + actualChecksum); } logger.log(Level.INFO, "Plugin JAR checksum verified: " + actualChecksum); File targetPluginJarFile = installPlugin(tempPluginJarFile, pluginInfo); result.setSourcePluginPath(pluginInfo.getDownloadUrl()); result.setTargetPluginPath(targetPluginJarFile.getAbsolutePath()); result.setAffectedPluginInfo(pluginInfo); result.setResultCode(PluginResultCode.OK); return result; }
@Override public void run() { try { PluginOperation pluginOperation = new PluginOperation(null, concreteRequest.getOptions()); PluginOperationResult operationResult = pluginOperation.execute(); switch (operationResult.getResultCode()) { case OK: eventBus.post(new PluginManagementResponse(PluginManagementResponse.OK, operationResult, request.getId())); break; case NOK: eventBus.post(new PluginManagementResponse(PluginManagementResponse.NOK_FAILED_UNKNOWN, operationResult, request.getId())); break; } } catch (Exception e) { logger.log(Level.WARNING, "Error executing plugin management request.", e); eventBus.post(new PluginManagementResponse(PluginManagementResponse.NOK_OPERATION_FAILED, new PluginOperationResult(), request.getId())); } } }, "PlugRq/" + concreteRequest.getOptions().getAction());
public PluginOperationResult plugin(PluginOperationOptions options) throws Exception { return new PluginOperation(config, options).execute(); }
@Override public PluginOperationResult execute() throws Exception { result.setAction(options.getAction()); switch (options.getAction()) { case LIST: return executeList(); case INSTALL: return executeInstall(); case REMOVE: return executeRemove(); case UPDATE: return executeUpdate(); default: throw new Exception("Unknown action: " + options.getAction()); } }
private void printPluginDetails(PluginInfo pluginInfo) { out.println("Plugin details:"); out.println("- ID: " + pluginInfo.getPluginId()); out.println("- Name: " + pluginInfo.getPluginName()); out.println("- Version: " + pluginInfo.getPluginVersion()); out.println(); }
private PluginOperationResult executeInstall() throws Exception { String pluginId = options.getPluginId(); File potentialLocalPluginJarFile = new File(pluginId); if (pluginId.matches("^https?://.+")) { return executeInstallFromUrl(pluginId); } else if (potentialLocalPluginJarFile.exists()) { return executeInstallFromLocalFile(potentialLocalPluginJarFile); } else { return executeInstallFromApiHost(pluginId); } }
private void printPluginConflictWarning(PluginOperationResult operationResult) { List<String> conflictingPluginIds = operationResult.getConflictingPluginIds(); if (conflictingPluginIds != null && conflictingPluginIds.size() > 0) { out.println("---------------------------------------------------------------------------"); out.printf(" WARNING: The installed plugin '%s' conflicts with other installed:\n", operationResult.getAffectedPluginInfo().getPluginId()); out.printf(" plugin(s): %s\n", StringUtil.join(conflictingPluginIds, ", ")); out.println(); out.println(" If you'd like to use these plugins in the daemon, it is VERY likely"); out.println(" that parts of the application WILL CRASH. Data corruption might occur!"); out.println(); out.println(" Using the plugins outside of the daemon (sy <command> ...) might also"); out.println(" be an issue. Details about this in issue #154."); out.println("---------------------------------------------------------------------------"); out.println(); } }
private List<String> findUpdateCandidates() throws Exception { List<ExtendedPluginInfo> updateCandidates = executeList().getPluginList(); Iterables.removeIf(updateCandidates, new Predicate<ExtendedPluginInfo>() { @Override public boolean apply(ExtendedPluginInfo pluginInfo) { return !pluginInfo.isInstalled() || !pluginInfo.canUninstall() || !pluginInfo.isOutdated(); } }); return Lists.transform(updateCandidates, new Function<ExtendedPluginInfo, String>() { @Override public String apply(ExtendedPluginInfo pluginInfo) { return pluginInfo.getLocalPluginInfo().getPluginId(); } }); }
private void printResultRemove(PluginOperationResult operationResult) { // Print minimal result if (minimalOutput) { if (operationResult.getResultCode() == PluginResultCode.OK) { out.println("OK"); } else { out.println("NOK"); } } // Print regular result else { if (operationResult.getResultCode() == PluginResultCode.OK) { out.printf("Plugin successfully removed.\n"); out.printf("Original local was %s\n", operationResult.getSourcePluginPath()); out.println(); } else { out.println("Plugin removal failed."); out.println(); out.println("Note: Plugins shipped with the application or additional packages"); out.println(" cannot be removed. These plugin are marked 'Global' in the list."); out.println(); } } }
private PluginInfo getRemotePluginInfo(String pluginId) throws Exception { String remoteListStr = getRemoteListStr(pluginId); PluginListResponse pluginListResponse = new Persister().read(PluginListResponse.class, remoteListStr); if (pluginListResponse.getPlugins().size() > 0) { return pluginListResponse.getPlugins().get(0); } else { return null; } }
private PluginOperationAction parsePluginAction(String actionStr) throws Exception { try { return PluginOperationAction.valueOf(actionStr.toUpperCase()); } catch (Exception e) { throw new Exception("Invalid syntax, unknown action '" + actionStr + "'"); } }
public PluginOperation(Config config, PluginOperationOptions options) { super(config); this.options = options; this.result = new PluginOperationResult(); this.eventBus = LocalEventBus.getInstance(); }
@Override public void printResults(OperationResult operationResult) { PluginOperationResult concreteOperationResult = (PluginOperationResult) operationResult; switch (concreteOperationResult.getAction()) { case LIST: printResultList(concreteOperationResult); return; case INSTALL: printResultInstall(concreteOperationResult); return; case REMOVE: printResultRemove(concreteOperationResult); return; case UPDATE: printResultUpdate(concreteOperationResult); return; default: out.println("Unknown action: " + concreteOperationResult.getAction()); } }
private PluginOperationResult executeInstallFromLocalFile(File pluginJarFile) throws Exception { eventBus.post(new PluginInstallExternalEvent(pluginJarFile.getAbsolutePath())); PluginInfo pluginInfo = readPluginInfoFromJar(pluginJarFile); checkPluginNotInstalled(pluginInfo.getPluginId()); checkPluginCompatibility(pluginInfo); File targetPluginJarFile = installPlugin(pluginJarFile, pluginInfo); result.setSourcePluginPath(pluginJarFile.getPath()); result.setTargetPluginPath(targetPluginJarFile.getPath()); result.setAffectedPluginInfo(pluginInfo); result.setResultCode(PluginResultCode.OK); return result; }
@Override public int execute(String[] operationArgs) throws Exception { PluginOperationOptions operationOptions = parseOptions(operationArgs); PluginOperationResult operationResult = new PluginOperation(config, operationOptions).execute(); printResults(operationResult); return 0; }
private List<PluginInfo> getRemotePluginInfoList() throws Exception { String remoteListStr = getRemoteListStr(null); PluginListResponse pluginListResponse = new Persister().read(PluginListResponse.class, remoteListStr); return pluginListResponse.getPlugins(); }