/** * Returns {@code Optional} with the {@link Constants#SERVER_WS_AGENT_HTTP_REFERENCE wsagent/http} * server. * * @return {@code Optional} with the {@link Constants#SERVER_WS_AGENT_HTTP_REFERENCE wsagent/http} * server if the current workspace has a runtime and there is a machine with such server, * otherwise an empty {@code Optional} */ public Optional<ServerImpl> getWsAgentHttpServer() { return getServerByRef(getWsAgentHttpServerReference()); }
@VisibleForTesting Optional<ServerImpl> getServerByRef(String ref) { Optional<RuntimeImpl> runtimeOpt = getWorkspaceRuntime(); if (runtimeOpt.isPresent()) { for (MachineImpl machine : runtimeOpt.get().getMachines().values()) { ServerImpl server = machine.getServers().get(ref); if (server != null) { return Optional.of(server); } } } return Optional.empty(); }
@Override public String getWsAgentServerApiEndpoint() { Optional<ServerImpl> server = wsAgentServerUtilProvider.get().getWsAgentHttpServer(); if (server.isPresent()) { return server.get().getUrl(); } throw new RuntimeException("wsagent server doesn't exist"); }
/** * Returns {@code Optional} with the {@link Constants#SERVER_WS_AGENT_WEBSOCKET_REFERENCE * wsagent/ws} server. * * @return {@code Optional} with the {@link Constants#SERVER_WS_AGENT_WEBSOCKET_REFERENCE * wsagent/ws} server if the current workspace has a runtime and there is a machine with such * server, otherwise an empty {@code Optional} */ public Optional<ServerImpl> getWsAgentWebSocketServer() { return getServerByRef(getWsAgentWebSocketServerReference()); }
private void registerMacros() { final Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); if (devMachine.isPresent()) { macros.clear(); for (Map.Entry<String, ? extends Server> entry : devMachine.get().getServers().entrySet()) { macros.add(new ServerAddressMacro(entry.getKey(), entry.getValue().getUrl())); } macroRegistryProvider.get().register(macros); } }
/** * Checks whether the provided {@link MachineImpl} contains the {@link * Constants#SERVER_WS_AGENT_HTTP_REFERENCE wsagent/http} server. * * @param machine {@link MachineImpl} to check * @return {@code true} if the given machine contains the {@link * Constants#SERVER_WS_AGENT_HTTP_REFERENCE wsagent/http} server server, otherwise {@code * false} */ public boolean containsWsAgentHttpServer(MachineImpl machine) { return machine.getServers().keySet().contains(getWsAgentHttpServerReference()); }
private void internalInitialize() { final WorkspaceImpl workspace = appContext.getWorkspace(); final RuntimeImpl runtime = workspace.getRuntime(); if (runtime == null) { return; // workspace is stopped } wsAgentServerUtil .getWsAgentWebSocketServer() .ifPresent( server -> { String wsAgentWebSocketUrl = agentURLModifier.modify(server.getUrl()); String separator = wsAgentWebSocketUrl.contains("?") ? "&" : "?"; Optional<String> applicationWebSocketId = appContext.getApplicationId(); String queryParams = applicationWebSocketId.map(id -> separator + "clientId=" + id).orElse(""); initializer.initialize( WS_AGENT_JSON_RPC_ENDPOINT_ID, singletonMap("url", wsAgentWebSocketUrl + queryParams), emptySet()); }); } }
@NotNull @Override public Promise<String> expand() { String value = ""; Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); if (devMachine.isPresent()) { String hostName = devMachine.get().getAttributes().get("config.hostname"); if (hostName != null) { value = hostName; } } return Promises.resolve(value); } }
private void checkServerStatus(ServerImpl server, MachineImpl machine) { if (server.getStatus() == RUNNING) { eventBus.fireEvent(new ServerRunningEvent(server.getName(), machine.getName())); String wsAgentHttpServerRef = wsAgentServerUtil.getWsAgentHttpServerReference(); // fire events for the often used servers if (wsAgentHttpServerRef.equals(server.getName())) { eventBus.fireEvent(new WsAgentServerRunningEvent(machine.getName())); } else if (SERVER_TERMINAL_REFERENCE.equals(server.getName())) { eventBus.fireEvent(new TerminalAgentServerRunningEvent(machine.getName())); } else if (SERVER_EXEC_AGENT_HTTP_REFERENCE.equals(server.getName())) { eventBus.fireEvent(new ExecAgentServerRunningEvent(machine.getName())); } } } }
/** * Adds command node to process tree and displays command output * * @param outputConsole the console for command output */ public void addCommandOutput(OutputConsole outputConsole) { Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); devMachine.ifPresent(machine -> addCommandOutput(machine.getName(), outputConsole, true)); }
String wsAgentHttpServerRef = wsAgentServerUtil.getWsAgentHttpServerReference();
private void handleWsAgentStatus() { wsAgentServerUtil .getWsAgentHttpServer() .ifPresent( server -> { if (server.getStatus() == STOPPED) { show(); } }); }
/** * Returns {@code Optional} with a machine which contains the "wsagent" server. * * @return {@code Optional} with the machine which contains the "wsagent" server if the current * workspace has a runtime and there is such machine, otherwise an empty {@code Optional} */ public Optional<MachineImpl> getWsAgentServerMachine() { return getWorkspaceRuntime() .flatMap( runtime -> runtime .getMachines() .values() .stream() .filter(this::containsWsAgentHttpServer) .findAny()); }
/** * Returns a top-level URL of the GWT Code Server which is declared in the machine that contains * the "wsagent" server. * * @return {@code Optional} with a top-level URL of the GWT Code Server or an empty {@code * Optional} if none */ private Optional<String> getInternalCodeServerURL() { Optional<MachineImpl> wsAgentServerMachineOpt = wsAgentServerUtil.getWsAgentServerMachine(); if (wsAgentServerMachineOpt.isPresent()) { MachineImpl wsAgentServerMachine = wsAgentServerMachineOpt.get(); Optional<ServerImpl> codeServerOpt = wsAgentServerMachine.getServerByName(INT_CODE_SERVER_REF); if (codeServerOpt.isPresent()) { ServerImpl codeServer = codeServerOpt.get(); String codeServerUrl = codeServer.getUrl(); if (!isNullOrEmpty(codeServerUrl)) { return codeServerUrl.endsWith("/") ? Optional.of(codeServerUrl) : Optional.of(codeServerUrl + '/'); } } } return Optional.empty(); }
private String getDisplayNameForPreviewUrl(String previewUrl) { final Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); if (!devMachine.isPresent()) { return previewUrl; } for (Entry<String, ? extends Server> entry : devMachine.get().getServers().entrySet()) { Server server = entry.getValue(); String serverUrl = server.getUrl(); if (serverUrl == null) { continue; } if (previewUrl.startsWith(serverUrl)) { String port = entry.getKey(); // server's port may be in form of '8080/tcp' so need to cut protocol name final int slashIndex = port.lastIndexOf('/'); if (slashIndex > -1) { port = port.substring(0, slashIndex); } return previewUrl.replace(serverUrl, devMachine.get().getName() + ':' + port); } } return previewUrl; }
/** Selects dev machine. */ private void selectDevMachine() { Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); if (!devMachine.isPresent()) { return; } for (ProcessTreeNode processTreeNode : machineNodes.values()) { if (processTreeNode.getType() == MACHINE_NODE) { String machineName = (String) processTreeNode.getData(); if (machineName.equals(devMachine.get().getName())) { view.selectNode(processTreeNode); notifyTreeNodeSelected(processTreeNode); return; } } } }
@Override public void onTerminalAgentServerRunning(TerminalAgentServerRunningEvent event) { // open terminal automatically for dev-machine only Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); if (devMachine.isPresent() && event.getMachineName().equals(devMachine.get().getName())) { provideMachineNode(event.getMachineName(), true, false); TerminalOptionsJso options = TerminalOptionsJso.create(); newTerminal(options, false, false); } }
/** Updates list of the machines from application context. */ public void updateMachineList() { if (appContext.getWorkspace() == null) { return; } List<MachineImpl> machines = getMachines(); if (machines.isEmpty()) { return; } Optional<MachineImpl> wsAgentServerMachine = wsAgentServerUtil.getWsAgentServerMachine(); wsAgentServerMachine.ifPresent( machine -> { provideMachineNode(machine.getName(), true, false); machines.remove(machine); }); for (MachineImpl machine : machines) { provideMachineNode(machine.getName(), true, false); } if (WorkspaceStatus.RUNNING == appContext.getWorkspace().getStatus()) { ProcessTreeNode machineToSelect = machineNodes.entrySet().iterator().next().getValue(); view.selectNode(machineToSelect); notifyTreeNodeSelected(machineToSelect); } }
@Override public void actionPerformed(ActionEvent event) { if (event.getParameters() == null) { Log.error(getClass(), localizationConstant.runCommandEmptyParamsMessage()); return; } final String name = event.getParameters().get(NAME_PARAM_ID); if (name == null) { Log.error(getClass(), localizationConstant.runCommandEmptyNameMessage()); return; } wsAgentServerUtil .getWsAgentServerMachine() .ifPresent( m -> commandManager .getCommand(name) .ifPresent(command -> commandExecutor.executeCommand(command, m.getName()))); } }
@Override public void onDownloadWorkspaceOutput(DownloadWorkspaceOutputEvent event) { Optional<MachineImpl> devMachine = wsAgentServerUtil.getWsAgentServerMachine(); if (!devMachine.isPresent()) { return; } WorkspaceImpl workspace = appContext.getWorkspace(); String fileName = workspace.getNamespace() + "-" + workspace.getConfig().getName() + " " + DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ".log"; download(fileName, getText(devMachine.get().getName())); }