/*
* 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.internal.cli.functions;
import org.apache.geode.DataSerializer;
import org.apache.geode.internal.DataSerializableFixedID;
import org.apache.geode.internal.Version;
import org.apache.geode.management.internal.configuration.domain.XmlEntity;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSerializableFixedID {
private String memberIdOrName;
private Serializable[] serializables = new String[0];
private Throwable throwable;
private boolean successful;
private XmlEntity xmlEntity;
private byte[] byteData = new byte[0];
public CliFunctionResult() {}
public CliFunctionResult(final String memberIdOrName) {
this.memberIdOrName = memberIdOrName;
this.successful = true;
}
public CliFunctionResult(final String memberIdOrName, final Serializable[] serializables) {
this.memberIdOrName = memberIdOrName;
this.serializables = serializables;
this.successful = true;
}
public CliFunctionResult(final String memberIdOrName, final byte[] byteData,
final Serializable[] serializables) {
this.byteData = byteData;
this.serializables = serializables;
this.successful = true;
}
public CliFunctionResult(final String memberIdOrName, final XmlEntity xmlEntity) {
this.memberIdOrName = memberIdOrName;
this.xmlEntity = xmlEntity;
this.successful = true;
}
public CliFunctionResult(final String memberIdOrName, final XmlEntity xmlEntity,
final Serializable[] serializables) {
this.memberIdOrName = memberIdOrName;
this.xmlEntity = xmlEntity;
this.serializables = serializables;
this.successful = true;
}
public CliFunctionResult(final String memberIdOrName, XmlEntity xmlEntity, final String message) {
this.memberIdOrName = memberIdOrName;
this.xmlEntity = xmlEntity;
if (message != null) {
this.serializables = new String[] {message};
}
this.successful = true;
}
public CliFunctionResult(final String memberIdOrName, final boolean successful,
final String message) {
this.memberIdOrName = memberIdOrName;
this.successful = successful;
if (message != null) {
this.serializables = new String[] {message};
}
}
public CliFunctionResult(final String memberIdOrName, final Throwable throwable,
final String message) {
this.memberIdOrName = memberIdOrName;
this.throwable = throwable;
if (message != null) {
this.serializables = new String[] {message};
}
this.successful = false;
}
public String getMemberIdOrName() {
return this.memberIdOrName;
}
public String getMessage() {
if (this.serializables.length == 0 || !(this.serializables[0] instanceof String)) {
return null;
}
return (String) this.serializables[0];
}
public Serializable[] getSerializables() {
return this.serializables;
}
public Throwable getThrowable() {
return this.throwable;
}
@Override
public int getDSFID() {
return DataSerializableFixedID.CLI_FUNCTION_RESULT;
}
@Override
public void toData(DataOutput out) throws IOException {
DataSerializer.writeString(this.memberIdOrName, out);
DataSerializer.writePrimitiveBoolean(this.successful, out);
DataSerializer.writeObject(this.xmlEntity, out);
DataSerializer.writeObjectArray(this.serializables, out);
DataSerializer.writeObject(this.throwable, out);
DataSerializer.writeByteArray(this.byteData, out);
}
public void toDataPre_GFE_8_0_0_0(DataOutput out) throws IOException {
DataSerializer.writeString(this.memberIdOrName, out);
DataSerializer.writeObjectArray(this.serializables, out);
DataSerializer.writeObject(this.throwable, out);
}
@Override
public void fromData(DataInput in) throws IOException, ClassNotFoundException {
this.memberIdOrName = DataSerializer.readString(in);
this.successful = DataSerializer.readPrimitiveBoolean(in);
this.xmlEntity = DataSerializer.readObject(in);
this.serializables = (Serializable[]) DataSerializer.readObjectArray(in);
this.throwable = DataSerializer.readObject(in);
this.byteData = DataSerializer.readByteArray(in);
}
public void fromDataPre_GFE_8_0_0_0(DataInput in) throws IOException, ClassNotFoundException {
this.memberIdOrName = DataSerializer.readString(in);
this.throwable = DataSerializer.readObject(in);
this.serializables = (Serializable[]) DataSerializer.readObjectArray(in);
}
public boolean isSuccessful() {
return this.successful;
}
public XmlEntity getXmlEntity() {
return this.xmlEntity;
}
public byte[] getByteData() {
return this.byteData;
}
@Override
public int compareTo(CliFunctionResult o) {
if (this.memberIdOrName == null && o.memberIdOrName == null) {
return 0;
}
if (this.memberIdOrName == null && o.memberIdOrName != null) {
return -1;
}
if (this.memberIdOrName != null && o.memberIdOrName == null) {
return 1;
}
return getMemberIdOrName().compareTo(o.memberIdOrName);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.memberIdOrName == null) ? 0 : this.memberIdOrName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CliFunctionResult other = (CliFunctionResult) obj;
if (this.memberIdOrName == null) {
if (other.memberIdOrName != null)
return false;
} else if (!this.memberIdOrName.equals(other.memberIdOrName))
return false;
return true;
}
@Override
public String toString() {
return "CliFunctionResult [memberId=" + this.memberIdOrName + ", successful=" + this.successful
+ ", xmlEntity=" + this.xmlEntity + ", serializables=" + Arrays.toString(this.serializables)
+ ", throwable=" + this.throwable + ", byteData=" + Arrays.toString(this.byteData) + "]";
}
/**
* Remove elements from the list that are not instances of CliFunctionResult and then sort the
* results.
*
* @param results The results to clean.
* @return The cleaned results.
*/
public static List<CliFunctionResult> cleanResults(List<?> results) {
List<CliFunctionResult> returnResults = new ArrayList<CliFunctionResult>(results.size());
for (Object result : results) {
if (result instanceof CliFunctionResult) {
returnResults.add((CliFunctionResult) result);
}
}
Collections.sort(returnResults);
return returnResults;
}
@Override
public Version[] getSerializationVersions() {
return new Version[] {Version.GFE_80};
}
}