package net.ocheyedan.wrk.cmd.trello;
import net.ocheyedan.wrk.Output;
import net.ocheyedan.wrk.RestTemplate;
import net.ocheyedan.wrk.cmd.Args;
import net.ocheyedan.wrk.cmd.Usage;
import net.ocheyedan.wrk.trello.*;
import org.codehaus.jackson.type.TypeReference;
import java.util.Collections;
import java.util.Map;
/**
* User: blangel
* Date: 7/1/12
* Time: 7:57 AM
*/
public final class Desc extends IdCommand {
private static enum Type {
Org, Board, List, Card, Member
}
private final String url;
private final String description;
private final Type type;
public Desc(Args args) {
super(args);
if (args.args.size() == 1) {
TrelloId id = parseWrkId(args.args.get(0), allPrefix);
if (id.idWithTypePrefix.startsWith("o:")) {
String orgId = id.idWithTypePrefix.substring(2);
url = Trello.url("https://trello.com/1/organizations/%s?key=%s&token=%s", orgId,
Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Description of organization ^b^%s^r^:", orgId);
type = Type.Org;
} else if (id.idWithTypePrefix.startsWith("b:")) {
String boardId = id.idWithTypePrefix.substring(2);
url = Trello.url("https://trello.com/1/boards/%s?key=%s&token=%s", boardId,
Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Description of board ^b^%s^r^:", boardId);
type = Type.Board;
} else if (id.idWithTypePrefix.startsWith("l:")) {
String listId = id.idWithTypePrefix.substring(2);
url = Trello.url("https://trello.com/1/lists/%s?key=%s&token=%s", listId,
Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Description of list ^b^%s^r^:", listId);
type = Type.List;
} else if (id.idWithTypePrefix.startsWith("c:")) {
String cardId = id.idWithTypePrefix.substring(2);
url = Trello.url("https://trello.com/1/cards/%s?key=%s&token=%s", cardId,
Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Description of card ^b^%s^r^:", cardId);
type = Type.Card;
} else if (id.idWithTypePrefix.startsWith("m:")) {
String memberId = id.idWithTypePrefix.substring(2);
url = Trello.url("https://trello.com/1/members/%s?key=%s&token=%s", memberId,
Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Description of member ^b^%s^r^:", memberId);
type = Type.Member;
} else {
url = description = null;
type = null;
}
} else {
url = description = null;
type = null;
}
}
@Override protected Map<String, String> _run() {
Output.print(description);
String desc;
switch (type) {
case Org:
Organization org = RestTemplate.get(url, new TypeReference<Organization>() { });
if (org == null) {
Output.print("^red^Invalid id or not found.^r^");
break;
}
Output.print(" ^b^%s^r^ ^black^| %s^r^", org.getDisplayName(), org.getId());
desc = (org.getDesc() == null ? "" : org.getDesc());
if (!desc.isEmpty()) {
Output.print(" %s", desc);
}
Output.print(" ^black^%s^r^", org.getUrl());
break;
case Board:
Board board = RestTemplate.get(url, new TypeReference<Board>() { });
if (board == null) {
Output.print("^red^Invalid id or not found.^r^");
break;
}
String boardClosed = ((board.getClosed() != null) && board.getClosed()) ? "^black^[closed] ^r^" : "^b^";
Output.print(" %s%s^r^ ^black^| %s^r^", boardClosed, board.getName(), board.getId());
desc = (board.getDesc() == null ? "" : board.getDesc());
if (!desc.isEmpty()) {
Output.print(" %s", desc);
}
Output.print(" ^black^%s^r^", board.getUrl());
break;
case List:
net.ocheyedan.wrk.trello.List list = RestTemplate.get(url, new TypeReference<net.ocheyedan.wrk.trello.List>() { });
if (list == null) {
Output.print("^red^Invalid id or not found.^r^");
break;
}
String closed = ((list.getClosed() != null) && list.getClosed()) ? "^black^[closed] ^r^" : "^b^";
Output.print(" %s%s^r^ ^black^| %s^r^", closed, list.getName(), list.getId());
break;
case Card:
Card card = RestTemplate.get(url, new TypeReference<Card>() { });
if (card == null) {
Output.print("^red^Invalid id or not found.^r^");
break;
}
String labels = Cards.buildLabel(card.getLabels());
String cardClosed = ((card.getClosed() != null) && card.getClosed()) ? "^black^[closed] ^r^" : "^b^";
Output.print(" %s%s^r^%s ^black^| %s^r^", cardClosed, card.getName(), labels, card.getId());
desc = (card.getDesc() == null ? "" : card.getDesc());
if (!desc.isEmpty()) {
Output.print(" %s", desc);
}
Output.print(" ^black^%s^r^", Cards.getPrettyUrl(card));
break;
case Member:
Member member = RestTemplate.get(url, new TypeReference<Member>() { });
if (member == null) {
Output.print("^red^Invalid id or not found.^r^");
break;
}
Output.print(" ^b^%s^r^ ^black^| %s^r^", member.getFullName(), member.getId());
Output.print(" ^black^username^r^ %s", member.getUsername());
break;
}
return Collections.emptyMap();
}
@Override protected boolean valid() {
return (url != null);
}
@Override protected String getCommandName() {
return "desc";
}
}