Yi EungJun 2013-04-04
taskBoard: Remove the Task Board and related files.
@f7280519d6f82f5a50baa3882f3b32571c75b72f
app/Global.java
--- app/Global.java
+++ app/Global.java
@@ -30,7 +30,6 @@
                 "issues", "issueComments",
                 "postings", "postingComments",
                 "roles", "projectUsers",
-                "taskBoards", "lines", "cards", "labels", "checkLists",
                 "siteAdmins"
             };
 
 
app/assets/stylesheets/less/_task.less (deleted)
--- app/assets/stylesheets/less/_task.less
@@ -1,576 +0,0 @@
-html.task-body {
-    height: 100%;
-    body {
-        overflow-y: hidden;
-        overflow-x: auto;
-        height: 100%;
-    }
-    .page-wrap {
-        overflow: hidden;
-        min-height: 200px;
-        &.load {
-            .page {
-                .opacity(0);
-            }
-        }
-        .page {
-            height: 100%;
-            overflow: hidden;
-        }
-    }
-}
-
-.task-page {
-    min-width: @base-width;
-    margin: 0 50px;
-    .gnb-outer {
-        .gnb-inner {
-            width: auto;
-        }
-        .sub-menu-sp, .side-menu-wrap {
-            width: auto;
-        }
-    }
-    .page-wrap,
-    .page-footer-outer {
-        width: auto;
-        margin-bottom: 0;
-    }
-    height: 100%;
-}
-
-.task-main {
-    position: relative;
-    overflow: hidden;
-    .task-wrap {
-        margin-right: 300px;
-        background-color: #DADADA;
-        overflow: hidden;
-        .border-radius(10px 10px);
-        height: 100%;
-    }
-    .task-wrap-footer {
-        height: 20px;
-        .box-shadow(0 -1px 5px rgba(0, 0, 0, 0.05));
-    }
-    .task-side {
-        height: 100%;
-        position: absolute;
-        width: 280px;
-        right: 0;
-        top: 0;
-        background-color: #F2F2F2;
-        .border-radius(10px);
-        .fixed-wrap {
-            padding: 10px 20px 0 20px;
-        }
-        .bg-bubble-top {
-            left: -27px;
-            position: relative;
-        }
-        .header {
-            line-height: 30px;
-            .title {
-                color: @white;
-                margin-left: 20px;
-            }
-            .ico {
-                margin-top: -7px;
-                position: absolute;
-                right: 10px;
-                top: 50%;
-            }
-        }
-        .members {
-            list-style: none;
-            margin: 0;
-            padding: 0 0 13px 0;
-            font-size: 0;
-            border-bottom: 1px solid @white;
-            .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, 0.15));
-            .member {
-                .inline-block;
-                margin: 0 7px 7px 0;
-                &:nth-child(6n) {
-                    margin-right: 0;
-                }
-                .img-rounded {
-                    display: block;
-                }
-            }
-        }
-    }
-    .activity-wrap {
-        overflow-x: hidden;
-        overflow-y: auto;
-        padding: 0 20px;
-        .activities {
-            list-style: none;
-            margin: 0;
-            padding: 0;
-            .activity {
-                p {
-                    line-height: 12px;
-                    margin-bottom: 5px;
-                }
-                padding: 15px 0;
-                border-bottom: 1px solid @gray-d4;
-                .actor-wrap {
-                    margin-bottom: 10px;
-                    .actor-info {
-                        padding-left: 10px;
-                        font-size: 11px;
-                        color: #646464;
-                        overflow: hidden;
-                        .name {
-                            font-size: 10px;
-                        }
-                        .act-date {
-                            color: #B5B5B5;
-                            font-size: 10px;
-                            margin-bottom: 0;
-                        }
-                    }
-                }
-                .desc {
-                    color: @gray-66;
-                    &.mentioned {
-                        font-size: 11px;
-                        .border-radius(10px);
-                        border: 1px solid @gray-d4;
-                        background-color: #DBDBDB;
-                        padding: 10px 5px;
-                        .who {
-                            font-weight: bold;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-.done-button-wrap {
-    text-align: right;
-    padding: 40px 20px 1px 0;
-    margin-bottom: 15px;
-    border-bottom: 1px solid @white;
-    .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, 0.15));
-    .btn-done {
-        font-size: 0;
-        line-height: 0;
-        height: 71px;
-        width: 166px;
-        .inline-block;
-        background-image: url('@{base-image-path}/assets/btn-done.png');
-    }
-}
-.task-main {
-    &.done {
-        .tasks-proxy-header {
-            background-color: #999;
-        }
-        .task-header {
-            background-color: #999;
-            .card-count-wrap {
-                color: #DBDBDB;
-                background-color: #777;
-            }
-        }
-        .tasks {
-
-        }
-    }
-}
-.tasks-proxy {
-    position: relative;
-    padding: 0 2px;
-    &.full {
-        overflow: hidden;
-    }
-    .tasks-proxy-header {
-        height: 55px;
-        width: 100%;
-        background-color: #4D4D4D;
-        .border-radius(10px 10px 0 0);
-        position: absolute;
-        z-index: 0;
-        left: 0;
-    }
-    overflow: hidden;
-    .task-header {
-        height: 55px;
-        text-align: center;
-        line-height: 55px;
-        background-color: #4D4D4D;
-        color: @white;
-        .card-count-wrap {
-            color: #4092A1;
-            font-size: 11px;
-            background-color: #333;
-            .inline-block;
-            padding: 1px 6px;
-            .border-radius(5px);
-            line-height: 11px;
-        }
-    }
-    .tasks {
-        height: 100%;
-        z-index: 1;
-        position: relative;
-        margin: 0;
-        padding: 0;
-        list-style: none;
-        overflow-y: hidden;
-        overflow-x: auto;
-        .task {
-            &:first-child {
-                padding-left: 10px;
-            }
-            &:last-child {
-                padding-right: 10px;
-            }
-            &.open {
-                min-width: 695px;
-            }
-            max-height: 100%;
-            display: table-cell;
-            position: relative;
-            z-index: 1;
-            border-right: 1px solid rgba(255, 255, 255, 0.3);
-            .box-shadow(inset -1px 0 0 rgba(0, 0, 0, 0.15));
-            width: 235px;
-            .task-card-wrap {
-                float: left;
-                width: 220px;
-            }
-            .task-footer {
-                text-align: center;
-                font-size: 0;
-                padding: 10px 0 5px;
-                width: 220px;
-                .btn-add-card {
-                    .inline-block;
-                    background-image: url('@{base-image-path}/assets/btn-add-card.png');
-                    font-size: 0;
-                    width: 130px;
-                    height: 20px;
-                    margin: 5px 0;
-                }
-            }
-        }
-    }
-}
-
-.card-wrap {
-    overflow-y: auto;
-    .cards {
-        list-style: none;
-        margin: 0;
-        padding: 10px 10px 0 10px;
-        .card {
-            &.open {
-                border: 1px solid #5495A1;
-            }
-            cursor: pointer;
-            background-color: @white;
-            border: 1px solid @gray-d4;
-            .border-radius(8px);
-            margin-bottom: 8px;
-            .box-shadow(0 1px 0 rgba(0,0,0, .15));
-            overflow: hidden;
-            .card-body {
-                padding: 7px 10px 0;
-                .card-title {
-                    color: #999;
-                }
-                .card-assignees {
-                    margin: 10px 0 5px;
-                    padding: 0;
-                    list-style: none;
-                    > li {
-                        float: left;
-                        margin: 0 5px 5px 0;
-                        .img-rounded {
-                            display: block;
-                        }
-                    }
-                }
-            }
-            .card-footer {
-                padding: 0 10px;
-                height: 25px;
-                line-height: 25px;
-                background-color: #F5F5F5;
-                text-align: right;
-                color: #4092A1;
-            }
-        }
-    }
-}
-
-.card-labels {
-    font-size: 0;
-    line-height: 10px;
-    overflow: hidden;
-    margin-bottom: 20px;
-    .btn-labels {
-        border: 1px solid #4092A1;
-        .box-shadow();
-        .ico-arrow-down-blue {
-            vertical-align: middle;
-        }
-    }
-}
-
-.card-label {
-    .inline-block;
-    min-height: 2px;
-    min-width: 2px;
-    font-size: 10px;
-    line-height: 12px;
-    font-weight: bold;
-    padding: 4px 8px;
-    margin-right: 3px;
-    color: @white;
-    &.empty {
-        padding: 0 9px;
-        height: 20px;
-        line-height: 20px;
-    }
-    &.round {
-        .border-radius(3px);
-        .box-shadow(0 1px 2px rgba(0, 0, 0, 0.20));
-    }
-    &.red {
-        background-color: #DA5454;
-    }
-    &.navy {
-        background-color: #4B68B1;
-    }
-    &.blue {
-        background-color: #22B4B9;
-    }
-    &.purple {
-        background-color: #9966CC;
-    }
-    &.green {
-        background-color: #99CA3C;
-    }
-    &.yellow {
-        background-color: #FFCC33;
-    }
-    &.orange {
-        background-color: #FF9933;
-    }
-    &.gray {
-        background-color: #999999;
-    }
-}
-
-.task-card-detail-bg {
-    width: 440px;
-    float: right;
-    overflow-y: auto;
-    padding: 10px 20px 20px 15px;
-    background-color: #BEBEBE;
-    .box-shadow(0 0 5px 1px rgba(0, 0, 0, 0.10) inset);
-    .hr {
-        margin: 15px 0;
-    }
-    .card-detail-wrap {
-        width: 440px;
-        background-color: @white;
-        .border-radius(10px);
-        padding: 20px 0 0;
-        .card-detail {
-            position: relative;
-            .inner {
-                padding: 0 20px;
-            }
-        }
-        .card-close {
-            position: absolute;
-            top: 0;
-            right: 20px;
-        }
-        .edit-label-wrap {
-            background-color: #E7E7E7;
-            border-top: 1px solid #C4C4C4;
-            border-bottom: 1px solid #C4C4C4;
-            .dp-label-wrap {
-                font-size: 0;
-                border-top: 3px solid #DDD;
-                padding: 10px 20px;
-                .close-label{
-                    .inline-block;
-                    margin-left: 5px;
-                }
-            }
-            .choose-label-wrap {
-                position: relative;
-                line-height: 1;
-                border-top: 1px solid #C1C1C1;
-                font-size: 0;
-                background-color: #D7D7D7;
-                padding: 10px 20px;
-                .top-arrow {
-                    position: absolute;
-                    border-left: 10px solid transparent;
-                    border-right: 10px solid transparent;
-                    border-bottom: 10px solid #C1C1C1;
-                    top: -10px;
-                    left: 50%;
-                    width: 0;
-                    height: 0;
-                    margin-left: -10px;
-                    .bg-arrow {
-                        width: 0;
-                        height: 0;
-                        margin-left: -8px;
-                        margin-top: 2px;
-                        border-left: 8px solid transparent;
-                        border-right: 8px solid transparent;
-                        border-bottom: 8px solid #D7D7D7;
-                    }
-                }
-                .label-name {
-                    width: 129px;
-                    height: 14px;
-                    vertical-align: top;
-                    padding: 3px 6px;
-                    margin: 0 0 0 2px;
-                }
-                .add-label {
-                    color: #4D4D4D;
-                    font-weight: bold;
-                    font-size: 11px;
-                    text-decoration: none;
-                    line-height: 22px;
-                    margin-left: 40px;
-                }
-            }
-        }
-        .title {
-            font-size: 14px;
-            color: @black;
-            line-height: 16px;
-            margin: 0 0 20px;
-
-        }
-        .members {
-            margin: 0 0 30px;
-            list-style: none;
-            overflow: hidden;
-            .member {
-                float: left;
-                margin-right: 3px;
-                .img-rounded {
-                    display: block;
-                }
-            }
-        }
-        .header-label {
-            font-size: 14px;
-            margin: 28px 0 10px;
-            .num {
-                color: #51AACC;
-            }
-        }
-        .desc {
-            color: #666;
-            font-size: 12px;
-            margin-bottom: 20px;
-        }
-        .edit-btn {
-            color: #A2A2A2;
-            font-size: 10px;
-            text-decoration: none;
-        }
-    }
-    .card-activities {
-        margin-top: 30px;
-        padding: 0 20px;
-        background-color: #F5F5F5;
-        .border-radius(0 0 10px 10px);
-        .header {
-            overflow: hidden;
-            padding: 15px 0 0;
-        }
-        .title {
-            font-size: 14px;
-            margin: 0 0 10px 0;
-            line-height: 18px;
-            color: #222;
-        }
-        .num {
-            color: #51AACC;
-            font-size: 14px;
-            &.small {
-                font-size: 11px;
-            }
-        }
-        .card-state {
-            .ico {
-                margin-right: 3px;
-                vertical-align: middle;
-                &.ico-blue-dot {
-                    margin-left: 3px;
-                }
-            }
-        }
-        .comment-wrap {
-            .media-body {
-                margin-left: 44px;
-                .comment {
-                    width: 342px;
-                    margin-bottom: 5px;
-                }
-                .btns {
-                    font-size: 0;
-                    .blue {
-                        margin-right: 7px;
-                    }
-                }
-            }
-            .comments {
-                margin-top: 20px;
-                overflow: hidden;
-                list-style: none;
-                margin: 0;
-                .comment{
-                    padding: 15px 0;
-                    border-top: 1px solid #DCDCDC;
-                    .comment-info {
-                        margin-bottom: 10px;
-                        font-size: 10px;
-                        color: #646464;
-                        .uname {
-                            font-size: 11px;
-                            font-weight: bold;
-                        }
-                        .date {
-                            color: #BDBDBD;
-                        }
-                    }
-                    .comment-body {
-                        color: #666;
-                        &.mentioned {
-                            background-color: #DCDCDC;
-                            .border-radius(10px);
-                            border: 1px solid #D3D3D3;
-                            padding: 10px 15px;
-                            font-size: 11px;
-                            .who {
-                                margin-bottom: 5px;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    .card-detail-footer {
-        height: 20px;
-    }
-}
app/assets/stylesheets/nforge.less
--- app/assets/stylesheets/nforge.less
+++ app/assets/stylesheets/nforge.less
@@ -4,4 +4,3 @@
 @import "less/_sprites.less";
 @import "less/_page.less";
 @import "less/_buttons.less";
-@import "less/_task.less";
(No newline at end of file)
app/controllers/ProjectApp.java
--- app/controllers/ProjectApp.java
+++ app/controllers/ProjectApp.java
@@ -6,7 +6,6 @@
 import models.enumeration.RoleType;
 import models.enumeration.Direction;
 import models.enumeration.Matching;
-import models.task.CardAssignee;
 import models.support.*;
 import play.data.Form;
 import play.db.ebean.Transactional;
@@ -203,9 +202,6 @@
             if (project.owner.equals((User.find.byId(userId).name).toLowerCase())) {
                 flash(Constants.WARNING, "project.member.ownerCannotLeave");
                 return redirect(routes.ProjectApp.members(userName, projectName));
-            }
-            for (CardAssignee cardAssignee : CardAssignee.findByAssignee(userId)) {
-                cardAssignee.delete();
             }
             ProjectUser.delete(userId, project.id);
             return redirect(routes.ProjectApp.members(userName, projectName));
 
app/controllers/TaskApp.java (deleted)
--- app/controllers/TaskApp.java
@@ -1,109 +0,0 @@
-package controllers;
-
-import java.util.Map;
-
-import models.Project;
-import models.enumeration.Operation;
-import models.task.Card;
-import models.task.Line;
-import models.task.TaskBoard;
-import models.task.TaskComment;
-
-import org.codehaus.jackson.JsonNode;
-
-import play.mvc.BodyParser;
-import play.mvc.Controller;
-import play.mvc.Result;
-import play.mvc.WebSocket;
-import utils.AccessControl;
-import views.html.task.cardView;
-import views.html.task.taskView;
-import controllers.webSocket.WebSocketServer;
-
-public class TaskApp extends Controller {
-    public static Result index(String userName, String projectName) {
-        Project project = ProjectApp.getProject(userName, projectName);
-        if (!AccessControl.isAllowed(UserApp.currentUser(), project.asResource(), Operation.READ)) {
-            return unauthorized(views.html.project.unauthorized.render(project));
-        }
-        return ok(taskView.render(project));
-    }
-
-    public static Result card(String userName, String projectName, Long cardId) {
-        Project project = ProjectApp.getProject(userName, projectName);
-        if (!AccessControl.isAllowed(UserApp.currentUser(), project.asResource(), Operation.READ)) {
-            return unauthorized(views.html.project.unauthorized.render(project));
-        }
-
-        return ok(Card.findById(cardId).toJSON());
-    }
-
-    public static Result getLabels(String userName, String projectName) {
-        Project project = ProjectApp.getProject(userName, projectName);
-        if (!AccessControl.isAllowed(UserApp.currentUser(), project.asResource(), Operation.READ)) {
-            return unauthorized(views.html.project.unauthorized.render(project));
-        }
-        TaskBoard taskBoard = TaskBoard.findByProject(project);
-        return ok(taskBoard.getLabel());
-    }
-
-    public static Result getMember(String userName, String projectName) {
-        Project project = ProjectApp.getProject(userName, projectName);
-        if (!AccessControl.isAllowed(UserApp.currentUser(), project.asResource(), Operation.READ)) {
-            return unauthorized(views.html.project.unauthorized.render(project));
-        }
-        TaskBoard taskBoard = TaskBoard.findByProject(project);
-        return ok(taskBoard.getMember());
-    }
-
-    // TestCode 나중에 전부 웹소켓으로 바꾼다. 당연히 그걸 고려해서 짜야한다.
-    public static Result cardView(String userName, String projectName) {
-        Project project = ProjectApp.getProject(userName, projectName);
-        if (!AccessControl.isAllowed(UserApp.currentUser(), project.asResource(), Operation.READ)) {
-            return unauthorized(views.html.project.unauthorized.render(project));
-        }
-        return ok(cardView.render(project));
-    }
-
-    @BodyParser.Of(BodyParser.Json.class)
-    public static Result newCard(String userName, String projectName) {
-        JsonNode json = request().body().asJson();
-        Long line_id = json.findPath("line_id").asLong();
-        Line line = Line.findById(line_id);
-        Card card = new Card();
-        card.title = json.get("card_data").asText();
-        line.addCard(card);
-        json = card.toJSON();
-        return ok(json);
-    }
-
-    @BodyParser.Of(BodyParser.Json.class)
-    public static Result saveCard(String userName, String projectName) {
-        JsonNode json = request().body().asJson();
-        Long cardid = json.findPath("_id").asLong();
-        Card.findById(cardid).accecptJSON(json);
-        return ok();
-    }
-
-    public static Result addComment(String userName, String projectName) {
-        Map<String, String[]> data = request().body().asFormUrlEncoded();
-        Long cardid = Long.parseLong(data.get("_id")[0]);
-        String body = data.get("body")[0];
-        Card card = Card.findById(cardid);
-
-        TaskComment comment = new TaskComment();
-        comment.body = body;
-        // ProjectUser 추가방법 생각할것.
-
-        card.addComment(comment);
-
-        return ok();
-    }
-
-    // TestCode End
-
-    public static WebSocket<String> connect(String userName, String projectName) {
-        return WebSocketServer.handelWebSocket(userName, projectName);
-    }
-
-}(No newline at end of file)
 
app/controllers/webSocket/WebSocketConnector.java (deleted)
--- app/controllers/webSocket/WebSocketConnector.java
@@ -1,57 +0,0 @@
-package controllers.webSocket;
-
-import models.task.TaskBoard;
-import play.Logger;
-import play.libs.F.Callback;
-import play.libs.F.Callback0;
-import play.libs.Json;
-import play.mvc.WebSocket;
-import controllers.ProjectApp;
-
-public class WebSocketConnector extends WebSocket<String> implements Callback<String>,
-        Callback0 {
-
-    private String userName;
-    private String projectName;
-    private play.mvc.WebSocket.Out<String> out;
-    private WebSocketServer server;
-    private TaskBoard taskBoard;
-
-    public WebSocketConnector(String userName, String projectName,
-            WebSocketServer webSocketServer) {
-        this.userName = userName;
-        this.projectName = projectName;
-        this.server = webSocketServer;
-    }
-
-    @Override
-    public void onReady(play.mvc.WebSocket.In<String> in, play.mvc.WebSocket.Out<String> out) {
-        // For each event received on the socket,
-        in.onMessage(this);
-        in.onClose(this);
-
-        this.out = out;
-
-        taskBoard = TaskBoard.findByProject(ProjectApp.getProject(userName, projectName));
-        out.write(Json.stringify(taskBoard.toJSON()));
-    }
-
-    public void sendMessage(String msg) {
-        out.write(msg);
-    }
-
-    @Override
-    public void invoke(String event) throws Throwable {
-        // 클라이언트에서 모델을 보내올때
-        this.server.sendNotify(this, event);
-        this.taskBoard.accecptJSON(Json.parse(event));
-    }
-
-    @Override
-    public void invoke() throws Throwable {
-        // 닫혔을떄.
-        this.server.removeWebSocket(this);
-        Logger.info("Disconnected");
-    }
-
-}
 
app/controllers/webSocket/WebSocketServer.java (deleted)
--- app/controllers/webSocket/WebSocketServer.java
@@ -1,44 +0,0 @@
-package controllers.webSocket;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-public class WebSocketServer {
-
-    private static HashMap<String, WebSocketServer> serverList = new HashMap<String, WebSocketServer>();
-
-    public static WebSocketConnector handelWebSocket(String userName, String projectName) {
-        String key = userName + "/" + projectName;
-        WebSocketServer server = serverList.get(key);
-        if (server == null) {
-            server = new WebSocketServer(key);
-        }
-        WebSocketConnector webSocketConnector = new WebSocketConnector(userName, projectName,
-                server);
-        server.addWebSocket(webSocketConnector);
-        return webSocketConnector;
-    }
-
-    public WebSocketServer(String key) {
-        serverList.put(key, this);
-    }
-
-    private ArrayList<WebSocketConnector> sockets = new ArrayList<WebSocketConnector>();
-
-    private void addWebSocket(WebSocketConnector webSocket) {
-        sockets.add(webSocket);
-    }
-
-    public void removeWebSocket(WebSocketConnector webSocket) {
-        sockets.remove(webSocket);
-    }
-
-    public void sendNotify(WebSocketConnector that, String msg) {
-        for (int i = 0; i < sockets.size(); i++) {
-            WebSocketConnector socket = sockets.get(i);
-            if (socket != that) {
-                socket.sendMessage(msg);
-            }
-        }
-    }
-}
app/models/Project.java
--- app/models/Project.java
+++ app/models/Project.java
@@ -14,7 +14,6 @@
 import models.enumeration.ResourceType;
 import models.enumeration.RoleType;
 import models.resource.Resource;
-import models.task.TaskBoard;
 
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.api.errors.NoHeadException;
@@ -76,9 +75,6 @@
 
 	@OneToMany(mappedBy = "project", cascade = CascadeType.ALL)
 	public List<Milestone> milestones;
-
-	@OneToOne(mappedBy = "project", cascade = CascadeType.ALL)
-	public TaskBoard taskBoard;
 
 	public static Long create(Project newProject) {
 		newProject.siteurl = "http://localhost:9000/" + newProject.name;
 
app/models/task/Card.java (deleted)
--- app/models/task/Card.java
@@ -1,162 +0,0 @@
-package models.task;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.Transient;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ArrayNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class Card extends Model {
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    public Long id;
-    public String title;
-
-    @OneToOne(cascade = CascadeType.ALL)
-    public Checklist checklist;
-
-    @OneToMany(mappedBy = "card", cascade = CascadeType.ALL)
-    public List<TaskComment> comments;
-
-    @ManyToOne
-    public Line line;
-
-    @OneToMany(cascade = CascadeType.ALL)
-    public Set<CardAssignee> assignee;
-
-    @OneToMany(cascade = CascadeType.ALL)
-    public Set<CardLabel> labels;
-
-    public int storyPoint; // !주의 10배로 표현
-
-    public String body;
-    public Date dueDate;
-
-    public static Finder<Long, Card> find = new Finder<Long, Card>(Long.class,
-            Card.class);
-
-    public static Card findById(Long id) {
-        return find.byId(id);
-    }
-
-    public static List<Card> findByAssignee(Long userId) {
-        return find.where().eq("assignee.id", userId).findList();
-    }
-
-    public void addComment(TaskComment comment) {
-        comments.add(comment);
-        comment.card = this;
-        comment.save();
-        save();
-    }
-
-    public void removeComment(TaskComment comment) {
-        comments.remove(comment);
-    }
-
-    /*
-     * public void addCheckList(CheckList checklist) { if(this.checkList !=
-     * null){ this.checkList.delete(); } this.checkList = checklist;
-     * checklist.save(); }
-     */
-
-    @Transient
-    public JsonNode toJSON() {
-
-        ObjectNode json = Json.newObject();
-        json.put("_id", id);
-        json.put("title", title);
-        json.put("body", body);
-        json.put("storyPoint", storyPoint);
-        ArrayNode commentsJson = Json.newObject().arrayNode();
-        for (TaskComment comment : comments) {
-            commentsJson.add(comment.toJSON());
-        }
-        json.put("comments", commentsJson);
-
-        ArrayNode assigneeJson = Json.newObject().arrayNode();
-        for (CardAssignee cardAssignee : assignee) {
-            ObjectNode tmp = Json.newObject();
-            tmp.put("_id", cardAssignee.projectUser.id);
-            tmp.put("loginId", cardAssignee.projectUser.user.loginId);
-            assigneeJson.add(tmp);
-        }
-        json.put("assignee", assigneeJson);
-
-        ArrayNode labelsJson = Json.newObject().arrayNode();
-        for (CardLabel label : labels) {
-            ObjectNode tmp = Json.newObject();
-            tmp.put("_id", label.label.id);
-            tmp.put("name", label.label.name);
-            labelsJson.add(tmp);
-        }
-        json.put("labels", labelsJson);
-
-        if (checklist != null) {
-            json.put("checklist", checklist.toJSON());
-        }
-
-        return json;
-    }
-
-    public void accecptJSON(JsonNode json) {
-        title = json.get("title").asText();
-        body = json.get("body").asText();
-        storyPoint = json.get("storyPoint").asInt();
-        JsonNode checklistJson = json.get("checklist");
-        if (checklistJson != null) {
-            if (checklist == null) {
-                checklist = new Checklist();
-            }
-            checklist.acceptJSON(checklistJson);
-        } else {
-            if(checklist != null){
-                checklist.delete();
-            }
-            checklist = null;
-        }
-
-        JsonNode assigneeJson = json.get("assignee");
-        for (CardAssignee tmp : assignee) {
-            tmp.delete();
-        }
-        assignee.clear();
-
-        for (int i = 0; i < assigneeJson.size(); i++) {
-            JsonNode memberJson = assigneeJson.get(i);
-            Long projectUserId = memberJson.get("_id").asLong();
-            CardAssignee cardAssignee = new CardAssignee(this, projectUserId);
-            assignee.add(cardAssignee);
-        }
-
-        JsonNode labelsJson = json.get("labels");
-
-        for (CardLabel label : this.labels) {
-            label.delete();
-        }
-        this.labels.clear();
-        for (int i = 0; i < labelsJson.size(); i++) {
-            JsonNode labelJson = labelsJson.get(i);
-            Long labelId = labelJson.get("_id").asLong();
-            labelJson.get("name");
-            this.labels.add(new CardLabel(this, labelId));
-        }
-        this.save();
-    }
-
-}
 
app/models/task/CardAssignee.java (deleted)
--- app/models/task/CardAssignee.java
@@ -1,39 +0,0 @@
-package models.task;
-
-import java.util.List;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import models.ProjectUser;
-import play.db.ebean.Model;
-
-@Entity
-public class CardAssignee extends Model {
-    private static final long serialVersionUID = -4353337723141836877L;
-
-    private static Finder<Long, CardAssignee> find = new Finder<Long, CardAssignee>(Long.class,
-        CardAssignee.class);
-
-    public CardAssignee() {
-
-    }
-
-    public CardAssignee(Card card, Long projectUserId) {
-        projectUser = ProjectUser.findById(projectUserId);
-    }
-
-    @Id
-    public Long id;
-
-    @ManyToOne
-    public Card card;
-
-    @ManyToOne
-    public ProjectUser projectUser;
-
-    public static List<CardAssignee> findByAssignee(Long userId) {
-        return find.where().eq("projectUser.user.id", userId).findList();
-    }
-}(No newline at end of file)
 
app/models/task/CardLabel.java (deleted)
--- app/models/task/CardLabel.java
@@ -1,31 +0,0 @@
-package models.task;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import play.db.ebean.Model;
-
-@Entity
-public class CardLabel extends Model {
-
-    private static final long serialVersionUID = -5436658861223275375L;
-
-    public CardLabel() {
-        // TODO Auto-generated constructor stub
-    }
-
-    public CardLabel(Card card, Long labelId) {
-        this.card = card;
-        this.label = Label.findById(labelId);
-    }
-
-    @Id
-    public Long id;
-
-    @ManyToOne
-    public Card card;
-
-    @ManyToOne
-    public Label label;
-}
 
app/models/task/Checklist.java (deleted)
--- app/models/task/Checklist.java
@@ -1,72 +0,0 @@
-package models.task;
-
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ArrayNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class Checklist extends Model {
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    public Long id;
-    public String title;
-
-    @OneToMany(cascade = CascadeType.ALL, mappedBy = "checklist")
-    public List<Item> items;
-
-    public static Finder<Long, Checklist> find = new Finder<Long, Checklist>(
-            Long.class, Checklist.class);
-
-    public static Checklist findById(Long id) {
-        return find.byId(id);
-    }
-
-    public void addItem(Item item) {
-        item.save();
-        items.add(item);
-    }
-
-    public void removeItem(Item item) {
-        items.remove(item);
-        item.delete();
-    }
-
-    public JsonNode toJSON() {
-        ObjectNode json = Json.newObject();
-        json.put("title", title);
-        ArrayNode itemsJson = Json.newObject().arrayNode();
-        for (Item item : items) {
-            itemsJson.add(item.toJSON());
-        }
-        json.put("items", itemsJson);
-        return json;
-    }
-
-    public void acceptJSON(JsonNode json) {
-        // TODO MAEKTEST
-        title = json.get("title").asText();
-        JsonNode itemsJson = json.get("items");
-        for (Item item : items) {
-            item.delete();
-        }
-        items.clear();
-        for (int i = 0; i < itemsJson.size(); i++) {
-            JsonNode itemJson = itemsJson.get(i);
-            Item item = new Item();
-            item.acceptJSON(itemJson);
-            items.add(item);
-        }
-        save();
-    }
-}
 
app/models/task/Item.java (deleted)
--- app/models/task/Item.java
@@ -1,51 +0,0 @@
-package models.task;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class Item extends Model {
-	private static final long serialVersionUID = 1L;
-	
-	@Id
-    public Long id;
-    private boolean state;//체크 안체크
-    public String body;
-    
-    @ManyToOne
-    public Checklist checklist;
-    
-    public boolean isDone(){
-        return state;
-    }
-    public void check(){
-        state = true;
-    }
-    public void uncheck(){
-        state = false;
-    }
-    
-    public static Finder<Long, Item> find = new Finder<Long, Item>(Long.class, Item.class);
-    
-    public static Item findById(Long id) {
-        return find.byId(id);
-    }
-    public JsonNode toJSON() {
-        // TODO MAKETEST
-        ObjectNode json = Json.newObject();
-        json.put("state", state);
-        json.put("body", body);
-        return json;
-    }
-    public void acceptJSON(JsonNode json){
-    	body = json.get("body").asText();
-    	state = json.get("state").asBoolean();
-    }
-}
 
app/models/task/Label.java (deleted)
--- app/models/task/Label.java
@@ -1,39 +0,0 @@
-package models.task;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class Label extends Model{
-	private static final long serialVersionUID = 1L;
-	
-    @Id
-    public Long id;
-    public String name;
-    public String color;//#ffffff
-    
-    @ManyToOne
-    public TaskBoard taskBoard;
-    
-    private static Finder<Long, Label> find = new Finder<Long, Label>(Long.class, Label.class);
-    
-    public static Label findById(Long id) {
-        return find.byId(id);//TODO 테스트 코드 추가해야 함.
-    }
-
-    public JsonNode toJSON() {
-        //TODO TESTCODE 작성
-        ObjectNode json = Json.newObject();
-        json.put("_id", id);
-        json.put("name", name);
-        json.put("color", color);
-        return json;
-    }
-}
 
app/models/task/Line.java (deleted)
--- app/models/task/Line.java
@@ -1,77 +0,0 @@
-package models.task;
-
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ArrayNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class Line extends Model {
-	private static final long serialVersionUID = 1L;
-	
-    @Id
-    public Long id;
-    public String title;
-    
-    @OneToMany(mappedBy="line", cascade=CascadeType.ALL)
-    public List<Card> cards;
-    
-    @ManyToOne
-    public TaskBoard taskBoard;
-    
-    private static Finder<Long, Line> find = new Finder<Long, Line>(Long.class, Line.class);
-    
-    public JsonNode toJSON() {
-        ObjectNode json = Json.newObject();
-        json.put("_id", id);
-        json.put("title", this.title);
-        ArrayNode arr = Json.newObject().arrayNode();
-        for(Card card : cards){
-            arr.add(card.toJSON());
-        }
-        json.put("cards", arr);
-        return json;
-    }
-
-    public static Line findById(Long id) {
-        return find.byId(id);
-    }
-
-    public void accecptJSON(JsonNode json) {
-        // TODO 한 라인에 정보들을 저장하면 된다.
-        //존재하지 않는 카드는 더하고 없는 카드는 삭제한다.
-        title = json.get("title").asText();
-        cards.clear();
-        JsonNode cardsJson = json.get("cards");
-        for(int i = 0; i < cardsJson.size(); i++) {
-            JsonNode cardJson = cardsJson.get(i);
-            Long cardId = cardJson.get("_id").asLong();
-            Card card = Card.findById(cardId);
-            if(card == null){
-                card = new Card();
-            }
-            cards.add(card);
-            card.line = this;
-            card.accecptJSON(cardJson);
-            card.save();
-        }
-        save();//왜 save가 안되는거야?
-        //아마 지워진걸 delete를 해줘야 할듯... 안하면 안되는듯...
-    }
-
-    public void addCard(Card card) {
-        // TODO MAKETEST
-        cards.add(card);
-        save();
-    }
-}
 
app/models/task/TaskBoard.java (deleted)
--- app/models/task/TaskBoard.java
@@ -1,123 +0,0 @@
-package models.task;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.*;
-
-import models.Project;
-import models.ProjectUser;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ArrayNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class TaskBoard extends Model {
-    private static final long serialVersionUID = 1L;
-
-    @Id
-    public Long id;
-
-    @OneToMany(mappedBy = "taskBoard", cascade = CascadeType.ALL)
-    public List<Line> lines;
-    @OneToMany(mappedBy = "taskBoard", cascade = CascadeType.ALL)
-    public List<Label> labels;
-
-    @OneToOne
-    public Project project;
-
-    private static Finder<Long, TaskBoard> find = new Finder<Long, TaskBoard>(
-            Long.class, TaskBoard.class);
-
-    public static TaskBoard create(Project project) {
-        TaskBoard taskBoard = new TaskBoard();
-        // create default line
-        taskBoard.lines = new ArrayList<Line>();
-        taskBoard.lines.add(createLine("Box"));
-        taskBoard.lines.add(createLine("Todo"));
-        taskBoard.lines.add(createLine("Doing"));
-        taskBoard.lines.add(createLine("Test"));
-        taskBoard.lines.add(createLine("Done"));
-
-        // create default Label
-        taskBoard.labels = new ArrayList<Label>();
-        for (int i = 0; i < 10; i++) {
-            Label label = new Label();
-
-            taskBoard.labels.add(label);
-        }
-
-        taskBoard.project = project;
-
-        taskBoard.save();
-
-        return taskBoard;
-    }
-
-    private static Line createLine(String title) {
-        Line line = new Line();
-        line.title = title;
-        line.save();
-        return line;
-    }
-
-    public static TaskBoard findByProject(Project project) {
-        return find.where().eq("project.id", project.id).findUnique();
-    }
-
-    public void accecptJSON(JsonNode json) {
-        // 이미 있는 목록을 지워버리고 온거로만 채운다. 지워지면 난 몰라!
-        // TODO delete를 고려할것.
-        lines.clear();
-
-        for (int i = 0; i < json.size(); i++) {
-            JsonNode lineJson = json.get(i);
-            Long lineId = lineJson.get("_id").asLong();
-            Line line = Line.findById(lineId);
-            if (line == null) {
-                line = new Line();
-            }
-            lines.add(line);
-            line.taskBoard = this;
-            line.accecptJSON(lineJson);
-            line.save();
-        }
-        save();
-    }
-
-    @Transient
-    public JsonNode toJSON() {
-        // 라인중에서 넣을 것만 넣고 나머지는 다 위임한다.
-        ArrayNode json = Json.newObject().arrayNode();
-
-        for (Line line : lines) {
-            json.add(line.toJSON());
-        }
-        return json;
-    }
-
-    @Transient
-    public JsonNode getLabel() {
-        ArrayNode json = Json.newObject().arrayNode();
-        for (Label label : labels) {
-            json.add(label.toJSON());
-        }
-        return json;
-    }
-
-    @Transient
-    public JsonNode getMember() {
-        ArrayNode json = Json.newObject().arrayNode();
-        for (ProjectUser member : ProjectUser.findMemberListByProject(project.id)) {
-            ObjectNode tmp = Json.newObject();
-            tmp.put("loginId", member.user.loginId);
-            tmp.put("_id", member.id);
-            json.add(tmp);
-        }
-        return json;
-    }
-}
 
app/models/task/TaskComment.java (deleted)
--- app/models/task/TaskComment.java
@@ -1,40 +0,0 @@
-package models.task;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import models.ProjectUser;
-
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.node.ObjectNode;
-
-import play.db.ebean.Model;
-import play.libs.Json;
-
-@Entity
-public class TaskComment extends Model {
-	private static final long serialVersionUID = 1L;
-	
-    @Id
-    public Long id;
-    public String body;
-    public ProjectUser author;
-    
-    @ManyToOne
-    public Card card;
-    
-    private static Finder<Long, TaskComment> find = new Finder<Long, TaskComment>(Long.class, TaskComment.class);
-    
-    public static TaskComment findById(Long id) {
-        return find.byId(id);
-    }
-
-    public JsonNode toJSON() {
-        // TODO 테스트 추가 해야 함.
-        ObjectNode json = Json.newObject();
-        json.put("_id", id);
-        json.put("body", body);
-        return json;
-    }
-}
app/views/index.scala.html
--- app/views/index.scala.html
+++ app/views/index.scala.html
@@ -8,7 +8,6 @@
             	<span>Open Source</span> Project. 
             	<span>Code</span> Repository. 
             	<span>Issue</span> Tracker. 
-            	<span>Task</span> Management
             </p>
         </div>
         <div class="fn-intro-wrap">
@@ -32,13 +31,6 @@
 					팀이 함께 고민하고
 					처리해야 하는 내용들을 적고
 					거친 파도를 합심해 헤쳐나가듯 해결해 나갑니다.
-				</li>
-				<li class="tasks">
-					<strong>태스크 관리</strong>
-					
-					문서와 자료도
-					팀에서 개발하는 소프트웨어 만큼이나
-					함께 만들고 함께 성장해 갑니다
 				</li>
             </ul>
             
app/views/prjmenu.scala.html
--- app/views/prjmenu.scala.html
+++ app/views/prjmenu.scala.html
@@ -33,8 +33,6 @@
 			<li class="sp-line">|</li>
 			<li class="@isActiveMenu(MenuType.ISSUE)"><a href="@routes.IssueApp.issues(project.owner, project.name,"all")">@Messages("menu.issue")</a></li>
 			<li class="sp-line">|</li>
-		<!--	<li class="@isActiveMenu(MenuType.TASK)"><a href="@routes.TaskApp.index(project.owner, project.name)">@Messages("menu.task")</a></li> 
-			<li class="sp-line">|</li>-->
 			<li class="@isActiveMenu(MenuType.PROJECT_SETTING)"><a href="@routes.ProjectApp.settingForm(project.owner, project.name)">@Messages("menu.admin")</a></li>
 		</ul>
 	</div>
 
app/views/task/cardView.scala.html (deleted)
--- app/views/task/cardView.scala.html
@@ -1,75 +0,0 @@
-@(project:Project)
-
-<!-- 실제로 이것들은 미리 로딩되어 있음 -->
-<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js"></script>
-<script type="text/javascript" src="http://underscorejs.org/underscore.js"></script>
-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
-<script type="text/javascript" src="https://raw.github.com/angular-ui/angular-ui/master/build/angular-ui.min.js"></script>
-<!-- preloading section end -->
-<style>
-input.card_title {
-  border: 0px;
-}
-
-ul {
-  list-style: none;
-  padding: 0px;
-}
-</style>
-<div ng-controller="CardCtrl">
-  <section class="card">
-    <!--
-      //클릭하지 않았을때는 그냥 잘 보여주다 클릭하면 input으로 바꾸기.
-      //         (아마 onclick에서 바꾸고 onBlur에서 다시 원상 복귀하면 될듯.)-->
-    <input type="text" ng-model="card.title" class="card_title" /> <input ng-model="card.storyPoint"
-      ui-event="{'blur':'saveCard()'}" type="number" min="0" max="500" /><br />
-    <textarea ng-model="card.body"></textarea>
-    <button ng-click="saveCard()">save</button>
-    <div>
-      <fieldset>
-        <legend>assignee</legend>
-        <div ng-repeat="member in card.assignee">
-          <span>{{member.loginId}}</span>
-        </div>
-        <button ng-click="showMemberList()">assign</button>
-        <div ng-show="input.assign" ng-repeat="member in board.members">
-          <span><input type="checkbox" ng-model="member.assigned" ng-change="assign(member)" />{{member.loginId}}</span>
-        </div>
-      </fieldset>
-    </div>
-    <div ng-repeat="label in board.labels">
-      <span><input type="checkbox" ng-model="label.state" ng-change="saveCard()" />{{label.name}}</span>
-      <!-- 색깔라벨 나오게 만들것! -->
-    </div>
-    <div>
-      DueDate : <input type="date" ng-model="card.dueDate" ui-event="{'blur':'saveCard()'}" />
-    </div>
-    <button ng-hide="card.checklist" ng-click="makeCheckList()">makeCheckList</button>
-    <fieldset ng-show="card.checklist">
-      <legend>{{card.checklist.title}}</legend>
-      <ul ng-repeat="item in card.checklist.items">
-        <li><input type="checkbox" ng-model="item.state" ng-click="checkItem(item)" /> {{item.body}}</li>
-      </ul>
-      <input type="text" ng-model="input.checklist" />
-      <button ng-click="addChecklist()">add</button>
-    </fieldset>
-  </section>
-  <section id="taskComments" ng-repeat="comment in card.comments">
-    <article>{{comment.body}}</article>
-  </section>
-  <div>
-    <form ng-submit="addComment()">
-      <textarea id="comment_input" ng-model="input.comment"></textarea>
-      <input type="submit" value="comment" />
-    </form>
-  </div>
-</div>
-<script src="/assets/javascripts/CardView.js"></script>
-<script>
-$(document).ready(function(){
-  initCardView("/@project.owner/@project.name/task/");
-  cardLoad(1);// for TEST
-})
-</script>
-
 
app/views/task/taskView.scala.html (deleted)
--- app/views/task/taskView.scala.html
@@ -1,188 +0,0 @@
-@(project:Project) 
-@import utils.TemplateHelper._
-@main("TaskManager", project, utils.MenuType.TASK){
-<div class="page">
-<style>
-    @@IMPORT url(@getCSSLink("taskboard"));
-</style>
-<h1>TaskManager</h1>
-<div ng-controller="controller">
-  <section ng-repeat="line in lines" class="line">
-    <header>{{line.title}}</header>
-    <div class="cardlist" id="cardlist_{{line._id}}">
-      <article class="blank"></article>
-      <div ng-repeat="card in line.cards">
-        <article class="card" draggable="true" ui-event="{'dragstart': 'onDragStart(line, card)'}">
-          {{card.title}}</article>
-        <article class="blank"></article>
-      </div>
-    </div>
-    <article>
-      <button ng-hide="newCard && newCard.targetLine == line" ng-click="showCardInput(line)">new Card</button>
-      <form ng-submit="addCard(line)" ng-show="newCard && newCard.targetLine == line">
-        <textarea ng-model="newCard.title"></textarea>
-        <input type="submit" value="add" />
-      </form>
-    </article>
-  </section>
-  <section style="float: right">
-    <fieldset>
-      <legend>label List</legend>
-      <article id="lables" ng-repeat="label in labels">
-        <span>{{label.name}}</span>
-      </article>
-    </fieldset>
-    <fieldset>
-      <legend>memberList</legend>
-      <aritcle ng-repeat="member in members"> <span>{{member.loginId}}</span> </aritcle>
-    </fieldset>
-  </section>
-</div>
-<script>
-  $(function() {
-    var myapp = angular.module('myapp', [ 'ui' ]);
-    var TaskCtrl = function($scope) {
-      var dragStart = {};
-      var webSocket = new WebSocket("ws://" + location.host + location.pathname
-          + "/connect");
-      webSocket.onmessage = function(e) {
-        $scope.lines = JSON.parse(e.data);
-        $scope.$apply();
-      }
-      webSocket.onopen = function() {
-        console.log("socket Open!");
-      }
-      webSocket.onclose = function() {
-        console.log("disconnected!");
-        console.log("trying to reconnect...");
-        console.log("unimplement");
-      }
-      $scope.showCardInput = function(line) {
-        $scope.newCard = {
-          targetLine : line
-        };
-      };
-      $scope.addCard = function(line) {
-        $.ajax("task/newCard", {
-          success : function(data) {
-            $scope.newCard.title = "";
-            line.cards.push(data);
-            $scope.$apply();
-          },
-          contentType : "text/json",
-          dataType : "json",
-          data : JSON.stringify({
-            line_id : line._id,
-            card_data : $scope.newCard.title
-          }),
-          type : "POST"
-        });
-        return false;
-      }
-
-      $.ajax("task/labels", {
-        success : function(data) {
-          $scope.labels = data;
-        },
-        dataType : "json"
-      });
-
-      $.ajax("task/member", {
-        success : function(data) {
-          $scope.members = data;
-        }
-      });
-      //init end
-      $scope.onDragOver = function($event) {
-        $event.preventDefault();
-      };
-      $scope.onDragleave = function($event) {
-        $event.preventDefault();
-      };
-      $scope.onDrop = function($event, targetLine) {
-        if (dragStart === null)
-          return;
-        if (targetLine._id !== dragStart.line._id) {
-          if (dragStart !== null) {
-            targetLine.cards.push(dragStart.card);
-            dragStart.line.cards = _.without(dragStart.line.cards,
-                dragStart.card);
-          }
-        }
-        webSocket.send(JSON.stringify($scope.lines));
-      };
-      $scope.onDragStart = function(currentLine, currentCard) {
-        dragStart = {
-          line : currentLine,
-          card : currentCard,
-          idx : _.indexOf(currentLine.cards, currentCard)
-        };
-      };
-
-      $scope.onDragOverBlank = function($event) {
-        $event.preventDefault();
-      };
-      $scope.onDragleaveBlank = function($event) {
-        $event.preventDefault();
-      };
-      $scope.onDropBlank = function($event, targetLine, targetCard) {
-        if (dragStart === null)
-          return;
-        var prvIdx = null;
-        if (targetLine._id == dragStart.line._id) {
-          targetLine.cards.splice(dragStart.idx, 1);
-        } else {
-          dragStart.line.cards = _
-              .without(dragStart.line.cards, dragStart.card);
-        }
-        targetLine.cards.splice(_.indexOf(targetLine.cards, targetCard) + 1, 0,
-            dragStart.card);
-        dragStart = null;
-        webSocket.send(JSON.stringify($scope.lines));
-      };
-    };
-    myapp.controller('controller', TaskCtrl);
-    angular.bootstrap(document, [ 'myapp' ]);
-  });
-  (function() {
-    $(".cardlist").live("drop", function(e) {
-      if (e.stopPropagation)
-        e.stopPropagation();
-      e.preventDefault();
-    });
-
-    $(".cardlist").live("dragover", function(e) {
-      $(this).addClass("over");
-      return e.preventDefault();
-    }).live("drop dragleave", function(e) {
-      $(this).removeClass("over");
-    });
-    $(".card").live("dragstart", function(e) {
-    });
-
-    $(".blank").live("dragover", function(e) {
-      $(this).addClass("overBlank");
-      return e.preventDefault();
-    }).live("drop dragleave", function(e) {
-      $(this).removeClass("overBlank");
-    });
-    $(".cardlist")
-        .attr(
-            "ui-event",
-            "{dragover: 'onDragOver($event)', dragleave: 'onDragLeave($event)', drop: 'onDrop($event, line)'}");
-    $(".blank")
-        .attr(
-            "ui-event",
-            "{dragover: 'onDragOverBlank($event)', dragleave: 'onDragLeaveBlank($event)', drop: 'onDropBlank($event, line, card)'}");
-  })();
-
-  //===============================
-  var URL_PREFIX = "/@project.owner/@project.name/task/";
-</script>
-<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js"></script>
-<script type="text/javascript" src="http://underscorejs.org/underscore.js"></script>
-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
-<script type="text/javascript" src="https://raw.github.com/angular-ui/angular-ui/master/build/angular-ui.min.js"></script>
-</div>
-}
conf/initial-data.yml
--- conf/initial-data.yml
+++ conf/initial-data.yml
@@ -384,93 +384,3 @@
                             id: 2
         role:           !!models.Role
                             id: 1
-
-#Task
-taskBoards:
-    - !!models.task.TaskBoard
-        project:        !!models.Project
-                            id:  1
-lines:
-    - !!models.task.Line
-        title:          Box
-        taskBoard:      !!models.task.TaskBoard
-                            id:      1
-
-    - !!models.task.Line
-        title:          TODO
-        taskBoard:      !!models.task.TaskBoard
-                            id:      1
-    - !!models.task.Line
-        title:          Doing
-        taskBoard:      !!models.task.TaskBoard
-                            id:      1
-    - !!models.task.Line
-        title:          Test
-        taskBoard:      !!models.task.TaskBoard
-                            id:      1
-    - !!models.task.Line
-        title:          Done
-        taskBoard:      !!models.task.TaskBoard
-                            id:      1
-
-cards:
-    - !!models.task.Card
-        title:          test title
-        body:           test card
-        storyPoint:     5 
-        checklist:      !!models.task.Checklist
-                            title:          TODO
-        line:           !!models.task.Line
-                            id:     1
-                            
-    - !!models.task.Card
-        title:          alpha
-        body:           alpha
-        line:           !!models.task.Line
-                            id:     1
-    - !!models.task.Card
-        title:          Beta
-        body:           beta
-        line:           !!models.task.Line
-                            id:     1
-        
-    - !!models.task.TaskComment
-        body:           test comment
-        author:         !!models.ProjectUser
-                            id:     1
-        card:           !!models.task.Card
-                            id:     1
-    - !!models.task.TaskComment
-        body:           test comment2
-        author:         !!models.ProjectUser
-                            id:     1
-        card:           !!models.task.Card
-                            id:     1
-
-    - !!models.task.CardAssignee
-        card:           !!models.task.Card
-                            id:     1
-        projectUser:    !!models.ProjectUser
-                            id:     4
-
-labels:
-    - !!models.task.Label
-        name:           HELP
-        taskBoard:      !!models.task.TaskBoard
-                            id:     1
-    - !!models.task.Label
-        name:           ISSUE
-        taskBoard:      !!models.task.TaskBoard
-                            id:     1
-
-checkLists:
-
-    - !!models.task.Item
-        body:           test item
-        checklist :     !!models.task.Checklist
-                            id:     1 
-    
-    - !!models.task.Item
-        body:           test item2
-        checklist :     !!models.task.Checklist
-                            id:     1
conf/routes
--- conf/routes
+++ conf/routes
@@ -130,17 +130,6 @@
 # Search
 GET     /:user/:project/search                          controllers.SearchApp.contentsSearch(user, project, page: Int ?= 0)
 
-#task
-GET     /:user/:project/task                            controllers.TaskApp.index(user, project)
-GET     /:user/:project/task/labels                     controllers.TaskApp.getLabels(user, project)
-GET     /:user/:project/task/member                     controllers.TaskApp.getMember(user, project)
-GET     /:user/:project/task/connect                    controllers.TaskApp.connect(user, project)
-GET     /:user/:project/task/card/:cardId               controllers.TaskApp.card(user, project, cardId:Long)
-GET     /:user/:project/task/card                       controllers.TaskApp.cardView(user, project)
-POST    /:user/:project/task/newCard                    controllers.TaskApp.newCard(user, project)
-POST    /:user/:project/task/card                       controllers.TaskApp.saveCard(user, project)
-POST    /:user/:project/task/comment                    controllers.TaskApp.addComment(user, project)
-
 # Help
 GET     /help                                           controllers.HelpApp.help()
 
 
public/javascripts/service/hive.Task.CardView.js (deleted)
--- public/javascripts/service/hive.Task.CardView.js
@@ -1,141 +0,0 @@
-var cardLoad;
-(function() {
-  //angular!
-  var URL_PREFIX = "";
-  var cardapp = angular.module('cardApp', [ 'ui' ]);
-  function CardCtrl($scope) {
-    $scope.card; //model
-    $scope.board = {};
-    $scope.input = {
-      comment : ""
-    };
-    cardLoad = function(id) {
-      $.ajax(URL_PREFIX + "c/" + id, {
-        dataType : "json",
-        success : function(data) {
-          $scope.card = data;
-          $scope.$apply();
-          adjust();
-        }
-      });
-    }
-    $.ajax(URL_PREFIX + "member", {
-      success : function(data) {
-        $scope.board.members = data;
-        adjust();
-      }
-    });
-    $.ajax(URL_PREFIX + "labels", {
-      success : function(data) {
-        $scope.board.labels = data;
-        adjust();
-      },
-      dataType : "json"
-    });
-    function adjust() {
-      if ($scope.card && $scope.board && $scope.board.members) {
-        var assignee = $scope.card.assignee;
-        var members = $scope.board.members;
-        for ( var i = 0; i < members.length; i++) {
-          members[i].assigned = false;
-          for ( var j = 0; j < assignee.length; j++) {
-            if (members[i]._id == assignee[j]._id) {
-              members[i].assigned = true;
-              assignee[j] = members[i];
-            }
-          }
-        }
-        $scope.$apply();
-      }
-      if ($scope.card && $scope.board && $scope.board.labels) {
-        var cardLabels = $scope.card.labels;
-        var boardLabels = $scope.board.labels;
-        for ( var i = 0; i < boardLabels.length; i++) {
-          boardLabels[i].state = false;
-          for ( var j = 0; j < cardLabels.length; j++) {
-            if (cardLabels[j]._id == boardLabels[i]._id) {
-              boardLabels[i].state = true;
-            }
-          }
-        }
-      }
-      $scope.$apply()
-    }
-    //inti function end 
-    $scope.addComment = function() {
-      $scope.card.comments.push($scope.input.comment);
-      server.addComment($scope.card._id, $scope.input.comment);
-      $scope.input.comment = "";
-
-    }
-    $scope.saveCard = function() {
-      $scope.card.labels = [];
-      for ( var i = 0; i < $scope.board.labels.length; i++) {
-        if ($scope.board.labels[i].state == true) {
-          $scope.card.labels.push($scope.board.labels[i]);
-        }
-      }
-      server.saveCard($scope.card);
-      console.log($scope.card);
-    }
-    $scope.showMemberList = function() {
-      $scope.input.assign = !$scope.input.assign;
-    }
-    $scope.makeCheckList = function() {
-      $scope.card.checklist = {
-        items : [],
-        title : "TODO"
-      };
-    }
-    $scope.addChecklist = function() {
-      $scope.card.checklist.items.push({
-        body : $scope.input.checklist,
-        state : false
-      });
-      $scope.input.checklist = "";
-      $scope.saveCard();
-    }
-    $scope.checkItem = function(item) {
-      $scope.saveCard();
-    }
-    $scope.assign = function(member) {
-      if (member.assigned) {
-        $scope.card.assignee.push(member);
-      } else {
-        $scope.card.assignee = _.without($scope.card.assignee, member);
-      }
-      $scope.saveCard();
-    }
-  }
-  
-  window.initCardView = function(url){
-    URL_PREFIX = url;
-    cardapp.controller('CardCtrl', CardCtrl);//여기는 실제함수와 어트리뷰트간의 관계맺기
-    angular.bootstrap(document, [ 'cardApp' ]);
-  }
-  var server = {};
-  server.addComment = function(_id, str) {
-    $.ajax(URL_PREFIX + "comment", {
-      type : "POST",
-      data : {
-        body : str,
-        _id : _id
-      },
-      success : function(data) {
-        cardLoad(_id);
-      }
-    });
-  };
-  server.saveCard = function(card, callback) {
-    //서버로 카드 전체를 보내서 저장합니다.
-    $.ajax(URL_PREFIX + "card", {
-      type : "post",
-      data : JSON.stringify(card),
-      contentType : "text/json",
-      success : function(data) {
-        if (callback)
-          callback();
-      }
-    });
-  }
-})();
 
public/stylesheets/taskboard.css (deleted)
--- public/stylesheets/taskboard.css
@@ -1,52 +0,0 @@
-section.line {
-  width: 150px;
-  float: left;
-  border: 2px solid #666666;
-  background: #fafafa;
-  margin-right: 5px;
-  border-radius: 5px;
-  text-align: center;
-  cursor: move;
-}
-
-section.line header {
-  padding: 5px;
-  background-color: #dadada;
-  border-top-left-radius: 5px;
-  border-top-right-radius: 5px;
-}
-
-article.card {
-  background: #b9a;
-  margin: 4px;
-  border-radius: 3px;
-  border: 1px solid gray;
-  min-height: 20px;
-}
-
-.cardlist {
-  border: 2px solid #f1f1f1;
-  background: #f1f1f1;
-}
-
-.over {
-  border: 2px dashed #000;
-}
-
-.dragTargetCard {
-  background-color: dadada;
-  color: dadada;
-}
-
-.blank {
-  min-height: 3px;
-}
-
-.overBlank {
-  min-height: 25px;
-  background-color: #ddd;
-}
-
-.fade {
-  background: #333;
-}(No newline at end of file)
 
test/models/task/CardTest.java (deleted)
--- test/models/task/CardTest.java
@@ -1,66 +0,0 @@
-package models.task;
-
-import static org.fest.assertions.Assertions.assertThat;
-import models.ModelTest;
-import models.ProjectUser;
-
-import org.codehaus.jackson.JsonNode;
-import org.junit.Test;
-
-public class CardTest extends ModelTest<Card> {
-
-    @Test
-    public void findById() {
-        // Given
-        // When
-        Card card = Card.findById(1l);
-        // Then
-        assertThat(card).isNotNull();
-        assertThat(card.body).isEqualTo("test card");
-    }
-
-    @Test
-    public void addComment() throws Exception {
-        // Given
-        Card card = Card.findById(1l);
-        TaskComment comment = new TaskComment();
-        comment.body = "aaa";
-        // When
-        card.addComment(comment);
-        // Then
-        assertThat(card.comments).contains(comment);
-        assertThat(comment.id).isNotNull();
-    }
-
-    @Test
-    public void removeComment() throws Exception {
-        // Given
-        Card card = Card.findById(1l);
-        // When
-        card.removeComment(TaskComment.findById(1l));
-        // Then
-        assertThat(card.comments).excludes(TaskComment.findById(1l));
-    }
-
-    /*
-     * @Test public void addCheckList() throws Exception { // Given Card card =
-     * Card.findById(1l); CheckList checklist = new CheckList(); // When
-     * card.addCheckList(checklist); // Then
-     * assertThat(card.checkList).isNotNull();
-     * assertThat(card.checkList).isEqualTo(checklist);
-     * assertThat(checklist.id).isNotNull(); }
-     */
-
-    @Test
-    public void toJSON() throws Exception {
-        // Given
-        Card card = Card.findById(1l);
-        // When
-        JsonNode json = card.toJSON();
-        // Then
-        assertThat(json.get("title").asText()).isEqualTo("test title");
-        assertThat(json.get("body").asText()).isEqualTo("test card");
-        assertThat(json.get("comments").size()).isEqualTo(2);
-        assertThat(json.get("checklist")).isNotNull();
-    }
-}
 
test/models/task/CheckListTest.java (deleted)
--- test/models/task/CheckListTest.java
@@ -1,44 +0,0 @@
-package models.task;
-
-import static org.fest.assertions.Assertions.assertThat;
-
-import org.codehaus.jackson.JsonNode;
-import org.junit.Test;
-
-import models.ModelTest;
-
-public class CheckListTest extends ModelTest<Checklist> {
-    @Test
-    public void addItem() throws Exception {
-        // Given
-        Checklist checklist = Checklist.findById(1l);
-        Item item = new Item();
-        // When
-        checklist.addItem(item);
-        // Then
-        assertThat(checklist.items).isNotEmpty();
-        assertThat(checklist.items).contains(item);
-    }
-
-    @Test
-    public void removeItem() throws Exception {
-        // Given
-        Checklist checklist = Checklist.findById(1l);
-        Item item = Item.findById(1l);
-        // When
-        checklist.removeItem(item);
-        // Then
-        assertThat(checklist.items).excludes(item);
-    }
-    
-    @Test
-    public void toJSON() throws Exception {
-        //Given
-        Checklist checklist = Checklist.findById(1l);
-        //When
-        JsonNode json = checklist.toJSON();
-        //Then
-        assertThat(json.get("title").asText()).isEqualTo("TODO");
-        assertThat(json.get("items").size()).isEqualTo(2);
-    }
-}
 
test/models/task/LineTest.java (deleted)
--- test/models/task/LineTest.java
@@ -1,28 +0,0 @@
-package models.task;
-
-import static org.fest.assertions.Assertions.assertThat;
-import static play.test.Helpers.fakeApplication;
-import static play.test.Helpers.running;
-
-import org.codehaus.jackson.JsonNode;
-import org.junit.Ignore;
-import org.junit.Test;
-
-public class LineTest {
-	
-	@Test
-    public void toJson() throws Exception {
-        running(fakeApplication(), new Runnable() {
-            @Override
-            public void run() {
-                // Given
-                Line line = Line.findById(1l);
-                // When
-                JsonNode json = line.toJSON();
-                // Then
-                assertThat(json.findValue("title").asText()).isEqualTo("Box");
-                assertThat(json.findValue("cards").size()).isEqualTo(3);
-            }
-        });
-    }
-}
 
test/models/task/TaskBoardTest.java (deleted)
--- test/models/task/TaskBoardTest.java
@@ -1,114 +0,0 @@
-package models.task;
-
-import static org.fest.assertions.Assertions.assertThat;
-import static play.test.Helpers.fakeApplication;
-import static play.test.Helpers.running;
-import models.Project;
-
-import org.codehaus.jackson.JsonNode;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import play.libs.Json;
-import controllers.ProjectApp;
-
-@Ignore
-public class TaskBoardTest {
-
-    @Test
-    public void create() throws Exception {
-        running(fakeApplication(), new Runnable() {
-            @Override
-            public void run() {
-                // Given
-                Project project = ProjectApp.getProject("hobi", "nForge4java");
-                // When
-                TaskBoard taskboard = TaskBoard.create(project);
-                // Then
-                assertThat(taskboard.id).isNotNull();
-                assertThat(taskboard.lines.size()).isEqualTo(5);
-                assertThat(taskboard.labels.size()).isEqualTo(10);
-                assertThat(taskboard.project).isEqualTo(project);
-            }
-        });
-    }
-
-    @Test
-    public void findByProject() throws Exception {
-        running(fakeApplication(), new Runnable() {
-            @Override
-            public void run() {
-                // Given
-                Project project = ProjectApp.getProject("hobi", "nForge4java");
-                // When
-                TaskBoard taskboard = TaskBoard.findByProject(project);
-                System.out.println(taskboard.labels);
-                // Then
-                assertThat(taskboard).isNotNull();
-                assertThat(taskboard.project).isEqualTo(project);
-            }
-        });
-    }
-
-    @Test
-    public void accecptJSON() throws Exception {
-        // Given
-        Project project = ProjectApp.getProject("hobi", "nForge4java");
-        JsonNode data = Json
-                .parse("[{'_id':'1','title':'BOX','cards':[{'_id':'2','title':'bbb','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00G'},{'_id':'3','title':'ccc','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00I'}],'$$hashKey':'004'},{'_id':'2','title':'TODO','cards':[{'_id':'4','title':'alpha','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00K'},{'_id':'6','title':'chaile','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00O'},{'_id':'1','title':'aaa','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00E'},{'_id':'7','title':'delta','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00Q'}],'$$hashKey':'006'},{'_id':'3','title':'Doing','cards':[{'_id':'5','title':'bravo','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00M'}],'$$hashKey':'008'},{'_id':'4','title':'Test','cards':[{'_id':'8','title':'check','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00S'},{'_id':'9','title':'test','body':[],'comment':[],'assignee':[],'labels':[],'checkList':{},'dueDate':{},'storyPoint':-1,'$$hashKey':'00U'}],'$$hashKey':'00A'},{'_id':'5','title':'Done','cards':[],'$$hashKey':'00C'}]");
-        // When
-        TaskBoard taskBoard = TaskBoard.findByProject(project);
-        taskBoard.accecptJSON(data);
-        // Then
-        assertThat(taskBoard.lines.size()).isEqualTo(5);
-
-    }
-
-    @Test
-    public void toJSON() throws Exception {
-        running(fakeApplication(), new Runnable() {
-            @Override
-            public void run() {
-                // Given
-                Project project = ProjectApp.getProject("hobi", "nForge4java");
-                TaskBoard taskBoard = TaskBoard.findByProject(project);
-                // When
-                JsonNode json = taskBoard.toJSON();
-                // Then
-                assertThat(json.size()).isEqualTo(5);
-            }
-        });
-    }
-
-    @Test
-    public void getLabel() throws Exception {
-        running(fakeApplication(), new Runnable() {
-            @Override
-            public void run() {
-                // Given
-                Project project = ProjectApp.getProject("hobi", "nForge4java");
-                TaskBoard taskBoard = TaskBoard.findByProject(project);
-                // When
-                JsonNode json = taskBoard.getLabel();
-                // Then
-                assertThat(json.size()).isEqualTo(2);
-            }
-        });
-    }
-
-    @Test
-    public void getMember() throws Exception {
-        running(fakeApplication(), new Runnable() {
-            @Override
-            public void run() {
-                // Given
-                Project project = ProjectApp.getProject("hobi", "nForge4java");
-                TaskBoard taskBoard = TaskBoard.findByProject(project);
-                // When
-                JsonNode json = taskBoard.getMember();
-                // Then
-                assertThat(json.size()).isEqualTo(2);
-            }
-        });
-    }
-}(No newline at end of file)
 
test/models/task/TaskCommentTest.java (deleted)
--- test/models/task/TaskCommentTest.java
@@ -1,32 +0,0 @@
-package models.task;
-
-import static org.fest.assertions.Assertions.assertThat;
-import static play.test.Helpers.fakeApplication;
-import static play.test.Helpers.running;
-
-import models.ModelTest;
-
-import org.codehaus.jackson.JsonNode;
-import org.junit.Test;
-
-public class TaskCommentTest extends ModelTest<TaskComment>{
-    @Test
-    public void findById() throws Exception {
-        //Given
-        //When
-        TaskComment comment = TaskComment.findById(1l);
-        //Then
-        assertThat(comment).isNotNull();
-        assertThat(comment.body).isEqualTo("test comment");
-    }
-    @Test
-    public void toJSON() throws Exception {
-        //Given
-        TaskComment comment = TaskComment.findById(1l);
-        //When
-        JsonNode json = comment.toJSON();
-        //Then
-        assertThat(json.get("body").asText()).isEqualTo("test comment");
-    }
-
-}
Add a comment
List