/** * 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.ambari.shell.model; import org.springframework.stereotype.Component; /** * Holds information about the connected Ambari Server. */ @Component public class AmbariContext { private String cluster; private boolean blueprintsAvailable; private Focus focus; private Hints hint; public AmbariContext() { this.focus = getRootFocus(); } /** * Sets the name of the cluster. * * @param cluster */ public void setCluster(String cluster) { this.cluster = cluster; } /** * Sets the focus to the root. */ public void resetFocus() { this.focus = getRootFocus(); } /** * Sets the focus. * * @param id target of the focus, can be anything (blueprint id, host id..) * @param type type of the focus */ public void setFocus(String id, FocusType type) { this.focus = new Focus(id, type); } /** * Returns the target of the focus. * * @return target */ public String getFocusValue() { return focus.getValue(); } /** * Checks whether blueprints are available or not. */ public boolean areBlueprintsAvailable() { return blueprintsAvailable; } /** * Sets what should be the next hint message. * * @param hint the new message */ public void setHint(Hints hint) { this.hint = hint; } /** * Returns the context sensitive prompt. * * @return text of the prompt */ public String getPrompt() { return focus.isType(FocusType.ROOT) ? isConnectedToCluster() ? formatPrompt(focus.getPrefix(), cluster) : "ambari-shell>" : formatPrompt(focus.getPrefix(), focus.getValue()); } public boolean isConnectedToCluster() { return cluster != null; } /** * Checks whether the focus is on the host or not. * * @return true if the focus is on a host false otherwise */ public boolean isFocusOnHost() { return isFocusOn(FocusType.HOST); } /** * Checks whether the focus is on the cluster build or not. * * @return true if the focus is on a cluster build false otherwise */ public boolean isFocusOnClusterBuild() { return isFocusOn(FocusType.CLUSTER_BUILD); } /** * Returns some context sensitive hint. * * @return hint */ public String getHint() { return "Hint: " + hint.message(); } /** * Returns the name of the cluster. * * @return cluster's name */ public String getCluster() { return cluster; } /** * Sets whether there are blueprints available or not. * * @param blueprintsAvailable */ public void setBlueprintsAvailable(boolean blueprintsAvailable) { this.blueprintsAvailable = blueprintsAvailable; } private boolean isFocusOn(FocusType type) { return focus.isType(type); } private Focus getRootFocus() { return new Focus("root", FocusType.ROOT); } private String formatPrompt(String prefix, String postfix) { return String.format("%s:%s>", prefix, postfix); } }