/*
* 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.result;
import java.util.Iterator;
import org.apache.geode.management.internal.cli.json.GfJsonArray;
import org.apache.geode.management.internal.cli.json.GfJsonException;
import org.apache.geode.management.internal.cli.json.GfJsonObject;
/**
*
*
* @since GemFire 7.0
*/
public class CompositeResultData extends AbstractResultData {
public static String SEPARATOR = "__separator__";
private int subsectionCount;
/* package */ CompositeResultData() {
super();
}
/* package */ CompositeResultData(GfJsonObject gfJsonObject) {
super(gfJsonObject);
}
@Override
public String getType() {
return TYPE_COMPOSITE;
}
/**
*
* @param headerText
* @return this CompositeResultData
* @throws ResultDataException If the value is non-finite number or if the key is null.
*/
public CompositeResultData setHeader(String headerText) {
return (CompositeResultData) super.setHeader(headerText);
}
/**
*
* @param footerText
* @return this CompositeResultData
* @throws ResultDataException If the value is non-finite number or if the key is null.
*/
public CompositeResultData setFooter(String footerText) {
return (CompositeResultData) super.setFooter(footerText);
}
public SectionResultData addSection() {
return addSection(String.valueOf(subsectionCount));
}
public SectionResultData addSection(String keyToAccess) {
GfJsonObject sectionData = new GfJsonObject();
try {
contentObject.putAsJSONObject(SectionResultData.generateSectionKey(keyToAccess), sectionData);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
subsectionCount++;
return new SectionResultData(sectionData);
}
public SectionResultData addSection(SectionResultData otherSection) {
String keyToAccess = String.valueOf(subsectionCount);
GfJsonObject sectionData = otherSection.getSectionGfJsonObject();
try {
contentObject.putAsJSONObject(SectionResultData.generateSectionKey(keyToAccess), sectionData);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
subsectionCount++;
return new SectionResultData(sectionData);
}
public CompositeResultData addSeparator(char buildSeparatorFrom) {
try {
contentObject.put(SEPARATOR, buildSeparatorFrom);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
return this;
}
public SectionResultData retrieveSectionByIndex(int index) {
SectionResultData sectionToRetrieve = null;
int i = 0;
for (Iterator<String> iterator = contentObject.keys(); iterator.hasNext();) {
String key = iterator.next();
if (key.startsWith(CompositeResultData.SECTION_DATA_ACCESSOR)) {
if (i == index) {
sectionToRetrieve = new SectionResultData(contentObject.getJSONObject(key));
break;
}
i++;
}
}
return sectionToRetrieve;
}
public SectionResultData retrieveSection(String keyToRetrieve) {
SectionResultData sectionToRetrieve = null;
if (contentObject.has(SectionResultData.generateSectionKey(keyToRetrieve))) {
GfJsonObject sectionData =
contentObject.getJSONObject(SectionResultData.generateSectionKey(keyToRetrieve));
sectionToRetrieve = new SectionResultData(sectionData);
}
return sectionToRetrieve;
}
/**
*
* @since GemFire 7.0
*/
public static class SectionResultData /* extends AbstractResultData */ {
protected GfJsonObject sectionGfJsonObject;
private int subsectionCount = 0;
private int tablesCount = 0;
/* package */ SectionResultData() {
sectionGfJsonObject = new GfJsonObject();
}
public SectionResultData(GfJsonObject gfJsonObject) {
this.sectionGfJsonObject = gfJsonObject;
}
public GfJsonObject getSectionGfJsonObject() {
return sectionGfJsonObject;
}
public String getHeader() {
return sectionGfJsonObject.getString(RESULT_HEADER);
}
public String getFooter() {
return sectionGfJsonObject.getString(RESULT_FOOTER);
}
public SectionResultData setHeader(String headerText) {
try {
sectionGfJsonObject.put(RESULT_HEADER, headerText);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
return this;
}
public SectionResultData setFooter(String footerText) {
try {
sectionGfJsonObject.put(RESULT_FOOTER, footerText);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
return this;
}
public SectionResultData addSeparator(char buildSeparatorFrom) {
try {
sectionGfJsonObject.put(SEPARATOR, buildSeparatorFrom);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
return this;
}
public SectionResultData addData(String name, Object value) {
try {
sectionGfJsonObject.put(name, value);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
return this;
}
public SectionResultData addSection() {
return addSection(String.valueOf(subsectionCount));
}
public SectionResultData addSection(String keyToAccess) {
GfJsonObject sectionData = new GfJsonObject();
try {
sectionGfJsonObject.putAsJSONObject(generateSectionKey(keyToAccess), sectionData);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
subsectionCount++;
return new SectionResultData(sectionData);
}
public TabularResultData addTable() {
return addTable(String.valueOf(tablesCount));
}
public TabularResultData addTable(String keyToAccess) {
TabularResultData tabularResultData = ResultBuilder.createTabularResultData();
GfJsonObject tableData = tabularResultData.getGfJsonObject();
try {
sectionGfJsonObject.putAsJSONObject(generateTableKey(keyToAccess), tableData);
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
tablesCount++;
return tabularResultData;
}
public SectionResultData retrieveSectionByIndex(int index) {
SectionResultData sectionToRetrieve = null;
int i = 0;
for (Iterator<String> iterator = sectionGfJsonObject.keys(); iterator.hasNext();) {
String key = iterator.next();
if (key.startsWith(CompositeResultData.SECTION_DATA_ACCESSOR)) {
if (i == index) {
sectionToRetrieve = new SectionResultData(sectionGfJsonObject.getJSONObject(key));
break;
}
i++;
}
}
return sectionToRetrieve;
}
public SectionResultData retrieveSection(String keyToRetrieve) {
SectionResultData sectionToRetrieve = null;
if (sectionGfJsonObject.has(generateSectionKey(keyToRetrieve))) {
GfJsonObject sectionData =
sectionGfJsonObject.getJSONObject(generateSectionKey(keyToRetrieve));
sectionToRetrieve = new SectionResultData(sectionData);
}
return sectionToRetrieve;
}
public TabularResultData retrieveTableByIndex(int index) {
TabularResultData tabularResultData = null;
int i = 0;
for (Iterator<String> iterator = sectionGfJsonObject.keys(); iterator.hasNext();) {
String key = iterator.next();
if (key.startsWith(CompositeResultData.TABLE_DATA_ACCESSOR)) {
if (i == index) {
tabularResultData = new TabularResultData(sectionGfJsonObject.getJSONObject(key));
break;
}
i++;
}
}
return tabularResultData;
}
public TabularResultData retrieveTable(String keyToRetrieve) {
TabularResultData tabularResultData = null;
if (sectionGfJsonObject.has(generateTableKey(keyToRetrieve))) {
GfJsonObject tableData = sectionGfJsonObject.getJSONObject(generateTableKey(keyToRetrieve));
tabularResultData = new TabularResultData(tableData);
}
return tabularResultData;
}
public Object retrieveObject(String name) {
Object retrievedObject = sectionGfJsonObject.get(name);
if (retrievedObject instanceof GfJsonArray) {
GfJsonArray.toStringArray(((GfJsonArray) retrievedObject));
}
return sectionGfJsonObject.get(name);
}
public String retrieveString(String name) {
return sectionGfJsonObject.getString(name);
}
public String[] retrieveStringArray(String name) {
String[] stringArray = null;
Object retrievedObject = sectionGfJsonObject.get(name);
if (retrievedObject instanceof GfJsonArray) {
stringArray = GfJsonArray.toStringArray(((GfJsonArray) retrievedObject));
} else {
try {
stringArray = GfJsonArray.toStringArray(new GfJsonArray(retrievedObject));
} catch (GfJsonException e) {
throw new ResultDataException(e.getMessage());
}
}
return stringArray;
}
public static String generateSectionKey(String keyToRetrieve) {
return SECTION_DATA_ACCESSOR + "-" + keyToRetrieve;
}
public static String generateTableKey(String keyToRetrieve) {
return TABLE_DATA_ACCESSOR + "-" + keyToRetrieve;
}
// @Override
// public String getType() {
// return TYPE_SECTION;
// }
}
public static void main(String[] args) {
CompositeResultData crd = new CompositeResultData();
SectionResultData r1Section = crd.addSection("R1");
r1Section.addData("Region", "R1").addData("IsPartitioned", false).addData("IsPersistent", true)
.addData("Disk Store", "DiskStore1").addData("Group", "Group1");
TabularResultData r1Table = r1Section.addTable("R1Members");
r1Table.accumulate("Member Id", "host1(3467):12435:12423")
.accumulate("PrimaryEntryCount", 20000).accumulate("BackupEntryCount", 20000)
.accumulate("Memory(MB)", "100").accumulate("NumOfCopies", 1);
r1Table.accumulate("Member Id", "host3(5756):57665:90923")
.accumulate("PrimaryEntryCount", 25000).accumulate("BackupEntryCount", 10000)
.accumulate("Memory(MB)", "200").accumulate("NumOfCopies", 1);
SectionResultData r3Section = crd.addSection("R3");
r3Section.addData("Region", "R3").addData("IsPartitioned", true).addData("IsPersistent", true)
.addData("Disk Store", "DiskStore2").addData("Group", "Group2")
.addData("ColocatedWith", "-");
SectionResultData r3SubSection = r3Section.addSection("R3Config");
r3SubSection.addData("Configuration", "");
r3SubSection.addData("Config1", "abcd");
r3SubSection.addData("Config2", "abcde");
r3SubSection.addData("Config3", "abcdfg");
TabularResultData r3Table = r3Section.addTable("R3Members");
r3Table.accumulate("Member Id", "host1(3467):12435:12423")
.accumulate("PrimaryEntryCount", 20000).accumulate("BackupEntryCount", 20000)
.accumulate("Memory(MB)", "100").accumulate("NumOfCopies", 1)
.accumulate("NumOfBuckets", 100);
r3Table.accumulate("Member Id", "host2(3353):23545:14723")
.accumulate("PrimaryEntryCount", 20000).accumulate("BackupEntryCount", 20000)
.accumulate("Memory(MB)", "100").accumulate("NumOfCopies", 1)
.accumulate("NumOfBuckets", 100);
r3Table.accumulate("Member Id", "host3(5756):57665:90923")
.accumulate("PrimaryEntryCount", 25000).accumulate("BackupEntryCount", 10000)
.accumulate("Memory(MB)", "200").accumulate("NumOfCopies", 1)
.accumulate("NumOfBuckets", 100);
try {
System.out.println(crd.getGfJsonObject().toIndentedString(/* 2 */0));
} catch (GfJsonException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}