@Override public void handle(Request request, Response response) throws Exception { DbSession dbSession = dbClient.openSession(false); try { Integer userId = userSession.getUserId(); DashboardDto dashboard = dbClient .dashboardDao() .selectAllowedByKey( dbSession, request.mandatoryParamAsLong(PARAM_KEY), userId != null ? userId.longValue() : null); if (dashboard == null) { throw new NotFoundException(); } JsonWriter json = response.newJsonWriter(); json.beginObject(); json.prop("key", dashboard.getKey()); json.prop("name", dashboard.getName()); json.prop("layout", dashboard.getColumnLayout()); json.prop("desc", dashboard.getDescription()); json.prop("global", dashboard.getGlobal()); json.prop("shared", dashboard.getShared()); if (dashboard.getUserId() != null) { UserDto user = dbClient.userDao().selectUserById(dashboard.getUserId()); if (user != null) { json.name("owner").beginObject(); // TODO to be shared and extracted from here json.prop("login", user.getLogin()); json.prop("name", user.getName()); json.endObject(); } } // load widgets and related properties json.name("widgets").beginArray(); Collection<WidgetDto> widgets = dbClient.widgetDao().findByDashboard(dbSession, dashboard.getKey()); ListMultimap<Long, WidgetPropertyDto> propertiesByWidget = WidgetPropertyDto.groupByWidgetId( dbClient.widgetPropertyDao().selectByDashboard(dbSession, dashboard.getKey())); for (WidgetDto widget : widgets) { json.beginObject(); json.prop("id", widget.getId()); json.prop("key", widget.getWidgetKey()); json.prop("name", widget.getName()); json.prop("desc", widget.getDescription()); json.prop("col", widget.getColumnIndex()); json.prop("row", widget.getRowIndex()); json.prop("configured", widget.getConfigured()); json.prop("componentId", widget.getResourceId()); json.name("props").beginArray(); for (WidgetPropertyDto prop : propertiesByWidget.get(widget.getId())) { json.beginObject(); json.prop("key", prop.getPropertyKey()); json.prop("val", prop.getTextValue()); json.endObject(); } json.endArray().endObject(); } json.endArray(); json.endObject(); json.close(); } finally { dbSession.close(); } }