/* * Copyright 2015 Open Networking Laboratory * * Licensed 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.onlab.stc; import com.google.common.base.MoreObjects; import org.onlab.graph.Vertex; import java.util.Objects; import static com.google.common.base.Preconditions.checkNotNull; /** * Representation of a test step. */ public class Step implements Vertex { protected final String name; protected final String command; protected final String env; protected final String cwd; protected final Group group; /** * Creates a new test step. * * @param name step name * @param command step command to execute * @param env path to file to be sourced into the environment * @param cwd path to current working directory for the step * @param group optional group to which this step belongs */ public Step(String name, String command, String env, String cwd, Group group) { this.name = checkNotNull(name, "Name cannot be null"); this.group = group; // Set the command, environment and cwd // If one is not given use the value from the enclosing group this.command = command != null ? command : group != null && group.command != null ? group.command : null; this.env = env != null ? env : group != null && group.env != null ? group.env : null; this.cwd = cwd != null ? cwd : group != null && group.cwd != null ? group.cwd : null; } /** * Returns the step name. * * @return step name */ public String name() { return name; } /** * Returns the step command string. * * @return command string */ public String command() { return command; } /** * Returns the step environment script path. * * @return env script path */ public String env() { return env; } /** * Returns the step current working directory path. * * @return current working dir path */ public String cwd() { return cwd; } /** * Returns the enclosing group; null if none. * * @return enclosing group or null */ public Group group() { return group; } @Override public int hashCode() { return name.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Step) { final Step other = (Step) obj; return Objects.equals(this.name, other.name); } return false; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("name", name) .add("command", command) .add("env", env) .add("cwd", cwd) .add("group", group) .toString(); } }