package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.List; public class SpiceMenu { private List<SpiceMenuItem> items; public List<SpiceMenuItem> getItems() { if (items == null) { items = new ArrayList<>(); } return items; } public List<SpiceMenuItem> descendants() { ArrayList<SpiceMenuItem> list = new ArrayList<>(); for (SpiceMenuItem item : items) { descendantsInternal(list, item); } return list; } private void descendantsInternal(List<SpiceMenuItem> list, SpiceMenuItem root) { list.add(root); if (root instanceof SpiceMenuContainerItem) { for (SpiceMenuItem item : ((SpiceMenuContainerItem) root).getItems()) { descendantsInternal(list, item); } } } @Override public String toString() { StringBuilder builder = new StringBuilder(); for (SpiceMenuItem item : getItems()) { builder.append(itemToString(item, null)); } return builder.toString(); } private String itemToString(SpiceMenuItem item, SpiceMenuItem parent) { StringBuilder builder = new StringBuilder(); int parentID = parent != null ? parent.getId() : 0; if (item instanceof SpiceMenuCommandItem) { SpiceMenuCommandItem commandItem = (SpiceMenuCommandItem) item; builder.append(formatSpiceMenuItem( parentID, commandItem.getId(), commandItem.getText(), commandItem.getIsEnabled() ? 0 : 2)); } if (item instanceof SpiceMenuContainerItem) { SpiceMenuContainerItem containerItem = (SpiceMenuContainerItem) item; builder.append(formatSpiceMenuItem( parentID, containerItem.getId(), containerItem.getText(), 4)); if (containerItem.getItems().size() > 0) { for (SpiceMenuItem localItem : containerItem.getItems()) { builder.append(itemToString(localItem, containerItem)); } } } if (item instanceof SpiceMenuSeparatorItem) { builder.append(formatSpiceMenuItem( parentID, item.getId(), "-", //$NON-NLS-1$ 1)); } return builder.toString(); } private String formatSpiceMenuItem(int parentId, int itemId, String itemText, int itemCode) { return new StringBuilder(Integer.toString(parentId)) .append("\r").append(itemId) //$NON-NLS-1$ .append("\r").append(itemText.replaceAll("_", "__")) // $NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$ .append("\r").append(itemCode) //$NON-NLS-1$ .append("\r\n").toString(); //$NON-NLS-1$ } }