From 64a8a11d5dfd85910db4833e488e1c93f41f8e0c Mon Sep 17 00:00:00 2001
From: Mattias Mirhagen
Date: Fri, 15 Jan 2010 11:24:25 +0100
Subject: [PATCH] Added domain as a plugin
---
qanban-domain-plugin/QanbanDomain-test.launch | 11 +
qanban-domain-plugin/QanbanDomain.launch | 19 +
qanban-domain-plugin/QanbanDomain.tmproj | 73 ++
.../QanbanDomainGrailsPlugin.groovy | 50 ++
qanban-domain-plugin/application.properties | 6 +
qanban-domain-plugin/build.xml | 142 ++++
.../grails-app/conf/DataSource.groovy | 32 +
.../grails-app/conf/UrlMappings.groovy | 11 +
.../domain/se/qbranch/qanban/Board.groovy | 35 +
.../se/qbranch/qanban/BoardEvent.groovy | 43 ++
.../se/qbranch/qanban/BoardEventCreate.groovy | 49 ++
.../domain/se/qbranch/qanban/Card.groovy | 53 ++
.../domain/se/qbranch/qanban/CardEvent.groovy | 41 ++
.../se/qbranch/qanban/CardEventCreate.groovy | 98 +++
.../se/qbranch/qanban/CardEventDelete.groovy | 73 ++
.../se/qbranch/qanban/CardEventMove.groovy | 81 +++
.../qanban/CardEventSetAssignee.groovy | 57 ++
.../se/qbranch/qanban/CardEventUpdate.groovy | 80 +++
.../domain/se/qbranch/qanban/Event.groovy | 80 +++
.../domain/se/qbranch/qanban/Phase.groovy | 53 ++
.../se/qbranch/qanban/PhaseEvent.groovy | 39 +
.../se/qbranch/qanban/PhaseEventCreate.groovy | 82 +++
.../se/qbranch/qanban/PhaseEventDelete.groovy | 77 ++
.../se/qbranch/qanban/PhaseEventMove.groovy | 54 ++
.../se/qbranch/qanban/PhaseEventUpdate.groovy | 76 ++
.../domain/se/qbranch/qanban/Role.groovy | 41 ++
.../domain/se/qbranch/qanban/User.groovy | 62 ++
.../domain/se/qbranch/qanban/UserEvent.groovy | 38 +
.../se/qbranch/qanban/UserEventCreate.groovy | 80 +++
.../grails-app/migrations/changelog.xml | 4 +
.../se/qbranch/qanban/EventService.groovy | 29 +
.../grails-app/views/error.gsp | 54 ++
qanban-domain-plugin/ivy.xml | 28 +
qanban-domain-plugin/ivysettings.xml | 15 +
qanban-domain-plugin/plugin.xml | 36 +
.../scripts/DbDiffIncremental.groovy | 101 +++
qanban-domain-plugin/scripts/_Install.groovy | 10 +
.../scripts/_Uninstall.groovy | 5 +
qanban-domain-plugin/scripts/_Upgrade.groovy | 10 +
...e.qbranch.qanban.BoardEventCreateTests.xml | 10 +
.../TEST-se.qbranch.qanban.BoardTests.xml | 9 +
...se.qbranch.qanban.CardEventCreateTests.xml | 27 +
...se.qbranch.qanban.CardEventDeleteTests.xml | 15 +
...T-se.qbranch.qanban.CardEventMoveTests.xml | 44 ++
...ranch.qanban.CardEventSetAssigneeTests.xml | 15 +
.../TEST-se.qbranch.qanban.CardEventTests.xml | 9 +
...se.qbranch.qanban.CardEventUpdateTests.xml | 25 +
.../TEST-se.qbranch.qanban.CardTests.xml | 9 +
...ST-se.qbranch.qanban.EventServiceTests.xml | 9 +
.../TEST-se.qbranch.qanban.EventTests.xml | 11 +
...e.qbranch.qanban.PhaseEventCreateTests.xml | 16 +
...e.qbranch.qanban.PhaseEventDeleteTests.xml | 15 +
...-se.qbranch.qanban.PhaseEventMoveTests.xml | 15 +
...TEST-se.qbranch.qanban.PhaseEventTests.xml | 9 +
...e.qbranch.qanban.PhaseEventUpdateTests.xml | 15 +
.../TEST-se.qbranch.qanban.PhaseTests.xml | 16 +
...se.qbranch.qanban.UserEventCreateTests.xml | 21 +
.../test/reports/TESTS-TestSuites.xml | 360 ++++++++++
.../test/reports/html/all-tests.html | 115 +++
.../test/reports/html/allclasses-frame.html | 66 ++
.../test/reports/html/alltests-errors.html | 22 +
.../test/reports/html/alltests-fails.html | 22 +
.../test/reports/html/index.html | 19 +
.../test/reports/html/overview-frame.html | 18 +
.../test/reports/html/overview-summary.html | 41 ++
.../qanban/0_BoardEventCreateTests-err.txt | 2 +
.../qanban/0_BoardEventCreateTests-out.txt | 3 +
.../qanban/0_BoardEventCreateTests.html | 83 +++
.../se/qbranch/qanban/10_EventTests-err.txt | 2 +
.../se/qbranch/qanban/10_EventTests-out.txt | 4 +
.../html/se/qbranch/qanban/10_EventTests.html | 83 +++
.../qanban/11_PhaseEventCreateTests-err.txt | 4 +
.../qanban/11_PhaseEventCreateTests-out.txt | 5 +
.../qanban/11_PhaseEventCreateTests.html | 89 +++
.../qanban/12_PhaseEventDeleteTests-err.txt | 2 +
.../qanban/12_PhaseEventDeleteTests-out.txt | 8 +
.../qanban/12_PhaseEventDeleteTests.html | 83 +++
.../qanban/13_PhaseEventMoveTests-err.txt | 2 +
.../qanban/13_PhaseEventMoveTests-out.txt | 8 +
.../qanban/13_PhaseEventMoveTests.html | 83 +++
.../qbranch/qanban/14_PhaseEventTests-err.txt | 2 +
.../qbranch/qanban/14_PhaseEventTests-out.txt | 2 +
.../se/qbranch/qanban/14_PhaseEventTests.html | 83 +++
.../qanban/15_PhaseEventUpdateTests-err.txt | 2 +
.../qanban/15_PhaseEventUpdateTests-out.txt | 8 +
.../qanban/15_PhaseEventUpdateTests.html | 83 +++
.../se/qbranch/qanban/16_PhaseTests-err.txt | 4 +
.../se/qbranch/qanban/16_PhaseTests-out.txt | 5 +
.../html/se/qbranch/qanban/16_PhaseTests.html | 89 +++
.../qanban/17_UserEventCreateTests-err.txt | 6 +
.../qanban/17_UserEventCreateTests-out.txt | 6 +
.../qanban/17_UserEventCreateTests.html | 95 +++
.../se/qbranch/qanban/1_BoardTests-err.txt | 2 +
.../se/qbranch/qanban/1_BoardTests-out.txt | 2 +
.../html/se/qbranch/qanban/1_BoardTests.html | 83 +++
.../qanban/2_CardEventCreateTests-err.txt | 3 +
.../qanban/2_CardEventCreateTests-out.txt | 18 +
.../qanban/2_CardEventCreateTests.html | 86 +++
.../qanban/3_CardEventDeleteTests-err.txt | 2 +
.../qanban/3_CardEventDeleteTests-out.txt | 8 +
.../qanban/3_CardEventDeleteTests.html | 83 +++
.../qanban/4_CardEventMoveTests-err.txt | 5 +
.../qanban/4_CardEventMoveTests-out.txt | 31 +
.../qbranch/qanban/4_CardEventMoveTests.html | 92 +++
.../5_CardEventSetAssigneeTests-err.txt | 2 +
.../5_CardEventSetAssigneeTests-out.txt | 8 +
.../qanban/5_CardEventSetAssigneeTests.html | 83 +++
.../qbranch/qanban/6_CardEventTests-err.txt | 2 +
.../qbranch/qanban/6_CardEventTests-out.txt | 2 +
.../se/qbranch/qanban/6_CardEventTests.html | 83 +++
.../qanban/7_CardEventUpdateTests-err.txt | 3 +
.../qanban/7_CardEventUpdateTests-out.txt | 16 +
.../qanban/7_CardEventUpdateTests.html | 86 +++
.../se/qbranch/qanban/8_CardTests-err.txt | 2 +
.../se/qbranch/qanban/8_CardTests-out.txt | 2 +
.../html/se/qbranch/qanban/8_CardTests.html | 83 +++
.../qanban/9_EventServiceTests-err.txt | 2 +
.../qanban/9_EventServiceTests-out.txt | 2 +
.../qbranch/qanban/9_EventServiceTests.html | 83 +++
.../html/se/qbranch/qanban/package-frame.html | 75 ++
.../se/qbranch/qanban/package-summary.html | 78 ++
.../test/reports/html/stylesheet.css | 48 ++
...ranch.qanban.BoardEventCreateTests-err.txt | 1 +
...ranch.qanban.BoardEventCreateTests-out.txt | 2 +
...e.qbranch.qanban.BoardEventCreateTests.txt | 11 +
.../TEST-se.qbranch.qanban.BoardTests-err.txt | 1 +
.../TEST-se.qbranch.qanban.BoardTests-out.txt | 1 +
.../TEST-se.qbranch.qanban.BoardTests.txt | 10 +
...branch.qanban.CardEventCreateTests-err.txt | 2 +
...branch.qanban.CardEventCreateTests-out.txt | 17 +
...se.qbranch.qanban.CardEventCreateTests.txt | 28 +
...branch.qanban.CardEventDeleteTests-err.txt | 1 +
...branch.qanban.CardEventDeleteTests-out.txt | 7 +
...se.qbranch.qanban.CardEventDeleteTests.txt | 16 +
....qbranch.qanban.CardEventMoveTests-err.txt | 4 +
....qbranch.qanban.CardEventMoveTests-out.txt | 30 +
...T-se.qbranch.qanban.CardEventMoveTests.txt | 45 ++
...h.qanban.CardEventSetAssigneeTests-err.txt | 1 +
...h.qanban.CardEventSetAssigneeTests-out.txt | 7 +
...ranch.qanban.CardEventSetAssigneeTests.txt | 16 +
...T-se.qbranch.qanban.CardEventTests-err.txt | 1 +
...T-se.qbranch.qanban.CardEventTests-out.txt | 1 +
.../TEST-se.qbranch.qanban.CardEventTests.txt | 10 +
...branch.qanban.CardEventUpdateTests-err.txt | 2 +
...branch.qanban.CardEventUpdateTests-out.txt | 15 +
...se.qbranch.qanban.CardEventUpdateTests.txt | 26 +
.../TEST-se.qbranch.qanban.CardTests-err.txt | 1 +
.../TEST-se.qbranch.qanban.CardTests-out.txt | 1 +
.../TEST-se.qbranch.qanban.CardTests.txt | 10 +
...e.qbranch.qanban.EventServiceTests-err.txt | 1 +
...e.qbranch.qanban.EventServiceTests-out.txt | 1 +
...ST-se.qbranch.qanban.EventServiceTests.txt | 10 +
.../TEST-se.qbranch.qanban.EventTests-err.txt | 1 +
.../TEST-se.qbranch.qanban.EventTests-out.txt | 3 +
.../TEST-se.qbranch.qanban.EventTests.txt | 12 +
...ranch.qanban.PhaseEventCreateTests-err.txt | 3 +
...ranch.qanban.PhaseEventCreateTests-out.txt | 4 +
...e.qbranch.qanban.PhaseEventCreateTests.txt | 17 +
...ranch.qanban.PhaseEventDeleteTests-err.txt | 1 +
...ranch.qanban.PhaseEventDeleteTests-out.txt | 7 +
...e.qbranch.qanban.PhaseEventDeleteTests.txt | 16 +
...qbranch.qanban.PhaseEventMoveTests-err.txt | 1 +
...qbranch.qanban.PhaseEventMoveTests-out.txt | 7 +
...-se.qbranch.qanban.PhaseEventMoveTests.txt | 16 +
...-se.qbranch.qanban.PhaseEventTests-err.txt | 1 +
...-se.qbranch.qanban.PhaseEventTests-out.txt | 1 +
...TEST-se.qbranch.qanban.PhaseEventTests.txt | 10 +
...ranch.qanban.PhaseEventUpdateTests-err.txt | 1 +
...ranch.qanban.PhaseEventUpdateTests-out.txt | 7 +
...e.qbranch.qanban.PhaseEventUpdateTests.txt | 16 +
.../TEST-se.qbranch.qanban.PhaseTests-err.txt | 3 +
.../TEST-se.qbranch.qanban.PhaseTests-out.txt | 4 +
.../TEST-se.qbranch.qanban.PhaseTests.txt | 17 +
...branch.qanban.UserEventCreateTests-err.txt | 5 +
...branch.qanban.UserEventCreateTests-out.txt | 5 +
...se.qbranch.qanban.UserEventCreateTests.txt | 22 +
.../qanban/BoardEventCreateTests.groovy | 57 ++
.../unit/se/qbranch/qanban/BoardTests.groovy | 35 +
.../qanban/CardEventCreateTests.groovy | 174 +++++
.../qanban/CardEventDeleteTests.groovy | 151 ++++
.../qbranch/qanban/CardEventMoveTests.groovy | 201 ++++++
.../qanban/CardEventSetAssigneeTests.groovy | 163 +++++
.../se/qbranch/qanban/CardEventTests.groovy | 33 +
.../qanban/CardEventUpdateTests.groovy | 176 +++++
.../unit/se/qbranch/qanban/CardTests.groovy | 38 +
.../qbranch/qanban/EventServiceTests.groovy | 33 +
.../unit/se/qbranch/qanban/EventTests.groovy | 45 ++
.../qanban/PhaseEventCreateTests.groovy | 192 +++++
.../qanban/PhaseEventDeleteTests.groovy | 161 +++++
.../qbranch/qanban/PhaseEventMoveTests.groovy | 148 ++++
.../se/qbranch/qanban/PhaseEventTests.groovy | 33 +
.../qanban/PhaseEventUpdateTests.groovy | 134 ++++
.../unit/se/qbranch/qanban/PhaseTests.groovy | 63 ++
.../qanban/UserEventCreateTests.groovy | 138 ++++
.../web-app/WEB-INF/applicationContext.xml | 47 ++
.../web-app/WEB-INF/sitemesh.xml | 14 +
.../web-app/WEB-INF/tld/c.tld | 563 +++++++++++++++
.../web-app/WEB-INF/tld/fmt.tld | 671 ++++++++++++++++++
.../web-app/WEB-INF/tld/grails.tld | 551 ++++++++++++++
.../web-app/WEB-INF/tld/spring.tld | 311 ++++++++
200 files changed, 9393 insertions(+)
create mode 100644 qanban-domain-plugin/QanbanDomain-test.launch
create mode 100644 qanban-domain-plugin/QanbanDomain.launch
create mode 100644 qanban-domain-plugin/QanbanDomain.tmproj
create mode 100644 qanban-domain-plugin/QanbanDomainGrailsPlugin.groovy
create mode 100644 qanban-domain-plugin/application.properties
create mode 100644 qanban-domain-plugin/build.xml
create mode 100644 qanban-domain-plugin/grails-app/conf/DataSource.groovy
create mode 100644 qanban-domain-plugin/grails-app/conf/UrlMappings.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Board.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEvent.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEventCreate.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Card.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEvent.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventCreate.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventDelete.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventMove.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventSetAssignee.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventUpdate.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Event.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Phase.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEvent.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventCreate.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventDelete.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventMove.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventUpdate.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Role.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/User.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEvent.groovy
create mode 100644 qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEventCreate.groovy
create mode 100644 qanban-domain-plugin/grails-app/migrations/changelog.xml
create mode 100644 qanban-domain-plugin/grails-app/services/se/qbranch/qanban/EventService.groovy
create mode 100644 qanban-domain-plugin/grails-app/views/error.gsp
create mode 100644 qanban-domain-plugin/ivy.xml
create mode 100644 qanban-domain-plugin/ivysettings.xml
create mode 100644 qanban-domain-plugin/plugin.xml
create mode 100644 qanban-domain-plugin/scripts/DbDiffIncremental.groovy
create mode 100644 qanban-domain-plugin/scripts/_Install.groovy
create mode 100644 qanban-domain-plugin/scripts/_Uninstall.groovy
create mode 100644 qanban-domain-plugin/scripts/_Upgrade.groovy
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardEventCreateTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventCreateTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventDeleteTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventMoveTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventUpdateTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventServiceTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventCreateTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventDeleteTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventMoveTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventUpdateTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.UserEventCreateTests.xml
create mode 100644 qanban-domain-plugin/test/reports/TESTS-TestSuites.xml
create mode 100644 qanban-domain-plugin/test/reports/html/all-tests.html
create mode 100644 qanban-domain-plugin/test/reports/html/allclasses-frame.html
create mode 100644 qanban-domain-plugin/test/reports/html/alltests-errors.html
create mode 100644 qanban-domain-plugin/test/reports/html/alltests-fails.html
create mode 100644 qanban-domain-plugin/test/reports/html/index.html
create mode 100644 qanban-domain-plugin/test/reports/html/overview-frame.html
create mode 100644 qanban-domain-plugin/test/reports/html/overview-summary.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-frame.html
create mode 100644 qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-summary.html
create mode 100644 qanban-domain-plugin/test/reports/html/stylesheet.css
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-err.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-out.txt
create mode 100644 qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests.txt
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardEventCreateTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventCreateTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventDeleteTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventMoveTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventSetAssigneeTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventUpdateTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/CardTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/EventServiceTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/EventTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventCreateTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventDeleteTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventMoveTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventUpdateTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseTests.groovy
create mode 100644 qanban-domain-plugin/test/unit/se/qbranch/qanban/UserEventCreateTests.groovy
create mode 100644 qanban-domain-plugin/web-app/WEB-INF/applicationContext.xml
create mode 100644 qanban-domain-plugin/web-app/WEB-INF/sitemesh.xml
create mode 100644 qanban-domain-plugin/web-app/WEB-INF/tld/c.tld
create mode 100644 qanban-domain-plugin/web-app/WEB-INF/tld/fmt.tld
create mode 100644 qanban-domain-plugin/web-app/WEB-INF/tld/grails.tld
create mode 100644 qanban-domain-plugin/web-app/WEB-INF/tld/spring.tld
diff --git a/qanban-domain-plugin/QanbanDomain-test.launch b/qanban-domain-plugin/QanbanDomain-test.launch
new file mode 100644
index 0000000..ae8dbd3
--- /dev/null
+++ b/qanban-domain-plugin/QanbanDomain-test.launch
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/QanbanDomain.launch b/qanban-domain-plugin/QanbanDomain.launch
new file mode 100644
index 0000000..80bc868
--- /dev/null
+++ b/qanban-domain-plugin/QanbanDomain.launch
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/QanbanDomain.tmproj b/qanban-domain-plugin/QanbanDomain.tmproj
new file mode 100644
index 0000000..2d19a7e
--- /dev/null
+++ b/qanban-domain-plugin/QanbanDomain.tmproj
@@ -0,0 +1,73 @@
+
+
+
+
+ documents
+
+
+ filename
+ QanbanDomain.launch
+
+
+ filename
+ build.xml
+
+
+ name
+ grails-app
+ regexFolderFilter
+ !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
+ sourceDirectory
+ grails-app
+
+
+ name
+ test
+ regexFolderFilter
+ !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
+ sourceDirectory
+ test
+
+
+ name
+ lib
+ regexFolderFilter
+ !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
+ sourceDirectory
+ lib
+
+
+ name
+ scripts
+ regexFolderFilter
+ !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
+ sourceDirectory
+ scripts
+
+
+ name
+ src
+ regexFolderFilter
+ !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
+ sourceDirectory
+ src
+
+
+ name
+ web-app
+ regexFolderFilter
+ !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$
+ sourceDirectory
+ web-app
+
+
+ fileHierarchyDrawerWidth
+ 200
+ metaData
+
+ showFileHierarchyDrawer
+
+ windowFrame
+ {{237, 127}, {742, 553}}
+
+
diff --git a/qanban-domain-plugin/QanbanDomainGrailsPlugin.groovy b/qanban-domain-plugin/QanbanDomainGrailsPlugin.groovy
new file mode 100644
index 0000000..b09d7f7
--- /dev/null
+++ b/qanban-domain-plugin/QanbanDomainGrailsPlugin.groovy
@@ -0,0 +1,50 @@
+class QanbanDomainGrailsPlugin {
+ // the plugin version
+ def version = "0.1"
+ // the version or versions of Grails the plugin is designed for
+ def grailsVersion = "1.1.1 > *"
+ // the other plugins this plugin depends on
+ def dependsOn = [acegi:"* > 0.5.2", hibernate:"1.1.1"]
+ // resources that are excluded from plugin packaging
+ def pluginExcludes = [
+ "grails-app/views/error.gsp"
+ ]
+
+ // TODO Fill in these fields
+ def author = "Mattias Mirhagen"
+ def authorEmail = "mattias.mirhagen@qbranch.se"
+ def title = "Qanban Domain"
+ def description = '''\\
+This plugin hold the domain model for the Qanban application
+'''
+
+ // URL to the plugin's documentation
+ def documentation = "http://grails.org/QanbanDomain+Plugin"
+
+ def doWithSpring = {
+ // TODO Implement runtime spring config (optional)
+ }
+
+ def doWithApplicationContext = { applicationContext ->
+ // TODO Implement post initialization spring config (optional)
+ }
+
+ def doWithWebDescriptor = { xml ->
+ // TODO Implement additions to web.xml (optional)
+ }
+
+ def doWithDynamicMethods = { ctx ->
+ // TODO Implement registering dynamic methods to classes (optional)
+ }
+
+ def onChange = { event ->
+ // TODO Implement code that is executed when any artefact that this plugin is
+ // watching is modified and reloaded. The event contains: event.source,
+ // event.application, event.manager, event.ctx, and event.plugin.
+ }
+
+ def onConfigChange = { event ->
+ // TODO Implement code that is executed when the project configuration changes.
+ // The event is the same as for 'onChange'.
+ }
+}
diff --git a/qanban-domain-plugin/application.properties b/qanban-domain-plugin/application.properties
new file mode 100644
index 0000000..31e2fd5
--- /dev/null
+++ b/qanban-domain-plugin/application.properties
@@ -0,0 +1,6 @@
+#utf-8
+#Fri Jan 15 10:59:54 CET 2010
+plugins.acegi=0.5.2
+app.grails.version=1.1.1
+plugins.hibernate=1.1.1
+app.name=QanbanDomain
diff --git a/qanban-domain-plugin/build.xml b/qanban-domain-plugin/build.xml
new file mode 100644
index 0000000..26d7437
--- /dev/null
+++ b/qanban-domain-plugin/build.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/grails-app/conf/DataSource.groovy b/qanban-domain-plugin/grails-app/conf/DataSource.groovy
new file mode 100644
index 0000000..daf1f11
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/conf/DataSource.groovy
@@ -0,0 +1,32 @@
+dataSource {
+ pooled = true
+ driverClassName = "org.hsqldb.jdbcDriver"
+ username = "sa"
+ password = ""
+}
+hibernate {
+ cache.use_second_level_cache=true
+ cache.use_query_cache=true
+ cache.provider_class='com.opensymphony.oscache.hibernate.OSCacheProvider'
+}
+// environment specific settings
+environments {
+ development {
+ dataSource {
+ dbCreate = "create-drop" // one of 'create', 'create-drop','update'
+ url = "jdbc:hsqldb:mem:devDB"
+ }
+ }
+ test {
+ dataSource {
+ dbCreate = "update"
+ url = "jdbc:hsqldb:mem:testDb"
+ }
+ }
+ production {
+ dataSource {
+ dbCreate = "update"
+ url = "jdbc:hsqldb:file:prodDb;shutdown=true"
+ }
+ }
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/grails-app/conf/UrlMappings.groovy b/qanban-domain-plugin/grails-app/conf/UrlMappings.groovy
new file mode 100644
index 0000000..41daf57
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/conf/UrlMappings.groovy
@@ -0,0 +1,11 @@
+class UrlMappings {
+ static mappings = {
+ "/$controller/$action?/$id?"{
+ constraints {
+ // apply constraints here
+ }
+ }
+ "/"(view:"/index")
+ "500"(view:'/error')
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Board.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Board.groovy
new file mode 100644
index 0000000..d40c59b
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Board.groovy
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class Board {
+
+ static constraints = {
+ domainId( unique: true, blank: false )
+ title( unique: true, blank: false )
+ }
+
+ static hasMany = [phases:Phase]
+ List phases = []
+
+ String domainId
+ String title
+
+ Date dateCreated
+ Date lastUpdated
+
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEvent.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEvent.groovy
new file mode 100644
index 0000000..51f40e1
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEvent.groovy
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package se.qbranch.qanban
+
+class BoardEvent extends Event{
+
+ static constraints = {
+ }
+
+ transient public String checkCurrentTitle() {
+ if( domainId ){
+ def board = Board.findByDomainId(domainId)
+ if (board){
+ return board.title
+ }else{
+ return 'The board does not exist'
+ }
+ }
+ else return "This should not be a valid output"
+ }
+
+ public boolean doesDomainExist(){
+ return Board.findByDomainId(domainId) != null
+ }
+
+ public List getItems() {
+ return [dateCreated, user, getBoard().title]
+ }
+
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEventCreate.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEventCreate.groovy
new file mode 100644
index 0000000..29f8042
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/BoardEventCreate.groovy
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class BoardEventCreate extends BoardEvent{
+
+ static constraints = {
+ title ( nullable: false, blank: false )
+ }
+
+ static transients = ['board','items']
+
+ Board board
+ String title
+
+ public Board getBoard(){
+ if( !board && domainId )
+ board = Board.findByDomainId(domainId)
+ return board
+ }
+
+ def beforeInsert = {
+ generateDomainId('board','create')
+ setEventCreator(user)
+ }
+
+ def process(){
+ board = new Board()
+ board.domainId = domainId
+ board.title = title
+ board.save()
+ }
+
+
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Card.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Card.groovy
new file mode 100644
index 0000000..eeac91e
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Card.groovy
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class Card {
+
+ static constraints = {
+ title(blank:false, length:1..50)
+ description( blank: true, nullable: true)
+ caseNumber( blank: false )
+ assignee(nullable: true)
+ phase()
+ domainId( unique: true, blank: false )
+ }
+
+
+ static mapping = {
+ columns {
+ description type:'text'
+ }
+ }
+
+
+ String domainId
+ String title
+ String description
+ String caseNumber
+
+ Date dateCreated
+ Date lastUpdated
+
+ User assignee
+ Phase phase
+
+ public String toString() {
+ return "$title"
+ }
+
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEvent.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEvent.groovy
new file mode 100644
index 0000000..f0edba1
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEvent.groovy
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class CardEvent extends Event {
+
+ static constraints = {
+ // TODO: Check if there is a way to let this override the inherited contraint?
+ // user(nullable: false)
+ }
+
+ transient public String checkCurrentTitle() {
+ if( domainId ){
+ def card = Card.findByDomainId(domainId)
+ if (card){
+ return card.title
+ }else{
+ return CardEventDelete.findByDomainId(domainId).title
+ }
+ }
+ else return "This should not be a valid output"
+ }
+
+ transient boolean doesDomainExist(){
+ return Card.findByDomainId(domainId) != null
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventCreate.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventCreate.groovy
new file mode 100644
index 0000000..e72554d
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventCreate.groovy
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+
+class CardEventCreate extends CardEvent {
+
+ static constraints = {
+ assignee ( nullable : true )
+ title( blank: false, length: 1..50 )
+ description(blank: true, nullable: true)
+ phaseDomainId( nullable: false, blank: false )
+ caseNumber( blank: false )
+ }
+
+ static mapping = {
+ columns {
+ description type:'text'
+ }
+ }
+
+ static transients = ['card','phase','board','items']
+
+ Card card
+
+ String title
+ String description
+ String caseNumber
+ String phaseDomainId
+
+ //TODO: Change to checksum connections?
+ User assignee
+
+ public List getItems() {
+ return [dateCreated, user, getCard().title]
+ }
+
+ public Phase getPhase() {
+ def phase
+
+ if( phaseDomainId ){
+ phase = Phase.findByDomainId(phaseDomainId)
+ }
+ return phase
+ }
+
+ public Card getCard(){
+ if( !card && domainId ){
+ card = Card.findByDomainId(domainId)
+ if(!card) {
+ card = CardEventDelete.findByDomainId(domainId).card
+ }
+ }
+ return card
+ }
+
+ //TODO: Cleanup, check lazy settings.
+ public Board getBoard(){
+ Phase.findByDomainId(phaseDomainId).board
+ }
+
+ def beforeInsert = {
+ generateDomainId(title, caseNumber)
+ setEventCreator(user)
+ }
+
+ def process(){
+ def phase = getPhase()
+ card = new Card()
+ card.domainId = domainId
+ card.title = title
+ card.phase = phase
+ card.description = description
+ card.caseNumber = caseNumber
+ card.assignee = assignee
+ phase.addToCards(card)
+ card.save()
+ }
+
+
+ String toString() {
+ return "$dateCreated: $user created the card"
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventDelete.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventDelete.groovy
new file mode 100644
index 0000000..7dbf061
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventDelete.groovy
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class CardEventDelete extends CardEvent {
+
+ static constraints = {
+ assignee ( nullable : true )
+ title( nullable: true )
+ description( nullable: true)
+ phaseDomainId( nullable: true )
+ phasePos ( nullable: true )
+ caseNumber( nullable: true )
+ }
+
+ static mapping = {
+ columns {
+ description type:'text'
+ }
+ }
+
+ static transients = ['card','items']
+
+ Card card
+
+ String title
+ String description
+ String caseNumber
+ String phaseDomainId
+ Integer phasePos
+ User assignee
+
+ public List getItems() {
+ return [getCard().title]
+ }
+
+ public Card getCard(){
+ if(!card && domainId) {
+ card = new Card(title: title, description: description, caseNumber: caseNumber, phase: Phase.findByDomainId(phaseDomainId))
+ }
+ return card
+ }
+
+ transient beforeInsert = {
+ domainId = card.domainId
+ title = card.title
+ description = card.description
+ caseNumber = card.caseNumber
+ phaseDomainId = card.phase.domainId
+ phasePos = card.phase.board.phases.indexOf(card)
+ assignee = card.assignee
+ setEventCreator(user)
+ }
+
+ transient process(){
+ card.phase.cards.remove(card)
+ card.delete(flush:true)
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventMove.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventMove.groovy
new file mode 100644
index 0000000..9598210
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventMove.groovy
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class CardEventMove extends CardEvent {
+
+ static constraints = {
+ phaseDomainId ( nullable: true, blank: false )
+ newCardIndex ( nullable: false, min: 0)
+ }
+
+ static transients = ['card','newPhase','items']
+ Card card
+ Phase newPhase
+
+ String phaseDomainId
+ Integer newCardIndex
+
+ public List getItems() {
+ return [dateCreated, user, getCard().title, getNewPhase().title]
+ }
+
+ public Card getCard(){
+ if( !card && domainId ){
+ card = Card.findByDomainId(domainId)
+ if(!card) {
+ card = CardEventDelete.findByDomainId(domainId).card
+ }
+ }
+ return card
+ }
+
+ public Phase getNewPhase(){
+ if( !newPhase && phaseDomainId ){
+ newPhase = Phase.findByDomainId(phaseDomainId)
+ if(!newPhase) {
+ newPhase = PhaseEventDelete.findByDomainId(phaseDomainId).phase
+ }
+ }
+ return newPhase
+ }
+
+
+ transient beforeInsert = {
+ domainId = card.domainId
+ phaseDomainId = newPhase.domainId
+ setEventCreator(user)
+ }
+
+ transient process = {
+
+ card.phase.cards.remove(card)
+ newPhase.cards.add(newCardIndex, card)
+ card.phase = newPhase
+ card.lastUpdated = new Date()
+ card.save(flush:true)
+
+ }
+
+ String toString(){
+ def phase = Phase.findByDomainId(phaseDomainId)
+ if (phase)
+ return "$dateCreated: $user moved the card to $phase.title"
+ else
+ return "$dateCreated: $user moved the card to a deleted phase"
+ }
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventSetAssignee.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventSetAssignee.groovy
new file mode 100644
index 0000000..ce58620
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventSetAssignee.groovy
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class CardEventSetAssignee extends CardEvent {
+
+ static constraints = {
+ newAssignee ( nullable: true )
+ }
+
+ static transients = ['card','items']
+ Card card
+
+ User newAssignee
+
+ public List getItems() {
+ return [dateCreated, user, newAssignee]
+ }
+
+ public Card getCard(){
+ if( !card && domainId ){
+ card = Card.findByDomainId(domainId)
+ if(!card) {
+ card = CardEventDelete.findByDomainId(domainId).card
+ }
+ }
+ return card
+ }
+
+ transient beforeInsert = {
+ domainId = card.domainId
+ setEventCreator(user)
+ }
+
+ transient process(){
+ card.assignee = newAssignee
+ card.save()
+ }
+
+ String toString(){
+ return "$dateCreated: $user set the assignee to $newAssignee"
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventUpdate.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventUpdate.groovy
new file mode 100644
index 0000000..7089245
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/CardEventUpdate.groovy
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class CardEventUpdate extends CardEvent {
+
+ // TODO: Validera så att eventen inte sparas om inget värde har ändrats
+
+ static constraints = {
+ title( blank: false, length: 1..50)
+ description( blank: true, nullable: true )
+ caseNumber( blank: false)
+ }
+
+
+ static mapping = {
+ columns {
+ description type:'text'
+ }
+ }
+
+ static transients = ['card','items']
+ Card card
+
+ String title
+ String description
+ String caseNumber
+
+ public List getItems() {
+ return [dateCreated, user, getCard().title]
+ }
+
+ public Card getCard(){
+ if( !card && domainId ){
+ card = Card.findByDomainId(domainId)
+ if(!card) {
+ card = CardEventDelete.findByDomainId(domainId).card
+ }
+ }
+ return card
+ }
+
+ public void setCard(card){
+ this.card = card
+ title = card.title
+ description = card.description
+ caseNumber = card.caseNumber
+ }
+
+ transient beforeInsert = {
+ domainId = card.domainId
+ setEventCreator(user)
+ }
+
+ transient process(){
+
+ card.title = title
+ card.description = description
+ card.caseNumber = caseNumber
+ card.save()
+ }
+
+ String toString(){
+ return "$dateCreated: $user updated the card info"
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Event.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Event.groovy
new file mode 100644
index 0000000..b6ea0d5
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Event.groovy
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import org.codehaus.groovy.grails.plugins.codecs.MD5Codec as Codec
+
+class Event implements Comparable {
+
+ static constraints = {
+ domainId( nullable:true, blank: false )
+ userDomainId(nullable: true)
+ user(nullable: true)
+ }
+
+ static transients = ['items','user','eventCreator']
+ User user
+
+ Date dateCreated
+ String domainId
+ String userDomainId
+
+ public List getItems() {
+ return []
+ }
+
+ public void setEventCreator(user){
+ userDomainId = user.domainId
+ }
+
+ public User getUser(){
+ if( !user && userDomainId ){
+ return user = User.findByDomainId(userDomainId)
+ }
+ return user
+ }
+
+ def generateDomainId( Object[] notNullableProperties ){
+ domainId = Codec.encode( new Date().time + notNullableProperties.toString() )
+ }
+
+ int compareTo(Object o) {
+ if (o instanceof Event) {
+ Event event = (Event) o
+ final int BEFORE = -1;
+ final int EQUAL = 0;
+ final int AFTER = 1;
+
+ if(this.dateCreated < event.dateCreated) return AFTER
+ if(this.dateCreated > event.dateCreated) return BEFORE
+
+ return EQUAL
+ }
+
+ }
+
+ boolean equals(Object o) {
+ if(o instanceof Event) {
+ Event event = (Event) o
+ if(this.id == event.id)
+ return true
+ }
+ return false
+ }
+
+
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Phase.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Phase.groovy
new file mode 100644
index 0000000..b6c2b5c
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Phase.groovy
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class Phase {
+
+ static constraints = {
+ title(nullable: false, blank: false)
+ cardLimit(nullable: false, min: 0, validator:{ limit, phaseInstance ->
+ if( limit != 0 && limit < phaseInstance.cards.size() )
+ return ['phase.cardLimit.lessThanCardsSize', limit]
+ })
+ domainId( nullable: false, unique: true, blank: false)
+ }
+
+ static hasMany = [cards:Card]
+
+ String title
+ Board board
+ List cards = []
+ Integer cardLimit
+ String domainId
+
+ Date dateCreated
+ Date lastUpdated
+
+ boolean equals(Object o) {
+ if(o instanceof Phase) {
+ Phase p = (Phase) o
+ if(this.id == p.id)
+ return true
+ }
+ return false
+ }
+
+ public String toString() {
+ return "$title"
+ }
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEvent.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEvent.groovy
new file mode 100644
index 0000000..8e6bf99
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEvent.groovy
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class PhaseEvent extends Event {
+
+ static constraints = {
+ }
+
+ transient public String checkCurrentTitle() {
+ if( domainId ){
+ def phase = Phase.findByDomainId(domainId)
+ if (phase){
+ return phase.title
+ }else{
+ return PhaseEventDelete.findByDomainId(domainId).title
+ }
+ }
+ else return "This should not be a valid output"
+ }
+
+ public boolean doesDomainExist(){
+ return Phase.findByDomainId(domainId) != null
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventCreate.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventCreate.groovy
new file mode 100644
index 0000000..fad06cf
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventCreate.groovy
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import org.codehaus.groovy.grails.plugins.codecs.MD5Codec
+
+class PhaseEventCreate extends PhaseEvent {
+
+ static constraints = {
+ cardLimit ( nullable: false, min : 0 )
+ phasePos ( nullable: false )
+ title(nullable: false, blank: false)
+ boardDomainId ( nullable: true )
+ }
+
+ static transients = ['board','phase','items']
+ Phase phase
+ Board board
+
+ String title
+ Integer cardLimit
+ Integer phasePos
+ String boardDomainId
+
+ public List getItems() {
+ return [getPhase().title]
+ }
+
+ public Phase getPhase(){
+ if( !phase && domainId ){
+ phase = Phase.findByDomainId(domainId)
+ if(!phase) {
+ phase = PhaseEventDelete.findByDomainId(domainId).phase
+ }
+ }
+ return phase
+ }
+
+ public Board getBoard(){
+ if( !board && boardDomainId){
+ board = Board.findByDomainId(boardDomainId)
+ }else if( board )(
+ board = Board.get(board.id)
+ )
+ return board
+ }
+
+ transient beforeInsert = {
+ generateDomainId(title, board )
+ boardDomainId = board.domainId
+ setEventCreator(user)
+ }
+
+ transient process = {
+
+ phase = new Phase(
+ title: title,
+ board: board,
+ cardLimit: cardLimit,
+ domainId: domainId
+ )
+ // Board.get() because GORM doesn't let us persist transient values
+ Board.get(board.id).phases.add(phasePos, phase)
+
+ phase.save()
+
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventDelete.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventDelete.groovy
new file mode 100644
index 0000000..c790c60
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventDelete.groovy
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class PhaseEventDelete extends PhaseEvent {
+
+ static constraints = {
+ cardLimit ( nullable: true )
+ title ( nullable: true )
+ boardDomainId ( nullable: true )
+ phasePos ( nullable: true )
+ }
+
+ static transients = ['phase','items','board']
+
+ Phase phase
+ Board board
+
+ String title
+ Integer cardLimit
+ Integer phasePos
+ String boardDomainId
+
+ public List getItems() {
+ return [getPhase().title]
+ }
+
+ public Phase getPhase(){
+ if( !phase && domainId ){
+ phase = new Phase(title: title, board: board, cardLimit: cardLimit);
+ }
+ return phase
+ }
+
+ public void setPhase(phase){
+ this.phase = phase
+ this.board = phase.board
+ }
+
+ public Board getBoard(){
+ if( !board && boardDomainId ){
+ board = Board.findByDomainId(boardDomainId)
+ }
+ return board
+ }
+
+ transient beforeInsert = {
+ domainId = phase.domainId
+ title = phase.title
+ boardDomainId = phase.board.domainId
+ cardLimit = phase.cardLimit
+ phasePos = Board.get(board.id).phases.indexOf(phase)
+ setEventCreator(user)
+ }
+
+ transient process(){
+ //board.phases.remove(phase)
+ board.removeFromPhases(phase)
+ phase.delete()
+
+
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventMove.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventMove.groovy
new file mode 100644
index 0000000..41c63d8
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventMove.groovy
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class PhaseEventMove extends PhaseEvent {
+
+ static constraints = {
+ phasePos (min: 0, nullable: false, validator:{ val, obj ->
+
+ return ( val < obj.phase.board.phases.size() )
+
+ })
+ }
+
+ static transients = ['phase']
+ Phase phase
+
+ Integer phasePos
+
+ public Phase getPhase(){
+ if( !phase && domainId ){
+ phase = Phase.findByDomainId(domainId)
+ if(!phase) {
+ phase = PhaseEventDelete.findByDomainId(domainId).phase
+ }
+ }
+ return phase
+ }
+
+ transient beforeInsert = {
+ domainId = phase.domainId
+ setEventCreator(user)
+ }
+
+ transient process(){
+ phase.board.phases.remove(phase)
+ phase.board.phases.add(phasePos, phase)
+ phase.board.save()
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventUpdate.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventUpdate.groovy
new file mode 100644
index 0000000..0c76b6c
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/PhaseEventUpdate.groovy
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class PhaseEventUpdate extends PhaseEvent {
+
+ // TODO: Validera så att eventen inte sparas om inget värde har ändrats
+
+ static constraints = {
+ title ( nullable: false, blank: false )
+ cardLimit ( nullable: false, min : 0 )
+ }
+
+ static transients = ['phase','board','items']
+
+ Phase phase
+
+ String title
+ Integer cardLimit
+
+ public List getItems() {
+ return [getPhase().title]
+ }
+
+ public Phase getPhase(){
+ if( !phase && domainId ){
+ phase = Phase.findByDomainId(domainId)
+ if(!phase) {
+ phase = PhaseEventDelete.findByDomainId(domainId).phase
+ }
+ }
+ return phase
+ }
+
+ public void setPhase(phase){
+ this.phase = phase
+ }
+
+ //TODO: Cleanup, check lazy settings.
+ public Board getBoard(){
+ Phase.get(phase.id).board
+ }
+
+ transient beforeInsert = {
+ domainId = Phase.get(phase.id).domainId
+ setEventCreator(user)
+ }
+
+ transient void populateFromPhase(){
+ if( phase ){
+ title = phase.title
+ cardLimit = phase.cardLimit
+ }
+ }
+ transient process( ) {
+
+ phase.title = title
+ phase.cardLimit = cardLimit
+ phase.save()
+
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Role.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Role.groovy
new file mode 100644
index 0000000..e617978
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/Role.groovy
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import se.qbranch.qanban.User
+
+/**
+ * Authority domain class.
+ */
+class Role {
+
+ static constraints = {
+ authority(blank: false, unique: true)
+ description()
+ }
+
+ static hasMany = [people: User]
+
+ String description
+ /** ROLE String */
+ String authority
+
+ public boolean equals(obj){
+ return ( obj instanceof Role && obj.id == this.id )
+ }
+
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/User.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/User.groovy
new file mode 100644
index 0000000..71eb486
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/User.groovy
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import se.qbranch.qanban.Role
+
+/**
+ * User domain class.
+ */
+class User {
+
+ static constraints = {
+ username(blank: false, unique: true)
+ userRealName(blank: false)
+ passwd( nullable: false, blank: false, validator:{ val, obj ->
+ if( val != obj.passwdRepeat ){
+ return ['userEventCreate.passwd.notEqualRepeat']
+ }
+ })
+ enabled()
+ domainId( nullable: false, blank: false, unique: true)
+ }
+
+ static transients = ['pass','passwdRepeat']
+ static hasMany = [authorities: Role]
+ static belongsTo = Role
+
+ String domainId
+ String username
+ String userRealName
+ /** MD5 Password */
+ String passwd
+ boolean enabled
+
+ String email
+ boolean emailShow
+
+ String description = ''
+
+ /** plain password to create a MD5 password */
+ String pass = '[secret]'
+ String passwdRepeat
+
+
+ String toString(){
+ return userRealName
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEvent.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEvent.groovy
new file mode 100644
index 0000000..d7dc67a
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEvent.groovy
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package se.qbranch.qanban
+
+class UserEvent extends Event{
+
+ static constraints = {
+ }
+
+ transient public String checkCurrentTitle() {
+ if( domainId ){
+ def user = User.findByDomainId(domainId)
+ if (user){
+ return user.userRealName
+ }else{
+ return 'The user does not exist'
+ }
+ }
+ else return "This should not be a valid output"
+ }
+
+ public boolean doesDomainExist(){
+ return User.findByDomainId(domainId) != null
+ }
+}
diff --git a/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEventCreate.groovy b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEventCreate.groovy
new file mode 100644
index 0000000..f55fa8f
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/domain/se/qbranch/qanban/UserEventCreate.groovy
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package se.qbranch.qanban
+
+class UserEventCreate extends UserEvent {
+
+ def authenticateService
+
+ static constraints = {
+ username(blank: false, unique: true)
+ userRealName(blank: false)
+ email(nullable: false, blank: false, email:true)
+ enabled( nullable: true)
+ emailShow( nullable: true)
+ passwd( nullable: false, blank: false, validator:{ val, obj ->
+ if( val != obj.passwdRepeat ){
+ return ['userEventCreate.passwd.notEqualRepeat']
+ }
+ })
+ }
+
+ static transients = ['list','passwdRepeat']
+
+ static mapping = {
+ columns {
+ description type:'text'
+ }
+ }
+
+ String username
+ String userRealName
+ String email
+ boolean enabled = true
+ boolean emailShow = true
+ String description = ''
+ String passwd
+ String passwdRepeat
+
+ public List getItems() {
+ return [dateCreated, user]
+ }
+
+ def beforeInsert = {
+ generateDomainId(username,userRealName,email)
+ passwd = authenticateService.encodePassword(passwd)
+ passwdRepeat = authenticateService.encodePassword(passwdRepeat)
+ userDomainId = domainId // You create yourself
+ }
+
+ def populateFromUser(){
+ this.properties = user.properties['username','userRealName','email','enabled','emailShow','description','passwd','passwdRepeat']
+ }
+
+ def process(){
+ user = new User()
+ user.properties = this.properties['username','userRealName','email','enabled','emailShow','description','passwd','passwdRepeat','domainId']
+
+ // Gives every user the admin role, this is a temporary fix until a user manager is implemented
+ Role.list().each{ role ->
+ role.addToPeople(user)
+ }
+
+
+ user.save()
+ }
+
+}
diff --git a/qanban-domain-plugin/grails-app/migrations/changelog.xml b/qanban-domain-plugin/grails-app/migrations/changelog.xml
new file mode 100644
index 0000000..9f33eaf
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/migrations/changelog.xml
@@ -0,0 +1,4 @@
+
+
diff --git a/qanban-domain-plugin/grails-app/services/se/qbranch/qanban/EventService.groovy b/qanban-domain-plugin/grails-app/services/se/qbranch/qanban/EventService.groovy
new file mode 100644
index 0000000..817d528
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/services/se/qbranch/qanban/EventService.groovy
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+class EventService {
+
+ boolean transactional = true
+
+ def persist(event) {
+ if( event && event.save() ){
+ event.process()
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/grails-app/views/error.gsp b/qanban-domain-plugin/grails-app/views/error.gsp
new file mode 100644
index 0000000..cfc512a
--- /dev/null
+++ b/qanban-domain-plugin/grails-app/views/error.gsp
@@ -0,0 +1,54 @@
+
+
+ Grails Runtime Exception
+
+
+
+
+ Grails Runtime Exception
+ Error Details
+
+
+
Error ${request.'javax.servlet.error.status_code'}: ${request.'javax.servlet.error.message'.encodeAsHTML()}
+
Servlet: ${request.'javax.servlet.error.servlet_name'}
+
URI: ${request.'javax.servlet.error.request_uri'}
+
+ Exception Message: ${exception.message?.encodeAsHTML()}
+ Caused by: ${exception.cause?.message?.encodeAsHTML()}
+ Class: ${exception.className}
+ At Line: [${exception.lineNumber}]
+ Code Snippet:
+
+
+ ${cs?.encodeAsHTML()}
+
+
+
+
+
+ Stack Trace
+
+
+
+
\ No newline at end of file
diff --git a/qanban-domain-plugin/ivy.xml b/qanban-domain-plugin/ivy.xml
new file mode 100644
index 0000000..aad7dbd
--- /dev/null
+++ b/qanban-domain-plugin/ivy.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/ivysettings.xml b/qanban-domain-plugin/ivysettings.xml
new file mode 100644
index 0000000..5972c9a
--- /dev/null
+++ b/qanban-domain-plugin/ivysettings.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/plugin.xml b/qanban-domain-plugin/plugin.xml
new file mode 100644
index 0000000..24f330f
--- /dev/null
+++ b/qanban-domain-plugin/plugin.xml
@@ -0,0 +1,36 @@
+
+ Mattias Mirhagen
+ mattias.mirhagen@qbranch.se
+ Qanban Domain
+ \
+This plugin hold the domain model for the Qanban application
+
+ http://grails.org/QanbanDomain+Plugin
+
+ se.qbranch.qanban.PhaseEventCreate
+ se.qbranch.qanban.Card
+ se.qbranch.qanban.PhaseEvent
+ se.qbranch.qanban.CardEventUpdate
+ se.qbranch.qanban.CardEventDelete
+ se.qbranch.qanban.CardEventMove
+ se.qbranch.qanban.Event
+ se.qbranch.qanban.Phase
+ se.qbranch.qanban.PhaseEventUpdate
+ se.qbranch.qanban.Board
+ se.qbranch.qanban.UserEvent
+ se.qbranch.qanban.BoardEvent
+ se.qbranch.qanban.BoardEventCreate
+ se.qbranch.qanban.Role
+ se.qbranch.qanban.CardEventCreate
+ se.qbranch.qanban.CardEvent
+ se.qbranch.qanban.UserEventCreate
+ se.qbranch.qanban.PhaseEventMove
+ se.qbranch.qanban.PhaseEventDelete
+ se.qbranch.qanban.User
+ se.qbranch.qanban.CardEventSetAssignee
+ se.qbranch.qanban.EventService
+ UrlMappings
+ DataSource
+
+
+
\ No newline at end of file
diff --git a/qanban-domain-plugin/scripts/DbDiffIncremental.groovy b/qanban-domain-plugin/scripts/DbDiffIncremental.groovy
new file mode 100644
index 0000000..5a923d0
--- /dev/null
+++ b/qanban-domain-plugin/scripts/DbDiffIncremental.groovy
@@ -0,0 +1,101 @@
+import liquibase.diff.Diff
+import liquibase.diff.DiffResult
+import java.sql.Driver
+import liquibase.database.DatabaseFactory
+import java.sql.Connection
+import liquibase.database.Database
+import liquibase.Liquibase
+import liquibase.database.DatabaseFactory
+
+includeTargets << new File("${liquibasePluginDir}/scripts/LiquibaseSetup.groovy")
+includeTargets << new File("${liquibasePluginDir}/scripts/Migrate.groovy")
+
+target('dbDiffIncremental': '''Generates change log required to make Test DB match Development''') {
+ depends(setup)
+
+ try {
+ def baseDatabase = getDatabase(config)
+ ConfigObject testConfig = loadTestConfig(classLoader, servletVersion, basedir, userHome, grailsAppVersion, grailsAppName, grailsHome)
+
+ def targetLiquibase = getDiffDbLiquibase(testConfig)
+
+ targetLiquibase.update(null)
+
+ def targetDatabase = getDatabase(testConfig)
+ Diff diff = new Diff(baseDatabase, targetDatabase);
+ DiffResult diffResult = diff.compare();
+ diffResult.printChangeLog(System.out, targetDatabase);
+ }
+ catch (Exception e) {
+ e.printStackTrace()
+ event("StatusFinal", ["Failed to diff database ${grailsEnv} with test"])
+ exit(1)
+ } finally {
+ liquibase.getDatabase().getConnection().close();
+ }
+}
+
+private ConfigObject loadTestConfig(classLoader, servletVersion, basedir, userHome, grailsAppVersion, grailsAppName, grailsHome) {
+ def testConfigSlurper = new ConfigSlurper('dbdiff')
+ testConfigSlurper.setBinding(grailsHome: grailsHome, appName: grailsAppName, appVersion: grailsAppVersion, userHome: userHome, basedir: basedir, servletVersion: servletVersion)
+ def testConfig = testConfigSlurper.parse(classLoader.loadClass("DataSource"))
+ return testConfig
+}
+
+private Database getDatabase(config) {
+ Properties p = config.toProperties()
+
+ def driverClassName = config.dataSource.driverClassName
+ def username = config.dataSource.username
+ def password = config.dataSource.password
+ def url = config.dataSource.url
+
+ Driver driver = getDriver(p, classLoader, driverClassName, url)
+ Connection connection = getConnection(url, driver, password, username, driverClassName)
+
+ return DatabaseFactory.getInstance().findCorrectDatabaseImplementation(connection)
+}
+
+private Liquibase getDiffDbLiquibase(def config) {
+ Properties p = config.toProperties()
+
+ def driverClassName = config.dataSource.driverClassName
+ def username = config.dataSource.username
+ def password = config.dataSource.password
+ def url = config.dataSource.url
+
+ Driver driver = getDriver(p, classLoader, driverClassName, url)
+
+ def connection = getConnection(url, driver, password, username, driverClassName)
+ def fileOpener = classLoader.loadClass("org.liquibase.grails.GrailsFileOpener").getConstructor().newInstance()
+ return new Liquibase("changelog.xml", fileOpener, DatabaseFactory.getInstance().findCorrectDatabaseImplementation(connection));
+}
+
+private Connection getConnection(url, Driver driver, password, username, driverClassName) {
+ Properties info = new Properties()
+ info.put("user", username)
+ if (password != null) {
+ info.put("password", password);
+ }
+
+ println "Base database is URL: ${url}"
+ connection = driver.connect(url, info);
+ if (connection == null) {
+ throw new RuntimeException("Connection could not be created to ${url} with driver ${driverClassName}. Possibly the wrong driver for the given database URL");
+ }
+ return connection
+}
+
+private Driver getDriver(Properties p, classLoader, driverClassName, url) {
+ Driver driver
+ if (p.driver == null) {
+ p.driver = DatabaseFactory.getInstance().findDefaultDriver(url)
+ }
+ if (p.driver == null) {
+ throw new RuntimeException("Driver class was not specified and could not be determined from the url")
+ }
+ driver = (Driver) Class.forName(driverClassName, true, classLoader).newInstance()
+ return driver
+}
+
+setDefaultTarget("dbDiffIncremental")
\ No newline at end of file
diff --git a/qanban-domain-plugin/scripts/_Install.groovy b/qanban-domain-plugin/scripts/_Install.groovy
new file mode 100644
index 0000000..a212160
--- /dev/null
+++ b/qanban-domain-plugin/scripts/_Install.groovy
@@ -0,0 +1,10 @@
+//
+// This script is executed by Grails after plugin was installed to project.
+// This script is a Gant script so you can use all special variables provided
+// by Gant (such as 'baseDir' which points on project base dir). You can
+// use 'ant' to access a global instance of AntBuilder
+//
+// For example you can create directory under project tree:
+//
+// ant.mkdir(dir:"${basedir}/grails-app/jobs")
+//
diff --git a/qanban-domain-plugin/scripts/_Uninstall.groovy b/qanban-domain-plugin/scripts/_Uninstall.groovy
new file mode 100644
index 0000000..7c53169
--- /dev/null
+++ b/qanban-domain-plugin/scripts/_Uninstall.groovy
@@ -0,0 +1,5 @@
+//
+// This script is executed by Grails when the plugin is uninstalled from project.
+// Use this script if you intend to do any additional clean-up on uninstall, but
+// beware of messing up SVN directories!
+//
diff --git a/qanban-domain-plugin/scripts/_Upgrade.groovy b/qanban-domain-plugin/scripts/_Upgrade.groovy
new file mode 100644
index 0000000..6a1a4c9
--- /dev/null
+++ b/qanban-domain-plugin/scripts/_Upgrade.groovy
@@ -0,0 +1,10 @@
+//
+// This script is executed by Grails during application upgrade ('grails upgrade'
+// command). This script is a Gant script so you can use all special variables
+// provided by Gant (such as 'baseDir' which points on project base dir). You can
+// use 'ant' to access a global instance of AntBuilder
+//
+// For example you can create directory under project tree:
+//
+// ant.mkdir(dir:"${basedir}/grails-app/jobs")
+//
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardEventCreateTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardEventCreateTests.xml
new file mode 100644
index 0000000..84d18f5
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardEventCreateTests.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardTests.xml
new file mode 100644
index 0000000..ce7302e
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.BoardTests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventCreateTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventCreateTests.xml
new file mode 100644
index 0000000..44d14b9
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventCreateTests.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventDeleteTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventDeleteTests.xml
new file mode 100644
index 0000000..0242a8b
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventDeleteTests.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventMoveTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventMoveTests.xml
new file mode 100644
index 0000000..ece91f1
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventMoveTests.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.xml
new file mode 100644
index 0000000..028f533
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventTests.xml
new file mode 100644
index 0000000..d093173
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventTests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventUpdateTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventUpdateTests.xml
new file mode 100644
index 0000000..ee66277
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardEventUpdateTests.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardTests.xml
new file mode 100644
index 0000000..30f4092
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.CardTests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventServiceTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventServiceTests.xml
new file mode 100644
index 0000000..4c1b24f
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventServiceTests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventTests.xml
new file mode 100644
index 0000000..cb9f804
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.EventTests.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventCreateTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventCreateTests.xml
new file mode 100644
index 0000000..fbb12f7
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventCreateTests.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventDeleteTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventDeleteTests.xml
new file mode 100644
index 0000000..6064f94
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventDeleteTests.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventMoveTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventMoveTests.xml
new file mode 100644
index 0000000..4954d82
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventMoveTests.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventTests.xml
new file mode 100644
index 0000000..9a42f41
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventTests.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventUpdateTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventUpdateTests.xml
new file mode 100644
index 0000000..1d48731
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseEventUpdateTests.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseTests.xml
new file mode 100644
index 0000000..00ec3de
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.PhaseTests.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.UserEventCreateTests.xml b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.UserEventCreateTests.xml
new file mode 100644
index 0000000..f75e4d1
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TEST-se.qbranch.qanban.UserEventCreateTests.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/TESTS-TestSuites.xml b/qanban-domain-plugin/test/reports/TESTS-TestSuites.xml
new file mode 100644
index 0000000..8cf18e0
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/TESTS-TestSuites.xml
@@ -0,0 +1,360 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/all-tests.html b/qanban-domain-plugin/test/reports/html/all-tests.html
new file mode 100644
index 0000000..b6fc559
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/all-tests.html
@@ -0,0 +1,115 @@
+
+
+
+Unit Test Results: All Tests
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+All Tests
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/allclasses-frame.html b/qanban-domain-plugin/test/reports/html/allclasses-frame.html
new file mode 100644
index 0000000..d601a43
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/allclasses-frame.html
@@ -0,0 +1,66 @@
+
+
+
+All Unit Test Classes
+
+
+
+Classes
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/alltests-errors.html b/qanban-domain-plugin/test/reports/html/alltests-errors.html
new file mode 100644
index 0000000..65fe6f5
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/alltests-errors.html
@@ -0,0 +1,22 @@
+
+
+
+Unit Test Results: All Errors
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+All Errors
+
+
+Class | Name | Status | Type | Time(s) |
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/alltests-fails.html b/qanban-domain-plugin/test/reports/html/alltests-fails.html
new file mode 100644
index 0000000..e95478e
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/alltests-fails.html
@@ -0,0 +1,22 @@
+
+
+
+Unit Test Results: All Failures
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+All Failures
+
+
+Class | Name | Status | Type | Time(s) |
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/index.html b/qanban-domain-plugin/test/reports/html/index.html
new file mode 100644
index 0000000..a8ede17
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/index.html
@@ -0,0 +1,19 @@
+
+
+
+Unit Test Results.
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/overview-frame.html b/qanban-domain-plugin/test/reports/html/overview-frame.html
new file mode 100644
index 0000000..57bf0ca
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/overview-frame.html
@@ -0,0 +1,18 @@
+
+
+
+All Unit Test Packages
+
+
+
+
+Packages
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/overview-summary.html b/qanban-domain-plugin/test/reports/html/overview-summary.html
new file mode 100644
index 0000000..55d5e10
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/overview-summary.html
@@ -0,0 +1,41 @@
+
+
+
+Unit Test Results: Summary
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Summary
+
+
+Tests | Failures | Errors | Success rate | Time |
+
+
+31 | 0 | 0 | 100.00% | 7.211 |
+
+
+
+
+
+ Note: failures are anticipated and checked for with assertions while errors are unanticipated.
+ |
+
+
+Packages
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+se.qbranch.qanban | 31 | 0 | 0 | 7.211 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-err.txt
new file mode 100644
index 0000000..768e5fe
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testCreatingABoard--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-out.txt
new file mode 100644
index 0000000..81b4bad
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests-out.txt
@@ -0,0 +1,3 @@
+--Output from testCreatingABoard--
+fa54523ba686f6142a51ca4c9d2ea392
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests.html
new file mode 100644
index 0000000..488658a
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/0_BoardEventCreateTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.BoardEventCreateTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.BoardEventCreateTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+BoardEventCreateTests | 1 | 0 | 0 | 0.121 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testCreatingABoard | Success | | 0.121 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-err.txt
new file mode 100644
index 0000000..7a35efc
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testEquals--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-out.txt
new file mode 100644
index 0000000..0f6767a
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests-out.txt
@@ -0,0 +1,4 @@
+--Output from testEquals--
+1
+2
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests.html
new file mode 100644
index 0000000..18f9198
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/10_EventTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.EventTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.EventTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+EventTests | 1 | 0 | 0 | 0.024 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testEquals | Success | | 0.024 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-err.txt
new file mode 100644
index 0000000..779a338
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-err.txt
@@ -0,0 +1,4 @@
+--Output from testCreatingAValidPhase--
+--Output from testCreatingPhaseWithoudPosition--
+--Output from testCreatingAPhaseWithLiteralsAsLimit--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-out.txt
new file mode 100644
index 0000000..e01d5a7
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests-out.txt
@@ -0,0 +1,5 @@
+--Output from testCreatingAValidPhase--
+--Output from testCreatingPhaseWithoudPosition--
+--Output from testCreatingAPhaseWithLiteralsAsLimit--
+limit with literals - null
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests.html
new file mode 100644
index 0000000..87df5d4
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/11_PhaseEventCreateTests.html
@@ -0,0 +1,89 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.PhaseEventCreateTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.PhaseEventCreateTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+PhaseEventCreateTests | 3 | 0 | 0 | 1.094 | 2010-01-15T10:00:05 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testCreatingAValidPhase | Success | | 0.279 |
+
+
+testCreatingPhaseWithoudPosition | Success | | 0.491 |
+
+
+testCreatingAPhaseWithLiteralsAsLimit | Success | | 0.324 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-err.txt
new file mode 100644
index 0000000..1bc2c99
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testDeletePhase--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-out.txt
new file mode 100644
index 0000000..79745ae
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests-out.txt
@@ -0,0 +1,8 @@
+--Output from testDeletePhase--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests.html
new file mode 100644
index 0000000..9adacfe
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/12_PhaseEventDeleteTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.PhaseEventDeleteTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.PhaseEventDeleteTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+PhaseEventDeleteTests | 1 | 0 | 0 | 0.339 | 2010-01-15T10:00:08 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testDeletePhase | Success | | 0.339 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-err.txt
new file mode 100644
index 0000000..db367ad
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testLegalMoveOfFirstPhaseToNextIndex--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-out.txt
new file mode 100644
index 0000000..69b9135
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests-out.txt
@@ -0,0 +1,8 @@
+--Output from testLegalMoveOfFirstPhaseToNextIndex--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests.html
new file mode 100644
index 0000000..33a9852
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/13_PhaseEventMoveTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.PhaseEventMoveTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.PhaseEventMoveTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+PhaseEventMoveTests | 1 | 0 | 0 | 2.401 | 2010-01-15T10:00:03 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testLegalMoveOfFirstPhaseToNextIndex | Success | | 2.400 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-err.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-out.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests-out.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests.html
new file mode 100644
index 0000000..8bef82d
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/14_PhaseEventTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.PhaseEventTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.PhaseEventTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+PhaseEventTests | 1 | 0 | 0 | 0.005 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testSomething | Success | | 0.004 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-err.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-out.txt
new file mode 100644
index 0000000..bad97e0
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests-out.txt
@@ -0,0 +1,8 @@
+--Output from testSomething--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests.html
new file mode 100644
index 0000000..850d8ca
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/15_PhaseEventUpdateTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.PhaseEventUpdateTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.PhaseEventUpdateTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+PhaseEventUpdateTests | 1 | 0 | 0 | 0.199 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testSomething | Success | | 0.199 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-err.txt
new file mode 100644
index 0000000..6f23be4
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-err.txt
@@ -0,0 +1,4 @@
+--Output from testCreatePhase--
+--Output from testPhaseWithCard--
+--Output from testCreatingAPhaseWithLiteralCardLimit--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-out.txt
new file mode 100644
index 0000000..baf823b
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests-out.txt
@@ -0,0 +1,5 @@
+--Output from testCreatePhase--
+--Output from testPhaseWithCard--
+--Output from testCreatingAPhaseWithLiteralCardLimit--
+Field error in object 'se.qbranch.qanban.Phase' on field 'cardLimit': rejected value [null]; codes [se.qbranch.qanban.Phase.cardLimit.nullable.error.se.qbranch.qanban.Phase.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.error.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.error.java.lang.Integer,se.qbranch.qanban.Phase.cardLimit.nullable.error,phase.cardLimit.nullable.error.se.qbranch.qanban.Phase.cardLimit,phase.cardLimit.nullable.error.cardLimit,phase.cardLimit.nullable.error.java.lang.Integer,phase.cardLimit.nullable.error,se.qbranch.qanban.Phase.cardLimit.nullable.se.qbranch.qanban.Phase.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.java.lang.Integer,se.qbranch.qanban.Phase.cardLimit.nullable,phase.cardLimit.nullable.se.qbranch.qanban.Phase.cardLimit,phase.cardLimit.nullable.cardLimit,phase.cardLimit.nullable.java.lang.Integer,phase.cardLimit.nullable,nullable.se.qbranch.qanban.Phase.cardLimit,nullable.cardLimit,nullable.java.lang.Integer,nullable]; arguments [cardLimit,class se.qbranch.qanban.Phase]; default message [Property [{0}] of class [{1}] cannot be null]
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests.html
new file mode 100644
index 0000000..4f2bf98
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/16_PhaseTests.html
@@ -0,0 +1,89 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.PhaseTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.PhaseTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+PhaseTests | 3 | 0 | 0 | 0.162 | 2010-01-15T10:00:09 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testCreatePhase | Success | | 0.036 |
+
+
+testPhaseWithCard | Success | | 0.094 |
+
+
+testCreatingAPhaseWithLiteralCardLimit | Success | | 0.032 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-err.txt
new file mode 100644
index 0000000..f068128
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-err.txt
@@ -0,0 +1,6 @@
+--Output from testCreatingAUser--
+--Output from testCreatingAUserFromAUserObj--
+--Output from testCreatingAUserWithPass--
+--Output from testCreateWithInconsistentPasswords--
+--Output from testCreateWithoutPasswords--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-out.txt
new file mode 100644
index 0000000..f068128
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests-out.txt
@@ -0,0 +1,6 @@
+--Output from testCreatingAUser--
+--Output from testCreatingAUserFromAUserObj--
+--Output from testCreatingAUserWithPass--
+--Output from testCreateWithInconsistentPasswords--
+--Output from testCreateWithoutPasswords--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests.html
new file mode 100644
index 0000000..c455cdb
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/17_UserEventCreateTests.html
@@ -0,0 +1,95 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.UserEventCreateTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.UserEventCreateTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+UserEventCreateTests | 5 | 0 | 0 | 0.496 | 2010-01-15T10:00:09 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testCreatingAUser | Success | | 0.235 |
+
+
+testCreatingAUserFromAUserObj | Success | | 0.092 |
+
+
+testCreatingAUserWithPass | Success | | 0.053 |
+
+
+testCreateWithInconsistentPasswords | Success | | 0.057 |
+
+
+testCreateWithoutPasswords | Success | | 0.057 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-err.txt
new file mode 100644
index 0000000..b2024cb
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testHasPhases--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-out.txt
new file mode 100644
index 0000000..b2024cb
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests-out.txt
@@ -0,0 +1,2 @@
+--Output from testHasPhases--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests.html
new file mode 100644
index 0000000..e59418d
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/1_BoardTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.BoardTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.BoardTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+BoardTests | 1 | 0 | 0 | 0.014 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testHasPhases | Success | | 0.014 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-err.txt
new file mode 100644
index 0000000..d88975a
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-err.txt
@@ -0,0 +1,3 @@
+--Output from testCreateingValidEvent--
+--Output from testCreateingInvalidEventWithoutCaseNo--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-out.txt
new file mode 100644
index 0000000..0925589
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests-out.txt
@@ -0,0 +1,18 @@
+--Output from testCreateingValidEvent--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+c90fd479c1f29370da16848db2eb7cbf
+--Output from testCreateingInvalidEventWithoutCaseNo--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+Field error in object 'se.qbranch.qanban.CardEventCreate' on field 'caseNumber': rejected value [null]; codes [se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.se.qbranch.qanban.CardEventCreate.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.java.lang.String,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error,cardEventCreate.caseNumber.nullable.error.se.qbranch.qanban.CardEventCreate.caseNumber,cardEventCreate.caseNumber.nullable.error.caseNumber,cardEventCreate.caseNumber.nullable.error.java.lang.String,cardEventCreate.caseNumber.nullable.error,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.se.qbranch.qanban.CardEventCreate.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.java.lang.String,se.qbranch.qanban.CardEventCreate.caseNumber.nullable,cardEventCreate.caseNumber.nullable.se.qbranch.qanban.CardEventCreate.caseNumber,cardEventCreate.caseNumber.nullable.caseNumber,cardEventCreate.caseNumber.nullable.java.lang.String,cardEventCreate.caseNumber.nullable,nullable.se.qbranch.qanban.CardEventCreate.caseNumber,nullable.caseNumber,nullable.java.lang.String,nullable]; arguments [caseNumber,class se.qbranch.qanban.CardEventCreate]; default message [Property [{0}] of class [{1}] cannot be null]
+4e0ab1fd11f8b0bf50dcd9e276fb970d
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests.html
new file mode 100644
index 0000000..3db90aa
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/2_CardEventCreateTests.html
@@ -0,0 +1,86 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardEventCreateTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardEventCreateTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+CardEventCreateTests | 2 | 0 | 0 | 0.431 | 2010-01-15T10:00:06 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testCreateingValidEvent | Success | | 0.222 |
+
+
+testCreateingInvalidEventWithoutCaseNo | Success | | 0.209 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-err.txt
new file mode 100644
index 0000000..2732ed5
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testDeletCard--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-out.txt
new file mode 100644
index 0000000..0b39bca
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests-out.txt
@@ -0,0 +1,8 @@
+--Output from testDeletCard--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests.html
new file mode 100644
index 0000000..9896c25
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/3_CardEventDeleteTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardEventDeleteTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardEventDeleteTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+CardEventDeleteTests | 1 | 0 | 0 | 0.251 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testDeletCard | Success | | 0.251 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-err.txt
new file mode 100644
index 0000000..f67eb1e
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-err.txt
@@ -0,0 +1,5 @@
+--Output from testValidMoveCardEventWithinAPhase--
+--Output from testValidMoveCardEventBetweenPhases--
+--Output from testInvalidMoveCardEvent--
+--Output from testCompareOfCardEventMove--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-out.txt
new file mode 100644
index 0000000..4ea0d42
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests-out.txt
@@ -0,0 +1,31 @@
+--Output from testValidMoveCardEventWithinAPhase--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testValidMoveCardEventBetweenPhases--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testInvalidMoveCardEvent--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+org.codehaus.groovy.grails.plugins.testing.GrailsMockErrors: 1 errors
+Field error in object 'se.qbranch.qanban.CardEventMove' on field 'newCardIndex': rejected value [-1]; codes [se.qbranch.qanban.CardEventMove.newCardIndex.min.error.se.qbranch.qanban.CardEventMove.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.error.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.error.java.lang.Integer,se.qbranch.qanban.CardEventMove.newCardIndex.min.error,cardEventMove.newCardIndex.min.error.se.qbranch.qanban.CardEventMove.newCardIndex,cardEventMove.newCardIndex.min.error.newCardIndex,cardEventMove.newCardIndex.min.error.java.lang.Integer,cardEventMove.newCardIndex.min.error,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.java.lang.Integer,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet,cardEventMove.newCardIndex.min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,cardEventMove.newCardIndex.min.notmet.newCardIndex,cardEventMove.newCardIndex.min.notmet.java.lang.Integer,cardEventMove.newCardIndex.min.notmet,min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,min.notmet.newCardIndex,min.notmet.java.lang.Integer,min.notmet]; arguments [newCardIndex,class se.qbranch.qanban.CardEventMove,-1,0]; default message [Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]]
+--Output from testCompareOfCardEventMove--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests.html
new file mode 100644
index 0000000..da17689
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/4_CardEventMoveTests.html
@@ -0,0 +1,92 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardEventMoveTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardEventMoveTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+CardEventMoveTests | 4 | 0 | 0 | 0.852 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testValidMoveCardEventWithinAPhase | Success | | 0.255 |
+
+
+testValidMoveCardEventBetweenPhases | Success | | 0.222 |
+
+
+testInvalidMoveCardEvent | Success | | 0.188 |
+
+
+testCompareOfCardEventMove | Success | | 0.186 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-err.txt
new file mode 100644
index 0000000..0967f36
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testSetAndUnsetAssignee--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-out.txt
new file mode 100644
index 0000000..d6dd346
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests-out.txt
@@ -0,0 +1,8 @@
+--Output from testSetAndUnsetAssignee--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests.html
new file mode 100644
index 0000000..12b1451
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/5_CardEventSetAssigneeTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardEventSetAssigneeTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardEventSetAssigneeTests
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testSetAndUnsetAssignee | Success | | 0.230 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-err.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-out.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests-out.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests.html
new file mode 100644
index 0000000..15145ac
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/6_CardEventTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardEventTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardEventTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+CardEventTests | 1 | 0 | 0 | 0.004 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testSomething | Success | | 0.004 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-err.txt
new file mode 100644
index 0000000..46f26e3
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-err.txt
@@ -0,0 +1,3 @@
+--Output from testSuccessfulUpdating--
+--Output from testUnsuccessfulUpdateWidhoutCaseNumber--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-out.txt
new file mode 100644
index 0000000..7b248ea
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests-out.txt
@@ -0,0 +1,16 @@
+--Output from testSuccessfulUpdating--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testUnsuccessfulUpdateWidhoutCaseNumber--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+Field error in object 'se.qbranch.qanban.CardEventUpdate' on field 'caseNumber': rejected value [null]; codes [se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.se.qbranch.qanban.CardEventUpdate.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.java.lang.String,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error,cardEventUpdate.caseNumber.nullable.error.se.qbranch.qanban.CardEventUpdate.caseNumber,cardEventUpdate.caseNumber.nullable.error.caseNumber,cardEventUpdate.caseNumber.nullable.error.java.lang.String,cardEventUpdate.caseNumber.nullable.error,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.java.lang.String,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable,cardEventUpdate.caseNumber.nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,cardEventUpdate.caseNumber.nullable.caseNumber,cardEventUpdate.caseNumber.nullable.java.lang.String,cardEventUpdate.caseNumber.nullable,nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,nullable.caseNumber,nullable.java.lang.String,nullable]; arguments [caseNumber,class se.qbranch.qanban.CardEventUpdate]; default message [Property [{0}] of class [{1}] cannot be null]
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests.html
new file mode 100644
index 0000000..3bb337c
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/7_CardEventUpdateTests.html
@@ -0,0 +1,86 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardEventUpdateTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardEventUpdateTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+CardEventUpdateTests | 2 | 0 | 0 | 0.578 | 2010-01-15T10:00:09 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testSuccessfulUpdating | Success | | 0.261 |
+
+
+testUnsuccessfulUpdateWidhoutCaseNumber | Success | | 0.316 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-err.txt
new file mode 100644
index 0000000..0c9ff5c
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testCreateCard--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-out.txt
new file mode 100644
index 0000000..0c9ff5c
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests-out.txt
@@ -0,0 +1,2 @@
+--Output from testCreateCard--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests.html
new file mode 100644
index 0000000..c5c84e0
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/8_CardTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.CardTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.CardTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+CardTests | 1 | 0 | 0 | 0.005 | 2010-01-15T10:00:07 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testCreateCard | Success | | 0.005 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-err.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-err.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-out.txt b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-out.txt
new file mode 100644
index 0000000..4d5aeed
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests-out.txt
@@ -0,0 +1,2 @@
+--Output from testSomething--
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests.html
new file mode 100644
index 0000000..61d99e3
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/9_EventServiceTests.html
@@ -0,0 +1,83 @@
+
+
+
+Unit Test Results: se.qbranch.qanban.EventServiceTests
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Class se.qbranch.qanban.EventServiceTests
+
+
+Name | Tests | Errors | Failures | Time(s) | Time Stamp | Host |
+
+
+EventServiceTests | 1 | 0 | 0 | 0.005 | 2010-01-15T10:00:08 | qb-trollgrottan |
+
+
+Tests
+
+
+Name | Status | Type | Time(s) |
+
+
+testSomething | Success | | 0.005 |
+
+
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-frame.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-frame.html
new file mode 100644
index 0000000..fccd6e5
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-frame.html
@@ -0,0 +1,75 @@
+
+
+
+Unit Test Classes: se.qbranch.qanban
+
+
+
+
+Classes
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-summary.html b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-summary.html
new file mode 100644
index 0000000..6069871
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/se/qbranch/qanban/package-summary.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+Unit Test Results
+
+
+ | Designed for use with JUnit and Ant. |
+
+
+
+Package se.qbranch.qanban
+Classes
+
+
+
+
+
diff --git a/qanban-domain-plugin/test/reports/html/stylesheet.css b/qanban-domain-plugin/test/reports/html/stylesheet.css
new file mode 100644
index 0000000..c371da6
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/html/stylesheet.css
@@ -0,0 +1,48 @@
+
+body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+}
+table tr td, table tr th {
+ font-size: 68%;
+}
+table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+}
+table.details tr td{
+ background:#eeeee0;
+}
+
+p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+ font-weight:bold; color:red;
+}
+.Failure {
+ font-weight:bold; color:purple;
+}
+.Properties {
+ text-align:right;
+}
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-err.txt
new file mode 100644
index 0000000..c3596ea
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-err.txt
@@ -0,0 +1 @@
+--Output from testCreatingABoard--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-out.txt
new file mode 100644
index 0000000..179bbdf
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests-out.txt
@@ -0,0 +1,2 @@
+--Output from testCreatingABoard--
+fa54523ba686f6142a51ca4c9d2ea392
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests.txt
new file mode 100644
index 0000000..15bc4f2
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardEventCreateTests.txt
@@ -0,0 +1,11 @@
+Testsuite: se.qbranch.qanban.BoardEventCreateTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.121 sec
+------------- Standard Output ---------------
+--Output from testCreatingABoard--
+fa54523ba686f6142a51ca4c9d2ea392
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testCreatingABoard--
+------------- ---------------- ---------------
+
+Testcase: testCreatingABoard took 0.121 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-err.txt
new file mode 100644
index 0000000..3bcb002
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-err.txt
@@ -0,0 +1 @@
+--Output from testHasPhases--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-out.txt
new file mode 100644
index 0000000..3bcb002
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests-out.txt
@@ -0,0 +1 @@
+--Output from testHasPhases--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests.txt
new file mode 100644
index 0000000..050025b
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.BoardTests.txt
@@ -0,0 +1,10 @@
+Testsuite: se.qbranch.qanban.BoardTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.014 sec
+------------- Standard Output ---------------
+--Output from testHasPhases--
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testHasPhases--
+------------- ---------------- ---------------
+
+Testcase: testHasPhases took 0.014 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-err.txt
new file mode 100644
index 0000000..a61d762
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testCreateingValidEvent--
+--Output from testCreateingInvalidEventWithoutCaseNo--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-out.txt
new file mode 100644
index 0000000..39b39ce
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests-out.txt
@@ -0,0 +1,17 @@
+--Output from testCreateingValidEvent--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+c90fd479c1f29370da16848db2eb7cbf
+--Output from testCreateingInvalidEventWithoutCaseNo--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+Field error in object 'se.qbranch.qanban.CardEventCreate' on field 'caseNumber': rejected value [null]; codes [se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.se.qbranch.qanban.CardEventCreate.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.java.lang.String,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error,cardEventCreate.caseNumber.nullable.error.se.qbranch.qanban.CardEventCreate.caseNumber,cardEventCreate.caseNumber.nullable.error.caseNumber,cardEventCreate.caseNumber.nullable.error.java.lang.String,cardEventCreate.caseNumber.nullable.error,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.se.qbranch.qanban.CardEventCreate.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.java.lang.String,se.qbranch.qanban.CardEventCreate.caseNumber.nullable,cardEventCreate.caseNumber.nullable.se.qbranch.qanban.CardEventCreate.caseNumber,cardEventCreate.caseNumber.nullable.caseNumber,cardEventCreate.caseNumber.nullable.java.lang.String,cardEventCreate.caseNumber.nullable,nullable.se.qbranch.qanban.CardEventCreate.caseNumber,nullable.caseNumber,nullable.java.lang.String,nullable]; arguments [caseNumber,class se.qbranch.qanban.CardEventCreate]; default message [Property [{0}] of class [{1}] cannot be null]
+4e0ab1fd11f8b0bf50dcd9e276fb970d
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests.txt
new file mode 100644
index 0000000..8ed6b15
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventCreateTests.txt
@@ -0,0 +1,28 @@
+Testsuite: se.qbranch.qanban.CardEventCreateTests
+Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.431 sec
+------------- Standard Output ---------------
+--Output from testCreateingValidEvent--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+c90fd479c1f29370da16848db2eb7cbf
+--Output from testCreateingInvalidEventWithoutCaseNo--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+Field error in object 'se.qbranch.qanban.CardEventCreate' on field 'caseNumber': rejected value [null]; codes [se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.se.qbranch.qanban.CardEventCreate.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error.java.lang.String,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.error,cardEventCreate.caseNumber.nullable.error.se.qbranch.qanban.CardEventCreate.caseNumber,cardEventCreate.caseNumber.nullable.error.caseNumber,cardEventCreate.caseNumber.nullable.error.java.lang.String,cardEventCreate.caseNumber.nullable.error,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.se.qbranch.qanban.CardEventCreate.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.caseNumber,se.qbranch.qanban.CardEventCreate.caseNumber.nullable.java.lang.String,se.qbranch.qanban.CardEventCreate.caseNumber.nullable,cardEventCreate.caseNumber.nullable.se.qbranch.qanban.CardEventCreate.caseNumber,cardEventCreate.caseNumber.nullable.caseNumber,cardEventCreate.caseNumber.nullable.java.lang.String,cardEventCreate.caseNumber.nullable,nullable.se.qbranch.qanban.CardEventCreate.caseNumber,nullable.caseNumber,nullable.java.lang.String,nullable]; arguments [caseNumber,class se.qbranch.qanban.CardEventCreate]; default message [Property [{0}] of class [{1}] cannot be null]
+4e0ab1fd11f8b0bf50dcd9e276fb970d
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testCreateingValidEvent--
+--Output from testCreateingInvalidEventWithoutCaseNo--
+------------- ---------------- ---------------
+
+Testcase: testCreateingValidEvent took 0.222 sec
+Testcase: testCreateingInvalidEventWithoutCaseNo took 0.209 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-err.txt
new file mode 100644
index 0000000..72bc93d
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-err.txt
@@ -0,0 +1 @@
+--Output from testDeletCard--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-out.txt
new file mode 100644
index 0000000..f2e6655
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests-out.txt
@@ -0,0 +1,7 @@
+--Output from testDeletCard--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests.txt
new file mode 100644
index 0000000..64b4b96
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventDeleteTests.txt
@@ -0,0 +1,16 @@
+Testsuite: se.qbranch.qanban.CardEventDeleteTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.251 sec
+------------- Standard Output ---------------
+--Output from testDeletCard--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testDeletCard--
+------------- ---------------- ---------------
+
+Testcase: testDeletCard took 0.251 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-err.txt
new file mode 100644
index 0000000..79fe768
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-err.txt
@@ -0,0 +1,4 @@
+--Output from testValidMoveCardEventWithinAPhase--
+--Output from testValidMoveCardEventBetweenPhases--
+--Output from testInvalidMoveCardEvent--
+--Output from testCompareOfCardEventMove--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-out.txt
new file mode 100644
index 0000000..c7f8dc5
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests-out.txt
@@ -0,0 +1,30 @@
+--Output from testValidMoveCardEventWithinAPhase--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testValidMoveCardEventBetweenPhases--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testInvalidMoveCardEvent--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+org.codehaus.groovy.grails.plugins.testing.GrailsMockErrors: 1 errors
+Field error in object 'se.qbranch.qanban.CardEventMove' on field 'newCardIndex': rejected value [-1]; codes [se.qbranch.qanban.CardEventMove.newCardIndex.min.error.se.qbranch.qanban.CardEventMove.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.error.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.error.java.lang.Integer,se.qbranch.qanban.CardEventMove.newCardIndex.min.error,cardEventMove.newCardIndex.min.error.se.qbranch.qanban.CardEventMove.newCardIndex,cardEventMove.newCardIndex.min.error.newCardIndex,cardEventMove.newCardIndex.min.error.java.lang.Integer,cardEventMove.newCardIndex.min.error,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.java.lang.Integer,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet,cardEventMove.newCardIndex.min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,cardEventMove.newCardIndex.min.notmet.newCardIndex,cardEventMove.newCardIndex.min.notmet.java.lang.Integer,cardEventMove.newCardIndex.min.notmet,min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,min.notmet.newCardIndex,min.notmet.java.lang.Integer,min.notmet]; arguments [newCardIndex,class se.qbranch.qanban.CardEventMove,-1,0]; default message [Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]]
+--Output from testCompareOfCardEventMove--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests.txt
new file mode 100644
index 0000000..42cbd32
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventMoveTests.txt
@@ -0,0 +1,45 @@
+Testsuite: se.qbranch.qanban.CardEventMoveTests
+Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 0.852 sec
+------------- Standard Output ---------------
+--Output from testValidMoveCardEventWithinAPhase--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testValidMoveCardEventBetweenPhases--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testInvalidMoveCardEvent--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+org.codehaus.groovy.grails.plugins.testing.GrailsMockErrors: 1 errors
+Field error in object 'se.qbranch.qanban.CardEventMove' on field 'newCardIndex': rejected value [-1]; codes [se.qbranch.qanban.CardEventMove.newCardIndex.min.error.se.qbranch.qanban.CardEventMove.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.error.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.error.java.lang.Integer,se.qbranch.qanban.CardEventMove.newCardIndex.min.error,cardEventMove.newCardIndex.min.error.se.qbranch.qanban.CardEventMove.newCardIndex,cardEventMove.newCardIndex.min.error.newCardIndex,cardEventMove.newCardIndex.min.error.java.lang.Integer,cardEventMove.newCardIndex.min.error,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.newCardIndex,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet.java.lang.Integer,se.qbranch.qanban.CardEventMove.newCardIndex.min.notmet,cardEventMove.newCardIndex.min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,cardEventMove.newCardIndex.min.notmet.newCardIndex,cardEventMove.newCardIndex.min.notmet.java.lang.Integer,cardEventMove.newCardIndex.min.notmet,min.notmet.se.qbranch.qanban.CardEventMove.newCardIndex,min.notmet.newCardIndex,min.notmet.java.lang.Integer,min.notmet]; arguments [newCardIndex,class se.qbranch.qanban.CardEventMove,-1,0]; default message [Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]]
+--Output from testCompareOfCardEventMove--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testValidMoveCardEventWithinAPhase--
+--Output from testValidMoveCardEventBetweenPhases--
+--Output from testInvalidMoveCardEvent--
+--Output from testCompareOfCardEventMove--
+------------- ---------------- ---------------
+
+Testcase: testValidMoveCardEventWithinAPhase took 0.255 sec
+Testcase: testValidMoveCardEventBetweenPhases took 0.222 sec
+Testcase: testInvalidMoveCardEvent took 0.188 sec
+Testcase: testCompareOfCardEventMove took 0.186 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-err.txt
new file mode 100644
index 0000000..6a935c9
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-err.txt
@@ -0,0 +1 @@
+--Output from testSetAndUnsetAssignee--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-out.txt
new file mode 100644
index 0000000..e263a12
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests-out.txt
@@ -0,0 +1,7 @@
+--Output from testSetAndUnsetAssignee--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.txt
new file mode 100644
index 0000000..2adf53d
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventSetAssigneeTests.txt
@@ -0,0 +1,16 @@
+Testsuite: se.qbranch.qanban.CardEventSetAssigneeTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.23 sec
+------------- Standard Output ---------------
+--Output from testSetAndUnsetAssignee--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testSetAndUnsetAssignee--
+------------- ---------------- ---------------
+
+Testcase: testSetAndUnsetAssignee took 0.23 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-err.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-err.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-out.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests-out.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests.txt
new file mode 100644
index 0000000..0aacce0
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventTests.txt
@@ -0,0 +1,10 @@
+Testsuite: se.qbranch.qanban.CardEventTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.004 sec
+------------- Standard Output ---------------
+--Output from testSomething--
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testSomething--
+------------- ---------------- ---------------
+
+Testcase: testSomething took 0.004 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-err.txt
new file mode 100644
index 0000000..8829d0a
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-err.txt
@@ -0,0 +1,2 @@
+--Output from testSuccessfulUpdating--
+--Output from testUnsuccessfulUpdateWidhoutCaseNumber--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-out.txt
new file mode 100644
index 0000000..df3c562
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests-out.txt
@@ -0,0 +1,15 @@
+--Output from testSuccessfulUpdating--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testUnsuccessfulUpdateWidhoutCaseNumber--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+Field error in object 'se.qbranch.qanban.CardEventUpdate' on field 'caseNumber': rejected value [null]; codes [se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.se.qbranch.qanban.CardEventUpdate.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.java.lang.String,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error,cardEventUpdate.caseNumber.nullable.error.se.qbranch.qanban.CardEventUpdate.caseNumber,cardEventUpdate.caseNumber.nullable.error.caseNumber,cardEventUpdate.caseNumber.nullable.error.java.lang.String,cardEventUpdate.caseNumber.nullable.error,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.java.lang.String,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable,cardEventUpdate.caseNumber.nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,cardEventUpdate.caseNumber.nullable.caseNumber,cardEventUpdate.caseNumber.nullable.java.lang.String,cardEventUpdate.caseNumber.nullable,nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,nullable.caseNumber,nullable.java.lang.String,nullable]; arguments [caseNumber,class se.qbranch.qanban.CardEventUpdate]; default message [Property [{0}] of class [{1}] cannot be null]
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests.txt
new file mode 100644
index 0000000..6b6c557
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardEventUpdateTests.txt
@@ -0,0 +1,26 @@
+Testsuite: se.qbranch.qanban.CardEventUpdateTests
+Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.578 sec
+------------- Standard Output ---------------
+--Output from testSuccessfulUpdating--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+--Output from testUnsuccessfulUpdateWidhoutCaseNumber--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+Field error in object 'se.qbranch.qanban.CardEventUpdate' on field 'caseNumber': rejected value [null]; codes [se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.se.qbranch.qanban.CardEventUpdate.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error.java.lang.String,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.error,cardEventUpdate.caseNumber.nullable.error.se.qbranch.qanban.CardEventUpdate.caseNumber,cardEventUpdate.caseNumber.nullable.error.caseNumber,cardEventUpdate.caseNumber.nullable.error.java.lang.String,cardEventUpdate.caseNumber.nullable.error,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.caseNumber,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable.java.lang.String,se.qbranch.qanban.CardEventUpdate.caseNumber.nullable,cardEventUpdate.caseNumber.nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,cardEventUpdate.caseNumber.nullable.caseNumber,cardEventUpdate.caseNumber.nullable.java.lang.String,cardEventUpdate.caseNumber.nullable,nullable.se.qbranch.qanban.CardEventUpdate.caseNumber,nullable.caseNumber,nullable.java.lang.String,nullable]; arguments [caseNumber,class se.qbranch.qanban.CardEventUpdate]; default message [Property [{0}] of class [{1}] cannot be null]
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testSuccessfulUpdating--
+--Output from testUnsuccessfulUpdateWidhoutCaseNumber--
+------------- ---------------- ---------------
+
+Testcase: testSuccessfulUpdating took 0.261 sec
+Testcase: testUnsuccessfulUpdateWidhoutCaseNumber took 0.316 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-err.txt
new file mode 100644
index 0000000..b29126a
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-err.txt
@@ -0,0 +1 @@
+--Output from testCreateCard--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-out.txt
new file mode 100644
index 0000000..b29126a
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests-out.txt
@@ -0,0 +1 @@
+--Output from testCreateCard--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests.txt
new file mode 100644
index 0000000..fff1ac8
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.CardTests.txt
@@ -0,0 +1,10 @@
+Testsuite: se.qbranch.qanban.CardTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.005 sec
+------------- Standard Output ---------------
+--Output from testCreateCard--
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testCreateCard--
+------------- ---------------- ---------------
+
+Testcase: testCreateCard took 0.005 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-err.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-err.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-out.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests-out.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests.txt
new file mode 100644
index 0000000..745323f
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventServiceTests.txt
@@ -0,0 +1,10 @@
+Testsuite: se.qbranch.qanban.EventServiceTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.005 sec
+------------- Standard Output ---------------
+--Output from testSomething--
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testSomething--
+------------- ---------------- ---------------
+
+Testcase: testSomething took 0.005 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-err.txt
new file mode 100644
index 0000000..371aceb
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-err.txt
@@ -0,0 +1 @@
+--Output from testEquals--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-out.txt
new file mode 100644
index 0000000..5c5e2cc
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests-out.txt
@@ -0,0 +1,3 @@
+--Output from testEquals--
+1
+2
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests.txt
new file mode 100644
index 0000000..c699fb6
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.EventTests.txt
@@ -0,0 +1,12 @@
+Testsuite: se.qbranch.qanban.EventTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.024 sec
+------------- Standard Output ---------------
+--Output from testEquals--
+1
+2
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testEquals--
+------------- ---------------- ---------------
+
+Testcase: testEquals took 0.024 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-err.txt
new file mode 100644
index 0000000..d4743be
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-err.txt
@@ -0,0 +1,3 @@
+--Output from testCreatingAValidPhase--
+--Output from testCreatingPhaseWithoudPosition--
+--Output from testCreatingAPhaseWithLiteralsAsLimit--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-out.txt
new file mode 100644
index 0000000..6ce83af
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests-out.txt
@@ -0,0 +1,4 @@
+--Output from testCreatingAValidPhase--
+--Output from testCreatingPhaseWithoudPosition--
+--Output from testCreatingAPhaseWithLiteralsAsLimit--
+limit with literals - null
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests.txt
new file mode 100644
index 0000000..02113c5
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventCreateTests.txt
@@ -0,0 +1,17 @@
+Testsuite: se.qbranch.qanban.PhaseEventCreateTests
+Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 1.094 sec
+------------- Standard Output ---------------
+--Output from testCreatingAValidPhase--
+--Output from testCreatingPhaseWithoudPosition--
+--Output from testCreatingAPhaseWithLiteralsAsLimit--
+limit with literals - null
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testCreatingAValidPhase--
+--Output from testCreatingPhaseWithoudPosition--
+--Output from testCreatingAPhaseWithLiteralsAsLimit--
+------------- ---------------- ---------------
+
+Testcase: testCreatingAValidPhase took 0.279 sec
+Testcase: testCreatingPhaseWithoudPosition took 0.491 sec
+Testcase: testCreatingAPhaseWithLiteralsAsLimit took 0.324 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-err.txt
new file mode 100644
index 0000000..57ce471
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-err.txt
@@ -0,0 +1 @@
+--Output from testDeletePhase--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-out.txt
new file mode 100644
index 0000000..ae72d64
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests-out.txt
@@ -0,0 +1,7 @@
+--Output from testDeletePhase--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests.txt
new file mode 100644
index 0000000..029461b
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventDeleteTests.txt
@@ -0,0 +1,16 @@
+Testsuite: se.qbranch.qanban.PhaseEventDeleteTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.339 sec
+------------- Standard Output ---------------
+--Output from testDeletePhase--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testDeletePhase--
+------------- ---------------- ---------------
+
+Testcase: testDeletePhase took 0.339 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-err.txt
new file mode 100644
index 0000000..f779a03
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-err.txt
@@ -0,0 +1 @@
+--Output from testLegalMoveOfFirstPhaseToNextIndex--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-out.txt
new file mode 100644
index 0000000..694b534
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests-out.txt
@@ -0,0 +1,7 @@
+--Output from testLegalMoveOfFirstPhaseToNextIndex--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests.txt
new file mode 100644
index 0000000..1a87a48
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventMoveTests.txt
@@ -0,0 +1,16 @@
+Testsuite: se.qbranch.qanban.PhaseEventMoveTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 2.401 sec
+------------- Standard Output ---------------
+--Output from testLegalMoveOfFirstPhaseToNextIndex--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testLegalMoveOfFirstPhaseToNextIndex--
+------------- ---------------- ---------------
+
+Testcase: testLegalMoveOfFirstPhaseToNextIndex took 2.4 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-err.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-err.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-out.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests-out.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests.txt
new file mode 100644
index 0000000..ff01152
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventTests.txt
@@ -0,0 +1,10 @@
+Testsuite: se.qbranch.qanban.PhaseEventTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.005 sec
+------------- Standard Output ---------------
+--Output from testSomething--
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testSomething--
+------------- ---------------- ---------------
+
+Testcase: testSomething took 0.004 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-err.txt
new file mode 100644
index 0000000..0e83766
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-err.txt
@@ -0,0 +1 @@
+--Output from testSomething--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-out.txt
new file mode 100644
index 0000000..43cd816
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests-out.txt
@@ -0,0 +1,7 @@
+--Output from testSomething--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests.txt
new file mode 100644
index 0000000..aa981d2
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseEventUpdateTests.txt
@@ -0,0 +1,16 @@
+Testsuite: se.qbranch.qanban.PhaseEventUpdateTests
+Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.199 sec
+------------- Standard Output ---------------
+--Output from testSomething--
+First phase
+ Card #1
+ Card #2
+Second phase
+ Card #3
+Third phase
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testSomething--
+------------- ---------------- ---------------
+
+Testcase: testSomething took 0.199 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-err.txt
new file mode 100644
index 0000000..17c80f0
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-err.txt
@@ -0,0 +1,3 @@
+--Output from testCreatePhase--
+--Output from testPhaseWithCard--
+--Output from testCreatingAPhaseWithLiteralCardLimit--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-out.txt
new file mode 100644
index 0000000..b975be2
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests-out.txt
@@ -0,0 +1,4 @@
+--Output from testCreatePhase--
+--Output from testPhaseWithCard--
+--Output from testCreatingAPhaseWithLiteralCardLimit--
+Field error in object 'se.qbranch.qanban.Phase' on field 'cardLimit': rejected value [null]; codes [se.qbranch.qanban.Phase.cardLimit.nullable.error.se.qbranch.qanban.Phase.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.error.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.error.java.lang.Integer,se.qbranch.qanban.Phase.cardLimit.nullable.error,phase.cardLimit.nullable.error.se.qbranch.qanban.Phase.cardLimit,phase.cardLimit.nullable.error.cardLimit,phase.cardLimit.nullable.error.java.lang.Integer,phase.cardLimit.nullable.error,se.qbranch.qanban.Phase.cardLimit.nullable.se.qbranch.qanban.Phase.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.java.lang.Integer,se.qbranch.qanban.Phase.cardLimit.nullable,phase.cardLimit.nullable.se.qbranch.qanban.Phase.cardLimit,phase.cardLimit.nullable.cardLimit,phase.cardLimit.nullable.java.lang.Integer,phase.cardLimit.nullable,nullable.se.qbranch.qanban.Phase.cardLimit,nullable.cardLimit,nullable.java.lang.Integer,nullable]; arguments [cardLimit,class se.qbranch.qanban.Phase]; default message [Property [{0}] of class [{1}] cannot be null]
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests.txt
new file mode 100644
index 0000000..9de46f2
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.PhaseTests.txt
@@ -0,0 +1,17 @@
+Testsuite: se.qbranch.qanban.PhaseTests
+Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 0.162 sec
+------------- Standard Output ---------------
+--Output from testCreatePhase--
+--Output from testPhaseWithCard--
+--Output from testCreatingAPhaseWithLiteralCardLimit--
+Field error in object 'se.qbranch.qanban.Phase' on field 'cardLimit': rejected value [null]; codes [se.qbranch.qanban.Phase.cardLimit.nullable.error.se.qbranch.qanban.Phase.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.error.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.error.java.lang.Integer,se.qbranch.qanban.Phase.cardLimit.nullable.error,phase.cardLimit.nullable.error.se.qbranch.qanban.Phase.cardLimit,phase.cardLimit.nullable.error.cardLimit,phase.cardLimit.nullable.error.java.lang.Integer,phase.cardLimit.nullable.error,se.qbranch.qanban.Phase.cardLimit.nullable.se.qbranch.qanban.Phase.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.cardLimit,se.qbranch.qanban.Phase.cardLimit.nullable.java.lang.Integer,se.qbranch.qanban.Phase.cardLimit.nullable,phase.cardLimit.nullable.se.qbranch.qanban.Phase.cardLimit,phase.cardLimit.nullable.cardLimit,phase.cardLimit.nullable.java.lang.Integer,phase.cardLimit.nullable,nullable.se.qbranch.qanban.Phase.cardLimit,nullable.cardLimit,nullable.java.lang.Integer,nullable]; arguments [cardLimit,class se.qbranch.qanban.Phase]; default message [Property [{0}] of class [{1}] cannot be null]
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testCreatePhase--
+--Output from testPhaseWithCard--
+--Output from testCreatingAPhaseWithLiteralCardLimit--
+------------- ---------------- ---------------
+
+Testcase: testCreatePhase took 0.036 sec
+Testcase: testPhaseWithCard took 0.094 sec
+Testcase: testCreatingAPhaseWithLiteralCardLimit took 0.032 sec
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-err.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-err.txt
new file mode 100644
index 0000000..e5dc333
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-err.txt
@@ -0,0 +1,5 @@
+--Output from testCreatingAUser--
+--Output from testCreatingAUserFromAUserObj--
+--Output from testCreatingAUserWithPass--
+--Output from testCreateWithInconsistentPasswords--
+--Output from testCreateWithoutPasswords--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-out.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-out.txt
new file mode 100644
index 0000000..e5dc333
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests-out.txt
@@ -0,0 +1,5 @@
+--Output from testCreatingAUser--
+--Output from testCreatingAUserFromAUserObj--
+--Output from testCreatingAUserWithPass--
+--Output from testCreateWithInconsistentPasswords--
+--Output from testCreateWithoutPasswords--
diff --git a/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests.txt b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests.txt
new file mode 100644
index 0000000..1cab2b7
--- /dev/null
+++ b/qanban-domain-plugin/test/reports/plain/TEST-se.qbranch.qanban.UserEventCreateTests.txt
@@ -0,0 +1,22 @@
+Testsuite: se.qbranch.qanban.UserEventCreateTests
+Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0.496 sec
+------------- Standard Output ---------------
+--Output from testCreatingAUser--
+--Output from testCreatingAUserFromAUserObj--
+--Output from testCreatingAUserWithPass--
+--Output from testCreateWithInconsistentPasswords--
+--Output from testCreateWithoutPasswords--
+------------- ---------------- ---------------
+------------- Standard Error -----------------
+--Output from testCreatingAUser--
+--Output from testCreatingAUserFromAUserObj--
+--Output from testCreatingAUserWithPass--
+--Output from testCreateWithInconsistentPasswords--
+--Output from testCreateWithoutPasswords--
+------------- ---------------- ---------------
+
+Testcase: testCreatingAUser took 0.235 sec
+Testcase: testCreatingAUserFromAUserObj took 0.092 sec
+Testcase: testCreatingAUserWithPass took 0.053 sec
+Testcase: testCreateWithInconsistentPasswords took 0.057 sec
+Testcase: testCreateWithoutPasswords took 0.057 sec
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardEventCreateTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardEventCreateTests.groovy
new file mode 100644
index 0000000..d020bec
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardEventCreateTests.groovy
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package se.qbranch.qanban
+
+import grails.test.*
+
+class BoardEventCreateTests extends GrailsUnitTestCase {
+
+ def user
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+ user = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ mockDomain(User,[user])
+ mockDomain(BoardEventCreate)
+ mockDomain(Board)
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testCreatingABoard() {
+
+ def event = new BoardEventCreate();
+
+
+ event.title = "The Board"
+ event.user = user
+
+ event.beforeInsert()
+ event.save()
+ event.process()
+
+ event.errors.getAllErrors().each { println it}
+ println event.domainId
+
+ assertFalse 'The event should not have errors' ,event.hasErrors()
+ assertEquals 1, event.id
+ assertEquals event.title, Board.findByDomainId(event.domainId).title
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardTests.groovy
new file mode 100644
index 0000000..c7e22f7
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/BoardTests.groovy
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class BoardTests extends GrailsUnitTestCase {
+ protected void setUp() {
+ super.setUp()
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testHasPhases() {
+ mockDomain(Board)
+ def b = new Board(domainId: 'domainId',title:'board').save()
+ assertEquals 0, b.phases.size()
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventCreateTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventCreateTests.groovy
new file mode 100644
index 0000000..a08cf7b
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventCreateTests.groovy
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardEventCreateTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+
+ void testCreateingValidEvent() {
+ def event = new CardEventCreate();
+
+ event.title = "Card #4"
+ event.description = "Created By A Event"
+ event.caseNumber = 4
+ event.phaseDomainId = Phase.get(1).domainId
+ event.user = user1
+
+ event.beforeInsert()
+ event.save()
+ event.process()
+
+ event.errors.getAllErrors().each { println it}
+ println event.domainId
+
+ assertFalse 'The event should not have errors' ,event.hasErrors()
+ assertEquals 4, event.id
+ assertEquals event.title, Card.findByDomainId(event.domainId).title
+
+ }
+
+ void testCreateingInvalidEventWithoutCaseNo() {
+ def event = new CardEventCreate();
+
+ event.title = "Card #4"
+ event.description = "Created By A Event"
+ event.phaseDomainId = Phase.get(1).domainId
+ event.user = user1
+
+ event.beforeInsert()
+ event.save()
+ event.process()
+ event.errors.getAllErrors().each { println it }
+
+ assertTrue 'The event should have errors' ,event.hasErrors()
+ assertEquals null, event.id
+ println event.domainId
+ assertEquals null, Card.findByDomainId(event.domainId)
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventDeleteTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventDeleteTests.groovy
new file mode 100644
index 0000000..6aa6ad7
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventDeleteTests.groovy
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardEventDeleteTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+ mockDomain(CardEventDelete)
+
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testDeletCard() {
+
+ assertEquals 2, phase1.cards.size()
+
+ def domainId = card2onPhase1.domainId
+
+ def deleteEvent = new CardEventDelete(card: card2onPhase1,user: user1)
+
+ deleteEvent.validate()
+ deleteEvent.beforeInsert()
+ deleteEvent.save()
+ deleteEvent.process()
+
+ assertEquals domainId, deleteEvent.domainId
+ assertEquals 1, phase1.cards.size()
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventMoveTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventMoveTests.groovy
new file mode 100644
index 0000000..344e076
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventMoveTests.groovy
@@ -0,0 +1,201 @@
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardEventMoveTests extends GrailsUnitTestCase {
+
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+
+ mockDomain(CardEventMove)
+
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+
+ void testValidMoveCardEventWithinAPhase() {
+
+ assertEquals 1, phase1.cards.indexOf(card2onPhase1)
+ assertEquals 0, board.phases.indexOf(card2onPhase1.phase)
+
+ def cardEventMove = new CardEventMove( card: card2onPhase1, newPhase: phase1, newCardIndex: 0,user: user1)
+
+ cardEventMove.beforeInsert()
+ cardEventMove.save()
+ cardEventMove.process()
+
+ assertEquals 0, card2onPhase1.phase.cards.indexOf(card2onPhase1)
+ assertEquals 0, card2onPhase1.phase.board.phases.indexOf(card2onPhase1.phase)
+ assertEquals cardEventMove.domainId, card2onPhase1.domainId
+ }
+
+ void testValidMoveCardEventBetweenPhases() {
+
+ assertEquals 1, phase1.cards.indexOf(card2onPhase1)
+ assertEquals 0, board.phases.indexOf(card2onPhase1.phase)
+
+ def cardEventMove = new CardEventMove( card: card2onPhase1, newPhase: phase2, newCardIndex: 0,user: user1)
+
+ cardEventMove.beforeInsert()
+ cardEventMove.save()
+ cardEventMove.process()
+
+ assertEquals 0, card2onPhase1.phase.cards.indexOf(card2onPhase1)
+ assertEquals 1, card2onPhase1.phase.board.phases.indexOf(card2onPhase1.phase)
+ assertEquals 2, phase2.cards.size()
+ assertEquals cardEventMove.domainId, card2onPhase1.domainId
+
+ }
+
+
+
+ void testInvalidMoveCardEvent() {
+
+ def card = Card.get(1)
+ def newPhase = Phase.get(1)
+ def newCardIndex = -1
+
+ assertEquals 0, card.phase.cards.indexOf(card)
+ assertEquals 0, card.phase.board.phases.indexOf(card.phase)
+
+ def cardEventMove = new CardEventMove()
+ cardEventMove.card = card;
+ cardEventMove.newPhase = newPhase
+ cardEventMove.newCardIndex = newCardIndex
+
+ cardEventMove.save()
+
+ assertEquals 0, card.phase.cards.indexOf(card)
+ assertEquals 0, card.phase.board.phases.indexOf(card.phase)
+ assertEquals null, cardEventMove.id
+
+ for (error in cardEventMove.errors) {
+ println error
+ }
+
+ }
+
+ void testCompareOfCardEventMove() {
+ def cardOld = new CardEventMove(newCardIndex: 0,
+ card: Card.get(0),
+ user: null,
+ newPhase: null,
+ dateCreated: new Date().previous())
+ def cardNewer = new CardEventMove(newCardIndex: 0,
+ card: Card.get(0),
+ user: null,
+ newPhase: null,
+ dateCreated: new Date())
+ assert cardOld.compareTo(cardNewer) > 0
+ assert cardNewer.compareTo(cardOld) < 0
+ assert cardNewer.compareTo(cardNewer) == 0
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventSetAssigneeTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventSetAssigneeTests.groovy
new file mode 100644
index 0000000..63b3f36
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventSetAssigneeTests.groovy
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardEventSetAssigneeTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0 , user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+
+ // Specific mockups
+
+ mockDomain(CardEventSetAssignee)
+
+
+ }
+
+ void testSetAndUnsetAssignee() {
+
+ assertNull "There should be no assignee", card1onPhase1.assignee
+
+ def setAssigneeEvent = new CardEventSetAssignee(
+ card: card1onPhase1,
+ newAssignee: user1,
+ user: user2
+ )
+
+ setAssigneeEvent.beforeInsert()
+ setAssigneeEvent.save()
+ setAssigneeEvent.process()
+
+ assertEquals setAssigneeEvent.domainId, card1onPhase1.domainId
+ assertEquals user1, card1onPhase1.assignee
+
+ def unsetAssigneeEvent = new CardEventSetAssignee(
+ card: card1onPhase1,user: user2
+ )
+
+ unsetAssigneeEvent.beforeInsert()
+ unsetAssigneeEvent.save()
+ unsetAssigneeEvent.process()
+
+ assertEquals unsetAssigneeEvent.domainId, card1onPhase1.domainId
+ assertNull "There should not be a assignee", card1onPhase1.assignee
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventTests.groovy
new file mode 100644
index 0000000..b48448c
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventTests.groovy
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardEventTests extends GrailsUnitTestCase {
+ protected void setUp() {
+ super.setUp()
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testSomething() {
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventUpdateTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventUpdateTests.groovy
new file mode 100644
index 0000000..3196740
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardEventUpdateTests.groovy
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardEventUpdateTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+ // Specific mockups
+
+ mockDomain(CardEventUpdate)
+
+
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testSuccessfulUpdating() {
+ def newTitle = "Card #1 is updated"
+ def caseNo = 1337
+
+ def updateEvent = new CardEventUpdate()
+ updateEvent.card = card1onPhase1;
+ updateEvent.title = newTitle;
+ updateEvent.description = null;
+ updateEvent.caseNumber = caseNo;
+ updateEvent.user = user1;
+
+
+ updateEvent.validate()
+ updateEvent.beforeInsert()
+ updateEvent.save()
+ updateEvent.process()
+
+ assertEquals card1onPhase1.domainId, updateEvent.domainId
+ assertEquals newTitle, card1onPhase1.title
+ assertNull "There should be no description", card1onPhase1.description
+
+ }
+
+ void testUnsuccessfulUpdateWidhoutCaseNumber(){
+ def newTitle = "Card #1 is updated"
+
+ def updateEvent = new CardEventUpdate(
+ card: card1onPhase1,
+ title: newTitle,
+ description: null,
+ user: user1
+ )
+
+ updateEvent.validate()
+
+ updateEvent.errors.getAllErrors().each { println it}
+
+ assertEquals 1, updateEvent.errors.getAllErrors().size()
+ }
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardTests.groovy
new file mode 100644
index 0000000..9cf1633
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/CardTests.groovy
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class CardTests extends GrailsUnitTestCase {
+
+ protected void setUp() {
+ super.setUp()
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testCreateCard() {
+ def card = new Card(description: "testcard")
+
+ assertEquals "testcard", card.description
+ }
+
+
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/EventServiceTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/EventServiceTests.groovy
new file mode 100644
index 0000000..f17087c
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/EventServiceTests.groovy
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class EventServiceTests extends GrailsUnitTestCase {
+ protected void setUp() {
+ super.setUp()
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testSomething() {
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/EventTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/EventTests.groovy
new file mode 100644
index 0000000..94effd8
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/EventTests.groovy
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class EventTests extends GrailsUnitTestCase {
+ protected void setUp() {
+ super.setUp()
+ mockDomain(Event)
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testEquals() {
+ def event1 = new Event(domainId:'did')
+ event1.save()
+
+ def event2 = Event.findByDomainId('did')
+
+ def event3 = new Event(domainId:'dint')
+ event3.save()
+ println event1.id
+ println event3.id
+ assertTrue "Should be equal", event1.equals(event2) // == uses compareTo instead of equals when the class implements the comparable interface
+ assertFalse "Shouldn't be equal", event2.equals(event3)
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventCreateTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventCreateTests.groovy
new file mode 100644
index 0000000..1c7941d
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventCreateTests.groovy
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class PhaseEventCreateTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+ mockDomain(PhaseEventCreate)
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testCreatingAValidPhase() {
+ String title = 'Fourth phase'
+ Integer position = 1
+ Integer cardLimit = 100
+
+ def createEvent = new PhaseEventCreate(
+ title: title,
+ cardLimit: cardLimit,
+ phasePos: position,
+ board: board,
+ user: user1
+ )
+
+ createEvent.beforeInsert()
+ createEvent.save()
+ createEvent.process()
+
+ assertNotNull "There should be a phase", createEvent.phase
+
+ def newPhase = createEvent.phase
+
+ assertEquals newPhase.domainId, createEvent.domainId
+ assertEquals title, newPhase.title
+ assertEquals position, board.phases.indexOf(newPhase)
+
+ }
+
+ void testCreatingPhaseWithoudPosition() {
+ String title = 'Fourth phase'
+ Integer cardLimit = 100
+
+ def createEvent = new PhaseEventCreate(
+ title: title,
+ cardLimit: cardLimit,
+ board: board,
+ user: user1
+ )
+
+ if( createEvent.validate() ){
+ createEvent.beforeInsert()
+ createEvent.save()
+ createEvent.process()
+ }
+
+ assertNull "There should not be a phase", createEvent.phase
+
+ }
+
+ void testCreatingAPhaseWithLiteralsAsLimit(){
+ String cardLimit = "limit with literals"
+ String title = "Fourth phase"
+ def createEvent = new PhaseEventCreate(
+ title: title,
+ cardLimit: cardLimit,
+ board: board,
+ user: user1 ,
+ phasePos: 1
+ )
+
+ createEvent.validate();
+ println "$cardLimit - $createEvent.cardLimit"
+
+ assertTrue "Shiould have errors", createEvent.hasErrors()
+
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventDeleteTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventDeleteTests.groovy
new file mode 100644
index 0000000..4dd1abc
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventDeleteTests.groovy
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class PhaseEventDeleteTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+ mockDomain(BoardEventCreate)
+ mockDomain(Board)
+
+ def bec = new BoardEventCreate(title: 'Board',user: user1)
+
+ bec.beforeInsert()
+ bec.save()
+ bec.process()
+
+ board = bec.board
+
+
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+ mockDomain(PhaseEventDelete)
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testDeletePhase() {
+
+ assertEquals 3, board.phases.size()
+
+ def domainId = phase1.domainId
+ def deleteEvent = new PhaseEventDelete()
+ deleteEvent.phase = phase1
+ deleteEvent.user = user1
+
+
+ deleteEvent.validate()
+ deleteEvent.beforeInsert()
+ deleteEvent.save()
+ deleteEvent.process()
+
+ assertEquals domainId, deleteEvent.domainId
+ assertEquals 2, board.phases.size()
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventMoveTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventMoveTests.groovy
new file mode 100644
index 0000000..69873aa
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventMoveTests.groovy
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class PhaseEventMoveTests extends GrailsUnitTestCase {
+
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0 , user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+
+ mockDomain(PhaseEventMove)
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testLegalMoveOfFirstPhaseToNextIndex() {
+
+ assertEquals 0, phase1.board.phases.indexOf(phase1)
+
+ def pem = new PhaseEventMove( phase: phase1, phasePos: 2 ,user: user2)
+
+ pem.beforeInsert()
+ pem.save()
+ pem.process()
+
+ assertEquals 2, phase1.board.phases.indexOf(phase1)
+
+
+ }
+}
\ No newline at end of file
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventTests.groovy
new file mode 100644
index 0000000..fbe0632
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventTests.groovy
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class PhaseEventTests extends GrailsUnitTestCase {
+ protected void setUp() {
+ super.setUp()
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testSomething() {
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventUpdateTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventUpdateTests.groovy
new file mode 100644
index 0000000..711aa10
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseEventUpdateTests.groovy
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class PhaseEventUpdateTests extends GrailsUnitTestCase {
+
+ def user1
+ def user2
+
+ def board
+
+ def phase1
+ def phase2
+ def phase3
+
+ def card1onPhase1
+ def card2onPhase1
+ def card3onPhase2
+
+
+ protected void setUp() {
+ super.setUp()
+
+ // User mock
+
+ user1 = new User(username: "opsmrkr01", userRealName: "Mr. Krister")
+ user2 = new User(username: "opsshba01", userRealName: "Shean Banan")
+
+ mockDomain(User,[user1,user2])
+
+
+ // Board mock
+
+ board = new Board()
+ mockDomain(Board,[board])
+
+
+ // Phase / PhaseEventCreate mock
+
+ mockDomain(PhaseEventCreate)
+ mockDomain(Phase)
+
+ def phaseEventCreate1 = new PhaseEventCreate(title: "First phase", cardLimit: 5, phasePos: 0, user: user1, board: board)
+ def phaseEventCreate2 = new PhaseEventCreate(title: "Second phase", cardLimit: 10, phasePos: 1, user: user1 , board: board)
+ def phaseEventCreate3 = new PhaseEventCreate(title: "Third phase", cardLimit: 0, user: user1, phasePos: 2, board: board)
+
+ phaseEventCreate1.beforeInsert()
+ phaseEventCreate1.save()
+ phaseEventCreate1.process()
+
+ phaseEventCreate2.beforeInsert()
+ phaseEventCreate2.save()
+ phaseEventCreate2.process()
+
+ phaseEventCreate3.beforeInsert()
+ phaseEventCreate3.save()
+ phaseEventCreate3.process()
+
+ phase1 = phaseEventCreate1.phase
+ phase2 = phaseEventCreate2.phase
+ phase3 = phaseEventCreate3.phase
+
+ assertEquals phase1, Phase.findByDomainId(phase1.domainId)
+
+ // Card / CardEventCreate mock
+
+ mockDomain(CardEventCreate)
+ mockDomain(Card)
+
+ def cardEventCreate1 = new CardEventCreate(title:"Card #1",caseNumber:1,description:"The first card originally from First phase on the first position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate2 = new CardEventCreate(title:"Card #2",caseNumber:2,description:"The second card originally from First phase on the second position",phaseDomainId:phase1.domainId,user:user1)
+ def cardEventCreate3 = new CardEventCreate(title:"Card #3",caseNumber:3,description:"The third card originally from Second phase on the first position",phaseDomainId:phase2.domainId,user:user1)
+
+ cardEventCreate1.beforeInsert()
+ cardEventCreate1.save()
+ cardEventCreate1.process()
+
+ cardEventCreate2.beforeInsert()
+ cardEventCreate2.save()
+ cardEventCreate2.process()
+
+ cardEventCreate3.beforeInsert()
+ cardEventCreate3.save()
+ cardEventCreate3.process()
+
+ card1onPhase1 = cardEventCreate1.card
+ card2onPhase1 = cardEventCreate2.card
+ card3onPhase2 = cardEventCreate3.card
+
+ // Assertions to validate the mock setup
+
+ board.phases.each {
+ println it
+ it.cards.each {
+ println " $it"
+ }
+ }
+
+ assertEquals 1, board.id
+ assertEquals 3, board.phases.size()
+ assertEquals 1, phase1.id
+ assertEquals 2, phase1.cards.size()
+ assertEquals 2, phase2.id
+ assertEquals 1, phase2.cards.size()
+ assertEquals 3, phase3.id
+ assertEquals 1, card1onPhase1.id
+ assertEquals 2, card2onPhase1.id
+ assertEquals 3, card3onPhase2.id
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testSomething() {
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseTests.groovy
new file mode 100644
index 0000000..9e52e27
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/PhaseTests.groovy
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2009 Qbranch AB
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package se.qbranch.qanban
+
+import grails.test.*
+
+class PhaseTests extends GrailsUnitTestCase {
+ protected void setUp() {
+ super.setUp()
+ mockDomain(Board, [ new Board(domainId: "bdid")])
+ mockDomain(Phase)
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testCreatePhase() {
+
+ def phase = new Phase(title: "testPhase")
+ assertEquals "testPhase", phase.title
+
+ def notAllowedTitlePhase = new Phase(title: "")
+ assertFalse 'validate should have failed', notAllowedTitlePhase.validate()
+
+ }
+
+ void testPhaseWithCard() {
+ mockDomain(Card)
+
+ Card card = new Card(description: "myCard")
+ Phase phase = new Phase(title: "myPhase")
+
+ phase.addToCards(card)
+
+ assertEquals 1, phase.cards.size()
+
+ }
+ void testCreatingAPhaseWithLiteralCardLimit(){
+
+ Phase phase = new Phase(title: "Title", domainId: "did", cardLimit: "qwe", board: Board.get(1))
+ phase.validate()
+ assertTrue "There should be errors", phase.hasErrors()
+ phase.errors.getAllErrors().each{
+ println it
+ }
+
+ }
+}
diff --git a/qanban-domain-plugin/test/unit/se/qbranch/qanban/UserEventCreateTests.groovy b/qanban-domain-plugin/test/unit/se/qbranch/qanban/UserEventCreateTests.groovy
new file mode 100644
index 0000000..28311f2
--- /dev/null
+++ b/qanban-domain-plugin/test/unit/se/qbranch/qanban/UserEventCreateTests.groovy
@@ -0,0 +1,138 @@
+package se.qbranch.qanban
+
+import grails.test.*
+import org.grails.plugins.springsecurity.service.AuthenticateService
+
+class UserEventCreateTests extends GrailsUnitTestCase {
+
+ def authMock
+
+ protected void setUp() {
+ super.setUp()
+ mockDomain(User)
+ mockDomain(Role)
+ mockDomain(UserEventCreate)
+
+ authMock = mockFor(AuthenticateService)
+ authMock.demand.static.encodePassword(1..2) { pass -> pass }
+
+
+ }
+
+ protected void tearDown() {
+ super.tearDown()
+ }
+
+ void testCreatingAUser() {
+ assertEquals 0, User.list().size()
+ def username = "opsmrkr01"
+ def userRealname = "mr. Krister"
+ def email = "mr.krister@mail.com"
+ def passwd ="pass"
+ def event = new UserEventCreate(username: username, userRealName: userRealname, email: email, enabled: true, passwd: passwd, passwdRepeat: passwd)
+ event.authenticateService = authMock.createMock()
+
+ event.beforeInsert()
+ if( event.save() ){
+ event.process()
+ }
+
+ def user = event.user
+ assertFalse "There should not be any errors", event.hasErrors()
+ assertEquals event.username, user.username
+ assertEquals event.domainId, user.domainId
+ assertNotNull "The user should have a id", user.id
+ assertEquals 1, User.list().size()
+ }
+
+ void testCreatingAUserFromAUserObj(){
+ assertEquals 0, User.list().size()
+
+ def user = new User(username: "opsmrkr01",userRealName: "Mister Krister",email:"mr.kr@gmail.com",enabled: true,passwd: 'pass',passwdRepeat: 'pass')
+ def event = new UserEventCreate(user: user)
+ event.authenticateService = authMock.createMock()
+
+ event.populateFromUser()
+
+ assertEquals user.username, event.username
+ assertEquals user.userRealName, event.userRealName
+ assertEquals user.email, event.email
+ assertEquals user.enabled, event.enabled
+
+ event.beforeInsert()
+ if( event.save() ) {
+ event.process()
+ }
+
+ def userAfter = event.user
+ assertFalse "There should not be any errors", event.hasErrors()
+ assertEquals event.username, userAfter.username
+ assertEquals event.domainId, userAfter.domainId
+ assertNotNull "The user should have a id", userAfter.id
+ assertEquals 1, User.list().size()
+ }
+
+ void testCreatingAUserWithPass(){
+ def initNoOfUsers = User.list().size()
+ def user = new User(username: "opsmrkr01",userRealName: "Mister Krister",email:"mr.kr@gmail.com",enabled: true,passwd:"pass1")
+ def event = new UserEventCreate(user:user)
+ event.authenticateService = authMock.createMock()
+
+ event.populateFromUser()
+ event.passwdRepeat = "pass1"
+
+ event.beforeInsert()
+
+ if(event.save()){
+ event.process()
+ }
+
+ def userAfter = event.user
+ assertFalse "There should not be any errors", event.hasErrors()
+ assertEquals event.username, userAfter.username
+ assertEquals event.domainId, userAfter.domainId
+ assertNotNull "The user should have a id", userAfter.id
+ assertEquals 1, User.list().size()
+
+ }
+
+ void testCreateWithInconsistentPasswords(){
+ def initNoOfUsers = User.list().size()
+ def user = new User(username: "opsmrkr01",userRealName: "Mister Krister",email:"mr.kr@gmail.com",enabled: true,passwd:"pass1")
+ def event = new UserEventCreate(user:user)
+ event.authenticateService = authMock.createMock()
+
+ event.populateFromUser()
+ event.passwdRepeat = "pass2"
+
+ event.beforeInsert()
+
+ if(event.save()){
+ event.process()
+ }
+
+ def userAfter = event.user
+ assertEquals 1 , event.errors.allErrors.size()
+ assertNull "The user should not have a id", userAfter.id
+ assertEquals initNoOfUsers, User.list().size()
+ }
+
+ void testCreateWithoutPasswords(){
+ def initNoOfUsers = User.list().size()
+ def user = new User(username: "opsmrkr01",userRealName: "Mister Krister",email:"mr.kr@gmail.com",enabled: true)
+ def event = new UserEventCreate(user:user)
+ event.authenticateService = authMock.createMock()
+ event.populateFromUser()
+
+ event.beforeInsert()
+
+ if(event.save()){
+ event.process()
+ }
+
+ def userAfter = event.user
+ assertEquals 1 , event.errors.allErrors.size()
+ assertNull "The user should not have a id", userAfter.id
+ assertEquals initNoOfUsers, User.list().size()
+ }
+}
diff --git a/qanban-domain-plugin/web-app/WEB-INF/applicationContext.xml b/qanban-domain-plugin/web-app/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..038251b
--- /dev/null
+++ b/qanban-domain-plugin/web-app/WEB-INF/applicationContext.xml
@@ -0,0 +1,47 @@
+
+
+
+
+ Grails application factory bean
+
+
+
+
+
+ A bean that manages Grails plugins
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ classpath*:**/grails-app/**/*.groovy
+
+
+
+
+
+ utf-8
+
+
+
\ No newline at end of file
diff --git a/qanban-domain-plugin/web-app/WEB-INF/sitemesh.xml b/qanban-domain-plugin/web-app/WEB-INF/sitemesh.xml
new file mode 100644
index 0000000..95943f1
--- /dev/null
+++ b/qanban-domain-plugin/web-app/WEB-INF/sitemesh.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/qanban-domain-plugin/web-app/WEB-INF/tld/c.tld b/qanban-domain-plugin/web-app/WEB-INF/tld/c.tld
new file mode 100644
index 0000000..22698c9
--- /dev/null
+++ b/qanban-domain-plugin/web-app/WEB-INF/tld/c.tld
@@ -0,0 +1,563 @@
+
+
+
+
+ JSTL 1.1 core library
+ JSTL core
+ 1.1
+ c
+ http://java.sun.com/jsp/jstl/core
+
+
+
+ Provides core validation features for JSTL tags.
+
+
+ org.apache.taglibs.standard.tlv.JstlCoreTLV
+
+
+
+
+
+ Catches any Throwable that occurs in its body and optionally
+ exposes it.
+
+ catch
+ org.apache.taglibs.standard.tag.common.core.CatchTag
+ JSP
+
+
+Name of the exported scoped variable for the
+exception thrown from a nested action. The type of the
+scoped variable is the type of the exception thrown.
+
+ var
+ false
+ false
+
+
+
+
+
+ Simple conditional tag that establishes a context for
+ mutually exclusive conditional operations, marked by
+ <when> and <otherwise>
+
+ choose
+ org.apache.taglibs.standard.tag.common.core.ChooseTag
+ JSP
+
+
+
+
+ Simple conditional tag, which evalutes its body if the
+ supplied condition is true and optionally exposes a Boolean
+ scripting variable representing the evaluation of this condition
+
+ if
+ org.apache.taglibs.standard.tag.rt.core.IfTag
+ JSP
+
+
+The test condition that determines whether or
+not the body content should be processed.
+
+ test
+ true
+ true
+ boolean
+
+
+
+Name of the exported scoped variable for the
+resulting value of the test condition. The type
+of the scoped variable is Boolean.
+
+ var
+ false
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Retrieves an absolute or relative URL and exposes its contents
+ to either the page, a String in 'var', or a Reader in 'varReader'.
+
+ import
+ org.apache.taglibs.standard.tag.rt.core.ImportTag
+ org.apache.taglibs.standard.tei.ImportTEI
+ JSP
+
+
+The URL of the resource to import.
+
+ url
+ true
+ true
+
+
+
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is String.
+
+ var
+ false
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is Reader.
+
+ varReader
+ false
+ false
+
+
+
+Name of the context when accessing a relative
+URL resource that belongs to a foreign
+context.
+
+ context
+ false
+ true
+
+
+
+Character encoding of the content at the input
+resource.
+
+ charEncoding
+ false
+ true
+
+
+
+
+
+ The basic iteration tag, accepting many different
+ collection types and supporting subsetting and other
+ functionality
+
+ forEach
+ org.apache.taglibs.standard.tag.rt.core.ForEachTag
+ org.apache.taglibs.standard.tei.ForEachTEI
+ JSP
+
+
+Collection of items to iterate over.
+
+ items
+ false
+ true
+ java.lang.Object
+
+
+
+If items specified:
+Iteration begins at the item located at the
+specified index. First item of the collection has
+index 0.
+If items not specified:
+Iteration begins with index set at the value
+specified.
+
+ begin
+ false
+ true
+ int
+
+
+
+If items specified:
+Iteration ends at the item located at the
+specified index (inclusive).
+If items not specified:
+Iteration ends when index reaches the value
+specified.
+
+ end
+ false
+ true
+ int
+
+
+
+Iteration will only process every step items of
+the collection, starting with the first one.
+
+ step
+ false
+ true
+ int
+
+
+
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility. Its type depends
+on the object of the underlying collection.
+
+ var
+ false
+ false
+
+
+
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of type
+javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested
+visibility.
+
+ varStatus
+ false
+ false
+
+
+
+
+
+ Iterates over tokens, separated by the supplied delimeters
+
+ forTokens
+ org.apache.taglibs.standard.tag.rt.core.ForTokensTag
+ JSP
+
+
+String of tokens to iterate over.
+
+ items
+ true
+ true
+ java.lang.String
+
+
+
+The set of delimiters (the characters that
+separate the tokens in the string).
+
+ delims
+ true
+ true
+ java.lang.String
+
+
+
+Iteration begins at the token located at the
+specified index. First token has index 0.
+
+ begin
+ false
+ true
+ int
+
+
+
+Iteration ends at the token located at the
+specified index (inclusive).
+
+ end
+ false
+ true
+ int
+
+
+
+Iteration will only process every step tokens
+of the string, starting with the first one.
+
+ step
+ false
+ true
+ int
+
+
+
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility.
+
+ var
+ false
+ false
+
+
+
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of
+type
+javax.servlet.jsp.jstl.core.LoopTag
+Status. This scoped variable has nested
+visibility.
+
+ varStatus
+ false
+ false
+
+
+
+
+
+ Like <%= ... >, but for expressions.
+
+ out
+ org.apache.taglibs.standard.tag.rt.core.OutTag
+ JSP
+
+
+Expression to be evaluated.
+
+ value
+ true
+ true
+
+
+
+Default value if the resulting value is null.
+
+ default
+ false
+ true
+
+
+
+Determines whether characters <,>,&,'," in the
+resulting string should be converted to their
+corresponding character entity codes. Default value is
+true.
+
+ escapeXml
+ false
+ true
+
+
+
+
+
+
+ Subtag of <choose> that follows <when> tags
+ and runs only if all of the prior conditions evaluated to
+ 'false'
+
+ otherwise
+ org.apache.taglibs.standard.tag.common.core.OtherwiseTag
+ JSP
+
+
+
+
+ Adds a parameter to a containing 'import' tag's URL.
+
+ param
+ org.apache.taglibs.standard.tag.rt.core.ParamTag
+ JSP
+
+
+Name of the query string parameter.
+
+ name
+ true
+ true
+
+
+
+Value of the parameter.
+
+ value
+ false
+ true
+
+
+
+
+
+ Redirects to a new URL.
+
+ redirect
+ org.apache.taglibs.standard.tag.rt.core.RedirectTag
+ JSP
+
+
+The URL of the resource to redirect to.
+
+ url
+ false
+ true
+
+
+
+Name of the context when redirecting to a relative URL
+resource that belongs to a foreign context.
+
+ context
+ false
+ true
+
+
+
+
+
+ Removes a scoped variable (from a particular scope, if specified).
+
+ remove
+ org.apache.taglibs.standard.tag.common.core.RemoveTag
+ empty
+
+
+Name of the scoped variable to be removed.
+
+ var
+ true
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Sets the result of an expression evaluation in a 'scope'
+
+ set
+ org.apache.taglibs.standard.tag.rt.core.SetTag
+ JSP
+
+
+Name of the exported scoped variable to hold the value
+specified in the action. The type of the scoped variable is
+whatever type the value expression evaluates to.
+
+ var
+ false
+ false
+
+
+
+Expression to be evaluated.
+
+ value
+ false
+ true
+
+
+
+Target object whose property will be set. Must evaluate to
+a JavaBeans object with setter property property, or to a
+java.util.Map object.
+
+ target
+ false
+ true
+
+
+
+Name of the property to be set in the target object.
+
+ property
+ false
+ true
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Creates a URL with optional query parameters.
+
+ url
+ org.apache.taglibs.standard.tag.rt.core.UrlTag
+ JSP
+
+
+Name of the exported scoped variable for the
+processed url. The type of the scoped variable is
+String.
+
+ var
+ false
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+URL to be processed.
+
+ value
+ false
+ true
+
+
+
+Name of the context when specifying a relative URL
+resource that belongs to a foreign context.
+
+ context
+ false
+ true
+
+
+
+
+
+ Subtag of <choose> that includes its body if its
+ condition evalutes to 'true'
+
+ when
+ org.apache.taglibs.standard.tag.rt.core.WhenTag
+ JSP
+
+
+The test condition that determines whether or not the
+body content should be processed.
+
+ test
+ true
+ true
+ boolean
+
+
+
+
diff --git a/qanban-domain-plugin/web-app/WEB-INF/tld/fmt.tld b/qanban-domain-plugin/web-app/WEB-INF/tld/fmt.tld
new file mode 100644
index 0000000..3b9a54a
--- /dev/null
+++ b/qanban-domain-plugin/web-app/WEB-INF/tld/fmt.tld
@@ -0,0 +1,671 @@
+
+
+
+
+ JSTL 1.1 i18n-capable formatting library
+ JSTL fmt
+ 1.1
+ fmt
+ http://java.sun.com/jsp/jstl/fmt
+
+
+
+ Provides core validation features for JSTL tags.
+
+
+ org.apache.taglibs.standard.tlv.JstlFmtTLV
+
+
+
+
+
+ Sets the request character encoding
+
+ requestEncoding
+ org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag
+ empty
+
+
+Name of character encoding to be applied when
+decoding request parameters.
+
+ value
+ false
+ true
+
+
+
+
+
+ Stores the given locale in the locale configuration variable
+
+ setLocale
+ org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag
+ empty
+
+
+A String value is interpreted as the
+printable representation of a locale, which
+must contain a two-letter (lower-case)
+language code (as defined by ISO-639),
+and may contain a two-letter (upper-case)
+country code (as defined by ISO-3166).
+Language and country codes must be
+separated by hyphen (-) or underscore
+(_).
+
+ value
+ true
+ true
+
+
+
+Vendor- or browser-specific variant.
+See the java.util.Locale javadocs for
+more information on variants.
+
+ variant
+ false
+ true
+
+
+
+Scope of the locale configuration variable.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Specifies the time zone for any time formatting or parsing actions
+ nested in its body
+
+ timeZone
+ org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag
+ JSP
+
+
+The time zone. A String value is interpreted as
+a time zone ID. This may be one of the time zone
+IDs supported by the Java platform (such as
+"America/Los_Angeles") or a custom time zone
+ID (such as "GMT-8"). See
+java.util.TimeZone for more information on
+supported time zone formats.
+
+ value
+ true
+ true
+
+
+
+
+
+ Stores the given time zone in the time zone configuration variable
+
+ setTimeZone
+ org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag
+ empty
+
+
+The time zone. A String value is interpreted as
+a time zone ID. This may be one of the time zone
+IDs supported by the Java platform (such as
+"America/Los_Angeles") or a custom time zone
+ID (such as "GMT-8"). See java.util.TimeZone for
+more information on supported time zone
+formats.
+
+ value
+ true
+ true
+
+
+
+Name of the exported scoped variable which
+stores the time zone of type
+java.util.TimeZone.
+
+ var
+ false
+ false
+
+
+
+Scope of var or the time zone configuration
+variable.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Loads a resource bundle to be used by its tag body
+
+ bundle
+ org.apache.taglibs.standard.tag.rt.fmt.BundleTag
+ JSP
+
+
+Resource bundle base name. This is the bundle's
+fully-qualified resource name, which has the same
+form as a fully-qualified class name, that is, it uses
+"." as the package component separator and does not
+have any file type (such as ".class" or ".properties")
+suffix.
+
+ basename
+ true
+ true
+
+
+
+Prefix to be prepended to the value of the message
+key of any nested <fmt:message> action.
+
+ prefix
+ false
+ true
+
+
+
+
+
+ Loads a resource bundle and stores it in the named scoped variable or
+ the bundle configuration variable
+
+ setBundle
+ org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag
+ empty
+
+
+Resource bundle base name. This is the bundle's
+fully-qualified resource name, which has the same
+form as a fully-qualified class name, that is, it uses
+"." as the package component separator and does not
+have any file type (such as ".class" or ".properties")
+suffix.
+
+ basename
+ true
+ true
+
+
+
+Name of the exported scoped variable which stores
+the i18n localization context of type
+javax.servlet.jsp.jstl.fmt.LocalizationC
+ontext.
+
+ var
+ false
+ false
+
+
+
+Scope of var or the localization context
+configuration variable.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Maps key to localized message and performs parametric replacement
+
+ message
+ org.apache.taglibs.standard.tag.rt.fmt.MessageTag
+ JSP
+
+
+Message key to be looked up.
+
+ key
+ false
+ true
+
+
+
+Localization context in whose resource
+bundle the message key is looked up.
+
+ bundle
+ false
+ true
+
+
+
+Name of the exported scoped variable
+which stores the localized message.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Supplies an argument for parametric replacement to a containing
+ <message> tag
+
+ param
+ org.apache.taglibs.standard.tag.rt.fmt.ParamTag
+ JSP
+
+
+Argument used for parametric replacement.
+
+ value
+ false
+ true
+
+
+
+
+
+ Formats a numeric value as a number, currency, or percentage
+
+ formatNumber
+ org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag
+ JSP
+
+
+Numeric value to be formatted.
+
+ value
+ false
+ true
+
+
+
+Specifies whether the value is to be
+formatted as number, currency, or
+percentage.
+
+ type
+ false
+ true
+
+
+
+Custom formatting pattern.
+
+ pattern
+ false
+ true
+
+
+
+ISO 4217 currency code. Applied only
+when formatting currencies (i.e. if type is
+equal to "currency"); ignored otherwise.
+
+ currencyCode
+ false
+ true
+
+
+
+Currency symbol. Applied only when
+formatting currencies (i.e. if type is equal
+to "currency"); ignored otherwise.
+
+ currencySymbol
+ false
+ true
+
+
+
+Specifies whether the formatted output
+will contain any grouping separators.
+
+ groupingUsed
+ false
+ true
+
+
+
+Maximum number of digits in the integer
+portion of the formatted output.
+
+ maxIntegerDigits
+ false
+ true
+
+
+
+Minimum number of digits in the integer
+portion of the formatted output.
+
+ minIntegerDigits
+ false
+ true
+
+
+
+Maximum number of digits in the
+fractional portion of the formatted output.
+
+ maxFractionDigits
+ false
+ true
+
+
+
+Minimum number of digits in the
+fractional portion of the formatted output.
+
+ minFractionDigits
+ false
+ true
+
+
+
+Name of the exported scoped variable
+which stores the formatted result as a
+String.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Parses the string representation of a number, currency, or percentage
+
+ parseNumber
+ org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag
+ JSP
+
+
+String to be parsed.
+
+ value
+ false
+ true
+
+
+
+Specifies whether the string in the value
+attribute should be parsed as a number,
+currency, or percentage.
+
+ type
+ false
+ true
+
+
+
+Custom formatting pattern that determines
+how the string in the value attribute is to be
+parsed.
+
+ pattern
+ false
+ true
+
+
+
+Locale whose default formatting pattern (for
+numbers, currencies, or percentages,
+respectively) is to be used during the parse
+operation, or to which the pattern specified
+via the pattern attribute (if present) is
+applied.
+
+ parseLocale
+ false
+ true
+
+
+
+Specifies whether just the integer portion of
+the given value should be parsed.
+
+ integerOnly
+ false
+ true
+
+
+
+Name of the exported scoped variable which
+stores the parsed result (of type
+java.lang.Number).
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Formats a date and/or time using the supplied styles and pattern
+
+ formatDate
+ org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag
+ empty
+
+
+Date and/or time to be formatted.
+
+ value
+ true
+ true
+
+
+
+Specifies whether the time, the date, or both
+the time and date components of the given
+date are to be formatted.
+
+ type
+ false
+ true
+
+
+
+Predefined formatting style for dates. Follows
+the semantics defined in class
+java.text.DateFormat. Applied only
+when formatting a date or both a date and
+time (i.e. if type is missing or is equal to
+"date" or "both"); ignored otherwise.
+
+ dateStyle
+ false
+ true
+
+
+
+Predefined formatting style for times. Follows
+the semantics defined in class
+java.text.DateFormat. Applied only
+when formatting a time or both a date and
+time (i.e. if type is equal to "time" or "both");
+ignored otherwise.
+
+ timeStyle
+ false
+ true
+
+
+
+Custom formatting style for dates and times.
+
+ pattern
+ false
+ true
+
+
+
+Time zone in which to represent the formatted
+time.
+
+ timeZone
+ false
+ true
+
+
+
+Name of the exported scoped variable which
+stores the formatted result as a String.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Parses the string representation of a date and/or time
+
+ parseDate
+ org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag
+ JSP
+
+
+Date string to be parsed.
+
+ value
+ false
+ true
+
+
+
+Specifies whether the date string in the
+value attribute is supposed to contain a
+time, a date, or both.
+
+ type
+ false
+ true
+
+
+
+Predefined formatting style for days
+which determines how the date
+component of the date string is to be
+parsed. Applied only when formatting a
+date or both a date and time (i.e. if type
+is missing or is equal to "date" or "both");
+ignored otherwise.
+
+ dateStyle
+ false
+ true
+
+
+
+Predefined formatting styles for times
+which determines how the time
+component in the date string is to be
+parsed. Applied only when formatting a
+time or both a date and time (i.e. if type
+is equal to "time" or "both"); ignored
+otherwise.
+
+ timeStyle
+ false
+ true
+
+
+
+Custom formatting pattern which
+determines how the date string is to be
+parsed.
+
+ pattern
+ false
+ true
+
+
+
+Time zone in which to interpret any time
+information in the date string.
+
+ timeZone
+ false
+ true
+
+
+
+Locale whose predefined formatting styles
+for dates and times are to be used during
+the parse operation, or to which the
+pattern specified via the pattern
+attribute (if present) is applied.
+
+ parseLocale
+ false
+ true
+
+
+
+Name of the exported scoped variable in
+which the parsing result (of type
+java.util.Date) is stored.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
diff --git a/qanban-domain-plugin/web-app/WEB-INF/tld/grails.tld b/qanban-domain-plugin/web-app/WEB-INF/tld/grails.tld
new file mode 100644
index 0000000..d3acc1c
--- /dev/null
+++ b/qanban-domain-plugin/web-app/WEB-INF/tld/grails.tld
@@ -0,0 +1,551 @@
+
+
+ The Grails (Groovy on Rails) custom tag library
+ 0.2
+ grails
+ http://grails.codehaus.org/tags
+
+
+
+ link
+ org.codehaus.groovy.grails.web.taglib.jsp.JspLinkTag
+ JSP
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+ true
+
+
+ form
+ org.codehaus.groovy.grails.web.taglib.jsp.JspFormTag
+ JSP
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ method
+ true
+ true
+
+ true
+
+
+ select
+ org.codehaus.groovy.grails.web.taglib.jsp.JspSelectTag
+ JSP
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+
+ optionKey
+ false
+ true
+
+
+ optionValue
+ false
+ true
+
+ true
+
+
+ datePicker
+ org.codehaus.groovy.grails.web.taglib.jsp.JspDatePickerTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+
+ precision
+ false
+ true
+
+ false
+
+
+ currencySelect
+ org.codehaus.groovy.grails.web.taglib.jsp.JspCurrencySelectTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+ true
+
+
+ localeSelect
+ org.codehaus.groovy.grails.web.taglib.jsp.JspLocaleSelectTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+ true
+
+
+ timeZoneSelect
+ org.codehaus.groovy.grails.web.taglib.jsp.JspTimeZoneSelectTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+ true
+
+
+ checkBox
+ org.codehaus.groovy.grails.web.taglib.jsp.JspCheckboxTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ true
+ true
+
+ true
+
+
+ hasErrors
+ org.codehaus.groovy.grails.web.taglib.jsp.JspHasErrorsTag
+ JSP
+
+ model
+ false
+ true
+
+
+ bean
+ false
+ true
+
+
+ field
+ false
+ true
+
+ false
+
+
+ eachError
+ org.codehaus.groovy.grails.web.taglib.jsp.JspEachErrorTag
+ JSP
+
+ model
+ false
+ true
+
+
+ bean
+ false
+ true
+
+
+ field
+ false
+ true
+
+ false
+
+
+ renderErrors
+ org.codehaus.groovy.grails.web.taglib.jsp.JspEachErrorTag
+ JSP
+
+ model
+ false
+ true
+
+
+ bean
+ false
+ true
+
+
+ field
+ false
+ true
+
+
+ as
+ true
+ true
+
+ false
+
+
+ message
+ org.codehaus.groovy.grails.web.taglib.jsp.JspMessageTag
+ JSP
+
+ code
+ false
+ true
+
+
+ error
+ false
+ true
+
+
+ default
+ false
+ true
+
+ false
+
+
+ remoteFunction
+ org.codehaus.groovy.grails.web.taglib.jsp.JspRemoteFunctionTag
+ empty
+
+ before
+ false
+ true
+
+
+ after
+ false
+ true
+
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+
+ asynchronous
+ false
+ true
+
+
+ method
+ false
+ true
+
+
+ update
+ false
+ true
+
+
+ onSuccess
+ false
+ true
+
+
+ onFailure
+ false
+ true
+
+
+ onComplete
+ false
+ true
+
+
+ onLoading
+ false
+ true
+
+
+ onLoaded
+ false
+ true
+
+
+ onInteractive
+ false
+ true
+
+ true
+
+
+ remoteLink
+ org.codehaus.groovy.grails.web.taglib.jsp.JspRemoteLinkTag
+ JSP
+
+ before
+ false
+ true
+
+
+ after
+ false
+ true
+
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+
+ asynchronous
+ false
+ true
+
+
+ method
+ false
+ true
+
+
+ update
+ false
+ true
+
+
+ onSuccess
+ false
+ true
+
+
+ onFailure
+ false
+ true
+
+
+ onComplete
+ false
+ true
+
+
+ onLoading
+ false
+ true
+
+
+ onLoaded
+ false
+ true
+
+
+ onInteractive
+ false
+ true
+
+ true
+
+
+ formRemote
+ org.codehaus.groovy.grails.web.taglib.jsp.JspFormRemoteTag
+ JSP
+
+ before
+ false
+ true
+
+
+ after
+ false
+ true
+
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+
+ asynchronous
+ false
+ true
+
+
+ method
+ false
+ true
+
+
+ update
+ false
+ true
+
+
+ onSuccess
+ false
+ true
+
+
+ onFailure
+ false
+ true
+
+
+ onComplete
+ false
+ true
+
+
+ onLoading
+ false
+ true
+
+
+ onLoaded
+ false
+ true
+
+
+ onInteractive
+ false
+ true
+
+ true
+
+
+ invokeTag
+ org.codehaus.groovy.grails.web.taglib.jsp.JspInvokeGrailsTagLibTag
+ JSP
+
+ it
+ java.lang.Object
+ true
+ NESTED
+
+
+ name
+ true
+ true
+
+ true
+
+
+
diff --git a/qanban-domain-plugin/web-app/WEB-INF/tld/spring.tld b/qanban-domain-plugin/web-app/WEB-INF/tld/spring.tld
new file mode 100644
index 0000000..1bc7091
--- /dev/null
+++ b/qanban-domain-plugin/web-app/WEB-INF/tld/spring.tld
@@ -0,0 +1,311 @@
+
+
+
+
+
+ 1.1.1
+
+ 1.2
+
+ Spring
+
+ http://www.springframework.org/tags
+
+ Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller
+
+
+
+
+ htmlEscape
+ org.springframework.web.servlet.tags.HtmlEscapeTag
+ JSP
+
+
+ Sets default HTML escape value for the current page.
+ Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
+
+
+
+ defaultHtmlEscape
+ true
+ true
+
+
+
+
+
+
+
+ escapeBody
+ org.springframework.web.servlet.tags.EscapeBodyTag
+ JSP
+
+
+ Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ htmlEscape
+ false
+ true
+
+
+
+ javaScriptEscape
+ false
+ true
+
+
+
+
+
+
+
+ message
+ org.springframework.web.servlet.tags.MessageTag
+ JSP
+
+
+ Retrieves the message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ code
+ false
+ true
+
+
+
+ arguments
+ false
+ true
+
+
+
+ text
+ false
+ true
+
+
+
+ var
+ false
+ true
+
+
+
+ scope
+ false
+ true
+
+
+
+ htmlEscape
+ false
+ true
+
+
+
+ javaScriptEscape
+ false
+ true
+
+
+
+
+
+
+
+ theme
+ org.springframework.web.servlet.tags.ThemeTag
+ JSP
+
+
+ Retrieves the theme message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ code
+ false
+ true
+
+
+
+ arguments
+ false
+ true
+
+
+
+ text
+ false
+ true
+
+
+
+ var
+ false
+ true
+
+
+
+ scope
+ false
+ true
+
+
+
+ htmlEscape
+ false
+ true
+
+
+
+ javaScriptEscape
+ false
+ true
+
+
+
+
+
+
+
+ hasBindErrors
+ org.springframework.web.servlet.tags.BindErrorsTag
+ JSP
+
+
+ Provides Errors instance in case of bind errors.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ errors
+ org.springframework.validation.Errors
+
+
+
+ name
+ true
+ true
+
+
+
+ htmlEscape
+ false
+ true
+
+
+
+
+
+
+
+ nestedPath
+ org.springframework.web.servlet.tags.NestedPathTag
+ JSP
+
+
+ Sets a nested path to be used by the bind tag's path.
+
+
+
+ nestedPath
+ java.lang.String
+
+
+
+ path
+ true
+ true
+
+
+
+
+
+
+
+ bind
+ org.springframework.web.servlet.tags.BindTag
+ JSP
+
+
+ Provides BindStatus object for the given bind path.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ status
+ org.springframework.web.servlet.support.BindStatus
+
+
+
+ path
+ true
+ true
+
+
+
+ ignoreNestedPath
+ false
+ true
+
+
+
+ htmlEscape
+ false
+ true
+
+
+
+
+
+
+
+ transform
+ org.springframework.web.servlet.tags.TransformTag
+ JSP
+
+
+ Provides transformation of variables to Strings, using an appropriate
+ custom PropertyEditor from BindTag (can only be used inside BindTag).
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+
+
+
+ value
+ true
+ true
+
+
+
+ var
+ false
+ true
+
+
+
+ scope
+ false
+ true
+
+
+
+ htmlEscape
+ false
+ true
+
+
+
+
+