private static Btn action(final Manageable manageable, final String action) { String cls = manageable.getClass().getSimpleName(); GroupOf<? extends Manageable> group = U.notNull(manageable.group(), "manageable group"); String kind = U.notNull(group.kind(), "manageable kind"); String id = U.notNull(manageable.id(), "manageable id"); Btn btn = cmd(action, cls, kind, id).smallest(); final String cmd = btn.command(); btn.onClick(() -> manageable.runManageableAction(cmd)); return btn; } }
private static Manageable findSub(Manageable target, String sub) { String[] parts = sub.split("/", 3); String seg = parts[0]; String id = parts[1]; List<? extends Manageable> segment = target.getManageableChildren().get(seg); U.must(segment != null, "Cannot find the manageable segment: %s", seg); target = findById(segment, id); U.must(target != null, "Cannot find the sub-manageable with id: %s in segment: %s", id, seg); target.reloadManageable(); return parts.length > 2 ? findSub(target, parts[2]) : target; }
public static Object of(Object target) { MultiWidget actions = multi(); if (target instanceof Manageable) { Manageable manageable = (Manageable) target; for (String action : manageable.getManageableActions()) { actions.add(action(manageable, action)); } } return actions; }
private Object info(Manageable target, List<String> columns, List<String> nav) { List<Object> info = U.list(); String kind = target.kind(); String back = this.baseUri; Map<String, String> breadcrumb = U.map(kind, back, target.id(), "#"); // FIXME info.add(breadcrumb(breadcrumb)); // .uriPrefix info.add(show(target, U.arrayOf(String.class, columns))); Map<String, List<Manageable>> children = target.getManageableChildren(); for (Map.Entry<String, List<Manageable>> e : children.entrySet()) { String section = e.getKey(); info.add(h3(Str.phrase(section) + ":")); List<String> snav = U.list(nav); snav.add(section); ManageablesOverviewPage.addInfo(baseUri, info, snav, e.getValue()); } info.add(autoRefresh(5000)); return info; }
private static Manageable findById(List<? extends Manageable> items, String id) { U.notNull(id, "id"); for (Manageable item : items) { if (U.eq(id, item.id())) return item; } return null; }
public static Manageable find(String kind, String id, String sub) { Manageable target = find(kind, id); U.must(target != null, "Cannot find the manageable!"); target.reloadManageable(); if (U.isEmpty(sub)) { return target; } return findSub(target, sub); }
private Object genericDisplay(Manageable target, List<String> nav) { List<String> columns = target.getManageableProperties(); if (U.notEmpty(columns)) { return multi(info(target, columns, nav)); } else { return N_A; } }
@Override public Object execute(Req req, Resp resp) { String type = mngType != null ? mngType : req.<String>data("type"); String id = mngId != null ? mngId : req.<String>data("id"); String sub = mngSub != null ? mngSub : req.<String>data("_", null); List<String> nav = U.list(type, id); if (U.notEmpty(sub)) Collections.addAll(nav, sub.split("/")); Manageable target = Manageables.find(type, id, sub); Object customDisplay = target.getManageableDisplay(); return customDisplay != null ? customDisplay : genericDisplay(target, nav); }
public E find(String id) { U.notNull(id, "id"); for (E item : items) { if (U.eq(id, item.id())) return item; } return null; }
protected static void addInfo(final String baseUri, List<Object> info, final List<String> nav, List<? extends Manageable> items, List<String> columns) { columns.add("(Actions)"); for (Manageable item : items) { item.reloadManageable(); } Grid grid = grid(items) .columns(columns) .headers(columns) .toUri(new Mapper<Manageable, String>() { @Override public String map(Manageable item) throws Exception { final List<String> uri = U.list(nav); uri.add(0, U.safe(baseUri)); uri.add(item.id()); return Msc.uri(U.arrayOf(uri)); } }) .pageSize(100); info.add(grid); }
public static void addInfo(String baseUri, List<Object> info, List<String> nav, List<? extends Manageable> items) { if (U.notEmpty(items)) { List<String> columns = U.list(U.first(items).getManageableProperties()); if (U.notEmpty(columns)) { addInfo(baseUri, info, nav, items, columns); } } }
@Override public String map(Manageable item) throws Exception { final List<String> uri = U.list(nav); uri.add(0, U.safe(baseUri)); uri.add(item.id()); return Msc.uri(U.arrayOf(uri)); } })