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.Board;
import net.ocheyedan.wrk.trello.Card;
import net.ocheyedan.wrk.trello.Trello;
import org.codehaus.jackson.type.TypeReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* User: blangel
* Date: 7/1/12
* Time: 1:18 PM
*/
public final class Create extends IdCommand {
private static enum Type {
Board, List, Card
}
private final String url;
private final String description;
private final Type type;
public Create(Args args) {
super(args);
if (((args.args.size() == 4) || (args.args.size() == 5))
&& "board".equals(args.args.get(0)) && "in".equals(args.args.get(1))) {
TrelloId orgId = parseWrkId(args.args.get(2), orgPrefix);
String name = validate(encode(args.args.get(3)), "Board name", "board names");
String desc = (args.args.size() == 5 ? "&desc=" + validate(encode(args.args.get(4)), "Board desc", "board descriptions") : "");
url = Trello.url("https://trello.com/1/boards?name=%s&idOrganization=%s%s&key=%s&token=%s", name, orgId.id,
desc, Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Creating board in organization ^b^%s^r^:", orgId.id);
type = Type.Board;
} else if ((args.args.size() == 4) && "list".equals(args.args.get(0)) && "in".equals(args.args.get(1))) {
TrelloId boardId = parseWrkId(args.args.get(2), boardsPrefix);
String name = validate(encode(args.args.get(3)), "List name", "list names");
url = Trello.url("https://trello.com/1/lists?name=%s&idBoard=%s&key=%s&token=%s", name, boardId.id,
Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Creating list in board ^b^%s^r^:", boardId.id);
type = Type.List;
} else if (((args.args.size() == 4) || (args.args.size() == 5))
&& "card".equals(args.args.get(0)) && "in".equals(args.args.get(1))) {
TrelloId listId = parseWrkId(args.args.get(2), listsPrefix);
String name = validate(encode(args.args.get(3)), "Card name", "card names");
String desc = (args.args.size() == 5 ? "&desc=" + validate(encode(args.args.get(4)), "Card desc",
"card descriptions") : "");
url = Trello.url("https://trello.com/1/cards?name=%s&idList=%s%s&key=%s&token=%s", name, listId.id,
desc, Trello.APP_DEV_KEY, Trello.USR_TOKEN);
description = String.format("Creating card in list ^b^%s^r^:", listId.id);
type = Type.Card;
} else {
url = description = null;
type = null;
}
}
@Override protected Map<String, String> _run() {
Output.print(description);
Map<String, String> wrkIds = new HashMap<String, String>(1, 1.0f);
String wrkId = "wrk1";
switch (type) {
case Board:
Board board = RestTemplate.post(url, new TypeReference<Board>() { });
if (board == null) {
Output.print("^red^Invalid id or insufficient privileges.^r^");
break;
}
wrkIds.put(wrkId, String.format("b:%s", board.getId()));
Output.print(" ^b^%s^r^ ^black^| %s^r^", board.getName(), wrkId);
Output.print(" ^black^%s^r^", board.getUrl());
return wrkIds;
case List:
net.ocheyedan.wrk.trello.List list = RestTemplate.post(url, new TypeReference<net.ocheyedan.wrk.trello.List>() { });
if (list == null) {
Output.print("^red^Invalid id or insufficient privileges.^r^");
break;
}
wrkIds.put(wrkId, String.format("l:%s", list.getId()));
Output.print(" ^b^%s^r^ ^black^| %s^r^", list.getName(), wrkId);
return wrkIds;
case Card:
Card card = RestTemplate.post(url, new TypeReference<Card>() { });
if (card == null) {
Output.print("^red^Invalid id or insufficient privileges.^r^");
break;
}
String labels = Cards.buildLabel(card.getLabels());
wrkIds.put(wrkId, String.format("c:%s", card.getId()));
Output.print(" ^b^%s^r^%s ^black^| %s^r^", card.getName(), labels, wrkId);
Output.print(" ^black^%s^r^", Cards.getPrettyUrl(card));
return wrkIds;
}
return Collections.emptyMap();
}
@Override protected boolean valid() {
return (url != null);
}
@Override protected String getCommandName() {
return "create";
}
}