Как стать автором
Обновить

Комментарии 4

Возможно, я не уловил сути, но зачем вообще нужна такая таблица и почему эту задачу нельзя решить существующим плагином (insight, например)?
Речь о случае, когда вы хотите использовать такую таблицу на какой-то странице в составе плагина, который пишете сами.
Уважаемый bboogwin этот решение для «на коленке» сделанного. А то очень уже перегруженный контроллер который реализует в себе логику. Понимаю что круто писать лямбды на java, но в человеческий вид привести бы стоило следующий метод.

@POST
@Path("/self/{id}/move")
public Response moveEvent(@PathParam("id") String idString, MoveInfo moveInfo) {
    long oldId = Long.valueOf(idString);
    long newId;
    if (moveInfo.getAfter() != null) {
        String[] afterPathParts = moveInfo.getAfter().split("/");
        long afterId = Long.valueOf(afterPathParts[afterPathParts.length - 1]);
        newId = afterId > oldId ? afterId - 1 : afterId;
    } else if (moveInfo.getPosition() != null) {
        switch (moveInfo.getPosition()) {
            case "First":
                newId = getLastId();
                break;
            case "Last":
                newId = 1L;
                break;
            case "Earlier":
                newId = oldId < getLastId() ? oldId + 1 : oldId;
                break;
            case "Later":
                newId = oldId > 1 ? oldId - 1 : oldId;
                break;
            default:
                throw new IllegalArgumentException("Unknown position type!");
        }
    } else {
        throw new IllegalArgumentException("Invalid move data!");
    }

    if (newId > oldId) {
        storage.stream()
                .filter(entry -> entry.getId() <= newId && entry.getId() >= oldId)
                .forEach(entry -> entry.setId(entry.getId() == oldId ? newId : entry.getId() - 1));
    } else if (newId < oldId) {
        storage.stream()
                .filter(entry -> entry.getId() >= newId && entry.getId() <= oldId)
                .forEach(entry -> entry.setId(entry.getId() == oldId ? newId : entry.getId() + 1));
    }

    return Response.ok().build();
}
Угу, там не только логика, там и данные хранятся прямо в контроллере, потому что это И ЕСТЬ «на коленке сделанное» решение. Я бы никому не посоветовал делать так при реальной разработке, но это всего лишь демонстрационный пример, и от бекенда здесь требуется только работоспособность при минимуме кода. Выносить логику в какой-то отдельный сервис в этих условиях, на мой взгляд, причин нет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории