Skip to content

Commit fe0ce5a

Browse files
committed
Redefine JSON output to mat-cli/v1
1 parent f3c37f5 commit fe0ce5a

14 files changed

Lines changed: 499 additions & 390 deletions

plugins/org.eclipse.mat.cli/src/org/eclipse/mat/cli/internal/CliCommandCatalog.java

Lines changed: 35 additions & 36 deletions
Large diffs are not rendered by default.

plugins/org.eclipse.mat.cli/src/org/eclipse/mat/cli/internal/serialization/CommandMetadataSerializer.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public boolean writeJson(JsonWriter writer, CommandMetadataResult result)
3030
{
3131
CommandDefinition definition = result.getDefinition();
3232
writer.name("name").value(definition.getCommand().getToken()); //$NON-NLS-1$
33-
writer.name("summary").value(definition.getSummary()); //$NON-NLS-1$
34-
writer.name("usage").value(definition.getUsage()); //$NON-NLS-1$
33+
writeStringField(writer, "summary", definition.getSummary()); //$NON-NLS-1$
34+
writeStringField(writer, "usage", definition.getUsage()); //$NON-NLS-1$
3535
writer.name("requiresSnapshot").value(definition.requiresSnapshot()); //$NON-NLS-1$
3636
writeStrings(writer, "positionalArguments", definition.getPositionalArguments()); //$NON-NLS-1$
3737
writeOptions(writer, definition.getOptions());
@@ -46,7 +46,7 @@ public boolean writeJson(JsonWriter writer, CommandMetadataResult result)
4646
writer.value("suggestedNextCommands when present"); //$NON-NLS-1$
4747
writer.endArray();
4848
writer.name("payloadKind").value(jsonPayloadKind(definition)); //$NON-NLS-1$
49-
writer.name("payloadDescription").value(definition.getAgentPayloadDescription()); //$NON-NLS-1$
49+
writeStringField(writer, "payloadDescription", definition.getAgentPayloadDescription()); //$NON-NLS-1$
5050
writeStrings(writer, "payloadFields", definition.getAgentPayloadFields()); //$NON-NLS-1$
5151
}
5252
return false;
@@ -70,28 +70,32 @@ private String jsonPayloadKind(CommandDefinition definition)
7070

7171
private void writeOptions(JsonWriter writer, List<OptionDefinition> options)
7272
{
73+
if (options == null || options.isEmpty())
74+
return;
7375
writer.name("options").beginArray(); //$NON-NLS-1$
7476
for (OptionDefinition option : options)
7577
{
7678
writer.beginObject();
7779
writer.name("name").value(option.getName()); //$NON-NLS-1$
78-
writer.name("valueHint").value(option.getValueHint()); //$NON-NLS-1$
80+
writeStringField(writer, "valueHint", option.getValueHint()); //$NON-NLS-1$
7981
writer.name("required").value(option.isRequired()); //$NON-NLS-1$
80-
writer.name("description").value(option.getDescription()); //$NON-NLS-1$
82+
writeStringField(writer, "description", option.getDescription()); //$NON-NLS-1$
8183
writer.endObject();
8284
}
8385
writer.endArray();
8486
}
8587

8688
private void writeOutputs(JsonWriter writer, List<OutputDefinition> outputs)
8789
{
90+
if (outputs == null || outputs.isEmpty())
91+
return;
8892
writer.name("outputs").beginArray(); //$NON-NLS-1$
8993
for (OutputDefinition output : uniqueOutputs(outputs))
9094
{
9195
writer.beginObject();
9296
writer.name("format").value(output.getFormat()); //$NON-NLS-1$
9397
writer.name("resultKind").value(output.getResultKind()); //$NON-NLS-1$
94-
writer.name("description").value(output.getDescription()); //$NON-NLS-1$
98+
writeStringField(writer, "description", output.getDescription()); //$NON-NLS-1$
9599
writer.endObject();
96100
}
97101
writer.endArray();
@@ -109,6 +113,8 @@ private List<OutputDefinition> uniqueOutputs(List<OutputDefinition> outputs)
109113

110114
private void writeStrings(JsonWriter writer, String name, List<String> values)
111115
{
116+
if (values == null || values.isEmpty())
117+
return;
112118
writer.name(name).beginArray();
113119
for (String value : values)
114120
{
@@ -117,6 +123,13 @@ private void writeStrings(JsonWriter writer, String name, List<String> values)
117123
writer.endArray();
118124
}
119125

126+
private void writeStringField(JsonWriter writer, String name, String value)
127+
{
128+
if (value == null || value.length() == 0)
129+
return;
130+
writer.name(name).value(value);
131+
}
132+
120133
private void appendStrings(StringBuilder builder, String label, List<String> values)
121134
{
122135
builder.append(label).append(":\n"); //$NON-NLS-1$

plugins/org.eclipse.mat.cli/src/org/eclipse/mat/cli/internal/serialization/PieResultSerializer.java

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,7 @@ public class PieResultSerializer
2323
{
2424
public boolean writeJson(JsonWriter writer, IResultPie pie, SerializationOptions options)
2525
{
26-
List<? extends Slice> slices = pie.getSlices();
27-
int limit = Math.min(slices.size(), options.getLimit());
28-
boolean truncated = slices.size() > limit;
29-
30-
writer.name("slices").beginArray(); //$NON-NLS-1$
31-
for (int ii = 0; ii < limit; ii++)
32-
{
33-
writeSlice(writer, slices.get(ii), false, options);
34-
}
35-
writer.endArray();
36-
return truncated;
26+
return writeAgentJson(writer, pie, options);
3727
}
3828

3929
public boolean writeAgentJson(JsonWriter writer, IResultPie pie, SerializationOptions options)
@@ -45,7 +35,7 @@ public boolean writeAgentJson(JsonWriter writer, IResultPie pie, SerializationOp
4535
writer.name("items").beginArray(); //$NON-NLS-1$
4636
for (int ii = 0; ii < limit; ii++)
4737
{
48-
writeSlice(writer, slices.get(ii), true, options);
38+
writeSlice(writer, slices.get(ii), options);
4939
}
5040
writer.endArray();
5141
return truncated;
@@ -72,45 +62,32 @@ public String toText(IResultPie pie, SerializationOptions options)
7262
return builder.toString();
7363
}
7464

75-
private void writeSlice(JsonWriter writer, Slice slice, boolean agentProfile, SerializationOptions options)
65+
private void writeSlice(JsonWriter writer, Slice slice, SerializationOptions options)
7666
{
7767
writer.beginObject();
7868
writer.name("label").value(slice.getLabel()); //$NON-NLS-1$
7969
writer.name("value").value(slice.getValue()); //$NON-NLS-1$
80-
writer.name("description").value(slice.getDescription()); //$NON-NLS-1$
81-
if (agentProfile)
82-
writeAgentAddress(writer, slice.getContext(), options);
83-
else
84-
writeContext(writer, slice.getContext(), options);
85-
writer.name("color").value(color(slice)); //$NON-NLS-1$
70+
writeStringField(writer, "description", slice.getDescription()); //$NON-NLS-1$
71+
writeAgentAddress(writer, slice.getContext(), options);
72+
writeStringField(writer, "color", color(slice)); //$NON-NLS-1$
8673
writer.endObject();
8774
}
8875

89-
private void writeContext(JsonWriter writer, IContextObject context, SerializationOptions options)
76+
private void writeAgentAddress(JsonWriter writer, IContextObject context, SerializationOptions options)
9077
{
9178
Integer objectId = contextObjectId(context);
9279
if (objectId == null)
93-
{
94-
writer.name("context").nullValue(); //$NON-NLS-1$
9580
return;
96-
}
97-
98-
writer.name("context").beginObject(); //$NON-NLS-1$
99-
writer.name("objectId").value(objectId.intValue()); //$NON-NLS-1$
10081
String objectAddress = options == null ? null : options.resolveObjectAddress(objectId.intValue());
10182
if (objectAddress != null)
102-
writer.name("objectAddress").value(objectAddress); //$NON-NLS-1$
103-
writer.endObject();
83+
writer.name("_address").value(objectAddress); //$NON-NLS-1$
10484
}
10585

106-
private void writeAgentAddress(JsonWriter writer, IContextObject context, SerializationOptions options)
86+
private void writeStringField(JsonWriter writer, String name, String value)
10787
{
108-
Integer objectId = contextObjectId(context);
109-
if (objectId == null)
88+
if (value == null || value.length() == 0)
11089
return;
111-
String objectAddress = options == null ? null : options.resolveObjectAddress(objectId.intValue());
112-
if (objectAddress != null)
113-
writer.name("_address").value(objectAddress); //$NON-NLS-1$
90+
writer.name(name).value(value);
11491
}
11592

11693
private Integer contextObjectId(IContextObject context)

plugins/org.eclipse.mat.cli/src/org/eclipse/mat/cli/internal/serialization/QueryMetadataSerializer.java

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@ public boolean writeJson(JsonWriter writer, QueryMetadataResult result)
2424
{
2525
if (result.getKind() == QueryMetadataResult.Kind.LIST)
2626
{
27-
writer.name("queries").beginArray(); //$NON-NLS-1$
28-
for (QueryMetadataResult.QueryDefinition query : result.getQueries())
27+
if (result.getQueries() != null && !result.getQueries().isEmpty())
2928
{
30-
writer.beginObject();
31-
writeQuery(writer, query);
32-
writer.endObject();
29+
writer.name("queries").beginArray(); //$NON-NLS-1$
30+
for (QueryMetadataResult.QueryDefinition query : result.getQueries())
31+
{
32+
writer.beginObject();
33+
writeQuery(writer, query);
34+
writer.endObject();
35+
}
36+
writer.endArray();
3337
}
34-
writer.endArray();
3538
}
3639
else
3740
{
@@ -75,37 +78,50 @@ public String toText(QueryMetadataResult result)
7578
private void writeQuery(JsonWriter writer, QueryMetadataResult.QueryDefinition query)
7679
{
7780
writer.name("identifier").value(query.getIdentifier()); //$NON-NLS-1$
78-
writer.name("name").value(query.getName()); //$NON-NLS-1$
79-
writer.name("category").value(query.getCategory()); //$NON-NLS-1$
80-
writer.name("usage").value(query.getUsage()); //$NON-NLS-1$
81-
writer.name("summary").value(query.getSummary()); //$NON-NLS-1$
82-
writer.name("help").value(query.getHelp()); //$NON-NLS-1$
83-
writer.name("helpUrl").value(query.getHelpUrl()); //$NON-NLS-1$
84-
writer.name("commandClass").value(query.getCommandClass()); //$NON-NLS-1$
81+
writeStringField(writer, "name", query.getName()); //$NON-NLS-1$
82+
writeStringField(writer, "category", query.getCategory()); //$NON-NLS-1$
83+
writeStringField(writer, "usage", query.getUsage()); //$NON-NLS-1$
84+
writeStringField(writer, "summary", query.getSummary()); //$NON-NLS-1$
85+
writeStringField(writer, "help", query.getHelp()); //$NON-NLS-1$
86+
writeStringField(writer, "helpUrl", query.getHelpUrl()); //$NON-NLS-1$
87+
writeStringField(writer, "commandClass", query.getCommandClass()); //$NON-NLS-1$
8588
writer.name("shallow").value(query.isShallow()); //$NON-NLS-1$
86-
writer.name("subjects").beginArray(); //$NON-NLS-1$
87-
for (String subject : query.getSubjects())
89+
if (query.getSubjects() != null && !query.getSubjects().isEmpty())
8890
{
89-
writer.value(subject);
91+
writer.name("subjects").beginArray(); //$NON-NLS-1$
92+
for (String subject : query.getSubjects())
93+
{
94+
writer.value(subject);
95+
}
96+
writer.endArray();
9097
}
91-
writer.endArray();
92-
writer.name("arguments").beginArray(); //$NON-NLS-1$
93-
for (QueryMetadataResult.QueryArgument argument : query.getArguments())
98+
if (query.getArguments() != null && !query.getArguments().isEmpty())
9499
{
95-
writer.beginObject();
96-
writer.name("name").value(argument.getName()); //$NON-NLS-1$
97-
writer.name("flag").value(argument.getFlag()); //$NON-NLS-1$
98-
writer.name("type").value(argument.getType()); //$NON-NLS-1$
99-
writer.name("advice").value(argument.getAdvice()); //$NON-NLS-1$
100-
writer.name("mandatory").value(argument.isMandatory()); //$NON-NLS-1$
101-
writer.name("multiple").value(argument.isMultiple()); //$NON-NLS-1$
102-
writer.name("boolean").value(argument.isBoolean()); //$NON-NLS-1$
103-
writer.name("enum").value(argument.isEnumeration()); //$NON-NLS-1$
104-
writer.name("defaultValue").value(argument.getDefaultValue()); //$NON-NLS-1$
105-
writer.name("help").value(argument.getHelp()); //$NON-NLS-1$
106-
writer.endObject();
100+
writer.name("arguments").beginArray(); //$NON-NLS-1$
101+
for (QueryMetadataResult.QueryArgument argument : query.getArguments())
102+
{
103+
writer.beginObject();
104+
writer.name("name").value(argument.getName()); //$NON-NLS-1$
105+
writeStringField(writer, "flag", argument.getFlag()); //$NON-NLS-1$
106+
writeStringField(writer, "type", argument.getType()); //$NON-NLS-1$
107+
writeStringField(writer, "advice", argument.getAdvice()); //$NON-NLS-1$
108+
writer.name("mandatory").value(argument.isMandatory()); //$NON-NLS-1$
109+
writer.name("multiple").value(argument.isMultiple()); //$NON-NLS-1$
110+
writer.name("boolean").value(argument.isBoolean()); //$NON-NLS-1$
111+
writer.name("enum").value(argument.isEnumeration()); //$NON-NLS-1$
112+
writeStringField(writer, "defaultValue", argument.getDefaultValue()); //$NON-NLS-1$
113+
writeStringField(writer, "help", argument.getHelp()); //$NON-NLS-1$
114+
writer.endObject();
115+
}
116+
writer.endArray();
107117
}
108-
writer.endArray();
118+
}
119+
120+
private void writeStringField(JsonWriter writer, String name, String value)
121+
{
122+
if (value == null || value.length() == 0)
123+
return;
124+
writer.name(name).value(value);
109125
}
110126

111127
private void appendList(StringBuilder builder, String label, List<String> values)

plugins/org.eclipse.mat.cli/src/org/eclipse/mat/cli/internal/serialization/ResultSerializer.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
public class ResultSerializer
3737
{
38-
private static final String JSON_SCHEMA_VERSION = "mat-cli/v2"; //$NON-NLS-1$
38+
private static final String JSON_SCHEMA_VERSION = "mat-cli/v1"; //$NON-NLS-1$
3939

4040
private final TableResultSerializer tableSerializer = new TableResultSerializer();
4141
private final TreeResultSerializer treeSerializer = new TreeResultSerializer();
@@ -223,8 +223,7 @@ else if (result instanceof Spec)
223223
}
224224

225225
writer.name("truncated").value(truncated); //$NON-NLS-1$
226-
if (execution != null && execution.getNote() != null)
227-
writer.name("note").value(execution.getNote()); //$NON-NLS-1$
226+
writeStringField(writer, "note", execution == null ? null : execution.getNote()); //$NON-NLS-1$
228227
if (shouldWriteSuggestedNextCommands(arguments, execution))
229228
writeSuggestedNextCommands(writer, suggestedNextCommands(arguments, execution));
230229
writer.endObject();
@@ -241,14 +240,14 @@ private void serializeJsonError(CliArguments arguments, int exitCode, Throwable
241240
writer.name("code").value(exitCode); //$NON-NLS-1$
242241
writer.name("message").value(error.getMessage() == null ? error.getClass().getName() : error.getMessage()); //$NON-NLS-1$
243242
writer.name("kind").value(errorKind(arguments, exitCode, error)); //$NON-NLS-1$
244-
writer.name("hint").value(errorHint(arguments, exitCode, error)); //$NON-NLS-1$
243+
writeStringField(writer, "hint", errorHint(arguments, exitCode, error)); //$NON-NLS-1$
245244
writer.name("retryable").value(isRetryable(arguments, exitCode, error)); //$NON-NLS-1$
246245
if (arguments != null && arguments.isVerbose())
247246
{
248-
writer.name("exceptionClass").value(error == null ? null : error.getClass().getName()); //$NON-NLS-1$
249-
writer.name("rootCauseClass").value(rootCause(error).getClass().getName()); //$NON-NLS-1$
250-
writer.name("rootCauseMessage").value(rootCauseMessage(error)); //$NON-NLS-1$
251-
writer.name("stackTrace").value(stackTrace(error)); //$NON-NLS-1$
247+
writeStringField(writer, "exceptionClass", error == null ? null : error.getClass().getName()); //$NON-NLS-1$
248+
writeStringField(writer, "rootCauseClass", rootCause(error).getClass().getName()); //$NON-NLS-1$
249+
writeStringField(writer, "rootCauseMessage", rootCauseMessage(error)); //$NON-NLS-1$
250+
writeStringField(writer, "stackTrace", stackTrace(error)); //$NON-NLS-1$
252251
}
253252
writer.endObject();
254253
writer.name("truncated").value(false); //$NON-NLS-1$
@@ -260,10 +259,10 @@ private void serializeJsonError(CliArguments arguments, int exitCode, Throwable
260259
private void writeSummary(JsonWriter writer, SnapshotSummary summary)
261260
{
262261
writer.name("summary").beginObject(); //$NON-NLS-1$
263-
writer.name("path").value(summary.getPath()); //$NON-NLS-1$
264-
writer.name("heapFormat").value(summary.getHeapFormat()); //$NON-NLS-1$
265-
writer.name("jvmInfo").value(summary.getJvmInfo()); //$NON-NLS-1$
266-
writer.name("creationDate").value(summary.getCreationDate()); //$NON-NLS-1$
262+
writeStringField(writer, "path", summary.getPath()); //$NON-NLS-1$
263+
writeStringField(writer, "heapFormat", summary.getHeapFormat()); //$NON-NLS-1$
264+
writeStringField(writer, "jvmInfo", summary.getJvmInfo()); //$NON-NLS-1$
265+
writeStringField(writer, "creationDate", summary.getCreationDate()); //$NON-NLS-1$
267266
writer.name("identifierSize").value(summary.getIdentifierSize()); //$NON-NLS-1$
268267
writer.name("numberOfObjects").value(summary.getNumberOfObjects()); //$NON-NLS-1$
269268
writer.name("numberOfClasses").value(summary.getNumberOfClasses()); //$NON-NLS-1$
@@ -281,6 +280,8 @@ private CliException unsupported(IResult result)
281280

282281
private void writeSuggestedNextCommands(JsonWriter writer, List<String> commands)
283282
{
283+
if (commands == null || commands.isEmpty())
284+
return;
284285
writer.name("suggestedNextCommands").beginArray(); //$NON-NLS-1$
285286
for (String command : commands)
286287
{
@@ -289,6 +290,13 @@ private void writeSuggestedNextCommands(JsonWriter writer, List<String> commands
289290
writer.endArray();
290291
}
291292

293+
private void writeStringField(JsonWriter writer, String name, String value)
294+
{
295+
if (value == null || value.length() == 0)
296+
return;
297+
writer.name(name).value(value);
298+
}
299+
292300
private boolean shouldWriteSuggestedNextCommands(CliArguments arguments, CliExecution execution)
293301
{
294302
if (execution == null)

0 commit comments

Comments
 (0)