blob: 85dbb9c3130fbd82a8ad14377c951fe79225298f [file] [log] [blame]
/*
* 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.geode.management.cli;
import java.io.IOException;
/**
* The result of processing a GemFire Command Line Interface (CLI) command string.
*
* A string representation of this Result can be iterated over using the methods
* {@link #hasNextLine()}, {@link #nextLine()} and {@link #resetToFirstLine()}.
*
* A Result may have one or more files as part of the command output and if so they can be saved to
* the file system using {@link #saveIncomingFiles(String)}. To check whether the result has a file
* in it use {@link #hasIncomingFiles()}.
*
*
* @since GemFire 7.0
*/
public interface Result {
/**
* Indicates a Results status.
*
* @since GemFire 7.0
*/
enum Status {
/**
* Indicates that the command completed successfully.
*/
OK(0),
/**
* Indicates that an error occurred while processing the command.
*/
ERROR(-1);
private final int code;
private Status(int code) {
this.code = code;
}
/**
* Returns the code associated with this state.
*/
public int getCode() {
return this.code;
}
}
/**
* Returns the status of a processed command.
*/
Status getStatus();
/**
* Resets the pointer to the first line in the Result.
*/
void resetToFirstLine();
/**
* Returns whether the result has any more lines of information.
*
* @return True if there are more lines, false otherwise.
*/
boolean hasNextLine();
/**
* Returns the next line of information from the Result.
*
* @throws IndexOutOfBoundsException if this method is called more times than there are lines of
* information.
*/
String nextLine();
/**
* Returns whether this Result has a file as a part of the command output.
*
* @return True if there is a file, false otherwise.
* @deprecated since 1.10. file transfer in plugin commands is never supported
*/
default boolean hasIncomingFiles() {
return false;
}
/**
* Save the file(s) from this Result. {@link #hasIncomingFiles()} should be used before calling
* this method to verify that the Result contains a file.
*
* @param directory Directory to which the file(s) should be saved.
* @throws IOException If an error occurs while saving the file.
* @throws RuntimeException If there is no file in the Result to save.
* @deprecated since 1.10. file transfer in plugin commands is never supported
*/
default void saveIncomingFiles(String directory) throws IOException {}
/****
* Return whether the configuration changes due to command have been persisted to cluster
* configuration or not.
*
* @return True if the command has failed to persist configuration changes , false otherwise.
* @deprecated since 1.10. This only affect the gfsh output line which is not api bound
*/
default boolean failedToPersist() {
return false;
}
/*****
* Sets whether the command changes have not been persisted to the cluster configuration
*
* @param commandPersisted true if the command changes are persisted to the cluster configuration,
* false otherwise.
*
* @deprecated since 1.10. This only affect the gfsh output line which is not api bound
*/
default void setCommandPersisted(boolean commandPersisted) {}
/**
* @return the string representation of the result with the specified line separator.
*/
default String asString() {
StringBuilder builder = new StringBuilder();
while (this.hasNextLine()) {
builder.append(this.nextLine());
}
this.resetToFirstLine();
return builder.toString();
}
}