| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.ignite.internal.util.nodestart; |
| |
| import java.io.File; |
| import org.apache.ignite.IgniteLogger; |
| import org.apache.ignite.internal.util.typedef.F; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * Host data. |
| */ |
| public class IgniteRemoteStartSpecification { |
| /** Hostname. */ |
| private final String host; |
| |
| /** Port number. */ |
| private final int port; |
| |
| /** Username. */ |
| private final String uname; |
| |
| /** Password. */ |
| private final String passwd; |
| |
| /** Private key file. */ |
| private final File key; |
| |
| /** Private key filename. */ |
| private final String keyName; |
| |
| /** Number of nodes to start. */ |
| private final int nodes; |
| |
| /** Ignite installation folder. */ |
| private String igniteHome; |
| |
| /** Configuration path. */ |
| private String cfg; |
| |
| /** Configuration filename. */ |
| private String cfgName; |
| |
| /** Script path. */ |
| private String script; |
| |
| /** Custom logger. */ |
| private IgniteLogger logger; |
| |
| /** Valid flag */ |
| private boolean valid; |
| |
| /** |
| * @param host Hostname. |
| * @param port Port number. |
| * @param uname Username. |
| * @param passwd Password (can be {@code null} if private key authentication is used). |
| * @param key Private key file path. |
| * @param nodes Number of nodes to start. |
| * @param igniteHome Ignite installation folder. |
| * @param cfg Configuration path. |
| * @param script Script path. |
| */ |
| public IgniteRemoteStartSpecification(@Nullable String host, int port, @Nullable String uname, |
| @Nullable String passwd, @Nullable File key, int nodes, @Nullable String igniteHome, |
| @Nullable String cfg, @Nullable String script) { |
| this(host, port, uname, passwd, key, nodes, igniteHome, cfg, script, null); |
| } |
| |
| /** |
| * @param host Hostname. |
| * @param port Port number. |
| * @param uname Username. |
| * @param passwd Password (can be {@code null} if private key authentication is used). |
| * @param key Private key file path. |
| * @param nodes Number of nodes to start. |
| * @param igniteHome Ignite installation folder. |
| * @param cfg Configuration path. |
| * @param script Script path. |
| * @param logger Custom logger. |
| */ |
| public IgniteRemoteStartSpecification(@Nullable String host, int port, @Nullable String uname, |
| @Nullable String passwd, @Nullable File key, int nodes, @Nullable String igniteHome, |
| @Nullable String cfg, @Nullable String script, @Nullable IgniteLogger logger) { |
| assert port > 0; |
| assert nodes > 0; |
| |
| this.host = !F.isEmpty(host) ? host : null; |
| this.port = port; |
| this.uname = !F.isEmpty(uname) ? uname : null; |
| this.passwd = !F.isEmpty(passwd) ? passwd : null; |
| this.key = key; |
| this.nodes = nodes; |
| this.igniteHome = !F.isEmpty(igniteHome) ? igniteHome : null; |
| this.cfg = !F.isEmpty(cfg) ? cfg : null; |
| cfgName = cfg == null ? null : shorten(cfg); |
| keyName = key == null ? "" : shorten(key.getAbsolutePath()); |
| this.script = !F.isEmpty(script) ? script : null; |
| this.logger = logger; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public boolean equals(Object o) { |
| if (this == o) return true; |
| |
| if (!(o instanceof IgniteRemoteStartSpecification)) return false; |
| |
| IgniteRemoteStartSpecification that = (IgniteRemoteStartSpecification)o; |
| |
| return (host == null ? that.host == null : host.equals(that.host)) && |
| (uname == null ? that.uname == null : uname.equals(that.uname)) && |
| (passwd == null ? that.passwd == null : passwd.equals(that.passwd)) && |
| (key == null ? that.key == null : key.equals(that.key)) && |
| (igniteHome == null ? that.igniteHome == null : igniteHome.equals(that.igniteHome)) && |
| (cfg == null ? that.cfg == null : cfg.equals(that.cfg)) && |
| (script == null ? that.script == null : script.equals(that.script)) && |
| port == that.port && nodes == that.nodes; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public int hashCode() { |
| int res = host == null ? 0 : host.hashCode(); |
| |
| res = 31 * res + (uname == null ? 0 : uname.hashCode()); |
| res = 31 * res + (passwd == null ? 0 : passwd.hashCode()); |
| res = 31 * res + (key == null ? 0 : key.hashCode()); |
| res = 31 * res + (igniteHome == null ? 0 : igniteHome.hashCode()); |
| res = 31 * res + (cfg == null ? 0 : cfg.hashCode()); |
| res = 31 * res + (script == null ? 0 : script.hashCode()); |
| res = 31 * res + port; |
| res = 31 * res + nodes; |
| |
| return res; |
| } |
| |
| /** |
| * Get filename from path. |
| * |
| * @param path Path. |
| * @return Filename. |
| */ |
| private static String shorten(String path) { |
| int idx1 = path.lastIndexOf('/'); |
| int idx2 = path.lastIndexOf('\\'); |
| int idx = Math.max(idx1, idx2); |
| |
| return idx == -1 ? path : path.substring(idx + 1); |
| } |
| |
| /** |
| * @return Hostname. |
| */ |
| public String host() { |
| return host; |
| } |
| |
| /** |
| * @return Port number. |
| */ |
| public int port() { |
| return port; |
| } |
| |
| /** |
| * @return Username. |
| */ |
| public String username() { |
| return uname; |
| } |
| |
| /** |
| * @return Password. |
| */ |
| public String password() { |
| return passwd; |
| } |
| |
| /** |
| * @return Private key file path. |
| */ |
| public File key() { |
| return key; |
| } |
| |
| /** |
| * @return Private key file name. |
| */ |
| public String keyName() { |
| return keyName; |
| } |
| |
| /** |
| * @return Number of nodes to start. |
| */ |
| public int nodes() { |
| return nodes; |
| } |
| |
| /** |
| * @return Ignite installation folder. |
| */ |
| public String igniteHome() { |
| return igniteHome; |
| } |
| |
| /** |
| * @return Configuration full path. |
| */ |
| public String configuration() { |
| return cfg; |
| } |
| |
| /** |
| * @return Configuration path short version - just file name. |
| */ |
| public String configurationName() { |
| return cfgName; |
| } |
| |
| /** |
| * @return Script path. |
| */ |
| public String script() { |
| return script; |
| } |
| |
| /** |
| * @return Custom logger. |
| */ |
| public IgniteLogger logger() { |
| return logger; |
| } |
| |
| /** |
| * @return Valid flag. |
| */ |
| public boolean valid() { |
| return valid; |
| } |
| |
| /** |
| * @param valid Valid flag. |
| */ |
| public void valid(boolean valid) { |
| this.valid = valid; |
| } |
| |
| /** |
| * Sets correct separator in paths. |
| * |
| * @param separator Separator. |
| */ |
| public void fixPaths(char separator) { |
| if (igniteHome != null) |
| igniteHome = igniteHome.replace('\\', separator).replace('/', separator); |
| |
| if (script != null) |
| script = script.replace('\\', separator).replace('/', separator); |
| |
| if (cfg != null) |
| cfg = cfg.replace('\\', separator).replace('/', separator); |
| } |
| } |