private void outputComponent(ComponentInfo component, StringBuilder sb) { sb.append("{ \"name\": \""); sb.append(component.name); sb.append("\",\n \"version\": \""); sb.append(component.getVersion()); sb.append("\",\n \"categoryString\": \""); sb.append(component.getCategoryString()); sb.append("\",\n \"helpString\": "); sb.append(formatDescription(component.getHelpDescription())); sb.append(",\n \"showOnPalette\": \""); sb.append(component.getShowOnPalette()); sb.append("\",\n \"nonVisible\": \""); sb.append(component.getNonVisible()); sb.append("\",\n \"iconName\": \""); sb.append(component.getIconName()); sb.append("\",\n \"properties\": ["); String separator = ""; for (Map.Entry<String, DesignerProperty> entry : component.designerProperties.entrySet()) { String propertyName = entry.getKey(); DesignerProperty dp = entry.getValue(); sb.append(separator); outputProperty(propertyName, dp, sb); separator = ",\n"; } // We need additional information about properties in the blocks editor, // and we need all of them, not just the Designer properties. We output // the entire set separately for use by the blocks editor to keep things simple. sb.append("],\n \"blockProperties\": ["); separator = ""; for (Property prop : component.properties.values()) { sb.append(separator); // Output properties that are not user-visible, but mark them as invisible // Note: carrying this over from the old Java blocks editor. I'm not sure // that we'll actually do anything with invisible properties in the blocks // editor. ([email protected]) outputBlockProperty(prop.name, prop, sb); separator = ",\n "; } sb.append("],\n \"events\": ["); separator = ""; for (Event event : component.events.values()) { if (event.userVisible) { sb.append(separator); outputBlockEvent(event.name, event, sb); separator = ",\n "; } } sb.append("],\n \"methods\": ["); separator = ""; for (Method method : component.methods.values()) { if (method.userVisible) { sb.append(separator); outputBlockMethod(method.name, method, sb); separator = ",\n "; } } sb.append("]}\n"); }