in spring-ai-alibaba-graph/spring-ai-alibaba-graph-example/src/main/java/com/alibaba/cloud/ai/example/graph/openmanus/tool/PlanningTool.java [385:452]
private String formatPlan(Map<String, Object> plan) {
StringBuilder output = new StringBuilder();
String planTitle = (String) plan.get("title");
String planId = (String) plan.get("plan_id");
output.append("Plan: ").append(planTitle).append(" (ID: ").append(planId).append(")\n");
output.append(repeatString("=", output.length())).append("\n\n");
// Calculate progress statistics
List<String> steps = (List<String>) plan.get("steps");
List<String> stepStatuses = (List<String>) plan.get("step_statuses");
List<String> stepNotes = (List<String>) plan.get("step_notes");
int totalSteps = steps.size();
long completed = stepStatuses.stream().filter(status -> "completed".equals(status)).count();
long inProgress = stepStatuses.stream().filter(status -> "in_progress".equals(status)).count();
long blocked = stepStatuses.stream().filter(status -> "blocked".equals(status)).count();
long notStarted = stepStatuses.stream().filter(status -> "not_started".equals(status)).count();
output.append("Progress: ").append(completed).append("/").append(totalSteps).append(" steps completed ");
if (totalSteps > 0) {
double percentage = (completed / (double) totalSteps) * 100;
output.append(String.format("(%.1f%%)\n", percentage));
}
else {
output.append("(0%)\n");
}
output.append("Status: ")
.append(completed)
.append(" completed, ")
.append(inProgress)
.append(" in progress, ")
.append(blocked)
.append(" blocked, ")
.append(notStarted)
.append(" not started\n\n");
output.append("Steps:\n");
// Add each step with its status and notes
for (int i = 0; i < totalSteps; i++) {
String step = steps.get(i);
String status = stepStatuses.get(i);
String notes = stepNotes.get(i);
String statusSymbol;
switch (status) {
case "in_progress":
statusSymbol = "[→]";
break;
case "completed":
statusSymbol = "[✓]";
break;
case "blocked":
statusSymbol = "[!]";
break;
default:
statusSymbol = "[ ]";
}
output.append(i).append(". ").append(statusSymbol).append(" ").append(step).append("\n");
if (notes != null && !notes.isEmpty()) {
output.append(" Notes: ").append(notes).append("\n");
}
}
return output.toString();
}