From 24cb22b88603e03527d5cd97fc6a3b04535990ac Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 2 Jan 2015 17:07:26 +0100 Subject: [PATCH 001/369] create JAX-RS configuration closes #2 --- .../java/ch/sportchef/business/JAXRSConfiguration.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/JAXRSConfiguration.java diff --git a/src/main/java/ch/sportchef/business/JAXRSConfiguration.java b/src/main/java/ch/sportchef/business/JAXRSConfiguration.java new file mode 100644 index 0000000..1dfc648 --- /dev/null +++ b/src/main/java/ch/sportchef/business/JAXRSConfiguration.java @@ -0,0 +1,8 @@ +package ch.sportchef.business; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +@ApplicationPath("api") +public class JAXRSConfiguration extends Application { +} From 25a17310b1bce829c6996fbe7055b9b35b6d7a22 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 4 Jan 2015 17:10:15 +0100 Subject: [PATCH 002/369] RESTful service to create a new user closes #3 --- doc/sportchef_technical_documentation.pdf | Bin 0 -> 35701 bytes doc/sportchef_technical_documentation.tex | 176 ++++++++++++++++++ .../business/user/boundary/UserManager.java | 20 ++ .../business/user/boundary/UsersResource.java | 33 ++++ .../sportchef/business/user/entity/User.java | 91 +++++++++ src/main/resources/META-INF/persistence.xml | 9 + src/main/webapp/beans.xml | 8 + src/main/webapp/faces-config.xml | 7 + .../business/user/bundary/UserResourceIT.java | 68 +++++++ 9 files changed, 412 insertions(+) create mode 100644 doc/sportchef_technical_documentation.pdf create mode 100644 doc/sportchef_technical_documentation.tex create mode 100644 src/main/java/ch/sportchef/business/user/boundary/UserManager.java create mode 100644 src/main/java/ch/sportchef/business/user/boundary/UsersResource.java create mode 100644 src/main/java/ch/sportchef/business/user/entity/User.java create mode 100644 src/main/resources/META-INF/persistence.xml create mode 100644 src/main/webapp/beans.xml create mode 100644 src/main/webapp/faces-config.xml create mode 100644 src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3822a45ff0eb27974f51a189f96d824cb2da0d2d GIT binary patch literal 35701 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�zT3fO;MaMTT53kw50nj07AuYozNSC>;UAd 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 literal 0 HcmV?d00001 diff --git a/doc/sportchef_technical_documentation.tex b/doc/sportchef_technical_documentation.tex new file mode 100644 index 0000000..74eb82c --- /dev/null +++ b/doc/sportchef_technical_documentation.tex @@ -0,0 +1,176 @@ +\documentclass[a4paper,openright,twoside]{report} + +\usepackage{hyperref} +\usepackage{bera} % optional: just to have a nice mono-spaced font +\usepackage{listings} +\usepackage{lipsum} % just to automatically generate text +\usepackage{tocbibind} +\usepackage{xcolor} + +\addtolength{\hoffset}{-1cm} +\addtolength{\textwidth}{2cm} +\addtolength{\voffset}{-1cm} +\addtolength{\textheight}{2cm} + +\colorlet{punct}{red!60!black} +\definecolor{background}{HTML}{EEEEEE} +\definecolor{delim}{RGB}{20,105,176} +\colorlet{numb}{magenta!60!black} + +\lstset{ + basicstyle=\normalfont\ttfamily, + numbers=left, + numberstyle=\scriptsize, + stepnumber=1, + numbersep=8pt, + showstringspaces=false, + breaklines=true, + frame=lines, + backgroundcolor=\color{background}, + tabsize=2, +} +\lstdefinelanguage{json}{ + literate= + *{0}{{{\color{numb}0}}}{1} + {1}{{{\color{numb}1}}}{1} + {2}{{{\color{numb}2}}}{1} + {3}{{{\color{numb}3}}}{1} + {4}{{{\color{numb}4}}}{1} + {5}{{{\color{numb}5}}}{1} + {6}{{{\color{numb}6}}}{1} + {7}{{{\color{numb}7}}}{1} + {8}{{{\color{numb}8}}}{1} + {9}{{{\color{numb}9}}}{1} + {:}{{{\color{punct}{:}}}}{1} + {,}{{{\color{punct}{,}}}}{1} + {\{}{{{\color{delim}{\{}}}}{1} + {\}}{{{\color{delim}{\}}}}}{1} + {[}{{{\color{delim}{[}}}}{1} + {]}{{{\color{delim}{]}}}}{1}, +} + +\makeatletter +\newcommand\ackname{Acknowledgements} +\if@titlepage + \newenvironment{acknowledgements}{% + \titlepage + \null\vfil + \@beginparpenalty\@lowpenalty + \begin{center}% + \bfseries \ackname + \@endparpenalty\@M + \end{center}}% + {\par\vfil\null\endtitlepage} +\else + \newenvironment{acknowledgements}{% + \if@twocolumn + \section*{\abstractname}% + \else + \small + \begin{center}% + {\bfseries \ackname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \quotation + \fi} + {\if@twocolumn\else\endquotation\fi} +\fi +\makeatother + +\renewcommand{\listoffigures}{\begingroup + \tocchapter + \tocfile{\listfigurename}{lof} +\endgroup} + +\renewcommand{\listoftables}{\begingroup + \tocchapter + \tocfile{\listtablename}{lot} +\endgroup} + +\title{\huge SportChef \\[0.25cm] \LARGE Technical Documentation} +\author{Marcus Fihlon} +\date{October 14, 2015} + +\begin{document} + +\maketitle +\newpage + +\begin{abstract} +This document holds the technical documentation for SportChef, a suite of applications and services to organise sports events from registration through the execution to the ranking list publication, everything in real-time! + +Here you can find the definitions and specifications needed to develop all parts of SportChef and provide maintenance. Actually SportChef is under heavy development --- this means that this document is under heavy development, too! +\end{abstract} +\newpage + +\begin{acknowledgements} +Firstly I would like to thank Christian Marbet, who had the initial idea for SportChef and helped me during the whole development process. I would like to thank Gunnar Donis for creating all the wireframes and for having put up with all the crazy hackers. Special thanks to all the people at all Hackergarten events all over the world for their engagement in helping us to make our idea of SportChef reality. Furthermore I would like to thank all other people for their support during the development of SportChef. +\end{acknowledgements} +\newpage + +\tableofcontents +\newpage + +\chapter{Common} + +\section{Communication}\label{sec:Communication} +The communication between the server and the clients is based on HTTP\footnote{\url{http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol}} requests and uses the REST\footnote{\url{http://en.wikipedia.org/wiki/Representational_state_transfer}} approach. Data that will be exchanged between the server and the clients has to be conform to the JSON\footnote{\url{http://en.wikipedia.org/wiki/JSON}} standard. + +\section{Security} +While the first version is under development, the connections are not encrypted. SSL\footnote{\url{http://en.wikipedia.org/wiki/Transport_Layer_Security}} security (HTTPS\footnote{\url{http://en.wikipedia.org/wiki/HTTP_Secure}}) will be added later before the release. This decision is based on two reasons: First, a commercial SSL certificate is needed which is valid only for a limited time. Buying it before it is really needed makes no sense and wastes money. Second, adding security using SSL certificates adds additional complexity to development in a very early stage which makes the learning curve for new developers unnecessary steep. + +\section{Definitions} + +\subsection{Server} + +\subsubsection{Technical specifications} +The SportChef server is written in Java\footnote{\url{http://en.wikipedia.org/wiki/Java_(programming_language)}} using JavaEE\footnote{\url{https://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition}} technology and can be deployed to every application server \footnote{\url{https://en.wikipedia.org/wiki/Application_server}} which is Java EE 7 compatible. + +\subsection{Webinterface} + +\subsubsection{Technical specifications} +The web client is written in Java using JSF\footnote{\url{https://en.wikipedia.org/wiki/JavaServer_Faces}} technology and the PrimeFaces\footnote{\url{http://www.primefaces.org}} framework. + +\subsubsection{Browser support} +The SportChef web interface uses HTML 5, so every HTML 5 capable browser will do. The web interface can be accessed by desktop systems as well as by tablet computers and smartphones. The user interface is fully responsive. + +\chapter{Application Programming Interface} + +\section{General information} + +\subsection{JSON listings} +The JSON listings in this documentation are reformatted for better readability. The server usually delivers a "compressed" variant without unnecessary spaces and line breaks. + +\section{User Resource} + +\subsection{Create a new user} +Send a POST request with the following JSON to the URI: \url{/api/users} + +\begin{lstlisting}[language=json] +{ + "firstName" : "John", + "lastName" : "Doe", + "phone" : "+41 79 555 00 01", + "email" : "john.doe@sportchef.ch" +} +\end{lstlisting} + +The response usually is a "201 Created" with a "Location" header set to the URI of the newly created user or an error response. + +\begin{appendix} + +\listoffigures + +\listoftables + +\chapter{License} +Copyright \copyright\ 2015 Marcus Fihlon +\\[0.25cm] +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +\\[0.25cm] +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +\\[0.25cm] +You should have received a copy of the GNU Affero General Public License along with this program. If not, see \texttt{http://www.gnu.org/licenses/}. + +\end{appendix} + +\end{document} \ No newline at end of file diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java new file mode 100644 index 0000000..979f265 --- /dev/null +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -0,0 +1,20 @@ +package ch.sportchef.business.user.boundary; + +import ch.sportchef.business.user.entity.User; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.validation.constraints.NotNull; + +@Stateless +public class UserManager { + + @PersistenceContext + private EntityManager em; + + public User save(@NotNull final User user) { + return em.merge(user); + } + +} diff --git a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java new file mode 100644 index 0000000..6f41976 --- /dev/null +++ b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java @@ -0,0 +1,33 @@ +package ch.sportchef.business.user.boundary; + +import ch.sportchef.business.user.entity.User; + +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.validation.Valid; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import java.net.URI; + +@Stateless +@Path("users") +@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) +public class UsersResource { + + @Inject + private UserManager manager; + + @POST + public Response save(@Valid User user, @Context UriInfo info) { + final User saved = manager.save(user); + final long id = saved.getId(); + final URI uri = info.getAbsolutePathBuilder().path("/" + id).build(); + return Response.created(uri).build(); + } + +} diff --git a/src/main/java/ch/sportchef/business/user/entity/User.java b/src/main/java/ch/sportchef/business/user/entity/User.java new file mode 100644 index 0000000..37b436f --- /dev/null +++ b/src/main/java/ch/sportchef/business/user/entity/User.java @@ -0,0 +1,91 @@ +package ch.sportchef.business.user.entity; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Version; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +@Entity +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class User { + + @Id + @GeneratedValue + private long id; + + @Version + private long version; + + @Size(min = 1) + private String firstName; + + @Size(min = 1) + private String lastName; + + @Size(min = 1) + private String phone; + + @Size(min = 1) + private String email; + + public User() { + super(); + } + + public User(@NotNull final String firstName, + @NotNull final String lastName, + @NotNull final String phone, + @NotNull final String email) { + this(); + this.firstName = firstName; + this.lastName = lastName; + this.phone = phone; + this.email = email; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(@NotNull final String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(@NotNull final String lastName) { + this.lastName = lastName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(@NotNull final String phone) { + this.phone = phone; + } + + public String getEmail() { + return email; + } + + public void setEmail(@NotNull final String email) { + this.email = email; + } +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..df35a54 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/main/webapp/beans.xml b/src/main/webapp/beans.xml new file mode 100644 index 0000000..34d2511 --- /dev/null +++ b/src/main/webapp/beans.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/src/main/webapp/faces-config.xml b/src/main/webapp/faces-config.xml new file mode 100644 index 0000000..c2df863 --- /dev/null +++ b/src/main/webapp/faces-config.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java new file mode 100644 index 0000000..f6295a6 --- /dev/null +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -0,0 +1,68 @@ +package ch.sportchef.business.user.bundary; + +import com.airhacks.rulz.jaxrsclient.JAXRSClientProvider; +import org.junit.Rule; +import org.junit.Test; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Response; + +import static com.airhacks.rulz.jaxrsclient.JAXRSClientProvider.buildWithURI; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertTrue; + +public class UserResourceIT { + + @Rule + public final JAXRSClientProvider provider = buildWithURI("http://localhost:8080/sportchef/api/users"); + + @Test + public void crud() { + // create + final long newUserId = createWithSuccess(); + createWithError(); + } + + public long createWithSuccess() { + // arrange + final JsonObject userToCreate = Json.createObjectBuilder() + .add("firstName", "John") + .add("lastName", "Doe") + .add("phone", "+41 79 555 00 01") + .add("email", "john.doe@sportchef.ch") + .build(); + + // act + final Response response = this.provider.target().request().post(Entity.json(userToCreate)); + + //assert + assertThat(response.getStatus(), is(201)); + final String location = response.getHeaderString("Location"); + assertThat(location, notNullValue()); + final long id = Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); + assertTrue(id > 0); + + return id; + } + + public void createWithError() { + // arrange + final JsonObject userToCreate = Json.createObjectBuilder() + .add("firstName", "") + .add("lastName", "") + .add("phone", "") + .add("email", "") + .build(); + + // act + final Response response = this.provider.target().request().post(Entity.json(userToCreate)); + + //assert + assertThat(response.getStatus(), is(400)); + } + +} From 0f8735e6bccc25ddac4478f201130951fbdf0252 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 6 Jan 2015 19:17:38 +0100 Subject: [PATCH 003/369] RESTful service to read a user closes #4 --- doc/sportchef_technical_documentation.pdf | Bin 35701 -> 36659 bytes doc/sportchef_technical_documentation.tex | 15 ++++++ pom.xml | 12 ++--- .../business/user/boundary/UserManager.java | 3 ++ .../business/user/boundary/UserResource.java | 27 ++++++++++ .../business/user/boundary/UsersResource.java | 12 +++-- .../sportchef/business/user/entity/User.java | 10 ++-- .../business/user/bundary/UserResourceIT.java | 51 ++++++++++++++++-- 8 files changed, 111 insertions(+), 19 deletions(-) create mode 100644 src/main/java/ch/sportchef/business/user/boundary/UserResource.java diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index 3822a45ff0eb27974f51a189f96d824cb2da0d2d..d53607cd339475e424bf91dd2a09f8d9ef0edc81 100644 GIT binary patch delta 23924 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 delta 23059 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.0 provided - - org.glassfish.jersey.core - jersey-client - 2.21.1 - org.glassfish javax.json 1.0.4 + + org.glassfish.jersey.core + jersey-client + 2.22.1 + org.glassfish.jersey.media jersey-media-json-processing - 2.21.1 + 2.22.1 junit diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java index 979f265..c74d662 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -17,4 +17,7 @@ public User save(@NotNull final User user) { return em.merge(user); } + public User findByUserId(final long userId) { + return em.find(User.class, userId); + } } diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java new file mode 100644 index 0000000..d92177d --- /dev/null +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -0,0 +1,27 @@ +package ch.sportchef.business.user.boundary; + +import ch.sportchef.business.user.entity.User; + +import javax.ws.rs.GET; +import javax.ws.rs.core.Response; + +public class UserResource { + + private long userId; + private UserManager manager; + + public UserResource(final long userId, final UserManager manager) { + this.userId = userId; + this.manager = manager; + } + + @GET + public Response find() { + final User user = manager.findByUserId(userId); + if (user == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + return Response.ok(user).build(); + } + +} diff --git a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java index 6f41976..ac61993 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java @@ -7,6 +7,7 @@ import javax.validation.Valid; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; @@ -23,11 +24,16 @@ public class UsersResource { private UserManager manager; @POST - public Response save(@Valid User user, @Context UriInfo info) { + public Response save(@Valid final User user, @Context final UriInfo info) { final User saved = manager.save(user); - final long id = saved.getId(); - final URI uri = info.getAbsolutePathBuilder().path("/" + id).build(); + final long userId = saved.getUserId(); + final URI uri = info.getAbsolutePathBuilder().path("/" + userId).build(); return Response.created(uri).build(); } + @Path("{userId}") + public UserResource find(@PathParam("userId") final long userId) { + return new UserResource(userId, manager); + } + } diff --git a/src/main/java/ch/sportchef/business/user/entity/User.java b/src/main/java/ch/sportchef/business/user/entity/User.java index 37b436f..38f3f50 100644 --- a/src/main/java/ch/sportchef/business/user/entity/User.java +++ b/src/main/java/ch/sportchef/business/user/entity/User.java @@ -17,7 +17,7 @@ public class User { @Id @GeneratedValue - private long id; + private long userId; @Version private long version; @@ -49,12 +49,12 @@ public User(@NotNull final String firstName, this.email = email; } - public long getId() { - return id; + public long getUserId() { + return userId; } - public void setId(long id) { - this.id = id; + public void setUserId(long id) { + this.userId = id; } public String getFirstName() { diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index f6295a6..9818825 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -7,12 +7,15 @@ import javax.json.Json; import javax.json.JsonObject; import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import static com.airhacks.rulz.jaxrsclient.JAXRSClientProvider.buildWithURI; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class UserResourceIT { @@ -23,11 +26,19 @@ public class UserResourceIT { @Test public void crud() { // create - final long newUserId = createWithSuccess(); - createWithError(); + final String location = createWithSuccess(); + createWithBadRequest(); + + // read + readWithSuccess(location); + readWithNotFound(location.substring(0, location.lastIndexOf("/") + 1) + Long.MAX_VALUE); + } + + private long getUserId(final String location) { + return Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); } - public long createWithSuccess() { + private String createWithSuccess() { // arrange final JsonObject userToCreate = Json.createObjectBuilder() .add("firstName", "John") @@ -46,10 +57,10 @@ public long createWithSuccess() { final long id = Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); assertTrue(id > 0); - return id; + return location; } - public void createWithError() { + private void createWithBadRequest() { // arrange final JsonObject userToCreate = Json.createObjectBuilder() .add("firstName", "") @@ -65,4 +76,34 @@ public void createWithError() { assertThat(response.getStatus(), is(400)); } + private void readWithSuccess(final String location) { + // arrange + + // act + final Response response = this.provider.target(location) + .request(MediaType.APPLICATION_JSON).get(); + final JsonObject jsonObject = response.readEntity(JsonObject.class); + + // assert + assertThat(response.getStatus(), is(200)); + assertEquals(jsonObject.getJsonNumber("userId").longValue(), getUserId(location)); + assertEquals(jsonObject.getString("firstName"), "John"); + assertEquals(jsonObject.getString("lastName"), "Doe"); + assertEquals(jsonObject.getString("phone"), "+41 79 555 00 01"); + assertEquals(jsonObject.getString("email"), "john.doe@sportchef.ch"); + } + + private void readWithNotFound(final String location) { + // arrange + + // act + final Response response = this.provider.target(location) + .request(MediaType.APPLICATION_JSON).get(); + final JsonObject jsonObject = response.readEntity(JsonObject.class); + + // assert + assertThat(response.getStatus(), is(404)); + assertNull(jsonObject); + } + } From 574eca69db7cfd4f3abc2373c91ae52cce5cd5bb Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 8 Jan 2015 19:39:34 +0100 Subject: [PATCH 004/369] RESTful service to read all users closes #5 --- .../business/user/boundary/UserManager.java | 14 +++++ .../business/user/boundary/UsersResource.java | 8 +++ .../business/user/bundary/UserResourceIT.java | 58 ++++++++++++++----- 3 files changed, 64 insertions(+), 16 deletions(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java index c74d662..1c75446 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -5,7 +5,12 @@ import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; +import java.util.List; @Stateless public class UserManager { @@ -20,4 +25,13 @@ public User save(@NotNull final User user) { public User findByUserId(final long userId) { return em.find(User.class, userId); } + + public List findAll() { + final CriteriaBuilder cb = em.getCriteriaBuilder(); + final CriteriaQuery cq = cb.createQuery(User.class); + final Root rootEntry = cq.from(User.class); + final CriteriaQuery all = cq.select(rootEntry); + final TypedQuery allQuery = em.createQuery(all); + return allQuery.getResultList(); + } } diff --git a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java index ac61993..96fd1df 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java @@ -5,6 +5,7 @@ import javax.ejb.Stateless; import javax.inject.Inject; import javax.validation.Valid; +import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -14,6 +15,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import java.net.URI; +import java.util.List; @Stateless @Path("users") @@ -31,6 +33,12 @@ public Response save(@Valid final User user, @Context final UriInfo info) { return Response.created(uri).build(); } + @GET + public Response findAll() { + final List allUsers = manager.findAll(); + return Response.ok(allUsers).build(); + } + @Path("{userId}") public UserResource find(@PathParam("userId") final long userId) { return new UserResource(userId, manager); diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index 9818825..d01f26c 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -5,6 +5,7 @@ import org.junit.Test; import javax.json.Json; +import javax.json.JsonArray; import javax.json.JsonObject; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; @@ -14,7 +15,8 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -25,20 +27,23 @@ public class UserResourceIT { @Test public void crud() { - // create - final String location = createWithSuccess(); - createWithBadRequest(); + // create a new user + final String location = createUserWithSuccess(); + createUserWithBadRequest(); - // read - readWithSuccess(location); - readWithNotFound(location.substring(0, location.lastIndexOf("/") + 1) + Long.MAX_VALUE); + // read one user + readOneUserWithSuccess(location); + readOneUserWithNotFound(location.substring(0, location.lastIndexOf("/") + 1) + Long.MAX_VALUE); + + // read all users + readAllUsers(location); // location of created user to do asserts } private long getUserId(final String location) { return Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); } - private String createWithSuccess() { + private String createUserWithSuccess() { // arrange final JsonObject userToCreate = Json.createObjectBuilder() .add("firstName", "John") @@ -60,7 +65,7 @@ private String createWithSuccess() { return location; } - private void createWithBadRequest() { + private void createUserWithBadRequest() { // arrange final JsonObject userToCreate = Json.createObjectBuilder() .add("firstName", "") @@ -76,7 +81,7 @@ private void createWithBadRequest() { assertThat(response.getStatus(), is(400)); } - private void readWithSuccess(final String location) { + private void readOneUserWithSuccess(final String location) { // arrange // act @@ -86,14 +91,15 @@ private void readWithSuccess(final String location) { // assert assertThat(response.getStatus(), is(200)); - assertEquals(jsonObject.getJsonNumber("userId").longValue(), getUserId(location)); - assertEquals(jsonObject.getString("firstName"), "John"); - assertEquals(jsonObject.getString("lastName"), "Doe"); - assertEquals(jsonObject.getString("phone"), "+41 79 555 00 01"); - assertEquals(jsonObject.getString("email"), "john.doe@sportchef.ch"); + assertNotNull(jsonObject); + assertThat(jsonObject.getJsonNumber("userId").longValue(), is(getUserId(location))); + assertThat(jsonObject.getString("firstName"), is("John")); + assertThat(jsonObject.getString("lastName"), is("Doe")); + assertThat(jsonObject.getString("phone"), is("+41 79 555 00 01")); + assertThat(jsonObject.getString("email"), is("john.doe@sportchef.ch")); } - private void readWithNotFound(final String location) { + private void readOneUserWithNotFound(final String location) { // arrange // act @@ -106,4 +112,24 @@ private void readWithNotFound(final String location) { assertNull(jsonObject); } + private void readAllUsers(final String location) { + // arrange + + // act + final Response response = this.provider.target() + .request(MediaType.APPLICATION_JSON).get(); + final JsonArray jsonArray = response.readEntity(JsonArray.class); + final JsonObject jsonObject = jsonArray.size() > 0 ? jsonArray.getJsonObject(jsonArray.size() - 1) : null; + + // assert + assertThat(response.getStatus(), is(200)); + assertFalse(jsonArray.isEmpty()); + assertNotNull(jsonObject); + assertThat(jsonObject.getJsonNumber("userId").longValue(), is(getUserId(location))); + assertThat(jsonObject.getString("firstName"), is("John")); + assertThat(jsonObject.getString("lastName"), is("Doe")); + assertThat(jsonObject.getString("phone"), is("+41 79 555 00 01")); + assertThat(jsonObject.getString("email"), is("john.doe@sportchef.ch")); + } + } From 0459c12e87448288f1373b3c7cba004a9bd3f769 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 10 Jan 2015 12:10:34 +0100 Subject: [PATCH 005/369] "beans.xml" is in wrong directory --- src/main/webapp/{ => WEB-INF}/beans.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/{ => WEB-INF}/beans.xml (100%) diff --git a/src/main/webapp/beans.xml b/src/main/webapp/WEB-INF/beans.xml similarity index 100% rename from src/main/webapp/beans.xml rename to src/main/webapp/WEB-INF/beans.xml From c704df7bdd272162368dea4efa37af0e179a9bb2 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 11 Jan 2015 12:11:01 +0100 Subject: [PATCH 006/369] "faces-config.xml" is in wrong directory --- src/main/webapp/{ => WEB-INF}/faces-config.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/{ => WEB-INF}/faces-config.xml (100%) diff --git a/src/main/webapp/faces-config.xml b/src/main/webapp/WEB-INF/faces-config.xml similarity index 100% rename from src/main/webapp/faces-config.xml rename to src/main/webapp/WEB-INF/faces-config.xml From 75c41b21dc6af5ec7ca9ce229d276f109c13b1ca Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 12 Jan 2015 12:11:37 +0100 Subject: [PATCH 007/369] fix dependency ordering problems with build file --- pom.xml | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index eeb974d..c8d1fcc 100644 --- a/pom.xml +++ b/pom.xml @@ -12,21 +12,6 @@ 7.0 provided - - org.glassfish - javax.json - 1.0.4 - - - org.glassfish.jersey.core - jersey-client - 2.22.1 - - - org.glassfish.jersey.media - jersey-media-json-processing - 2.22.1 - junit junit @@ -39,6 +24,24 @@ 0.0.3 test + + org.glassfish.jersey.core + jersey-client + 2.21.1 + test + + + org.glassfish + javax.json + 1.0.4 + test + + + org.glassfish.jersey.media + jersey-media-json-processing + 2.21.1 + test + sportchef From 663a210c079d65dc65cbdd0a675716a20de8e333 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 13 Jan 2015 12:12:30 +0100 Subject: [PATCH 008/369] prefix access to member variables with "this" --- .../ch/sportchef/business/user/boundary/UserManager.java | 8 ++++---- .../sportchef/business/user/boundary/UsersResource.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java index 1c75446..517619a 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -19,19 +19,19 @@ public class UserManager { private EntityManager em; public User save(@NotNull final User user) { - return em.merge(user); + return this.em.merge(user); } public User findByUserId(final long userId) { - return em.find(User.class, userId); + return this.em.find(User.class, userId); } public List findAll() { - final CriteriaBuilder cb = em.getCriteriaBuilder(); + final CriteriaBuilder cb = this.em.getCriteriaBuilder(); final CriteriaQuery cq = cb.createQuery(User.class); final Root rootEntry = cq.from(User.class); final CriteriaQuery all = cq.select(rootEntry); - final TypedQuery allQuery = em.createQuery(all); + final TypedQuery allQuery = this.em.createQuery(all); return allQuery.getResultList(); } } diff --git a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java index 96fd1df..4352fe3 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java @@ -27,7 +27,7 @@ public class UsersResource { @POST public Response save(@Valid final User user, @Context final UriInfo info) { - final User saved = manager.save(user); + final User saved = this.manager.save(user); final long userId = saved.getUserId(); final URI uri = info.getAbsolutePathBuilder().path("/" + userId).build(); return Response.created(uri).build(); @@ -35,13 +35,13 @@ public Response save(@Valid final User user, @Context final UriInfo info) { @GET public Response findAll() { - final List allUsers = manager.findAll(); + final List allUsers = this.manager.findAll(); return Response.ok(allUsers).build(); } @Path("{userId}") public UserResource find(@PathParam("userId") final long userId) { - return new UserResource(userId, manager); + return new UserResource(userId, this.manager); } } From f72920ac0de2453cd2d3cf8402d6e4e95de40187 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 14 Jan 2015 12:12:47 +0100 Subject: [PATCH 009/369] RESTful service to update a user closes #6 --- .../business/EJBExceptionMapper.java | 35 +++++++++ .../business/user/boundary/UserResource.java | 19 +++-- .../business/user/bundary/UserResourceIT.java | 74 ++++++++++++++++--- 3 files changed, 111 insertions(+), 17 deletions(-) create mode 100644 src/main/java/ch/sportchef/business/EJBExceptionMapper.java diff --git a/src/main/java/ch/sportchef/business/EJBExceptionMapper.java b/src/main/java/ch/sportchef/business/EJBExceptionMapper.java new file mode 100644 index 0000000..d3affca --- /dev/null +++ b/src/main/java/ch/sportchef/business/EJBExceptionMapper.java @@ -0,0 +1,35 @@ +package ch.sportchef.business; + +import javax.ejb.EJBException; +import javax.persistence.EntityNotFoundException; +import javax.persistence.OptimisticLockException; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class EJBExceptionMapper implements ExceptionMapper { + + @Override + public Response toResponse(EJBException e) { + Response unknownError = Response.serverError() + .header("cause", e.getMessage()) + .build(); + + Throwable cause = e.getCause(); + + if (cause == null) { + return unknownError; + } else if (e.getCause() instanceof EntityNotFoundException) { + return Response.status(Response.Status.NOT_FOUND) + .header("cause", cause.getMessage()) + .build(); + } else if (cause instanceof OptimisticLockException) { + return Response.status(Response.Status.CONFLICT) + .header("cause", cause.getMessage()) + .build(); + } + + return unknownError; + } +} \ No newline at end of file diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java index d92177d..ab7ad08 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -2,8 +2,10 @@ import ch.sportchef.business.user.entity.User; +import javax.validation.Valid; import javax.ws.rs.GET; -import javax.ws.rs.core.Response; +import javax.ws.rs.NotFoundException; +import javax.ws.rs.PUT; public class UserResource { @@ -16,12 +18,19 @@ public UserResource(final long userId, final UserManager manager) { } @GET - public Response find() { - final User user = manager.findByUserId(userId); + public User find() { + final User user = this.manager.findByUserId(this.userId); if (user == null) { - return Response.status(Response.Status.NOT_FOUND).build(); + throw new NotFoundException(String.format("user with id '%d' not found", userId)); } - return Response.ok(user).build(); + return user; + } + + @PUT + public User update(@Valid final User user) { + find(); // only update existing users + user.setUserId(this.userId); + return this.manager.save(user); } } diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index d01f26c..8c45c21 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -27,16 +27,20 @@ public class UserResourceIT { @Test public void crud() { - // create a new user + // create final String location = createUserWithSuccess(); + final String notFoundLocation = location.substring(0, location.lastIndexOf("/") + 1) + Long.MAX_VALUE; createUserWithBadRequest(); - // read one user + // read readOneUserWithSuccess(location); - readOneUserWithNotFound(location.substring(0, location.lastIndexOf("/") + 1) + Long.MAX_VALUE); - - // read all users + readOneUserWithNotFound(notFoundLocation); readAllUsers(location); // location of created user to do asserts + + // update + final JsonObject userToConflict = updateUserWithSuccess(location); + updateUserWithConflict(location, userToConflict); + updateUserWithNotFound(notFoundLocation); } private long getUserId(final String location) { @@ -53,10 +57,10 @@ private String createUserWithSuccess() { .build(); // act - final Response response = this.provider.target().request().post(Entity.json(userToCreate)); + final Response response = this.provider.target().request(MediaType.APPLICATION_JSON).post(Entity.json(userToCreate)); //assert - assertThat(response.getStatus(), is(201)); + assertThat(response.getStatus(), is(Response.Status.CREATED.getStatusCode())); final String location = response.getHeaderString("Location"); assertThat(location, notNullValue()); final long id = Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); @@ -75,10 +79,10 @@ private void createUserWithBadRequest() { .build(); // act - final Response response = this.provider.target().request().post(Entity.json(userToCreate)); + final Response response = this.provider.target().request(MediaType.APPLICATION_JSON).post(Entity.json(userToCreate)); //assert - assertThat(response.getStatus(), is(400)); + assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); } private void readOneUserWithSuccess(final String location) { @@ -90,7 +94,7 @@ private void readOneUserWithSuccess(final String location) { final JsonObject jsonObject = response.readEntity(JsonObject.class); // assert - assertThat(response.getStatus(), is(200)); + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); assertNotNull(jsonObject); assertThat(jsonObject.getJsonNumber("userId").longValue(), is(getUserId(location))); assertThat(jsonObject.getString("firstName"), is("John")); @@ -108,7 +112,7 @@ private void readOneUserWithNotFound(final String location) { final JsonObject jsonObject = response.readEntity(JsonObject.class); // assert - assertThat(response.getStatus(), is(404)); + assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); assertNull(jsonObject); } @@ -122,7 +126,7 @@ private void readAllUsers(final String location) { final JsonObject jsonObject = jsonArray.size() > 0 ? jsonArray.getJsonObject(jsonArray.size() - 1) : null; // assert - assertThat(response.getStatus(), is(200)); + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); assertFalse(jsonArray.isEmpty()); assertNotNull(jsonObject); assertThat(jsonObject.getJsonNumber("userId").longValue(), is(getUserId(location))); @@ -132,4 +136,50 @@ private void readAllUsers(final String location) { assertThat(jsonObject.getString("email"), is("john.doe@sportchef.ch")); } + private JsonObject updateUserWithSuccess(final String location) { + // arrange + final JsonObject userToUpdate = Json.createObjectBuilder() + .add("userId", getUserId(location)) + .add("firstName", "Jane") + .add("lastName", "Doe") + .add("phone", "+41 79 555 00 01") + .add("email", "jane.doe@sportchef.ch") + .build(); + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(userToUpdate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + + return userToUpdate; + } + + private void updateUserWithConflict(final String location, final JsonObject userToUpdate) { + // arrange + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(userToUpdate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.CONFLICT.getStatusCode())); + } + + private void updateUserWithNotFound(final String location) { + // arrange + final JsonObject userToUpdate = Json.createObjectBuilder() + .add("userId", getUserId(location)) + .add("firstName", "Jane") + .add("lastName", "Doe") + .add("phone", "+41 79 555 00 01") + .add("email", "jane.doe@sportchef.ch") + .build(); + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(userToUpdate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); + } + } From 6b83275ab4c28b55451ea5d34b4db573f5672422 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 16 Jan 2015 12:29:55 +0100 Subject: [PATCH 010/369] RESTful service to delete a user closes #7 --- .../business/user/boundary/UserManager.java | 5 ++++ .../business/user/boundary/UserResource.java | 9 +++++++ .../business/user/bundary/UserResourceIT.java | 24 +++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java index 517619a..4a679f9 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -34,4 +34,9 @@ public List findAll() { final TypedQuery allQuery = this.em.createQuery(all); return allQuery.getResultList(); } + + public void delete(final long userId) { + final User reference = em.getReference(User.class, userId); + em.remove(reference); + } } diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java index ab7ad08..f19d5c3 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -3,9 +3,11 @@ import ch.sportchef.business.user.entity.User; import javax.validation.Valid; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.NotFoundException; import javax.ws.rs.PUT; +import javax.ws.rs.core.Response; public class UserResource { @@ -33,4 +35,11 @@ public User update(@Valid final User user) { return this.manager.save(user); } + @DELETE + public Response delete() { + final User user = find(); // only delete existing users + this.manager.delete(user.getUserId()); + return Response.noContent().build(); + } + } diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index 8c45c21..936e4e5 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -41,6 +41,10 @@ public void crud() { final JsonObject userToConflict = updateUserWithSuccess(location); updateUserWithConflict(location, userToConflict); updateUserWithNotFound(notFoundLocation); + + // delete + deleteUserWithSuccess(location); + deleteUserWithNotFound(location); } private long getUserId(final String location) { @@ -182,4 +186,24 @@ private void updateUserWithNotFound(final String location) { assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); } + private void deleteUserWithSuccess(final String location) { + // arrange + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).delete(); + + //assert + assertThat(response.getStatus(), is(Response.Status.NO_CONTENT.getStatusCode())); + } + + private void deleteUserWithNotFound(final String location) { + // arrange + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).delete(); + + //assert + assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); + } + } From 0d30242f2318ba8ab883b1969ffadeed6b2a14c5 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 18 Jan 2015 13:36:59 +0100 Subject: [PATCH 011/369] update documentation for updating an user closes #15 --- doc/sportchef_technical_documentation.pdf | Bin 36659 -> 35711 bytes doc/sportchef_technical_documentation.tex | 26 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index d53607cd339475e424bf91dd2a09f8d9ef0edc81..bf06cd81f8f9a217b47c2992fc1436132267006b 100644 GIT binary patch delta 13207 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 Ob`CfS3UNgVxc>vE<1E_% delta 14119 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 F{|lekJ+1%% diff --git a/doc/sportchef_technical_documentation.tex b/doc/sportchef_technical_documentation.tex index 726f804..e1cc1b3 100644 --- a/doc/sportchef_technical_documentation.tex +++ b/doc/sportchef_technical_documentation.tex @@ -88,7 +88,7 @@ \title{\huge SportChef \\[0.25cm] \LARGE Technical Documentation} \author{Marcus Fihlon} -\date{October 14, 2015} +\date{October 15, 2015} \begin{document} @@ -171,6 +171,30 @@ \subsection{Read an existing user} } \end{lstlisting} +\subsection{Update an existing user} +Send a PUT request with the following JSON to the URI: \url{/api/users/{userId}} + +\begin{lstlisting}[language=json] +{ + "firstName" : "Jane", + "lastName" : "Doe", + "phone" : "+41 79 555 00 01", + "email" : "jane.doe@sportchef.ch" +} +\end{lstlisting} + +The data of the user with the specified ID will be replaced by the data specified in the JSON. The response usually is a "200 OK" with the following JSON and a "Location" header set to the URI of the modified user or an error response. + +\begin{lstlisting}[language=json] +{ + "userId" : 1, + "firstName" : "Jane", + "lastName" : "Doe", + "phone" : "+41 79 555 00 01", + "email" : "jane.doe@sportchef.ch" +} +\end{lstlisting} + \begin{appendix} \listoffigures From 388440d1636379d6dcb22a4ecacfc41d290c0b20 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 20 Jan 2015 13:42:28 +0100 Subject: [PATCH 012/369] update documentation for deleting an user closes #16 --- doc/sportchef_technical_documentation.pdf | Bin 35711 -> 38456 bytes doc/sportchef_technical_documentation.tex | 5 +++++ 2 files changed, 5 insertions(+) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index bf06cd81f8f9a217b47c2992fc1436132267006b..0c5388ba8bf350233218d3cc9eb0c7a013fefc94 100644 GIT binary patch delta 15802 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 delta 12975 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 diff --git a/doc/sportchef_technical_documentation.tex b/doc/sportchef_technical_documentation.tex index e1cc1b3..80a0dd3 100644 --- a/doc/sportchef_technical_documentation.tex +++ b/doc/sportchef_technical_documentation.tex @@ -195,6 +195,11 @@ \subsection{Update an existing user} } \end{lstlisting} +\subsection{Delete existing users} +Send a DELETE request to the URI: \url{/api/users/{userId}} + +The data of the user with the specified ID will be deleted. The response usually is a "204 No Content" or an error response. + \begin{appendix} \listoffigures From b213e44800c356fc1682851cbdfff001b72bf351 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 22 Jan 2015 13:47:08 +0100 Subject: [PATCH 013/369] update documentation for reading all users closes #17 --- doc/sportchef_technical_documentation.pdf | Bin 38456 -> 39922 bytes doc/sportchef_technical_documentation.tex | 24 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index 0c5388ba8bf350233218d3cc9eb0c7a013fefc94..91f92b88cd6a94768924e9c440e8dc2b03af738f 100644 GIT binary patch delta 16914 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 delta 15410 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 Date: Sat, 24 Jan 2015 13:56:20 +0100 Subject: [PATCH 014/369] add a test to check the location header after updating an user #18 --- .../java/ch/sportchef/business/user/bundary/UserResourceIT.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index 936e4e5..c8ae5c8 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -155,6 +155,7 @@ private JsonObject updateUserWithSuccess(final String location) { //assert assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + assertThat(response.getHeaderString("Location"), is(location)); return userToUpdate; } From fade043c11e935951c50a1b1c37125aa523833ab Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 25 Jan 2015 13:56:40 +0100 Subject: [PATCH 015/369] response after updating an user should contain a location header closes #18 --- .../sportchef/business/user/boundary/UserResource.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java index f19d5c3..3b70159 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -7,7 +7,10 @@ import javax.ws.rs.GET; import javax.ws.rs.NotFoundException; import javax.ws.rs.PUT; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import java.net.URI; public class UserResource { @@ -29,10 +32,12 @@ public User find() { } @PUT - public User update(@Valid final User user) { + public Response update(@Valid final User user, @Context final UriInfo info) { find(); // only update existing users user.setUserId(this.userId); - return this.manager.save(user); + final User updatedUser = this.manager.save(user); + final URI uri = info.getAbsolutePathBuilder().build(); + return Response.ok().header("Location", uri.toString()).build(); } @DELETE From a72daa2d4a3d6fa06e17081ceabc82c8de5f6dcd Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 27 Jan 2015 14:00:41 +0100 Subject: [PATCH 016/369] add a test to check the updated user data after updating an user #19 --- .../ch/sportchef/business/user/bundary/UserResourceIT.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index c8ae5c8..6a1bcd2 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -152,10 +152,17 @@ private JsonObject updateUserWithSuccess(final String location) { // act final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(userToUpdate)); + final JsonObject jsonObject = response.readEntity(JsonObject.class); //assert assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); assertThat(response.getHeaderString("Location"), is(location)); + assertNotNull(jsonObject); + assertThat(jsonObject.getJsonNumber("userId").longValue(), is(getUserId(location))); + assertThat(jsonObject.getString("firstName"), is("Jane")); + assertThat(jsonObject.getString("lastName"), is("Doe")); + assertThat(jsonObject.getString("phone"), is("+41 79 555 00 01")); + assertThat(jsonObject.getString("email"), is("jane.doe@sportchef.ch")); return userToUpdate; } From b530c63a52e33a6ddc1f46ab5a9b981035c824dd Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 28 Jan 2015 14:00:55 +0100 Subject: [PATCH 017/369] response after updating an user should contain the updated user data closes #19 --- .../java/ch/sportchef/business/user/boundary/UserResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java index 3b70159..58eb044 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -37,7 +37,7 @@ public Response update(@Valid final User user, @Context final UriInfo info) { user.setUserId(this.userId); final User updatedUser = this.manager.save(user); final URI uri = info.getAbsolutePathBuilder().build(); - return Response.ok().header("Location", uri.toString()).build(); + return Response.ok(updatedUser).header("Location", uri.toString()).build(); } @DELETE From 42f3d290a8808639ee58d934e6fec210a2c98ecd Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 30 Jan 2015 16:33:52 +0100 Subject: [PATCH 018/369] typo in documentation --- doc/sportchef_technical_documentation.pdf | Bin 39922 -> 39920 bytes doc/sportchef_technical_documentation.tex | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index 91f92b88cd6a94768924e9c440e8dc2b03af738f..d09ee64ea0fbb6d247c22f6cffbe078cc11f9d47 100644 GIT binary patch delta 2490 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 Bn_&O| delta 2485 zcmV;m2}<_xw*vCF01cOA*0!|8lBt!-mD!z z|_jpaA`8l1rb_i&31N?1HqH^2BVbbuj>uqd8=J-aAERRuNMk8<6<~NpFh2dy?UkVfXB`849D~<4rN1goDW-?yrhac>90) z>`9O=*^G21G+|t0EnfO@YuG(r)shC|K$zuN03u~iJP9eCkfF=33kt^m>C&-TsGgc>deB0HwbN$pV~wFkXvTl0XetYYg2^tgYwm)eln5#^PPoz8sK`3CzivCn zgQ_i`URJjxz?7@|;vLP}c<~&cU%>R1+Td^pb{a>rG%zX|eZg zRBPT4v9~G$S_$8?nNyLpgPYPn{zJ{C`v0<{`j>)mWfSXP8XV!{Jj9nw0i2_e zPE~nS=lM;Y<>NZ!1#TnU&hWU6=Z_+K%KuN_uu#N?WETx-P5$IA66GC4WdCNfN6*U# z*c^1rWkde!jzTOLF=1>@2(f>VL>dSHib@c75Y{fj>fm)yPjGvQTMN%!d*~kkcRcCj zpQD@s%DKXQ|C_RQ7hbRgP={&ZMffOQ@!-iy@b)5}z~G-5mR9}33Us?;RLRuF-X}|xItAd}1^`&DLWBOg6-m+PI(a^iA>a0&_~uG+h)HqUIY$C)+DB)g?qa-^#-<+ z@v@`DmsdDX%nxIY1ZMJG?qv|S&xk;N9^Je>XGCz|A;u(TmAQKZQO^Io61)dO8N-Q6A!kI~V$p_)S6ryK$)AZtaSX_4hrWA^HIB|AT-s_gnxYGL~JToeW zz1C%U-}`^hbJg6oU_oZL?@-2|UwA6!&LWo(opT6*yAo)X{;*k|pIQ8ZN4JY#@W3yA z;oxZl+{MK&SPF|@un_qIEKTc~}gKS}}&CrT$Cqya-W!OhP| zNq}aAvBZl&Kno0=f0<38M8o6ie6D>fh=Z!JmkA8 zC#Nq?o2QTY^oqh>MeR2-Iu^dcA{hZCmwkgpLZr92J4FaSu>v{z~nY80VX2>hPSj<^J_=gC4;hFM(zDE=ue9N ziR)z~9g)=-ideRs81ya#RLe;cI4VzUY;;bST_F*7tZG&3tOGAA%FCn*Xq zO>bmGVRU66C`39kFflbTFflbTGc+|cGqV+p#0*0=MMXwMK`=BqLN-A~K|w-BHa0Rd zFhn&%Ml?i1K`=!=AUrljMMgzIFf=(rHbF%}K|)40HZn6XL^VQ2G(JDo&FBJL5yt%sIF$NTPOMR5F2R1;L`Uqn$^p#3HlZTma zgc>!^QUy~VF&eI z>V3?IU?(;6%~*Vm`*fY!|9K78)e~x-D}E>Y&~s|9HYiN&cL}it5#G4&aMgL{Li_Pvy@4gh!}N7KJRguik?N^djfyj(fiHw zX_y7}TIS#soQ5-S7S6$WxB&BT5fzK)c&}>1$W>n zEW--ig=cUNIDfehFW>>J!b5lokKh$NhBY9&@|ui%)}^R_@cQH>dPVey=#Rv!=nc6y z=n1(e=mohK$VBb|?#V{9e)2xN?6?ubUp%*eyvv?(BJ$Hvj7<7JyS6{P$=>iK`@)m( zB-{u$!ijLA7EAz6GzDZX9B2l}LhTs)?RD`W9Fq;39Dj)KNO({O$Xqzk5|F*fU1Tou z7Fmm&MaCjuk*&yHE75e{2rnXYtw!^gYdnZ=Qfo23?wb6QoRaTO-Dq{(YgK%5UnLH* z#PoO1agt=7c7l(r#q3{SugCH`kNxrfhezBbnI|5S?9%;Ac1d Date: Sat, 31 Jan 2015 17:16:59 +0100 Subject: [PATCH 019/369] remove double code --- .../ch/sportchef/business/user/bundary/UserResourceIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index 6a1bcd2..c00b1cb 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -67,8 +67,8 @@ private String createUserWithSuccess() { assertThat(response.getStatus(), is(Response.Status.CREATED.getStatusCode())); final String location = response.getHeaderString("Location"); assertThat(location, notNullValue()); - final long id = Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); - assertTrue(id > 0); + final long userId = getUserId(location); + assertTrue(userId > 0); return location; } From 194a345c469cd64ed99cab4fa31b2fbc6187e442 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 1 Feb 2015 17:17:28 +0100 Subject: [PATCH 020/369] parameters should always be final --- src/main/java/ch/sportchef/business/user/entity/User.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/user/entity/User.java b/src/main/java/ch/sportchef/business/user/entity/User.java index 38f3f50..74a18d0 100644 --- a/src/main/java/ch/sportchef/business/user/entity/User.java +++ b/src/main/java/ch/sportchef/business/user/entity/User.java @@ -53,7 +53,7 @@ public long getUserId() { return userId; } - public void setUserId(long id) { + public void setUserId(final long id) { this.userId = id; } From 32a60eacea7d435cee236bde2069f8dca280a6df Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 2 Feb 2015 17:17:59 +0100 Subject: [PATCH 021/369] write a test first --- .../user/bundary/EventResourceIT.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java new file mode 100644 index 0000000..9eace1d --- /dev/null +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -0,0 +1,73 @@ +package ch.sportchef.business.user.bundary; + +import com.airhacks.rulz.jaxrsclient.JAXRSClientProvider; +import org.junit.Rule; +import org.junit.Test; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import static com.airhacks.rulz.jaxrsclient.JAXRSClientProvider.buildWithURI; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertTrue; + +public class EventResourceIT { + + @Rule + public final JAXRSClientProvider provider = buildWithURI("http://localhost:8080/sportchef/api/events"); + + @Test + public void crud() { + // create + final String location = createEventWithSuccess(); + createEventWithBadRequest(); + } + + private long getEventId(final String location) { + return Long.parseLong(location.substring(location.lastIndexOf("/") + 1)); + } + + private String createEventWithSuccess() { + // arrange + final JsonObject eventToCreate = Json.createObjectBuilder() + .add("title", "Christmas Party") + .add("location", "Town Hall") + .add("date", "2015-12-24") + .add("time", "18:00") + .build(); + + // act + final Response response = this.provider.target().request(MediaType.APPLICATION_JSON).post(Entity.json(eventToCreate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.CREATED.getStatusCode())); + final String location = response.getHeaderString("Location"); + assertThat(location, notNullValue()); + final long eventId = getEventId(location); + assertTrue(eventId > 0); + + return location; + } + + private void createEventWithBadRequest() { + // arrange + final JsonObject eventToCreate = Json.createObjectBuilder() + .add("title", "") + .add("location", "") + .add("date", "") + .add("time", "") + .build(); + + // act + final Response response = this.provider.target().request(MediaType.APPLICATION_JSON).post(Entity.json(eventToCreate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); + } + +} From 3f3252bd3c8f26dcae8a596cb6a86c754d590981 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 3 Feb 2015 17:18:53 +0100 Subject: [PATCH 022/369] create adapter to (de)serialize LocalDate instances --- .../business/adapter/LocalDateAdapter.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java diff --git a/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java b/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java new file mode 100644 index 0000000..cb69d12 --- /dev/null +++ b/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java @@ -0,0 +1,23 @@ +package ch.sportchef.business.adapter; + +import javax.xml.bind.annotation.adapters.XmlAdapter; +import java.time.LocalDate; + +public class LocalDateAdapter extends XmlAdapter { + + @Override + public String marshal(final LocalDate localDate) throws Exception { + return String.format("%s-%s-%s", + localDate.getYear(), localDate.getMonth(), localDate.getDayOfMonth()); + } + + @Override + public LocalDate unmarshal(final String string) throws Exception { + final String[] data = string.split("\\-"); + final int year = Integer.parseInt(data[0]); + final int month = Integer.parseInt(data[1]); + final int dayOfMonth = Integer.parseInt(data[2]); + return LocalDate.of(year, month, dayOfMonth); + } + +} From 8a1be620cdac222096d03dbbabe4da378101b123 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 4 Feb 2015 17:19:07 +0100 Subject: [PATCH 023/369] create adapter to (de)serialize LocalTime instances --- .../business/adapter/LocalTimeAdapter.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java diff --git a/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java b/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java new file mode 100644 index 0000000..243a0e6 --- /dev/null +++ b/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java @@ -0,0 +1,22 @@ +package ch.sportchef.business.adapter; + +import javax.xml.bind.annotation.adapters.XmlAdapter; +import java.time.LocalTime; + +public class LocalTimeAdapter extends XmlAdapter { + + @Override + public String marshal(final LocalTime localTime) throws Exception { + return String.format("%s:%s", + localTime.getHour(), localTime.getMinute()); + } + + @Override + public LocalTime unmarshal(final String string) throws Exception { + final String[] data = string.split("\\:"); + final int hour = Integer.parseInt(data[0]); + final int minute = Integer.parseInt(data[1]); + return LocalTime.of(hour, minute); + } + +} From f9e342640a7456d49c7cbd7c3f7fa121ecf1ff28 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 5 Feb 2015 17:19:26 +0100 Subject: [PATCH 024/369] create the model class --- .../business/event/entity/Event.java | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/event/entity/Event.java diff --git a/src/main/java/ch/sportchef/business/event/entity/Event.java b/src/main/java/ch/sportchef/business/event/entity/Event.java new file mode 100644 index 0000000..24e2689 --- /dev/null +++ b/src/main/java/ch/sportchef/business/event/entity/Event.java @@ -0,0 +1,93 @@ +package ch.sportchef.business.event.entity; + +import ch.sportchef.business.adapter.LocalDateAdapter; +import ch.sportchef.business.adapter.LocalTimeAdapter; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Version; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.time.LocalDate; +import java.time.LocalTime; + +@Entity +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class Event { + + @Id + @GeneratedValue + private long eventId; + + @Version + private long version; + + @Size(min = 1) + private String title; + + private String location; + + @XmlJavaTypeAdapter(LocalDateAdapter.class) + private LocalDate date; + + @XmlJavaTypeAdapter(LocalTimeAdapter.class) + private LocalTime time; + + public Event() { + super(); + } + + public Event(final String title, final String location, final LocalDate date, final LocalTime time) { + this.title = title; + this.location = location; + this.date = date; + this.time = time; + } + + public long getEventId() { + return eventId; + } + + public void setEventId(final long eventId) { + this.eventId = eventId; + } + + public String getTitle() { + return title; + } + + public void setTitle(@NotNull final String title) { + this.title = title; + } + + public String getLocation() { + return location; + } + + public void setLocation(final String location) { + this.location = location; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(final LocalDate date) { + this.date = date; + } + + public LocalTime getTime() { + return time; + } + + public void setTime(final LocalTime time) { + this.time = time; + } + +} From 976865a41856ba3195555f07dcfddd89fd4f2a69 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 6 Feb 2015 17:19:59 +0100 Subject: [PATCH 025/369] create the entity manager --- .../business/event/boundary/EventManager.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/event/boundary/EventManager.java diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java new file mode 100644 index 0000000..faebdfa --- /dev/null +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -0,0 +1,20 @@ +package ch.sportchef.business.event.boundary; + +import ch.sportchef.business.event.entity.Event; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.validation.constraints.NotNull; + +@Stateless +public class EventManager { + + @PersistenceContext + private EntityManager em; + + public Event save(@NotNull final Event event) { + return this.em.merge(event); + } + +} From 0344b5277d7ae43d6573e18e32d4efddd416ccdf Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 7 Feb 2015 17:20:27 +0100 Subject: [PATCH 026/369] create the REST resource --- .../event/boundary/EventsResource.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/event/boundary/EventsResource.java diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java new file mode 100644 index 0000000..3a7dc07 --- /dev/null +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -0,0 +1,32 @@ +package ch.sportchef.business.event.boundary; + +import ch.sportchef.business.event.entity.Event; + +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.validation.Valid; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import java.net.URI; + +@Stateless +@Path("events") +@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) +public class EventsResource { + + @Inject + private EventManager manager; + + @POST + public Response save(@Valid final Event event, @Context final UriInfo info) { + final Event saved = this.manager.save(event); + final long eventId = saved.getEventId(); + final URI uri = info.getAbsolutePathBuilder().path("/" + eventId).build(); + return Response.created(uri).build(); + } +} From f0d0912e81f563ba0098fea3a299156042403040 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 8 Feb 2015 17:20:49 +0100 Subject: [PATCH 027/369] update the documentation --- doc/sportchef_technical_documentation.pdf | Bin 39920 -> 41795 bytes doc/sportchef_technical_documentation.tex | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index d09ee64ea0fbb6d247c22f6cffbe078cc11f9d47..d5d1fc95928624db24c93222bfcf7cab5ebc74ef 100644 GIT binary patch delta 27946 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

%ql$v2F1 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 diff --git a/doc/sportchef_technical_documentation.tex b/doc/sportchef_technical_documentation.tex index d2e41c9..e59b880 100644 --- a/doc/sportchef_technical_documentation.tex +++ b/doc/sportchef_technical_documentation.tex @@ -88,7 +88,7 @@ \title{\huge SportChef \\[0.25cm] \LARGE Technical Documentation} \author{Marcus Fihlon} -\date{October 15, 2015} +\date{October 16, 2015} \begin{document} @@ -140,6 +140,22 @@ \section{General information} \subsection{JSON listings} The JSON listings in this documentation are reformatted for better readability. The server usually delivers a "compressed" variant without unnecessary spaces and line breaks. +\section{Event Resource} + +\subsection{Create a new event} +Send a POST request with the following JSON to the URI: \url{/api/events} + +\begin{lstlisting}[language=json] +{ + "title" : "Christmas Party", + "location" : "Town Hall", + "date" : "2015-12-24", + "time" : "18:00" +} +\end{lstlisting} + +The response usually is a "201 Created" with a "Location" header set to the URI of the newly created event or an error response. + \section{User Resource} \subsection{Create a new user} From 324cbec66d9dcc9332ac29e68623b90440e8321c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 9 Feb 2015 14:52:06 +0100 Subject: [PATCH 028/369] #9 create a test for reading one event --- .../user/bundary/EventResourceIT.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index 9eace1d..e0e8245 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -14,6 +14,8 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class EventResourceIT { @@ -25,7 +27,12 @@ public class EventResourceIT { public void crud() { // create final String location = createEventWithSuccess(); + final String notFoundLocation = location.substring(0, location.lastIndexOf("/") + 1) + Long.MAX_VALUE; createEventWithBadRequest(); + + // read + readOneEventWithSuccess(location); + readOneEventWithNotFound(notFoundLocation); } private long getEventId(final String location) { @@ -70,4 +77,35 @@ private void createEventWithBadRequest() { assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); } + private void readOneEventWithSuccess(final String location) { + // arrange + + // act + final Response response = this.provider.target(location) + .request(MediaType.APPLICATION_JSON).get(); + final JsonObject jsonObject = response.readEntity(JsonObject.class); + + // assert + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + assertNotNull(jsonObject); + assertThat(jsonObject.getJsonNumber("eventId").longValue(), is(getEventId(location))); + assertThat(jsonObject.getString("title"), is("Christmas Party")); + assertThat(jsonObject.getString("location"), is("Town Hall")); + assertThat(jsonObject.getString("date"), is("2015-12-24")); + assertThat(jsonObject.getString("time"), is("18:00")); + } + + private void readOneEventWithNotFound(final String location) { + // arrange + + // act + final Response response = this.provider.target(location) + .request(MediaType.APPLICATION_JSON).get(); + final JsonObject jsonObject = response.readEntity(JsonObject.class); + + // assert + assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); + assertNull(jsonObject); + } + } From 785366938b4dfca214c3cd1fad88184e3bc99c8e Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 10 Feb 2015 14:52:48 +0100 Subject: [PATCH 029/369] #9 implement find event method on entity manager --- .../ch/sportchef/business/event/boundary/EventManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index faebdfa..557c8d7 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -17,4 +17,7 @@ public Event save(@NotNull final Event event) { return this.em.merge(event); } + public Event findByEventId(final long eventId) { + return this.em.find(Event.class, eventId); + } } From 6d860cdf310f591ec0830a39735c373e7592d6a7 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 11 Feb 2015 14:53:08 +0100 Subject: [PATCH 030/369] #9 implement the event resource --- .../event/boundary/EventResource.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/ch/sportchef/business/event/boundary/EventResource.java diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java new file mode 100644 index 0000000..8e6c6e2 --- /dev/null +++ b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java @@ -0,0 +1,27 @@ +package ch.sportchef.business.event.boundary; + +import ch.sportchef.business.event.entity.Event; + +import javax.ws.rs.GET; +import javax.ws.rs.NotFoundException; + +public class EventResource { + + private long eventId; + private EventManager manager; + + public EventResource(final long eventId, final EventManager manager) { + this.eventId = eventId; + this.manager = manager; + } + + @GET + public Event find() { + final Event event = this.manager.findByEventId(this.eventId); + if (event == null) { + throw new NotFoundException(String.format("event with id '%d' not found", eventId)); + } + return event; + } + +} From d78117b37f4699c2c3445e78ae9e6c277830ca7c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 12 Feb 2015 14:53:34 +0100 Subject: [PATCH 031/369] #9 attach the event resource as a sub resource --- .../sportchef/business/event/boundary/EventsResource.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index 3a7dc07..12e241e 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -1,12 +1,14 @@ package ch.sportchef.business.event.boundary; import ch.sportchef.business.event.entity.Event; +import ch.sportchef.business.user.boundary.UserResource; import javax.ejb.Stateless; import javax.inject.Inject; import javax.validation.Valid; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; @@ -29,4 +31,10 @@ public Response save(@Valid final Event event, @Context final UriInfo info) { final URI uri = info.getAbsolutePathBuilder().path("/" + eventId).build(); return Response.created(uri).build(); } + + @Path("{eventId}") + public EventResource find(@PathParam("eventId") final long eventId) { + return new EventResource(eventId, this.manager); + } + } From 2b0d4df0b73626d1371cc90a7ce8dfb693449b44 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 13 Feb 2015 14:54:21 +0100 Subject: [PATCH 032/369] #9 fix a bug in LocalDate adapter marshalling the month name instead of the month value --- .../java/ch/sportchef/business/adapter/LocalDateAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java b/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java index cb69d12..80218cb 100644 --- a/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java +++ b/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java @@ -7,8 +7,8 @@ public class LocalDateAdapter extends XmlAdapter { @Override public String marshal(final LocalDate localDate) throws Exception { - return String.format("%s-%s-%s", - localDate.getYear(), localDate.getMonth(), localDate.getDayOfMonth()); + return String.format("%04d-%02d-%02d", + localDate.getYear(), localDate.getMonth().getValue(), localDate.getDayOfMonth()); } @Override From bf3edba0126521472fd10627952c50102d69cbae Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 14 Feb 2015 14:54:57 +0100 Subject: [PATCH 033/369] #9 fix a bug in the LocalTime adapter (missing leading zeros) --- .../java/ch/sportchef/business/adapter/LocalTimeAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java b/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java index 243a0e6..490a1f3 100644 --- a/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java +++ b/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java @@ -7,7 +7,7 @@ public class LocalTimeAdapter extends XmlAdapter { @Override public String marshal(final LocalTime localTime) throws Exception { - return String.format("%s:%s", + return String.format("%02d:%02d", localTime.getHour(), localTime.getMinute()); } From ea55cd37671c226acb3a7c65bcfab63f1cf9d062 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 15 Feb 2015 14:55:45 +0100 Subject: [PATCH 034/369] #9 update the documentation with a subject about reading an existing event --- doc/sportchef_technical_documentation.pdf | Bin 41795 -> 42593 bytes doc/sportchef_technical_documentation.tex | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index d5d1fc95928624db24c93222bfcf7cab5ebc74ef..45f214cc4123d46f1422dc5cd766d99021b71bbb 100644 GIT binary patch delta 13797 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 delta 13100 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 Ak^lez diff --git a/doc/sportchef_technical_documentation.tex b/doc/sportchef_technical_documentation.tex index e59b880..9c7d12d 100644 --- a/doc/sportchef_technical_documentation.tex +++ b/doc/sportchef_technical_documentation.tex @@ -88,7 +88,7 @@ \title{\huge SportChef \\[0.25cm] \LARGE Technical Documentation} \author{Marcus Fihlon} -\date{October 16, 2015} +\date{October 18, 2015} \begin{document} @@ -156,6 +156,21 @@ \subsection{Create a new event} The response usually is a "201 Created" with a "Location" header set to the URI of the newly created event or an error response. +\subsection{Read an existing event} +Send a GET request to the URI: \url{/api/event/{eventId}} + +The response usually is a "200 OK" with the following JSON or an error response. + +\begin{lstlisting}[language=json] +{ + "eventId" : 1, + "title" : "Christmas Party", + "location" : "Town Hall", + "date" : "2015-12-24", + "time" : "18:00" +} +\end{lstlisting} + \section{User Resource} \subsection{Create a new user} From 71da9505a0caba61a74b0a06ebd85171a9101f38 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 17 Feb 2015 15:11:26 +0100 Subject: [PATCH 035/369] #10 create a test to read all events --- .../user/bundary/EventResourceIT.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index e0e8245..406bb41 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -5,6 +5,7 @@ import org.junit.Test; import javax.json.Json; +import javax.json.JsonArray; import javax.json.JsonObject; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; @@ -14,6 +15,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -33,6 +35,7 @@ public void crud() { // read readOneEventWithSuccess(location); readOneEventWithNotFound(notFoundLocation); + readAllEvents(location); } private long getEventId(final String location) { @@ -108,4 +111,24 @@ private void readOneEventWithNotFound(final String location) { assertNull(jsonObject); } + private void readAllEvents(final String location) { + // arrange + + // act + final Response response = this.provider.target() + .request(MediaType.APPLICATION_JSON).get(); + final JsonArray jsonArray = response.readEntity(JsonArray.class); + final JsonObject jsonObject = jsonArray.size() > 0 ? jsonArray.getJsonObject(jsonArray.size() - 1) : null; + + // assert + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + assertFalse(jsonArray.isEmpty()); + assertNotNull(jsonObject); + assertThat(jsonObject.getJsonNumber("eventId").longValue(), is(getEventId(location))); + assertThat(jsonObject.getString("title"), is("Christmas Party")); + assertThat(jsonObject.getString("location"), is("Town Hall")); + assertThat(jsonObject.getString("date"), is("2015-12-24")); + assertThat(jsonObject.getString("time"), is("18:00")); + } + } From 67fb579b105c68c105a32cdd2602cf346a3a394b Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 18 Feb 2015 15:12:04 +0100 Subject: [PATCH 036/369] #10 extend entity manager to find all events --- .../business/event/boundary/EventManager.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index 557c8d7..3abfe88 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -5,7 +5,12 @@ import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; +import java.util.List; @Stateless public class EventManager { @@ -20,4 +25,13 @@ public Event save(@NotNull final Event event) { public Event findByEventId(final long eventId) { return this.em.find(Event.class, eventId); } + + public List findAll() { + final CriteriaBuilder cb = this.em.getCriteriaBuilder(); + final CriteriaQuery cq = cb.createQuery(Event.class); + final Root rootEntry = cq.from(Event.class); + final CriteriaQuery all = cq.select(rootEntry); + final TypedQuery allQuery = this.em.createQuery(all); + return allQuery.getResultList(); + } } From 6673f07178ac9a6c4c8c26d9325ee2eca41e91f6 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 19 Feb 2015 15:13:06 +0100 Subject: [PATCH 037/369] #10 extend the events resource to return all events --- .../business/event/boundary/EventsResource.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index 12e241e..0e83438 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -1,11 +1,11 @@ package ch.sportchef.business.event.boundary; import ch.sportchef.business.event.entity.Event; -import ch.sportchef.business.user.boundary.UserResource; import javax.ejb.Stateless; import javax.inject.Inject; import javax.validation.Valid; +import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -15,6 +15,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import java.net.URI; +import java.util.List; @Stateless @Path("events") @@ -32,6 +33,12 @@ public Response save(@Valid final Event event, @Context final UriInfo info) { return Response.created(uri).build(); } + @GET + public Response findAll() { + final List allEvents = this.manager.findAll(); + return Response.ok(allEvents).build(); + } + @Path("{eventId}") public EventResource find(@PathParam("eventId") final long eventId) { return new EventResource(eventId, this.manager); From de7e06a562233df2a57fd2c7b53557b956c92ecc Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 20 Feb 2015 15:13:29 +0100 Subject: [PATCH 038/369] #10 update the documentation with a section about reading all events --- doc/sportchef_technical_documentation.pdf | Bin 42593 -> 43907 bytes doc/sportchef_technical_documentation.tex | 26 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index 45f214cc4123d46f1422dc5cd766d99021b71bbb..6ea43aeb3c319879e7606c647efe6a88421a362a 100644 GIT binary patch delta 21092 zcmZtsV{qVI@GT0*wr$&XCdtIMGqLUD7u%W`6Wg|JPBO7=>puVUzUNlmd+xW@dwPgmWJ2hc)9CQkwKFs!O@8d^Nw~PUl38JCfy;FH_$(HbucFGq&N!)_& z`Sm@sTPtpccb57g229Z%{t)6yqC&C;zOt(W*tsiO$(eqUxoj8tR2S(tTU2s!X z8e?3OCmi0wm(oLTMuVeWr8A0LnF}*^Q}BegA4lxw;cy6XiC1=$DfoY?Y5nR|>LiBc zVx`H=2>K`}iyqP7`BlpIftd^Kh!kmkj_2+IoZzBzEF5yOv{;!F#iT6k!e|E4R^$tJ zAmVmOPcJVKX*6CM_zrhwQn2EQ=z(`6Mg9Xh3o7r5Ufh4qC#BxFubA+tMvh7p>Nj`U z+!~5@W19A>y>SAWPGu}U8dy!&4Z>cAyCLeILlU6(RzR|BAd+YCm^~wuevDJiz-sVd zd-zK1@yn3|5Aymv{9y!I=VG@R(~dOj57uSeeH&2hzPYW}g;1q1q-z^6V5=bYFBcTW@{3~CLZ5Rf# z4r4+jEng|fS`IQHNeQ$urEEuXLQUoZvt_EV>P%b&Nz0{#z!)<6U7|XW5z9siNlR4C zhzOeHh3DFd7|KLnbap(hZ#@#ooUfoIztZ^$gK|-oneqr{nMCu;w{aK~I`hvr!x~0} z>ipI^5rkKZ)q#-|a~i`AnrXFq3kKh68gMk;72Fzxz|L>V6POKOPC!T$O|4X3O&$IBd9_*b#Zn05R1lf6L z%CK2&zmUF2P)ov)p@=%Q(%~vN@dB--D?AYmGl`HuO&1%KdL!%u%5h^?N0Dh*&h071 zE&|fnokz2JVitEuE_6;9)=(M#zw_7xm|Nf}0?(b~-e6buP%uH^1FTQM1(PR*ABBrjB z^5E>TG;H}vDb&@Tp}~3DY45)oE9{p!Rdf0|NpSV!jo)*-sj&qgP_$y}%=E}JVEYTM z@ojY6oAYr`%#p*8me9UNQ8Dm&&V0k}XNi5kVb9nys&WNNrB(bx7V^$e|f+8Y?G$wu7>dG+hPSdoI`I@wa^2cU?c6 zIugH5;=camFy{JPAYhI!KwHOAPr4Kf@ZfNk_HH&U`EvKzOHJ#aiD9Y@D7zf{>P1%4 z0}jm8``q`luIA0MH2t1S84NQA&O%^$3VE>MMHL6?BjoeI_uDg|#1tcSIXROV!6De0 zqcCeoB0mGM^hsd?@%jqC@GGBE{Z=ar)#hElZI#4LFS|*WFWA5#zMR)inEBLyLnkyR zwG_`r{cE32IN(?HgGU%Kn3aDV$Cn|Q+ZFG^-SNQB_k#Bw8e0bMtY#+;OUE0RHb@w%3&QN>B+W|bBS|>bD49sxk|&~{Os)PT<7(5Vph|?=k7i=ulB?Da5R-z z(_in^>3=}&i(tK4?Q9uu`)Aw5H^86qDPX-d)j8R6&bT*|llWNA#FLqGTxbV3u4SP4KupKEg7{P?m$7I3U)M(7P}YKr#iv4 z`qC{hOg8?~HbF%+ESaFsg5kg#wH>UiCAR<$JL?yREefvh*{S}tPv#KIoGXBxE^I$m z4q!KR=8zx=zC{6CtWlrIg|%(p{U`YQ>=J)Im?Z8R=QYoM(z6f|IFAU32yDg>i?a2_@i4$6h1B7Pc#qg<2Y8_gqWXQaGaCa(Wu=`+lDhqpY3gEyz zQs|@A>E^O;Pe`5n9AB6uHQ!Xzy3L6!vZ#ZOMqSkglxZK{(e2XN2EJ%sKaO4(#{OGi z2~K1K|e7p~!}t#7bn9BrCFqJ$C&` z!u4b(g$S$SFBXoM$Y?$gvGqLI!{~@2rWs$+Ee{30g+*f4X8{GKO7kq@sv;`eMUG-& z_@hCA!#~LfM^S4Ld?d*dz@bbKJksIFK_U&51N>{{YGqwK9p~UJk>0;*c&&QAZwz{C z{dJfedaN_u&HZye1ls5K%#JqQ3coWw))p9*kpY3rk;Y;5jn4?{_H4tc(pt^2Z+JN! z8M6NmLBPZL{}#86`nUin7%$uZNQ7IwBnY4jw20@;WVEq=6;aX+w#gCV&Sbd1`_)|5 z3-q730m!fWy?*a8_=~c8>L5DZHTTWz~3rd2FJ%)n?FsKH>1 z7HaVR$VI${`ZTuOM83Y=6?&EQ;3>REEnHeP=oPq2b@Fg!FTH!rU&RMvIzOL#yxec! zQfm?KNUE(qij3|;k2SKGp_X{RKp~fD6 z7&%CVtnB9;k|ecPnjZI;Z#o`5qV86=ku7|Ps&adW2Yv z$WP3)36&#gofr5x_G@kt1|c!WELmoEa^!|_-b$VVki_X)jCq}K2}jkZQR*d@`tM`H z=H8*>KDL_AVv-nG2b!K8%s$?pBB~Mrz9TF5sfGB_oe80@_&R?e$_yIdhl8Peu2SGN zlrT%0ENP7k$hK8|34Cy@z;R#ppY4`@E$ zF|(TO?*{AIH6gvGooE;3{y}Di#tFQh>#c|KlDD-(<*BLF4tkp0!#vaX& zzVDQpns8lk3T+9z(KBp-7BjU#&+M*dK~|Gk#F%Z9fBA@XrJHsOO5!^$uSiPbW7wC2 zl`5sqT|wN(uRJ*cw>Iaz^oF;o8bI2DPIrNZ1Mf2mgPn$VkauAnrc}8F^{r)!pBvc& zUf2?A4Z3n5{;wnbAFJNlTmIDd>7I09qTEdzx*}OJ_QIQ$ zS&MjB&&9L7j?*+D@10bf@9d9wioozp*L^5Vh#p|3^HgH z$u6p#1rfB;2zb_f1!Z&IZKojw_B6&Af8-eKql_=UC=VQqBheDs(b}N&vWGO-o!vP) zMv4Jf8%e!)S@D>l@|f&eD7xsJ1GoH**CmTjO;Q=>b1<57NaGoT?&nkR&(FgRJ(2`6 zXCV;mC`aow>JNdiR_y$LP))s|WAZJdb!@UG!1HKan^(f*y$?~Lceq9`Y~1p;NYO*7 z42O~}qre`8!P1aR*XAZ5bTkax0Qt>PX|CbtlEx?o`) zxO-whuORq*6Ao-0^8apYvuW3AeE5A+(+e;A^YwLqVslV0&&Gpz&}LX=(1X!`pj;#l z^Ys^7PxQFlz{-(Fr(w(R7VmI%hq}{GthnlrHJkcp+!6%6{i6s<1l(-K_@fte21!6M z&!~T85Ejd}4V~dX`EN@^`uM=9xXLfpgGs}=G7$$L)T|d?y+tW8 zil1e997HVvItLSx39E=I);^r5umL}wS3Qi<9Om#}^6UywX=v!f-Say`Z$FYhqY47J zLL$fBp;=;-c7#n3AX9#PlJ_o&YOB;>EQ`@R2O3%!)4N4o4hCip!^kR#{19q|QbCn< z%VC)ymC-;n5G60cNxOjyoQUANO%YGIIIm+vXDzG?NgWiIED#78M>1{@PdBuc@PNW) zRc~^&s6#IQbB02-fwq()A&1UbP;y2puXe4SJ+&^e{n-N>KT^=VO<#*gsY}GTf8w7> zrt_1FaVlE}?m3_H3!L9DviSexI#!tx5`;8C@v*+SE zn9wn`rDsMXR{t0kv-}H7-Lxk&*V4A`O3z5uP&$>MVaepFe_wQhQ=+1ztc)#N zl}=y|zdzv({nblgFlw zv&5)9iP=M}R9<+TQ@%yGE!tD(XH+l=ZR1#m-OEtNu1cjhw@2-W3}Q8|Ubl(^Kc#oC zl3_jhqt%D2qci~Gm>@ks4^>L?Tia{!i-*-6QJ(iyj}f3>RH`X&OPa6PC%}x+ZV;(Q zA;A79)u5%7r?He;hCOIAaf8z;r^Bs7<4%wRrRSi;qbNmj%?yfTBc$V#;griEYx|R~ z2j-WKJHb{ZXGBeD36iNl0jq*~kMXk)Tg8kMeS zF+i}b&{PQ-17_GDzY0SmZ%{^p5P~W}hA$}9dIdE#nh)%h%1ms{1&IX5!6g84m-VDC zDuo4y74nn}l}VDez3NOA&2^_Og>5B#5uJkFf)FT25|}Wxuvj4M(toV!?A2o6PQL1Q z=D7+#7De7MelGG^7aRg7cy?S6JdfwP@-jol?{jFxt{R~AlJ-WZ2nRr0fUkEbRrl># z?AnfZe*S&1&CkMV-}aNI&b&OqTA|eD;qBBsopFWvefO%{2mND1%xApk2WO1~8<8(_{Z`W5_T~4({u5rwMP=?( zx`0heWe-FTB_eXl=(6*gTyI|YW%#K-;3_o5?a;cK8IA0XP*4NKLBM2a(@xo(M?i4V zz1qBOpqidL*U*xQ-X`kO!HAvSohxtn570)OOg46R=Q7NeQ?!UqzW*!zy?6E0F}jBy z#{w_L!Ks*3Tl)OAjk(RAV`sn=-sn&gkDcYOg?R5K?B^@6n$e;ugpr3zRG!ETQ_RX` zOSQEEbycfTdSA$DE4TW2^M(~9LEl5xt0XUEse?3ak+fmz3#hqv@bjOo>Q?Gj0;_6) zu1Dx-<~DO*>-K(5PP@j>jbFuQMe7C&=ZQW6-V+{_nI5+Pj21m&aYlsd|;z=6!1@C(`hP=nOv(aj-js`*rR81qp}SU4Uu09LD93L zqxcb!Vyl&Q6pfj+uceb!N7L(c-)Ox1y8y?HWaLoMRx7;?lg+qXeTiW@%nY%Kt5HG? zvL3JC!llWJ0<0NX1M^31I+rEdKbdI6Xz;9{X?(JNuWG)KGvnBAasW{NU;va4E`wVA zWmQriR2Sa4>@kOE2bJ+n(6V)R7-MwP{X1xBs6;jaf}wV-+HJh{JtX+T;-X=?+~z06 z*Ua_o{q-h!$yX6X+oRFhFi2XnkCBm{CQo#;4v%%;G^GdGf@Ydmn0G~GXE(`qwCpUb ziD9@fDGjb5*?Zez;OOG9vH+1`d=XRo#+n65nQ0y-tasGXjLDo?J7yY%>rzh)z$BWW)Pha92v@VgRbDiDdepz%OPuU5}>*YdX9x-l05HNF$==@X! za<<+beO})VqZ7`N3!4mn-tX3Vsx<|+9cj|k6MQ$ky1oeMKAtT%PIwjG)eqE3S&qPw zq(X}Io36HEKIOk2`v5RS&PqR-{3sJF6RZ7i+_B>+gmC%e+Wt z_Tslfn(p{(vzjE;ykl(0+@h;1{B+y_Fd*erKV@i&5L843Xbd2#N8$yK(G0@EVEw0R ze+5~SXXEszYoyc3lBzX5Ag-|2vd3tBVE>uWgRIwmm1^NJN+rW0vAedp5c{=v(OSI) zO_C|^{XOab)PoU1pVjhQ+@B#>Bj`K6G|PKNjX~(8vcKGkR~cumG<}P==N9-3F#7tV z)vJE>K3u|S+e*2s|6Wnco7z)KAt8I`&gyw@d zv5EM!;r`h}IAizadKqcM^7_C7bgFIkMZ*|%DthYzCKVVZ;1~BrZZn6pP=kOUP>s-o#jR;d}*9Cd}r zRkE}$MAZA{dZC^1YDdT}m5lwBoEc>WZ@PMi(Dnc3m=UVHFMDCl4K@G(`ejO<veljX7NpupTFoZldkL=_|4uXa74UQjUpHoNA(S(;WQ)_8bS$j6oUR?zz-ufLYcz>s``j0 z-if0-;pp2Zs<~l`ICiS#G=1;)A zft{jV@P{I9|4_zQckRrwOu}r7>9xO-_$Y0|=MLOgKP!=V_pg5 z*s{Itzgm9h-gc!S$BcpMJu!4VgafJeZFYqQC;Ul)eS&Io0A4j*P)QAw@Y;Oraf8XM zf6@)PYxdHmU)#O?1r4!8)PM6eTxCpmcY0V`d4({XgyZy42 z$`51a7-IpApcFJZ6IogfvTFD=h?oEzGz`6Xab_l9CUfVA+LQ!Db!36)1cY%;JuS-- zWfYvS7&I;HXX=v(bbfIxd_R@IP@*XvB$JMLO0nP^06Opo-;8^gJdR>fM@c`x%_Q^? zZyKjLQrG(+J&s^8@t4k=Ssxh3$O{dJ6~#XUJp|zgIvrYdT+>3l9dm zQXuCUg+F_02yJr~404HnRYgzyO#8Q9r)8WO(tJnSqYj64=#~ z*z&WQsfx+^Xwmj}wt1(iX=mL}7tRd#AaFLxH+c+3PUBm zbWE<`9QtIw$p`WaL{ZZu z17~Mr{hw1>9u}7WZ9KD)aItc+{qKmKcxJH_#eBodGyt*j^@AWoA|Q0BR}T&@FMw%>33?*p|vSGH`v zEe1!53TNrhL7KtoMK@8pM1(+L0|;=;D;>_ERzo^Oy&m&xTI@kUK~eGo0zioHvjh-q zqXR@XF>Fx*BiMkzMrsknL+D8G024G4Wmr*Bke?zVFqoD_r?9PVV#6THP@te7N-wj- z0wgFqAoWrp7kvsS+yY<1RTcJeN+3!n%$>od?|`p?5e~sH#LfpdKQ_qlC5W4gC>TLs zoacv*62uS@!cIzf2e~l{wFN}LV(vL|H%T87Y(g+VvICs zGzUJ|&%#^>z71%q-MKo=H@HbGe-wi5#KQy#(|y$P=xRp5-+iN(N7cCnu1$9Ewg-TM z0U0EYlo7~lqR>Hg9#AAkxjVg6VfIKy>F`5{Rp6oGUo;3ikZ>@czi0b!O}>W^5yHWL z41EL6xWV6A&2F#E-gQ}nfJfZIyP@CxBz<}&PQ}d!@#L3g{+}$tCD6Si2oTt4 z5L;swT?!)Wa2g7P8*ng^vM^r|BjP294_|vF2s+4}t4J6S9x-E2K!b)1VdwYfuQ&L} zKQHzPI01&cP?6v-nBS6rz(D+q@gcx&D*pi_q9DCzh-m-eO%ha)-VsDGR?AHijNqs3 zp9sVGF2PC&-rO+5`M`ewiW^3K_`!i9E_3Y397?T-anAt;qTp<;-}bVf$!K)Ld>6?2 z_O1q2!M@D=!6ZM(4fJjt-T}&do%(Nl*ut>p@Q!?U zPO#SS0sG3pr1f*GALWOB=dguQZ~ua5G!EpG%hU{6E|@2PEkZ)w2mpToRT>YZ2>l&JW}W1aztW``+~XvHfxL?z_$0*;$D=fVh?=0Goma3`Mk?+$lk;PZ<1C z(70@w^y?8B$_@QHn2@xr5&`Nx;PO^zTI7;)khs*sjKuo-@DY(dJ^ob~1EUKXtXkhA zH>z@hoBwG<>dAdK3j;(|MO-YQ^M`lgd(S>G+TSE`$ z^q8P>-^2IeIzZhJ5LcW(Y}l(w?TY4^HO0_9qAsU@FxNX_sF2xWTk zpNU4ir}(D)!QIj%7u-@NhDvhniWol(h@2DYK$l0d!Q$0B11efTXOpcYM)FGiiLamA z@>PGw2;rUmRndGIYT&@@!BZl%M$zi|1$q3)o8(zebLMdnOkGiWd~E*R9dR*ZKHm8# zD=N@6;VxG%(y%|lPO_N1_%KYZ$W`~-6)%^GlmFzbV^sH+pi$kN$ho_SN_=prNfZy> zqcIa{$Ij!Z0LXK8LC(@Hk@w?{u!;VS_nEqimFwwg)P^iL^I$Usfq9#U!WH9Q^W+*f zoj?pIS@ZQ!$3DIFb&#dm_Hx^tcE01@?vtmZ(+nvETC<;Ip>&jlCNW9PvL7OqqkKI5 z3zS6%D~Yr_tm2U~{*kGKt_IFOI6)sv!7+eK^KLx?4HPmuy>V)|b@FXIux0VmvJSQy z$PU9c$Gg${C8~|^Zg*vLaWE2B6+5@ZvaL-p-d!60ob6%l39r801dkS~7ZB%j6>AAX zGOc52FC(@(o-;sc^ux6H)BYQ_1A&pW^f|#wyupLChbQW{%D;F|&b>O($rg+;e{0~9 zJf*_44R9r8;F9dUAKUt3cW$*4WkU5Tu+t7Rt{+x`%ej6%j0NSKy*|`Jwh*uLbl00^m5paKt&Qe z%j4gFQ~0|O`J;PXI5&mqe+@JULBgjpk{8O^_<+ifYCWMq0qS{z@}8mrm7JAs`guq9 zp3WwIEiG+d4l*o$rc{|T)7)CEmYmoTg=S(-f9D9w^;X>5*9NCM9PD;EE3H3jnK4}L z_#b!nNwp@C3886BWRe47ihRtc76tk-Nv?<4Jq~y9u*wr@XYvTc>}R84L$$sJ@@saU zOTZALJ3Q2WxQZ~r^CDe@pK2;Od0YTKj`2Xe(wbW8Rf5;G&3GiHYXgh zE{7BT$g1|qoLJUfG`Bj>yT3=xj;dG6za0r2NLGk~+q4WfStFMDq=M;E_rsILkbQio zM^uL69fB`Qz;C6S+r`-@Hj5-w;M0b&PXRMu1iYH5e2~^h{-R>5yw)j=eLhy*J?VKEe-!1QAj@h|}D*)__7I34o&p zo$;N~34MWD0sCBXPcK6B)dp?kHPjh<``u_nYt) zS4h1v84OcW(7+eU>+_yO-y+KjUGlE89!vVZC_1B;Kyza9%6Q=8CD0O2m(ve8Rr5fP zNnLqjRQrkB*CJ@k0jHi6Q|7FMi z_AZ>n*nYny5o_=(ql%h^qf3q{z-uFBK3<5R9aiatFf9Sb@iyAf z*GD8H2tQH5P?QWFqR zwcW&bPm0i9gcr5) z?0AuBVxjrvWa%&v-XubNl3pT^A92^CnKwQk8cYVs#&F?`7%E0b*fvfp=p(q1jJ4pZ zwDY3=j>SOtatO}``P+ix-Yanb22*IaCuEDDepb@Px~J{5x2d(#BY5y5wD&dYx1s3z zD^8Q9&8o(gM|kA*13+pk{jNLC3(e@d@==cWIPoYc*`yaK`X+i9f0=BHCkq?rc*>ft zk(-Ile5+NZfjlGky}L`w{MM?6b>5X3u4X?#yKO1rfCVSnTm%LJPrfaesX;>Elf4Qz zMuRQg+B}u4iXCn-EW9zKxM?R<*c-1^T%-9{AxxnOA%&(}9^jbc!ao{$I$Ns-?CyDv>reF*HLW-a z6O;6yjR@X-DDa#wB4f|d^-UaHaP;kHZs3#{VQZz2je*ASkJZ)oU)54_r4iee3|=dTm+FFvn1FD=$OxEiioc=9yZ)>a9Y%S-xh~P?j_B zaIL-9jUs?d6|8^%Zh6&%sgdg4oB3;RWt?>G&tAwNUb}8usZ3cfT1YG zUtjT_{bC(uBnCp761riDSVTd#tzRl0v}vc&;S}ebCn7bmS{}>G1p}L5zlxC z?T;U&bCC2m%fM5d=NH}A=f8Ik<|@8=3iqZ%&3v0K`kOP|vQ|wO zI{?GUUPfL0$QrR``Ql~unbzi+%3~L@_*Q~1S63~TlOxnNv)nu9j_|A8I*B=ok$z}e zW6}C(*b@;zd{UC2f{}ba@lEH`WXF!cXEgDbrg+9$g@{cAQ~i)I;0bOVM2-rIDbfNB z&CS*twBIcy%-OQKPVVh3a>_!u)oRT02ha=nLgiA1_nkeBU7a6z0<6zuk1{B>yS^J$ z;5t>(fxIxm}N z(GhM&cf$_$ofR=?W9_b*d*JQS><4_~-Eg4cIEj5OJZ5YyCfh^D8exX0@%LOr&W^jI zhNsNY^iz&%KZav{gWP+_w_7GG?>zca`m(lE78BqG*P_nFe>pc~X*K_>>jrs&pDHPdVZ{T4IKjRRsd-*-| z?^2_7CNP?7Gmzic?JB_)T{}AORoOd%#Yq)25uS$hf5;pV+vEO$tiP&v=60}ujHEgk z2w{N7QZoYzw$5Z1K6Nt;o?b&U5-!Fx^3A$KG5(Gh^%GkT#xam)R4}gP1{w zl>Zjer_V-G^lNKvm`jJSc4YtRY`(;@pOdcI>;cE4pl8*eUl7)A{}v}`Uv2MnC=Y+s zvb#rg;zWm%6G|< z#esw2nkYmj>yK~|43|JHyDCOHHMZa&PPcNv+HomrhFKAL=N^_w;WR+3Qpfg;H1U`A znnrS-6xz=tXDm@l88&Hg;k9{-PM|n$#aGt^c3yNCtK_qXnR?MA7N5h9*{pMtVZR2o z3uIN_l|=AzWL9cU0qc-U%pa~yxwjeUS0Hg}dixd9CEwmggvF^>>R35;DJnr$%gY|+ zV#9Jo=<}^wCOxXUfn&=2w#rNvasIuk_)}Dt9YX}#hX(84y zeQ8)5+i*y2Jg{)tQ9faz7Koa7%e^HU)rGfyr%#n;qZj$oENZJx-%j2a>47$Ko5$Q) zq(f)C8+;`70l0>Izm&ehVcn4tqBWOw33_H@kb^+db<2k5 ze$u2TUO^JkJ^GpZ1n*1ZZzKiS!<}Qj`F89DD?CAc08YX<;fE~Vbdw#6kuA5-p)?mi zFR7|$4RJH1M~rSMkYr653w<;dOL+|(>{_ym$|fK?eD<^DZ9>fKT0e)B|HLhD88SH1 z+8?xK-D)*Uf6=GeyvF1(N8?<*y`^N7#7>_(_=T#vB1&GzXPv5V51USC#la%ZaFbYE zL6C~)0Q@G^hcRFtc(t=#H0!SfvCn8-xiSU2EPVS)nA(huha*lmZuQv*cLFD{WlmrT zhW(ctb)f@#C1?cA0_^7xb3le9rwVl96(#d@c*6ShIK>#E3uh|a>i`8(O@;Y;TGUp! zEkb#)2~H{xcRsnt2KBW*};gLkzjOjwsp8izCR*qrCg5804=FAn+{Y>KK?$M8J&nY}@naQ9gNB}JhxR@i~)MK4MAl~M0 zN&V1}S0FlZGupz#JE*+VZFhX8I)QVEDG5LQmMC^y&9X(kp#^*k^<^hAdP-~qls3b& zC*O)wqzRh2#3p5>rm*Rgo3U^0`garUXuQTq18*t!quY{LtHy4`R)s+o=d+&@qj7^* z702k^28NGbXD~M>vpEz95h+GDAd;Hy=B3DRp=HWV8ur8?1&ukR%HuSbI|HZrz|QUA zdh$n{BMxp-^J8x(l+xDwkH)LCx?qS4pUt)DqwC(a)k2a?!ut7xNBJ!5?%IMWamzdK z;OPj(ZXjISV`7xTrR>JcwZ2NFFDsAIHl9v8YJ z8!K-v5_Ng~rYE|;GhmM}&yDh_NMidtmNGS8X@0ULt;GHWui7L8WbF8m7Z*r+lT43g zX#Sn|;Y&(b?a+JsSeyM9R9@Ik6Se+WUM`{?a-laCMK6Ki;rDAl#M<2#S{vmG%1S`; z{&6_uyfYw=az1*D&AeaG^v+9+oM7Z9)Gmiwb2F#jfb0c*T`+W_~yF5HrKjYMzTj6z-bV|_VMj~ zPc+7^8IhV!s>xp^tGo!kF)K*j@nfa&>u>*=S^(FUfPk}L8X$`gr2S2@AH6L``yr5| zQW#&vG!^N#GrMhw-!Vb0k4ac&Zn0B`@bH+`$AfiQa=rwT>+{t8a+(^3UhBr~SqJTk z^ZHc><$t^AX93y$ARbK1(qfAv7}VcTkSeT~v$di${M!?83I9{#olE2&2Ttm~IF7P$If69h9n9rxXJiO1qG}C~)k0ow7 z01J~}!EF*y?UV{mWa%r8{`|=@?IG%PJ}IK^NcG<5ui1Pe30)5PWrkw&pziz`sr3*P z@p>#n|01##b_Jd0&xa**oj9{X8NZp65m>hDk(hnmMq0EDkV|>|7S(fbWv8-hJwQiZ zjPoH0H7x#x1i?K`J%@IR({LJG?HBRLgZCH({RTZ-_5xEgX4v1Ik0I>%aDJ};t05k& z#j8xQ+=Sbue_=~emQdb@HL6u;CqC^NZnK}_dC5pKA_|2tOSgE9W}Q-wzq!fx>Yjiv zX;LX2#vyJ-H*%5i7$O!`5jY4EO(mXJ(NX9lu{sptZA9AuLqY-+Wav2PWexvaY$$R zrRmAIX;DZLAAY_`G4H;~3}@|jMq#n^7sl4_V)!OPfX!~H%iFt3uJWf!Er?IPBDT(n zwtfPL{?g&pKY!N*CG+f@m=Suwj=2{9CGBp%5sBnrTp@4j*XMjj_SHVTz#yzw=H&aS zbKTr0#Uyy}CeLKZP6kR1*#P$-gl{~y2QS&eUhf_QXUiv!u<-4DTr>@Zd}4cqiWkKt zc51*S0BR5}fhU`Q$uO*5@5Bxj9l{$j`v;gI>$vvZyAQ6d;>C%UMkX=HlIS7-Da}F3 zcYhk%k3BAk3SjDWwVzz3zgkdW&ns`rLjI1n>!p_E)^9c`oPZNwd>NwsoQ?V$b#*|& z3^l{uz*<_HjYKp2Om=Me;^ROa9Lv$sC?0&?6+f6_r24c$zXtGe!)ds4jofpWz zIjLTj9CD8;I@2+cA)B*_sxU5qQW0$k4Y5Oaq_Slm*m3=?_YRszHp@OFJzEDT{(F|2 zl2D6MNa5^0H&U@JSUK$>M98x2 zi#l=Ud1=PZC1MES=$*5FZ_t12_iYb?`vxADGw}X_EWEb=*qY0*dAi=&i?7uIYz;V# zALB+)HH0-?gTUL(nOq9{jHk?~E!_~2LgpS?yX|>BGz4GW^k>OLld*3fWzE7zGdZduuw#$XP7c#G!=$$7> zafFjRljpF{2d(RP4gGkT1lf2EEe(!?!#ey1w_jpQ{D0V+|37z=gEx5!g$jj-lkx}0j)-J=mH)cc9~;)DQgHG?t#Z8mWbIB#643mm=@?)@m}df*LMl7W54L7G8Tl5Z(15QT z3l&<|GcY)Vn3QNaYbzWgB@qiaks?%+fJG@}YaGoebY5^XgOlp0hAj%@LJGlLM zNf4vJfE;Re05_gqB}|^=A4+w6vW&N841+y!K1XTSKK&vdh-D>HgIL$AkS$MV%ycR& zvOgcBPu1p z0dhi9?n0vO)YQto7d|;0c6rI_U$$5`D&P|djfsx^8W;ge{BX0VNd9HgoK5f>-+kaE zS}HuImrmGj?G#4+;AZ)_5)E_z-g$_4z^i?&3Kuf;i2SQTkGWPe**Qm2-}|vDdu9ZB zQt=|>t#KZU12!m8BI3V&m#(1b9{?M$ZOD*ztg8OSa@zI`~OwQb;m^gec7RiLkE>AWu!=l z8QRcfKzc8OfJpBkN*82+4@Cq7qzgy~=?qN;k=~>uReEm%Qih>}%<|pe?l0NwCYzVM zlY4WMck=$Yxi2~I*uL`r8%U6HwdH~d-rwIXpg6m>6?rCj1_S;c5}P3oFcZ-hmHiVJ zDxi8+TC|e<&TZuY`PETJq~-hj1e&Mv?KnW8j%y6Jz?v{xabV0>KyxcH_W@O5nOEL{ zIqpdgOD=mE_8aPQ&&b{&mr&pmpG~6nTh>pV{hH&NDypITNP1?X>Fd7?Gb7x&o z4hXbta&HsabI`^G2Qyf`v$FI~GG=(2J0VMJy+rm4GC+~hCUI^lF%w){9nqmoKBOB; zC!E0%MMd=3t#sIrzNt@}S2rYJT)OZ6 z(kU#0;Mra4&hJs4n)}zU?ppJeqHcR!f@oW|LCW0=Xt@<5mvQ$c<-c}j`-5_ggF!e$ zqW04iebOdoaDY+(5^@wQZqWCBcae>=8R9Bp*^-QR3RmS>-<4Z|6R~x<@yr6Xix1b0 z%4@kO*ni_DeHye?xXfQGr+Bf1E90SWjY$aVPCvZ0_n_phT4{@Cn1;JhG z@6IyB$ed{MTd5oG>}2)d5w=MK$srWKsv=H**g=Au&v+Kus|yvKjB`3E*Ue;dQ;yDc zkoZ4&C6g0sWRrS=VR}mD;8%x*d^1$<^7%%&bO(I;W?QrRIBw~c1@~Dwd=j>QqDn*I zh746@dMtFi87!OZ{tfdG`OQ^T2OPg&7@W@!t*rWP% z^?76NeEhL4e(w&?eK++yDXmlAF&n?hxqup0k9YwyW;<^*KXD#Uiv3e6UZ@9|vlX&)%{$FWMFZA?^qCp$P~DSoJ;TIe^<}Cg?w3ggE^H&# zjtLR|-SX;}rrJ*>IrWD|fhTI+smh_fVB`fz?4*maj*ZF`AEVT7%GCM#{Qffu!qVhwx)fY>fCk=LrhNBM{Tko1c5HSNzR| zVJqF~hlh(xoiS&#rSZwsvVuSOX37GWF0X;nK(bR~%kYgrOHhXGv{ zSh)YdB9=J&FagNMd}g@DMck=%4IC0Wiw2fF1AFQGdsCtkEHHe8-!cwqEU@0^)uspJ zi>Bp$39i@1htIF$acv09PsBzJrGs2)fvfAb1sith>|l3!j5bXuC1thC%w_wX)&&Ek zbl7@qnj*cA%mztjhvmkci_izWiW>8wDN9`UuWw!K2l`>x<^ksMvz^}CK`AL?n2V5< z?1xy49V?D5yHcZO87nRk_q5`J8N=#i&)LC9LtSNTP4sHl#k5EDT*0S7sZqAETf2%nlg zmu8BdQMabvi-;7Fi$c%_ID`#Et+=A?FeJ#B@hLBR9g)B)(dl3G)}wvSGpliTT@Ay= zX784rQ->6!(2v|+^-hyD-<$K0!oqgTx3D{IwI;5PB+!A>qSaD<8vo`rEjZoI5zVoG9+^RC$84(x%8l#m?@x1od5E-5dYv1z={br(j zlm2_7Iu#|yKR@#nJ{@4q6LwHc9e9l=HL%%Gk)`#qzUXx8@%PeL%fm+-I;P31mfr0( zecQX+9SajGnM`G4YTj=PhSUtQw;KF476H&ueU22y*a2M2i1TPlvxzr0`dF=gFClv3 zb=$|Z@5^MLv%5&nWy_HHTAInRbY+L^WeJ}$3m^Q_3Z0$!;^(VP97>`w8T;a@m^tu^ z^Z8a65|=mN|NG26Z~aHZtU!~i$wy`ZX^>)U`dba5y;rM``?XjZCl9vgDBv$l0w@7= zMean2IlQD`=fS9$;!G8%Drpc5t&|s>sBEgFEw;ikRe_qVdePvLUOQLI#W73e(lsxj zm2Nq!P~`*`ub9+&IZe&K9#0hK)EWFHR)c3akCF0Q zZK>NUl16Q*KdhUBckX1CDWXEWE`U-VwE)R#zLyil`QNvTPYxFso1~>-W1qL|t+cRO$bVx}?HqI)Z(0eqr`;N!EmtIHT&wCZ|}^Bb!xw$>|4X zsI{GwlSNQ}@QLav;!bTU=l>pvMa2I75j>GU#~%uV!X#i~P)RWnKBzDk6w1XzBBbSN zt7zqA2jNzf5{AOW{zpmTR8A42$c=VS*~!Dx3nDBg`R}J~UAiNf7y>^RDIPzJ{}Cq>A;uqlEZ#Ma(1pd^cNz zBC3p<_bldkettxDUY{Hc#7ABK7!1G7GTEZwCzo@QtIZkxad0pHi>F_(V=_h7FU6u9 z>=zO=m?Hj}3p0ahj4yjr@ffqzjgtgkL} zEw&0qlM+T};w262mwI(g;?c$? z9q6P*)am|$0hf=M!ozpnr}p-Ys-#wDx_G;an0UkAVf^vKLbRiml!$gY-;fOMrw8fQ zwnmic9k)sm=aPg}^6FNXH!e^sKLZv1)$G|j$GjCr6^>oU8iIT)Rk%Qn^Z9h31q=)f z+F!y9qMjj*4Yd^JMFTN3pYQAxTt&ykK|Xy5yByXSNe@d3y#Fgf7n#Pn_xY; z)W-Mtt(e^B#f*|4v|l{YWaii&VB*-&Wa3ycHHG50y7C+2MUZ_fWcyt1ZxW(8qh@?t zgs1X1Apn_}AeG~NP8DP@!41l|KgO%KVs!C^aGIlMJgiDBP9D!v{s$ODDr^WE#q1G6 zh!4r-Ywy`E(sW*Sjyrj)l^ow`4G;3Xp{RYdd?W!Q+wATtz+O~ zc`VVyLinclS)`0-ogPS{@%f9Uc{apX zP=dwQ*qt?`dDFdU>~<#TQ;i><>J##tn=?t_=8%_%6LJO?=xFGwhTwzSjCJL1h_>Aj zB{2jU>$>5$c2S_m9*l>)x!$X)*Rc>nc8gta_yjuFsE}^DIv*&Lo{k|mMNQ%WfsJwN zsXOWk$bl3!*Q%Pi>W*H&In5!mIYn(8Swe7n_m-(P(M!f65nhI~C@zV#1hZz%1RhMd zo{U-6BLA*7*_HBiMv)C5?Q+@>8+q!*)J&h&5ET}GKKUfmI(w)LZ0{l_zUo(d;Ox@* z!bwx>Y%W#G;!8pNTv1~)WA8j*=x`q0?c$+ze!lUhe@b?Z-jjownFik`+KFHwj-$hu zI(MR+mYUX_Wz2qn=(e?a`GeYf=j94oD20i`XEPP$KCsx5T6ZIdryjv&??(c!JD_2GS6F-b z#Pdzc=L2RejQ+Sq-`9$3RQ0N@F8v-UHK<|n0yQI}>O z>H6i1>-}7#9i4P5Y*ou9Uo~o`U84D2)bXUlMe71*zn98~6N$x|b-pi`*QbBYTCR7d zbP^LW*o{I!A}hPHMMeU_0(gm@)i!_sHarF@Y!jn?3OqV$=vOp}se@_mBNBQOVER%}9ihPJVU}5ivN4kP+k=3?dAH-6Zv0UA=CSqBlk!`XoYXFYR4#qJO&i zKanEjnT))cvZRDK4E`9Zq$n?{sGtZJR}h6sDv1dz!6Y9mJeGz0|0QHM2mP1#9UPu$ z#lQ>DBz5c4=-pGgH1`-vD}wMwgxq26l@rcMrRoIbT?G^LSBr#GWJu_j@#8F|F{Bxn zT!v2_K0T+T4bb*!*_%aWYUtg=dBjJJU!=FZ<|@)+y}M>wEKBFEX@-}4M1E9RT$b~( zIsTf{n|yo}KEkRuiP!Q(8LSpaCy6YU=5AN?$r z&Pfc6zUJ|!^BT*}2OiH8G#w$2F2@6gb%2;_*fEG~6!B>>U$Bk%g89O1I}xh*vtfn$ z7@Co{aX%Dw2+k02Ggy2W0|nC3K-`IK;3-T}TL zbc*u2(k$>RaYS=@Sz&2O+HL|BNNl-G3a_~TK3fuU0zOGvMaI{P#nOBu@kg15i5Z8J zPZ1)beAd#JPF>nwd?T1$I(|KPO#!51jnyYe15;Y&U+)!ur#>ATJx3`Yuw}C=ybe6z zw&z|o%3^JdV(1$Pl|c+d_P|9Dz~L3t=#XrgXTL}ap)nAjN)Ds6W(g6CdK%{t%n;`Q zI;}xv^bff+KXW?z3b+;(j8AUNG-LQ1NwQ5smd9}ulWu(e#5(PX2kcj1M0-@B6_Hz> zWNTQT+(~;_kGZW-4P~?B)xf%_*BZOvo7>CszEmv#32`mNl{MpTyU@ zK{iZng*NxfGe3*GY99JkFEzG$go$wg-e73b~Sf{I01poCDk z1i*K31@b58D)hhCpU^)Y)2l*L7V-=73&Ek5h_KVU_2H-Sr%k7^r*)@Yz8^2wkK+I! z&PVgpxx%RgSeUpbw#0x1D``qN-R;7Q^NNjawd4O3cDje5KB>x})!1{tyTwlWp0yZL7<+-DTUhzOt*!wr$(CZFSk!?SE#?totxe8L>0-tb9o9h#eRGglf;TH_~+|uwG3>RxXG9oZAQzJ1jIY=TAFlwVFs2m6g6Gvhhcmf71 z5fhQUkrfOtFASrsshzot1rhr%_QZTnYQR;ROl&3-(&)__8vg+BYEJ(e|Fs$6d4*M_ zoSOIAb039#u&5;1c+1!GFRc5bZPki*C@wDS%iif()|~!mS!mK$KDE}=!JSN8Q4qm+ zYNA2t_^e39L`foWu~6gtqo>pL1(V5vAKtFY4%&)BsL7pZFyvAyL>`nS;^P)fXTWS7 z3q;H>ARffkYwQ=$VPPI0_DplzppZMV>*4HxY-1mO;k1He+5?y6+1 zkW+O{iDTCovuUuhGVlUZdz;Jcr6jHPej$WBi?*_`8wrQ;@{~dkXOzWF&a9`6aKune z+6@wuhwL|Hu{Ub0wY=u^X(j9yz7~!rBxqv|9bsg}`+9^7FJ{sv?=tg##AxtoMPPT$ z4i8ui{yjH~Bz_|lw=^^&6`=SGLRKk9PZx0v!z#b0x|o)7h_Smi-eL!Q6`NeJ-Vc{tDG#FhFW1afXwTiD5vSNGSnTsiAv3S*Pjjo zXTD2cNKa39kVIr?R1ntx>|FcAWN1=g=6Gb(#wlnPNCd9`-M%bL>}-ij5LAF^ElmYd zDHOk#+VIh9-?0hOd#(I<3$OI+-?P_HSXTi^P9psp#uIAmQ!YOrUj^M;nblq*d~D6mlESYQSvxc z!b8UX9PuFn*A#z9urLSK11K5=$4uy(%ni^k0{#83yWK#I^S<`DHB3m8z;)(&kp1h* zp7)3`m_U%9oo9p*F2RGw@Ykrr1z}~xsD=bT7|0z$bv3m$(}Lnbunu5(fDyD={TzTl zJe3kc$><{o7rz1=MRP!`%i>H$sTp`ydo3 z_54sqOt+dQpvH3!#DjH>$T${MoK)+Ao&nfHx0!SOfzTpD!qKnt_ej8)@R}~b7oq_~ zX3=U$gW#lx?fnx*NZo^U%x9dOoO$O-6@--Ls1-YlnU(rsi=Ke(Z>jXw$3es(4v9oF zJ&uR0Ub$SJ;J@r|B~6 z@osbv^OxLQS&ag&>doB?H(J;J``GsfsCNtdQ1vIT7_@`IGZ&o{DS_6+O*apB4lBE} zLoWoGcsJ;q(GEcQ=6;&^^mI|Tc4>n|)w9wpfbZ*L*Mc`=n%KETN;Tjkb=T0GyWBkS z!;QS9RG9#Xp!vx`Z!s?89kC*0cqLtIM~bhj#8BiZ6?~+*k+1}V_J^f%Q`fO0ne)b6 zTh@+H?i=JpK5=_-{LqoZvc(l66%(ne{r16w^lLuhyTZ2f3aNb#P#o_#?Fcl&K#Pa&8rQGuD z;HH-%y)lw0WpI#{sjp#U%%K26KDIuK& zSvw|gX{^qpn5(z1cL^f(yxSXnUS~;R;IZ@DFc2UaSvPDkVKMo4V$Af>6wWl-RMwR4 z(`MfsRzUl8eP9;DujRHeB$xibq1L?@S)pxih~=}dQ_q*L#j-bB#qP|eRo6}G0UcGs zirD4(_P#mHf)3ihyjCF@vXP9*MVu^3V$`!vYC@E8_zNlbW$IYOv|(PzQL6m;dC>r= zvl$y}!^a4c`ULj=kGvvC=D6#oynC49OKG%OnNB@NNlrK2;R@k|gY}B6EeyOC03JfU z9yk0Av3`YTOj<8^=mjD~U?t2N!46q+@o6AmL5dnn1=^t%Q6Y*3P&nrtN;L~Wv}Dm;|&97e>6S6UUb= z)}{g!4O*H>H7llNQghhFo|sJDx7zgU@(6udFhVo62?uDcX%>jcGsoe!ct?OC_@_i5 zks((e3sXkq8S=^_$rxX;LBcJdwaAH%zvk7u6#qy$)w~MqKSbWSSWh$p$%3 zyWInG4q9A5j|&N8P7pI$9;|?9_wK>EH4&R5#pGm1r5QW)^VDgkKRE+&7?bPS-jDVc z?$!(5cFfz87>nHv!!AET7_4cSlecf)DTYQKJH{OggN|q5?T`LCUIGk!gqYm=e|_>F zLS`7xr0vIxOOF<0oX&{bAOG~sy$PSfW;43*Kdq~<3?wKZKXLg8NOJ?ktVY$rKzg~$ z{o2xHPmt7JGDZ|N!CWr%8alh+4bg%;fn_pn1-+&WFtpk0(2kLh>xCA^CS34E)$lxE z;|LltA)DxwciV~z^p`HukDKuV6LuhqW`~CL#yfdh%0h|@Ma(ZALDKXWnRr3&d@~@V zXo#J~=VepevnE7D*vSDvTM%TAkVEPITC{vX@pLp2;+?<|d>Ih)(J?Lw%8&VI%T%4* z8tg~(Ovll!)v@ZPp0{#mM(p)t@Wdb3U7pHQ z-FKbxR+?FTi3G|^ZTUn>uJoW0MpIdJmQx=ZqE`zg3K`}%CNzcnjF2*A&!M}z(tY@Z zO`4L91$Z>Z0jLBX!A~^{*Pw={2#ZoYy`OBKFtr{Ykllh`gv>|vTK`2QIGGyJuw#LN zIpdMg8ryIZzyP0EMV#+OVU7K(@a(S8E)HM|M#H_`Z+bG8z*{0(K*oy){T`CAmt_x# zS6}&Qx`i%%?-cdIELH_w5hhTqZ|8LwBzdTcj)nSYAT0*{-(ecC5uB0xa%*KTseUPI z@K*B*dZqD;o z+u&~zrgfVw?8eONfcma|ONEGE5y&ai-$p`Ip`D29kZ>M@i#xYXm@2|)B81DAv+`gv zZE%z17KiW(AF+p)Fde~d>xA8^V0`|N_6MsWrBV+H@=XzbxNd*8i{BkAaL@%I14*jJ zq&YufZgKkr%4I>`U`*{yoL!tu4Q>Bp{U<(PVP^WrwLpJyvH#;%)Bx>Gr%iSw-&J*o zPcnszUlDlMv#5p09Nk^z(C z2pC(=lHr%e6b3uX~ok-_IWUaKiAkX3x8p#ne0~wx7Fqer?L% z7_aehdB3o?{GDy`0ldG9-HIM2Q7%|GY$=emIc;^E;bF=nMgdyjf%WbfGwC4-8%+V( zJyu=3_C9t*nP}MZUb`CLBPOZ2IKz%8Ad-qDf?S#K_m>rSr}!xf9agT-1v0n}M^V=L zK1iCGKfL>_$?og6>yL{=gz>J8jRVQ%?YB*hn4ESnZDoQnmOyc&lf9u*i}+fc_8 zd0)-J7}jg+dK$$bFpa*#8eE!jSkCYj;1}@jAFk0=dh}2Pq4#0061?D4A3T{m-YS8T zFG4;=ziQ?>T!v~)c51EkYEAr{t7XiGq)&#;rVpp;;&^ap@RVjUhxVg~#;tvzF0}Tu zMzPz`2>~P9<{^z%-^1)BgdKg_-YnXaCkl6l0Mybrp*NSl6I0JWbelTKr&9cCvcKHF zZJ?KYD)Tr!Wnr7+vYbDFiq>U2K3w7RTZ$kfY6}zV=&pVlw7J=)G>3QXl1`M-QC%xd zqs?SW_RPx2U(huk?#uOZM0+3Zw=G|NsX}&5!HZH?YVHJi5JzuCY_f&?*ECrHkW~iaC#QBXGq2^$29|Q%OQ9sL|+k z19Zq#m(U60=$Hl`4hHX13p}>JJNgPqRq^um(9!3FN_3ZshqN@>i5)i3!1JFxRk`N_oP?0(jq1TWUUnVzr-O}WkGu11L zXRTvhsKu*3ORo>s6`ZpCLzEq*3)S;iyo+sWldh5*-W)I>vLvgLkW)7%sNYO#ld1`= zj-iX>tCE->4!ihiOx;G4SdPKlM0ZK4Vu_|6k{doYW`{b&D8%MW}_3I7w@ln5>wa=|Q)7z&BKmKRh$c zk4a07f3ACTTW!jhC}MyqE+RU2VR9O-obbh|i8@m^a-izf_H2w67@EOFnslPl!#o<5 zGp%x_Oul%e56B#M$WaqHr7~Cnh&nanQ-l8|5QP5bu4895Ow5w8K2CLh@YHxw-qf?& zl(Bu-kH*uD*bS3>%(BX)emkDG*s&|7$J=BnmWwo6m$nifcga#EOR{5)KDn?f9UdDZ zWM;k-RoFYgmHyF1R`_=yk5`6`Bhio@4dh?*pI1gpQw3K7 z$#1nbZDFwj1>Tv^Pnz5Sb1ejwG$))8;|fR`Luw^*fFbqA+v`sDY82Ot*_9>rP6BB=Lko{1!vo7@bP_L)l4Utr-2!rWh2%32h@-Uy>&T+Ajka~CLdzF-E)-9{EM%?*Bkqhi6(=iEUUovi14_qwvn zMHC}ux+t_QZ<|^HbK07r(5#abg>W+C?$(WUNCq7=Q%xv-fqkEGd)TJrD{4cU!i!l% z8&HhmiWTUJrqEHK)t7((#}qTd;rYampxQFTXGo$S)_+Py~`E|CB^^OJ5BXlbLqJzS;I zLDUM4K^l|g#!T;WOy3=q=eziCD(8~51_9sV56!LpAx85du?~yyZ9ybnq<3yAcTS{t zv!nP)#JCZZv$Q!3anr!_nv}q8m-ano#C{0O1(?E2Bn?O$rm8w=6*7;=mw`Mjtk2RQzV12 z4jsfIYhWMNh<`>?b~)J}9J`{s!}p-#&O)PjL)SGm^*B`nTQ&Y9z6qPS{_)$E2LnYI zsCb?80ZNF^CJDtMjLY#x{L6n@4YB4*Enn%UD(sOAWVwjk4$32Z~>LCzqYZ=@;3 znV5;xangRKeQJ+80NFd-(mU7d26>}OftroFTMD4o5tjChv`Ap2r8hO8CApOGmh|j`xJo*i@bh%B^coUN8409xcaq<84@6v;+fjg3h}7qTi_lm@Lh~Vq#NL z4W_}Sj^m_uq}H!cI4JU@=4%T+ry%#o-n2nMQg7G`1+hU}&A<`C3! zPa8=K85x&6)Ypyg30(Cd)wBi-y~a*=x4GG=t+`ojQO6$DzPgJErphoCgH(T-?tXB6 z2gWUbV<8ZdUPuZ)^0(+2lNz>?^NA(AQ~1;8-)M3rIbw>u*p3CR3Gkj-Vc-lPnHfp7fufir?$Z;K#t& zQWN1cCWEq4#La(2@nn9}7&uKa1ahwe4GO|zVB(5H(dLy6At*b@b@1pdtr&#tweA1< z71shojeCjH7p^rVDrO5X5M`4LhrUc26GMm`PRT;kW&-}B<;pC+mj6pu75bF~25%5p z6(q<}aTZw=W{sHqw%i~qr~;vacMZr}O_@pWS6h&Xn=qOkV0+v#NRRxTA zGqeY+Uimf?bq9!zvYSI4Sy`WI)=^$dh^JE|DV;F4E>Ld)#-TqTA|s{VIA$)SUWA^B zq(B_!0>;fkQ$0Z@z=hlxq_{3^uMfFVUNl>sS&2uaX~+Rn!lJ)|;WE1b2fDK;+`uSU z0%ZX`#{L&jRz}}CwdsJ(5OS8vBD%wj709PD!2n2BREA(*dl@uX7G#ugvnuiy+?5J! z2S})#2nhf5?V|<2-hK%mpz&C!+Vih8%WTXc;vO2`86qc~uLDr{mohK4m+0aedS7--p)nHU)GQP8+YwKHiRDzxZB_ zyY+l_UB9OE6?Ww@zt&w2PA4Dab30B)N5c*azaOpE1$+RH7QwyvWXA{C#!E`EW;StI zz41i?vO97kwS;sj4-dyj_fFhAg!-~(r|O9h-%o?vrlkkqXAYA7TfC({0`2NQ46pmc zCSPVfU7vQJHZ9kwQO7RJvANlD$&1$mVF#=OnYiBYN?>?N`S!(q-$stieA!gf9?Oio zPm|f?cEbSmg(Yf!BHDtS*QqmYtxpRi7au0BD|MbI?Mg%~E*ye*I_;px7lez83v0w) z{bzesisa`M9ffV$37RpP)vx;t`>{d2M9<cemn z4$V4cPlp8XsEk8clsstMLdrtBvJ`$&7414Y2Sh-Z>A=X|8*K%#I5GJ-cY-jpkoDZ5 zc_7AXY9lnvq8jcZnveB382bGNjb>iF&lJ0My;f^Ro`X$C<9IHp^{wwW=<4AM!@pilNWFk$`-f-T+Aq9bl*%Yh9{q50Q^eSXA5rl)Qc{v zH!pu0RrWg?}kZE#(}_#xLacHWM71C6Kc^H zFBH=puv3otYx82*_Hy-n7{VrUT;1h_!p2`fnavRVt#v~b2@imb%U*I4g`R2ow^B~y zafd4bKB^9GmwoPWxOx)rz-3B?LvIkKO*#Uqr z&8`qfw#%M;EvLao{vI(9YzkKUJ5-Uc>rMcT(Ils{T>GY+r`YZ*Esx}^H8_*`CS|}{ z2sf~j<)8w?iDU!kp#2~B@iv>L)lqgE-@^_ou_QokQYxbaU)Fq-5xFlfu?;@sKfkqv z*j26=TSp{}cxv6oe3^ay>e$Vn+qr$uep5C}UF&wP*F&JTbn#ENdx ziEc62vUoadhR>SAkD6bPW+BL!pTJu$wSZGBIni#`LNH6QXu|uozO-vMqBhMaKB*)g zNG(2zJTn9PFI` zqu;R*{o>;IUp4QaJpDf%MC||Y{}T3Me!KIcegCx5^3c-OnA|j)&LX9YwK(I=WILME zHc->9n^1b+bPuG5*eFqLt_$~GEWUi~KfHZ?zw%upzW7w1UOf49--JBDZ?j|R!M;eak?DBqcs2o0wTx{3=Ax+rY442M?Qdnpwa*k^(O~@ zM>2FmmIXQH^Rr&w5Cz(6GpXNH0T0u%H5Ax1+3)7T6^0-~*} z#*dEs;i$x!fZ8mW&-B?9-M*hbI=|%R8;W)wH6wu5BsMMGyoVc z(t%O|lSdm0q!0MuQ;rd=?j8(4wMMLioCYRA;Ew}01Q{154BXLMr~}+#pk5b+yOwdY zi~c)Ku`H#SwB*Dd9;jCg=u>SUFs#YFA;kA15N`z~Q-&`|U$zNSj@KvARHynQq7{bjJJX{*^>BtBCldc1M zeP99og~^9y_H{GE?DezE(OVH2&~vVG{bRfi0H+xgbg<@0qX(iQfvIzGtbZgMxR z1=!V8cB<|Ib$0m5yA-M>MPj0Ac;24sE{F$47;kfT7}(&~~x z1NGkTO3DKD)jCD^1APM^QzfDLYTY7&fj`evCDHnRZcz-eni!Bn_vd#d@dopJBbeYi zQlSR(-2WNx08;2FxRg{~W1p1p-h3jYM9X6%Xb_QpcJ*nJALbv=T)-;Ir?DFl={GVX z@nh?kK6DzgAb=Ek%7cg#?LqY08X4o;*3qTQMiJ>D@vyZA1i+lMHwlB)-uGjGgw{u8 z=#1@uHZ(GGB|T!#fp_La4vcE#4Q{06ufraUjdySc20U0JYGC80PE-Q7N<9VhmyihlRt))2K#F0V5Wbm#_P*>2VHYRD?Z z(jt)to|?*}sWR405>5bi&~0USu!MIP&u(a6KIT3{0N{-ECFCcX-ayg7AZgCu9|7M_ z?f2V{KW%C-Fb;_R9JNsXm{epiNW)z?(0Oe)0-!>Ym{SEvfG^Pgt*##)$ zHJ<#_0A>T%FTJK=BUNIgymQTMijbF%`ubUuFnTvZXZoK*Ef?3(NRk6c4jL$JV)6>n z?ds~%6=XlQtV`>bxum;6$=vxe>|Qs$yTbCF^hY+EQc&Xkcn%T~j=FL`)b0{yBFP<; zJDTimv80(Az7>Z~mlS+0y-!di0trTL90C9*;JyDXP3iD^5?^)H9ln@4r9Hn-Y&QY( zeRiidz5U+nQqqh%%JaqpDe~;xYfvzZ3yrhVQ+HQB7z!FT^KK|tDGwGA?1uA_a)z6; z3Tetx9b$S}^Wrb3Sf*p4CTwCWSEB`W-R&(MZ*F+gF6%kz=lnZ{cW#vRUb*GKTE3qu zK&5GFZg{h#Z|#acNRE?xy%Ps9ZLn8DnQN(IZ61e7DB}8e`M(7XS8T8_h8L|}%BJ(U za1%A|I@W`~<5JC6@$aIKtgtD~8{R;v*~Z^dTFKw=Fq8E>+=W?5qvb%62(@8+#}SQB z(Fc5rL5V8%SPX!+QoD7*^cHCbx%vbEmR~8b7wt;R?*%TJswr|=jGwyw2 z%){WBHEE{qZ3!m*YCN5y_V)8xzpvI_q#79cCoq{np3M2D&qK5{Im~Eft(M2TZ^PXV%F1A=(eCOK39J(U=x9Y=RZ?Aq?B3bMJoVzW> ziB}$8<1P7X#@$ogZ_oa~y6dz#W;o+kz=27T%R4O0vk>J_+e^K|IZ54NeRE3;&ZxCZ zNQ8!T-pr={t+98Q76(mR7lrZl6;QC&1tT*w{4%p>v4e-8+47(@;>@0ptM2|mOA#)< z;V5<%FbO&z^QXC-j0n=@Y(Fsoj6=isY_!e5k52>@KD9r6Uk+?#3*C(=rN3sjj9^c^ z2`JaES+Ea^zqH&9d#Q<>C{zgK*LpK3;vSWEMGd|;U8lMpHm5q})J3Eq93&S-)Ld?^ zny;(Xs+z!3K6M?CkPVmNN~<|0BU)U+k45rE@@rLdrixFuz`h}O=OyC+o>nHJtElDu zM|C8X%4?Qu;XVBm7WwC2TJxust(WFMl2}i<&O0vXcvaX7<{9Djpd9lr`Q}HcSp`6f zPyC8ncWFw0)^&;qI#zP;v`8*Ux+vQcOz+uaEce4Lf2pgt_spd^YGH5%IRi;GA7V9* z&wXr()%{2{HrHVl`P%sd_KU4k$z>O_E=BG6U8z)@hZ}}s`nRloy88q#{9WGZ3TN`2 z`;q(eC+}U3uT?wyf;9anleT5-cp4Jv4V?7JVh0MwJ$*fy3F$J#*e>bTAWjf z%`(GY*5*i_&G+j(9rfbVLi_4NmEEz1{|UGYzWXi7z**Cm!5kEM)`AC0#%_&cpBHEHUfLwegxq*c!7a;hJv z`Kb8IJw9W+c7^Ey-OnJWL5e|EsK~}ZNn}e5L}oPnLJBeGaZAiI?A%!$`^1rv7UH;~ zTZ7_Auv1sxMum9SC+kU?4#>GJwe#5-zvp2Jd@gSfeJ;;VdbYCZD4naA?crB4IHyas zdq@a!9q6>GbOv~bPThQUjSlTF-nBgCU7V5sQWcSPI;>#;psaydkT#Y|1dp4ol;zyU z+ENQg(_g%~@EFR?sX$16^G{zahE&iZeETGwaY~fzo9&uRah<~beo3sRRg7E6wC<30 zDN`x4g6I}S7`ME1A3yeQ(o^0?NBrSHJgMoTarh;E9UQ}Pw8(l<%`x9_H{UXgbl>PEr(Q57CF+k`3&$|xR8yl(Pib~Sph zGWsT#w0X3(p4S@Na4d8XfVJ9q@xQ@2#Eej)B|y&x9DDIoc`7Z(i8l%cM$JqhVRNw1 zqO{(y^}k8?rEU(UAWt5LE9IWA{n~`W;MG-~QFcy8h9T5jaiAQTu+7yMCn1>eB^=YyQ^ zUrs>ddL1kNhi;P&^Wu0crn~KAp-%Yrx_jUVFmcu>OKQT9D5fvgYjZ?kenpX?smW*4 zsYxC7bz3Qn(>2OWYVyH{82x6zNFSSSOjUa}w-t8LlNoS#*4^AA~0Dv9n5+9wzl;PFFuS};gWueuW!VKL1O z04#Y{O*0Z3k|nN>rA7m9hd*W!IsNwGZ?Nf{Ql9>~9I)-VrDksrU$V0GuNU6Uj6!1s z+Cc%emGdh8gFc&@QaN^d4z%uuJoiX^0Uwf>vW!@v&9Gcr zN|VMg2DQ@f9!B6eto4l;M#U9E>LWt{z=tMz_aT$#yU?1`<=u7tc7fiVnPKq{Rs8Wf zmVQT7s8Kh+$a?}i-8-p%X7U9-e|XJNMpZlLd&L%AC<*$08Y-GM%(r>!oC<~}ZIinc zC)uf}MxQEIFtUZKHZO8v_=989;?b~^3r+SRo-6#W_J-yhP%IHE%5M>X?nhq$7)^D> zUS$bGhk}okH^hi%(}}Tf?~XeCjf#0%adbt+3bFb@64_(NI$eMXd8&`P-di6F=&b$% zud%Y^^7uQcHPb~l*_)q8G*_-8XrSVUG;Jt|pG>*+1=4!9U87_-dExcc8Olr*=NN%Q zjOzM0^PmP97Jy#v8ap@^KXwfSh{a#fQ(^!_6qp{%qXE-Bj^tt2v3d2pPFmVBg31ih zBfvLL%pL?@H1}~CpSCfc%}D0!&+bmj%uM)pJo2p4Z^;mY@cJBjUnMx2Bgas>}43!X+#sTsfE?;!q^*Ei`x zI(h+I`@|jGHx5V{@xvG@?*>@Drz5D@CTDZ_`mS(x(&$_ri*U+ZGSCqA0?o1`FgN6N zt^hi_WH)kM;xzl zUE&7WTSO-0uo?TExqiC$j65Rt1yECoL|X&Nfv(4Fek?il$2c)0uAcz^wX-22{` z?FC6sPq@H~Gjh3)bWXfhZM5sR$OxX_Wx#mfPeeq-?l93hl;OwP5-s$^Y9s8N$7-T{VGNlH%Ij1_Wz}#bBq`RP4`qYkMcN8cZ1pN zr?!q1rV~cwJkUc1$XNH9sl4_8pV@IODx_~89Y4(*oxFWe*=h@XL1^e=T(fsOH*BXX zE)>03ixZMnC-F9nR0(4)bmpOBzoK}1rCCrKtv!v4lK{sjl^>6m)< z^IMExoVyc=Fa;vZiK=Wo(galZ+=K+nD*DQ4P3`B6b6r^ib}FmKaqLr^&%{*-e+9wx zq5Mv>eU^k`@s8X@C&Yj45_J_m4rC4g)|ipp_HI^cA{O*6YOkD}i+D39Vk0R)e&L%QAcg|@lvji+>pX7xi{&T9cSdnGN+WUFFIomqLU z)U`YBbh1khzk0_9gE}H)F2dRt2?jQ~-nl?DUpoiN;IYS{dKdy@>!^;qjr_zJk>%a z%ICCdzb)hAa`NsdzP+m)EqUy_5zR#j)Kf-Yk!X2*`+>8aPwrwr?<>wfKUEP?>uw&g zdte&_1YNdFRWfULSu5iWc3nz|^(?uPmyNCVX$8(cx`!?x4LzCdAlI?9_vNuH3M0F5?$rV?@38B=qe%!BoU%FK4)2!f0(P=DwYkQxn`G z9it%uw>->88J(^#OPp=ETry3Kw>Xw<)-5>~a6?>uui$Gz-S~?`2 z&-#e%+hYk9OiU~nVFx^wk;^cAHbJ6SIh{s0hFK7{6BA+aP@1NjKqMVjZ{3>>q6kIp{(ezr4bUr5!H-K@B}ykO*X2I>*g#-yj`d+(KmsI5Viktqcd; z10;yK=z{7$?UY!VUb3GUk*Bjw1VE(x*;OfkZzBlZk3P=HQr-5hmcyerJIYcJx(?2F z)1JBTNSm7v5XsKR+1LrAc z&rqhGgRNf;yF|;=(+hYm=WT+O;PU$Uhni~!3;WRUbEo%c2G}QLc)0o-qdEwOWMH`{ zD;IX7azGQH&OVq9PBMF^;*M@c`G)rb4H^QIshMHfY{BO!j#n-Z z&U(T#&yp;2v~HL)PSg+cUR0_k*PpCPh_TlET*EU-W`{9}tOox1*v%7AJ>}zVU+9B;p1N zOJoOUf7gB{A8o1eOJ(u8Mc3Uf@&{bhz2RXY9wXynM!(I$yQG7KU;*HqNiQ}n+hfLl zm!h-K|GX`QU6L9#nrq}|&TS*@`#$DKQZJC0s``m;^Pb`k??8SF|F!Qx+?|47_>JLm zFpmm|H+m=tbs~Q^Ye55qL^)FbTCUamZBlBhqfn+7zT!xBX7BC5-ZUz%s=di^3|B_b zQ%{raS^FuS$ED4+d!r#s%_K(8g24x%8Sx&}2i-MX!}-fq z@rsT$$AtEZ^LqLjo2s;j@_&?2;l_iv?1r`A((VWy{;5^p3mjO&dvH&OIagYSU<*3Q zO{qC!Y0t6dyDn7#nF;30-Q-B+pJ*Elc?iN)IAwGb$5YaV5Tlegy>w z$;s}Z;j}6r8riJ~4~X$GjmevyloT5Z`h=D@c5H=RzAq5Cy8p}1AkZ};SwD^lZhC%# za)((eCnwTOidH$k{zVM2zyU7aRzjUJ(VW<w=p8^DN208I_8N(ZN!7ifmXMO(%} zR%|wzg~qD3GvaaiqDj`NbV1&Y+>|$ED12Hf4Qy6S?d5@9%?e?*x6NOoRMs8wuI=Eh z#;5UOF+B|^0B7Hq&W7i*3tN`W6=#}muJbJ)>eYZF+L-v~=$^ ziO|%&T2-EMM#yyJxRXzyX*d;ua=B?sVCW=se1rB=@W8}KLRSC$sGb8UWThWWoXS)< ztQQ^+!~5<6k{&yRovLkdC0AS_Q59X{ci$5mV|xVv+~5kB2|te`fY_4h*$crB z`$CA`4Z$rW@MFN4rw~JQC@?IMtD7GAs_+`Xc`lfoZ%=ol+C99`MZM_DK|%$UmCvme zvPmUYYHpO&=rlCZ?q1G<%Qm*jfz%3!7}MO&t0?8=y_U%ww|WC!K-_{5$ze*Jw>jFP z&*!ZeRFh7u+p~5%8m+0mHIXL94}7)>OXmXZ7LARN2?^GqO{&yP0PnQH-oyi`$^`)= z=!Zblvs@EkBr8l(dn#7#q)_6@6+DejW1(urNs@8oY-LVlMr62oe(W=#R@cQO-=aN# zZ(msUk(%UC*x=*!{6b64fiax>bg5dOPW*^ppco&rPq;dHw3niL+g&MskAgHyy`@@fO!Wk}P0P z4*#nn_K3ekehx^=KARP%{rc=n77HG3(5RA_p_o2AIo@eFDMBfJ$#Rv}wV|*#@c#%X z{ap&1zk4m^I2`z#Kx0Cs0YVW{z{IBL4P-UJTj$|*&=hrCcPrz~;>>bWUqlD+B??P> zgL-3ml16kD;f=lJL^Wz^RP~Ptv5jT!*2&=Z9iq#952{8)H2is2oHc12h_&ZUfb^OT z=OU%@apgw4x=KfAh=>28Z!Q^Xs&R%raPal3FR-iwJ{Ri-TgOmXQ!y z=b9=}rH+~5Fi2-YVZ9&Y5W9?3iY74ccipNpXJcWAdY-QM5L-*fPKyD``ky?{NdkH& zf~^+yxvKPAsrH7WEa_O`2tLTg_Z0K_#@VS6HB(tZ+o~njj%yq5Zm(foWWHOAA@X=u zm+}J_6tQ=Ze)P`b-cf~N5K@Bw)CSA62%`qB=dI0hWg+BMscv=f$jI7T zDMAo}`b<`%OA#b(h!1*0*VBnPsl!IaRAy2Lq*F!YQ4;G^yD4>P`H}dN_Zs9vy4m;< z2<8(`zqC;`4sj1&f3XQ4X^Wn8WM59#4{$r^p8o&nf$;xdRrtSO?f$!N1rG7o|B7}* ztZW=i|6RbhX@@I;;(Mz8SeP8L_JV5w7I#VYJR$|RsY%KFD5ydj6(LGPcD$x}*?Uud zoj$Llg@(_VkQyR4U02!Bah`Q9(_9p77)Xtp#uo26ZnE@>lfIBc4XYIAAzhL@tipUn z)R=({&1aofUu2$+?o?1^yb_mV&K{>{AfKpbG6N8qg+4*Qj)Jeme3kY=8)ws zri@HV6oHcW@`245&)X{>mF$lfMMZ;Pyj8KlLcr1o69zL%7p*HNDu6)WbMVhlixUO2 z1Os$a;pFPE5rIw7Xq6NS#{NwYK+z*%MVO|6F(YS66=t#ShwH0j=ztEf0o4#9qy#g# z`@M@-)5QPE4_&0BU-I56zh`$~UE+;3>>`%0^I^{N)+)V#3|ERDK6g~3bIanxY z3LQ}%WYRs#tQQgpaSF2F&@oX;puOgBRCqu)8tY?~=+<209yFb2n0VSVfvgbN*goO| z8cGw%y#(yN;y;a8Cq+q)%?A96n(Zj0cndZ77t~50qo_l1JfG5lCTCwk$*qvD%inxM zS_o)-II0kTZyXDv{OBx;2vsBq4eJOtWCZLA@?vfOO)U~*(Z{7A76qCF5_2;6Dr7)h z62=BjI~}>8VN!rHM09n$n6miZ$L)S_@4JUCvtN@=O$(}DmsalY3l0!e`J8*oPijCg zBaf5INGntUjCk<;jFDFCVO$JGyTI%kGpLD1_m_#Dmk8?jJH7Q|Eu zdp@2%K0ed!(37X9M;noiLHIa>;fNtJ7T9K59=R!wqGo-XzbwUlMC-aKy$BFlV`MiU zRJH2Nt*KXu5;Gyxz4&6&Xf3tNQg*v3zSvqa=-!lBJ-1Z#eiw|0EVf|OMF*683=nOr zwtp@3!|**h^|~<0%N1e;yESOptq+Dp=UQZ^>@8h@ISZ^{$k!n*D9h^4MF{BEo-oo* zX^-Rz@Ed;qelncY^7gzI$nCDA_(Zl*pS%iHV*4wP>etwzIa?{Wv824%y1Z`W*7e@E zfMOWG17qz9)I@CbZ$h;p34s2qXeVOMl_c7Wrfv_N^1(K^Rp@J-vkPw&S%4g2qaDK0 zqyDF0X?eSuYJ2iL7osl)==Q`JxDLP966zWhZ;B4C*9d+1>E`E$znktM(5ag6P&C}=o4yq<&54d^d%e?Q6<`lmxM z^u?1FVPs=ue8v_5U!GDPWmtjJ{8q%>qe^_N7qDK!^;DXmxrWFyy4Vnxjlr~MSDoRoi!-;eb}$Jw}LUDoT)FT&EnTv)c978dQ$QRt)Nr+PF^9lqk!? zqhXeLvTBfIsKB2pNRr-1USPjiWS0m@7LvzK{ZNz~vI!>{2e9!SUWJ!e`@a8Y{Vr#V z#%df>D8!uIi@KsnG>-lWm@^}y3F2`Out^+X(NfK%V2a{He zpyE^w%*&KHkEGFBr%2F1cCjabVs++x*S{h1|qSfoRsMu*Kt$m55 z_IheUruVldbb>sv($xWfd;pX^6zjvI2sx>>n8yITiYj#3Q+ zU`Gbegw=WpbYf%e3$=J>Yg?#(YJGS8fc5Bp(gR)FhMPjygUsvszRzUH=)KfliQIJ# zRI?wCC71RTzSAr2M)eJgXSJ`!k%xpkWH`HUk&Bg5ro>{4-1iD-lY<&+*3<&CRqe%f z8w$()z(Dm;ho8&D<^z9%b<@%G43iyJ_u8rI1ed%p-h=wKvvOD7{ypbj{1M^9$SrrA zqIYR2XgK@(h#Nf$r{MYX9Pxnf(6IbA(-Tj+JVTSwtJ&LIFrD$K+9i}btU33(iF+n5 z^(|saEuVzrjlc57w`_a*7=>A83aIFgZd9%e*BCdDE4hi6Y7g!1j=I&jqeu((gs$~- zj0|%MV{gMv#Z{F)AZTr%Cr6a7o)c5h(9+4K+i1M8GouF?)4TO6Ux1IbntLrUJ zoiK4uC3XC?K|HOSMkf9Gj_jWrWN|fY%NCU1&1NVxrbZegUc74Gf%;_?zUvbnTV(O|+J%y8Z@aYxj&2ug`p)Y|sB@uo|U zwuzsA_m-l?3#Sv*G{nr`Y$c?RDyYHZc)nRbG5z3@xHqK-o;@p`%8Hx7crcptw5EzAGJs zoYZ{{Lni$pa8~rw^vFf@)4isd>@Q%lZN-<3pF>gjU*88P{lyXFbqdjqZE3?g?JZ8z zwY0s=bbh^q9UC5B>CGKV6X^)F33$-|qgYk=bl|zT`X>RurCm+-1;iHLGB(2ugKPOPc+(U$cB@Q;aoa4qLoZd45qk$7|T4m^h?@ zAOpeqc5kr~E8SqrtxT)2a*J4uX?yxv&p#{1p~jEP691S(K1oUIw*dLi5D>#C44jdj z(-x(kFo*o2uxxjL4KBbj9ZkPtqAe5ZXQIw z3mN*YXkd15m>F2EZ6B5?E(X){r!JVFgJuKev~=$_uI|d^sXB6Ci-H;APM;uw8q~-*e`JbjF;a40qrYqxB%^a z9zcNcfHwW4B=bOYYgj0$on^P@&P5JEV6@irg?!s3;$U#y8mK87&3rfrHBWFEjIe)K}T{96_E_fP#N?a`Hv+F~p z*Jjnx(EulJeNSxw?Q2R*w_36EwUsOdBZ0~?NFJS0wVv?ikHlu8S#`lVT3}n?hC_z7 zOlx4sa7Xh>26h%K4T*Ij@9PQN=Esenxp`!Fj|dJDuBQ)11|;^Y#DLJry7 z(Dv3Ie#@dMXyg^`iz=ANBzCfo@QU_~E#`l~=!H;&g0-)^ zpB=TS4<5Y-?SNyR7d{ugX2omW8ZB+$6lMYNzBPW@nBe!rHe$As+z)o zE+q~zv_23nFPkH1RZT`r$(ytbr7Kc}oiZ((+b4Fx>ln*#KaPX}78Lz|3A=ymIu&I^ zDm5<#22)m2Q&Lq^Q-;gIlw@EqnF~P0>o`|^Cp;D+tFNgHQ&RgcN~&)@MOYQ6c-7NC z01r|Aw<1(lg8%I)6rPB{0hIV-Lyw+Z$p4za_ci*X9cLLv<6Hvpu2aM1^etpr<=1-m z)k(k;E8KivHU(~M7Wp8Bl*G}7G7abjKMHGk5o7{T@ob8GY58VdT?oXa{h@d#c)R8IJjuahftf2UTo;q?}E z3CCT}>`01h5zJpc|@FdE|bH(c2Vy^^IhWvGCiNoO`D#{wig_c0YYrbx{;|%f7Odn#et*W69Q-iChqTm`R1njbk zz7j(1vI;`q;5ewlUpkm*YQGa$Z@CrC&>OK=oZ1M{oEe*o|R)ieMA diff --git a/doc/sportchef_technical_documentation.tex b/doc/sportchef_technical_documentation.tex index 9c7d12d..9751da9 100644 --- a/doc/sportchef_technical_documentation.tex +++ b/doc/sportchef_technical_documentation.tex @@ -157,7 +157,7 @@ \subsection{Create a new event} The response usually is a "201 Created" with a "Location" header set to the URI of the newly created event or an error response. \subsection{Read an existing event} -Send a GET request to the URI: \url{/api/event/{eventId}} +Send a GET request to the URI: \url{/api/events/{eventId}} The response usually is a "200 OK" with the following JSON or an error response. @@ -171,6 +171,30 @@ \subsection{Read an existing event} } \end{lstlisting} +\subsection{Read all events} +Send a GET request to the URI: \url{/api/events} + +The response usually is a "200 OK" with the following JSON or an error response. + +\begin{lstlisting}[language=json] +[ + { + "eventId" : 1, + "title" : "Christmas Party", + "location" : "Town Hall", + "date" : "2015-12-24", + "time" : "18:00" + }, + { + "eventId" : 2, + "title" : "New Year Party", + "location" : "Town Hall", + "date" : "2015-12-31", + "time" : "20:00" + } +] +\end{lstlisting} + \section{User Resource} \subsection{Create a new user} From 6265041275a9fbd34c51c46b47becab58a4b3397 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 22 Feb 2015 15:29:48 +0100 Subject: [PATCH 039/369] #11 write a test to update an event successfully --- .../user/bundary/EventResourceIT.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index 406bb41..bd07b61 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -36,6 +36,9 @@ public void crud() { readOneEventWithSuccess(location); readOneEventWithNotFound(notFoundLocation); readAllEvents(location); + + // update + final JsonObject eventToConflict = updateEventWithSuccess(location); } private long getEventId(final String location) { @@ -131,4 +134,31 @@ private void readAllEvents(final String location) { assertThat(jsonObject.getString("time"), is("18:00")); } + private JsonObject updateEventWithSuccess(final String location) { + // arrange + final JsonObject eventToUpdate = Json.createObjectBuilder() + .add("eventId", getEventId(location)) + .add("title", "New Year Party") + .add("location", "Town Hall") + .add("date", "2015-12-31") + .add("time", "20:00") + .build(); + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(eventToUpdate)); + final JsonObject jsonObject = response.readEntity(JsonObject.class); + + //assert + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + assertThat(response.getHeaderString("Location"), is(location)); + assertNotNull(jsonObject); + assertThat(jsonObject.getJsonNumber("eventId").longValue(), is(getEventId(location))); + assertThat(jsonObject.getString("title"), is("New Year Party")); + assertThat(jsonObject.getString("location"), is("Town Hall")); + assertThat(jsonObject.getString("date"), is("2015-12-31")); + assertThat(jsonObject.getString("time"), is("20:00")); + + return eventToUpdate; + } + } From 314e8915f71d09b9a7054237b911c062a033bdef Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 23 Feb 2015 15:33:31 +0100 Subject: [PATCH 040/369] #11 write a test to update an existing event with a conflict --- .../business/user/bundary/EventResourceIT.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index bd07b61..0646ca4 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -39,6 +39,7 @@ public void crud() { // update final JsonObject eventToConflict = updateEventWithSuccess(location); + updateEventWithConflict(location, eventToConflict); } private long getEventId(final String location) { @@ -161,4 +162,14 @@ private JsonObject updateEventWithSuccess(final String location) { return eventToUpdate; } + private void updateEventWithConflict(final String location, final JsonObject eventToUpdate) { + // arrange + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(eventToUpdate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.CONFLICT.getStatusCode())); + } + } From f0e9994814e6ce1d4bddaaceff79269acac05554 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 24 Feb 2015 15:33:46 +0100 Subject: [PATCH 041/369] #11 write a test to update a non-existing user --- .../business/user/bundary/EventResourceIT.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index 0646ca4..65e836f 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -40,6 +40,7 @@ public void crud() { // update final JsonObject eventToConflict = updateEventWithSuccess(location); updateEventWithConflict(location, eventToConflict); + updateEventWithNotFound(notFoundLocation); } private long getEventId(final String location) { @@ -172,4 +173,21 @@ private void updateEventWithConflict(final String location, final JsonObject eve assertThat(response.getStatus(), is(Response.Status.CONFLICT.getStatusCode())); } + private void updateEventWithNotFound(final String location) { + // arrange + final JsonObject eventToUpdate = Json.createObjectBuilder() + .add("eventId", getEventId(location)) + .add("title", "New Year Party") + .add("location", "Town Hall") + .add("date", "2015-12-31") + .add("time", "20:00") + .build(); + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).put(Entity.json(eventToUpdate)); + + //assert + assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); + } + } From 3e18065253a4371346edbe5798666f0f5918f388 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 25 Feb 2015 15:34:59 +0100 Subject: [PATCH 042/369] #11 extend the event resource to update an existing event --- .../business/event/boundary/EventResource.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java index 8e6c6e2..cde987d 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java @@ -2,8 +2,14 @@ import ch.sportchef.business.event.entity.Event; +import javax.validation.Valid; import javax.ws.rs.GET; import javax.ws.rs.NotFoundException; +import javax.ws.rs.PUT; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import java.net.URI; public class EventResource { @@ -24,4 +30,13 @@ public Event find() { return event; } + @PUT + public Response update(@Valid final Event event, @Context final UriInfo info) { + find(); // only update existing events + event.setEventId(this.eventId); + final Event updatedEvent = this.manager.save(event); + final URI uri = info.getAbsolutePathBuilder().build(); + return Response.ok(updatedEvent).header("Location", uri.toString()).build(); + } + } From 45a12d2ad0749e17009a07f8a09dff243542b35d Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 26 Feb 2015 15:35:28 +0100 Subject: [PATCH 043/369] #11 update the documentation with a new section about updating existing events --- doc/sportchef_technical_documentation.pdf | Bin 43907 -> 45271 bytes doc/sportchef_technical_documentation.tex | 26 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index 6ea43aeb3c319879e7606c647efe6a88421a362a..aab3bd86701fa7cc9c8b21438930d7c8c0941b19 100644 GIT binary patch delta 14874 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 R2%PNf9Pm_BlFCx>{|lYOh2;PM delta 13480 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 Gxc>! Date: Sat, 28 Feb 2015 15:44:09 +0100 Subject: [PATCH 044/369] #12 write a test to successfully delete an existing event --- .../business/user/bundary/EventResourceIT.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index 65e836f..224aa2c 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -41,6 +41,9 @@ public void crud() { final JsonObject eventToConflict = updateEventWithSuccess(location); updateEventWithConflict(location, eventToConflict); updateEventWithNotFound(notFoundLocation); + + // delete + deleteEventWithSuccess(location); } private long getEventId(final String location) { @@ -190,4 +193,14 @@ private void updateEventWithNotFound(final String location) { assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); } + private void deleteEventWithSuccess(final String location) { + // arrange + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).delete(); + + //assert + assertThat(response.getStatus(), is(Response.Status.NO_CONTENT.getStatusCode())); + } + } From 2a230779c48bb9e5844cb6be52fbe996bbddc74c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 1 Mar 2015 15:44:40 +0100 Subject: [PATCH 045/369] #12 write a test to delete a non-existing event --- .../business/user/bundary/EventResourceIT.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java index 224aa2c..f7a4585 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java @@ -44,6 +44,7 @@ public void crud() { // delete deleteEventWithSuccess(location); + deleteEventWithNotFound(location); } private long getEventId(final String location) { @@ -203,4 +204,14 @@ private void deleteEventWithSuccess(final String location) { assertThat(response.getStatus(), is(Response.Status.NO_CONTENT.getStatusCode())); } + private void deleteEventWithNotFound(final String location) { + // arrange + + // act + final Response response = this.provider.target(location).request(MediaType.APPLICATION_JSON).delete(); + + //assert + assertThat(response.getStatus(), is(Response.Status.NOT_FOUND.getStatusCode())); + } + } From f825d9e42d7fdf09b2dbe116fab61f6844666913 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 2 Mar 2015 15:45:02 +0100 Subject: [PATCH 046/369] #12 extend the entity manager to delete an event --- .../ch/sportchef/business/event/boundary/EventManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index 3abfe88..88e6e8b 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -34,4 +34,9 @@ public List findAll() { final TypedQuery allQuery = this.em.createQuery(all); return allQuery.getResultList(); } + + public void delete(final long eventId) { + final Event reference = em.getReference(Event.class, eventId); + em.remove(reference); + } } From 36805f0020ea57736ad4c7b94423e78a7daf5f2d Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 3 Mar 2015 15:45:22 +0100 Subject: [PATCH 047/369] #12 extend the event resource to delete an existing event --- .../sportchef/business/event/boundary/EventResource.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java index cde987d..8e82075 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java @@ -3,6 +3,7 @@ import ch.sportchef.business.event.entity.Event; import javax.validation.Valid; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.NotFoundException; import javax.ws.rs.PUT; @@ -39,4 +40,11 @@ public Response update(@Valid final Event event, @Context final UriInfo info) { return Response.ok(updatedEvent).header("Location", uri.toString()).build(); } + @DELETE + public Response delete() { + final Event event = find(); // only delete existing events + this.manager.delete(event.getEventId()); + return Response.noContent().build(); + } + } From b5d37f355fd1b91e6e11de86e92779c46de789e9 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 4 Mar 2015 15:47:10 +0100 Subject: [PATCH 048/369] #12 update documentation with a section about deleting events --- doc/sportchef_technical_documentation.pdf | Bin 45271 -> 45547 bytes doc/sportchef_technical_documentation.tex | 5 +++++ 2 files changed, 5 insertions(+) diff --git a/doc/sportchef_technical_documentation.pdf b/doc/sportchef_technical_documentation.pdf index aab3bd86701fa7cc9c8b21438930d7c8c0941b19..71e90669a41714577fcb92d6f486079e40aec430 100644 GIT binary patch delta 15155 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 Date: Fri, 6 Mar 2015 19:01:32 +0100 Subject: [PATCH 049/369] #21 create a license file --- LICENSE.md | 661 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 661 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..58777e3 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,661 @@ +GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. From e681b9776aba18adac162b49dfa548494f757de5 Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Thu, 22 Oct 2015 21:19:44 +0200 Subject: [PATCH 050/369] Add Polymer to webapp --- .bowerrc | 3 +++ bower.json | 20 ++++++++++++++++++++ src/main/webapp/index.html | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 .bowerrc create mode 100644 bower.json create mode 100644 src/main/webapp/index.html diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..cf74fbe --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory" : "src/main/webapp/bower_components" +} \ No newline at end of file diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..27428da --- /dev/null +++ b/bower.json @@ -0,0 +1,20 @@ +{ + "name": "SportChef", + "homepage": "https://github.com/McPringle/sportchef", + "description": "Sports Competition Management Software", + "main": "", + "moduleType": [], + "license": "AGPL", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "src/main/webapp", + "test", + "tests" + ], + "dependencies": { + "polymer": "Polymer/polymer#^1.1.0", + "paper-elements": "PolymerElements/paper-elements#~1.0.1" + } +} diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html new file mode 100644 index 0000000..17a3239 --- /dev/null +++ b/src/main/webapp/index.html @@ -0,0 +1,20 @@ + + + + + + + + + SportChef + + + + + + + + flat button + + + \ No newline at end of file From a96f00b805b223b5f2724f3c971c7c14e553bd6c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 8 Mar 2015 10:33:57 +0100 Subject: [PATCH 051/369] #23 exclude bower components from versioning the components can be downloaded automatically using "bower install" at any time. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a68117c..15ef624 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ doc/sportchef_technical_documentation.lot doc/sportchef_technical_documentation.out doc/sportchef_technical_documentation.synctex.gz doc/sportchef_technical_documentation.toc +src/main/webapp/bower_components From 99cd7b6c139ec59d79a4215d453e068321eb9533 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 9 Mar 2015 10:34:29 +0100 Subject: [PATCH 052/369] #23 The SportChef bower component should be private --- bower.json | 1 + 1 file changed, 1 insertion(+) diff --git a/bower.json b/bower.json index 27428da..cd1e4d5 100644 --- a/bower.json +++ b/bower.json @@ -4,6 +4,7 @@ "description": "Sports Competition Management Software", "main": "", "moduleType": [], + "private": true, "license": "AGPL", "ignore": [ "**/.*", From f0afe2d65caa34948c338661a7d7876fd5338623 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 10 Mar 2015 10:35:25 +0100 Subject: [PATCH 053/369] #23 add CSS for better visibility of the elements --- src/main/webapp/css/main.css | 3 +++ src/main/webapp/index.html | 1 + 2 files changed, 4 insertions(+) create mode 100644 src/main/webapp/css/main.css diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css new file mode 100644 index 0000000..4a57d6b --- /dev/null +++ b/src/main/webapp/css/main.css @@ -0,0 +1,3 @@ +body { + background-color: lightblue; +} \ No newline at end of file diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 17a3239..6b41288 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -11,6 +11,7 @@ + From 3bd81909ba2ec2980e1ce2c45b009736025175af Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 11 Mar 2015 10:36:41 +0100 Subject: [PATCH 054/369] #23 The test button should be raised for better visibility --- src/main/webapp/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 6b41288..15fa928 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -15,7 +15,7 @@ - flat button + raised button \ No newline at end of file From 63b01ed26af0dede299c5b59409926f0e567613d Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 12 Mar 2015 10:37:17 +0100 Subject: [PATCH 055/369] #23 The link element should be properly closed --- src/main/webapp/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 15fa928..4e0be92 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -9,7 +9,7 @@ SportChef - + From 694f5b488421d208c959e3cf06e218ed552a9ef2 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 14 Mar 2015 08:29:43 -0700 Subject: [PATCH 056/369] #24 ignore NetBeans project files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 15ef624..03ae6ed 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ doc/sportchef_technical_documentation.out doc/sportchef_technical_documentation.synctex.gz doc/sportchef_technical_documentation.toc src/main/webapp/bower_components +nb-configuration.xml From 5355c24090335345f68c6b581df38d0a83dbf16e Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 16 Mar 2015 08:32:21 -0700 Subject: [PATCH 057/369] #25 event resource integration test is in wrong package --- .../business/{user => event}/bundary/EventResourceIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/java/ch/sportchef/business/{user => event}/bundary/EventResourceIT.java (99%) diff --git a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java similarity index 99% rename from src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java rename to src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java index f7a4585..9b34460 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java @@ -1,4 +1,4 @@ -package ch.sportchef.business.user.bundary; +package ch.sportchef.business.event.bundary; import com.airhacks.rulz.jaxrsclient.JAXRSClientProvider; import org.junit.Rule; From 933abd24cec57cc2142a9876c5ccb23a5bf89dff Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 18 Mar 2015 10:10:20 -0700 Subject: [PATCH 058/369] #20 create a readme file --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..f92de5a --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +*SportChef Server* +====== + +[![Dependency Status](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c/badge.svg?style=flat)](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/issue)](http://issuestats.com/github/McPringle/sportchef) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/pr)](http://issuestats.com/github/McPringle/sportchef) + +**Sports Competition Management Software with a modern and fast architecture. Java based backend with a RESTful JSON API and a HTML 5 client with a modern UI.** + +*Copyright (C) 2015 Marcus Fihlon* + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +# Technology + +## Server + +The saver is base on Java EE technology and provides high-performance, RESTful web services. Everything is tied together using a [Maven](https://maven.apache.org/) build. + +## Client + +For the client we decided wo go with [HTML5](http://www.w3.org/TR/html5/) and [Google Polymer](https://www.polymer-project.org/). + +## Website + +We'll use [GitHub Pages](https://pages.github.com/) for hosting our upcoming project website. We only need static content, so we decided to go with [Hugo](http://gohugo.io/), a fast and modern static website engine. Our content will be written in [Markdown](http://en.wikipedia.org/wiki/Markdown) syntax. + +## Tools + +We use a [Maven](https://maven.apache.org/) build to tie everything together. As a result this project is IDE independent (every state-of-the-art IDE should be able to import and/or use a Maven project). [VersionEye](https://www.versioneye.com/user/projects/55715899626264001e000000) is used to track out of date dependencies. To track our reaction time on issues and pull requests we use [Issue Stats](http://issuestats.com/github/McPringle/sportchef). + +# How to contribute to *SportChef Server* + +## Source code management + +### GIT Workflow Rules + +We use the GitFlow workflow for *SportChef*. You can read a really good explanation of GitFlow on the Blog of [Vincent Driessen](http://nvie.com/): [A successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/) + +![GitFlow Workflow Visualization by Seibert Media](https://blog.seibert-media.net/wp-content/uploads/2014/03/Gitflow-Workflow-4.png) + +### Keep your fork in sync + +If you fork this repository, GitHub will not keep your fork in sync with this repository. You have to do it on your own. + +1. If not already done, add this repository as an upstream to your repository:
`git remote add upstream https://github.com/McPringle/sportchef.git` +2. Verify that this repository was added successfully:
`git remote -v` +3. Fetch branches and commits from this repository to your local repository:
`git fetch upstream` +4. If you are not on your local develop branch, check it out:
`git checkout develop` +5. Merge the changes from this repositories develop branch into your repository):
`git merge upstream/develop` +7. Push your updated repository to your GitHub fork:
`git push origin develop` + +If you want to merge changes from a different branch (e.g. `master`, `release`, etc), simply replace the branch name `develop` in the above command line examples with the branch name, you want to merge. + +### Frequently Asked Questions + +1. When I try to push, I get a `non-fast-forward updates were rejected` error.
*Your local copy of a repository is out of sync with, or behind the upstream repository, you are pushing to. You must retrieve the upstream changes, before you are able to push your local changes.* \ No newline at end of file From c15c073837219b52ae047c9e39206867331c7bad Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 20 Mar 2015 14:00:36 -0700 Subject: [PATCH 059/369] #26 update Polymer --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index cd1e4d5..58e09bd 100644 --- a/bower.json +++ b/bower.json @@ -15,7 +15,7 @@ "tests" ], "dependencies": { - "polymer": "Polymer/polymer#^1.1.0", - "paper-elements": "PolymerElements/paper-elements#~1.0.1" + "polymer": "Polymer/polymer#^1.2.0", + "paper-elements": "PolymerElements/paper-elements#~1.0.5" } } From b7a04b449e352a7cc2f755fc787ce97d63f8912c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 21 Mar 2015 14:02:23 -0700 Subject: [PATCH 060/369] correct project name in README file --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f92de5a..f9237d1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -*SportChef Server* +*SportChef* ====== [![Dependency Status](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c/badge.svg?style=flat)](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/issue)](http://issuestats.com/github/McPringle/sportchef) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/pr)](http://issuestats.com/github/McPringle/sportchef) @@ -31,7 +31,7 @@ We'll use [GitHub Pages](https://pages.github.com/) for hosting our upcoming pro We use a [Maven](https://maven.apache.org/) build to tie everything together. As a result this project is IDE independent (every state-of-the-art IDE should be able to import and/or use a Maven project). [VersionEye](https://www.versioneye.com/user/projects/55715899626264001e000000) is used to track out of date dependencies. To track our reaction time on issues and pull requests we use [Issue Stats](http://issuestats.com/github/McPringle/sportchef). -# How to contribute to *SportChef Server* +# How to contribute to *SportChef* ## Source code management @@ -56,4 +56,4 @@ If you want to merge changes from a different branch (e.g. `master`, `release`, ### Frequently Asked Questions -1. When I try to push, I get a `non-fast-forward updates were rejected` error.
*Your local copy of a repository is out of sync with, or behind the upstream repository, you are pushing to. You must retrieve the upstream changes, before you are able to push your local changes.* \ No newline at end of file +1. When I try to push, I get a `non-fast-forward updates were rejected` error.
*Your local copy of a repository is out of sync with, or behind the upstream repository, you are pushing to. You must retrieve the upstream changes, before you are able to push your local changes.* From d3587eb92af29a053df78b74147a9b1f09f85a51 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 22 Mar 2015 14:04:40 -0700 Subject: [PATCH 061/369] add dependency badge for JavaScript frameworks --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f9237d1..a5bda1f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ *SportChef* ====== -[![Dependency Status](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c/badge.svg?style=flat)](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/issue)](http://issuestats.com/github/McPringle/sportchef) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/pr)](http://issuestats.com/github/McPringle/sportchef) +[![Dependency Status](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c/badge.svg?style=flat)](https://www.versioneye.com/user/projects/562e699c36d0ab001600160c) [![Dependency Status](https://www.versioneye.com/user/projects/562e699636d0ab00210013b8/badge.svg?style=flat)](https://www.versioneye.com/user/projects/562e699636d0ab00210013b8) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/issue)](http://issuestats.com/github/McPringle/sportchef) [![Issue Stats](http://issuestats.com/github/McPringle/sportchef/badge/pr)](http://issuestats.com/github/McPringle/sportchef) **Sports Competition Management Software with a modern and fast architecture. Java based backend with a RESTful JSON API and a HTML 5 client with a modern UI.** From 4e859c8551b1adbb6bee9db18388ca241b0ffdca Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 24 Mar 2015 09:52:51 -0700 Subject: [PATCH 062/369] #14 New dependency to iron-ajax to execute REST calls --- bower.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 58e09bd..72a6e31 100644 --- a/bower.json +++ b/bower.json @@ -16,6 +16,7 @@ ], "dependencies": { "polymer": "Polymer/polymer#^1.2.0", - "paper-elements": "PolymerElements/paper-elements#~1.0.5" + "paper-elements": "PolymerElements/paper-elements#~1.0.5", + "iron-ajax": "PolymerElements/iron-ajax#~1.0.7" } } From 70bfa9613cc9871a5011750e1b3bd73915b4e1cc Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 25 Mar 2015 09:53:28 -0700 Subject: [PATCH 063/369] #14 nice background image for event cards --- src/main/webapp/images/sportler.jpg | Bin 0 -> 176230 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/webapp/images/sportler.jpg diff --git a/src/main/webapp/images/sportler.jpg b/src/main/webapp/images/sportler.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d4ddc296fb0460b23ff9f61db514cb8c5b5fc05 GIT binary patch literal 176230 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'B2jORG}%)E|x-@cO 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 ?5lSe&UOb|sG{q6jV^ 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 Date: Thu, 26 Mar 2015 09:53:58 -0700 Subject: [PATCH 064/369] #14 new component to display one event --- .../sportchef-event/sportchef-event.html | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html new file mode 100644 index 0000000..399e965 --- /dev/null +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + From 0bf1402cea93ae57b4e096053e6d956db41859b3 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 27 Mar 2015 09:54:26 -0700 Subject: [PATCH 065/369] #14 new component to display all events --- .../sportchef-events/sportchef-events.html | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html diff --git a/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html b/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html new file mode 100644 index 0000000..cd92972 --- /dev/null +++ b/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html @@ -0,0 +1,19 @@ + + + + + + + + + From 4fe4ce7f58ed862966e8cb4d4a5584311a1ab1ee Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 28 Mar 2015 09:55:10 -0700 Subject: [PATCH 066/369] #14 page to list all events --- src/main/webapp/events.html | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/webapp/events.html diff --git a/src/main/webapp/events.html b/src/main/webapp/events.html new file mode 100644 index 0000000..0d41eda --- /dev/null +++ b/src/main/webapp/events.html @@ -0,0 +1,21 @@ + + + + + + + + + SportChef Events + + + + + + + + + + + + \ No newline at end of file From 614cea53900e4a6e318f09a74cdc45b5d1dc2d4b Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 30 Mar 2015 11:03:25 -0700 Subject: [PATCH 067/369] #29 remove unnecessary on ready handler --- .../sportchef_components/sportchef-event/sportchef-event.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index 399e965..fbeb091 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -47,9 +47,6 @@ type: Number, value: 0 } - }, - ready: function() { - // todo: read event data from server } }); From 2f2f8f20c7a016bfc8599bc0f4081cac6a9f8d32 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 31 Mar 2015 11:04:46 -0700 Subject: [PATCH 068/369] #29 standard output should always be in english --- .../sportchef-event/sportchef-event.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index fbeb091..2f5abd3 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -30,9 +30,9 @@ {{event.date}} {{event.time}}

From e247f0903e0fe5943724e12823c214ac2b4160c0 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 1 Apr 2015 11:05:05 -0700 Subject: [PATCH 069/369] #29 action buttons on event card should not be visible in v1.0 --- .../sportchef_components/sportchef-event/sportchef-event.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index 2f5abd3..47868f0 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -29,11 +29,13 @@ {{event.location}}
{{event.date}} {{event.time}} + From 436d9503f618f53dd6bfd79945e3fd9fe13b257e Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 3 Apr 2015 18:25:21 -0700 Subject: [PATCH 070/369] #31 Update Polymer to v1.2.1 --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 72a6e31..2573dd2 100644 --- a/bower.json +++ b/bower.json @@ -15,7 +15,7 @@ "tests" ], "dependencies": { - "polymer": "Polymer/polymer#^1.2.0", + "polymer": "Polymer/polymer#^1.2.1", "paper-elements": "PolymerElements/paper-elements#~1.0.5", "iron-ajax": "PolymerElements/iron-ajax#~1.0.7" } From aed783bcdbabcbd9cfb2f6bf5dff8f6dec5aafd1 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 5 Apr 2015 18:30:49 -0700 Subject: [PATCH 071/369] #28 update jersey-media-json-processing to v2.22.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c8d1fcc..6bae55d 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ org.glassfish.jersey.media jersey-media-json-processing - 2.21.1 + 2.22.1 test From 7d1f98e76c8262196e03b4e355131ce5cc69b600 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 7 Apr 2015 18:32:36 -0700 Subject: [PATCH 072/369] #27 update jersey-client to v2.22.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6bae55d..f3c564b 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.glassfish.jersey.core jersey-client - 2.21.1 + 2.22.1 test From 6f388d61c38a732173558fe7bcff4ac7bedeed4a Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 9 Apr 2015 09:35:41 +0200 Subject: [PATCH 073/369] #45 persistence.xml is no longer needed --- src/main/resources/META-INF/persistence.xml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/main/resources/META-INF/persistence.xml diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index df35a54..0000000 --- a/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - From 0c0b54013f7613f13f38acc907a27f7c7b901afe Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 10 Apr 2015 21:53:36 +0200 Subject: [PATCH 074/369] #32 DOCTYPE should always be in the first line --- src/main/webapp/events.html | 4 +++- src/main/webapp/index.html | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/events.html b/src/main/webapp/events.html index 7843b44..c8f2fd8 100644 --- a/src/main/webapp/events.html +++ b/src/main/webapp/events.html @@ -1,3 +1,5 @@ + + - + diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 1763963..751e08f 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -1,3 +1,5 @@ + + - + From 20692cd72a9ec1e492947dc2533a7872199c8f9f Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 11 Apr 2015 21:54:09 +0200 Subject: [PATCH 075/369] #32 Add license information to adapter classes --- .../business/adapter/LocalDateAdapter.java | 17 +++++++++++++++++ .../business/adapter/LocalTimeAdapter.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java b/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java index 80218cb..6130b4f 100644 --- a/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java +++ b/src/main/java/ch/sportchef/business/adapter/LocalDateAdapter.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.adapter; import javax.xml.bind.annotation.adapters.XmlAdapter; diff --git a/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java b/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java index 490a1f3..8196d90 100644 --- a/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java +++ b/src/main/java/ch/sportchef/business/adapter/LocalTimeAdapter.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.adapter; import javax.xml.bind.annotation.adapters.XmlAdapter; From a3b64a7bd28f46b4bea2646fa58b9a37aee3f42b Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 12 Apr 2015 21:54:23 +0200 Subject: [PATCH 076/369] #32 Add license information to mapper classes --- .../sportchef/business/EJBExceptionMapper.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/ch/sportchef/business/EJBExceptionMapper.java b/src/main/java/ch/sportchef/business/EJBExceptionMapper.java index d3affca..6d9e23e 100644 --- a/src/main/java/ch/sportchef/business/EJBExceptionMapper.java +++ b/src/main/java/ch/sportchef/business/EJBExceptionMapper.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business; import javax.ejb.EJBException; From 0f9e3f7ba455f9ef8b7fb63d998fd25ac5d66a13 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 13 Apr 2015 21:54:47 +0200 Subject: [PATCH 077/369] #32 Add license information to event classes --- .../business/event/boundary/EventManager.java | 17 +++++++++++++++++ .../business/event/boundary/EventResource.java | 17 +++++++++++++++++ .../business/event/boundary/EventsResource.java | 17 +++++++++++++++++ .../sportchef/business/event/entity/Event.java | 17 +++++++++++++++++ 4 files changed, 68 insertions(+) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index 88e6e8b..69960d3 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.event.boundary; import ch.sportchef.business.event.entity.Event; diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java index 8e82075..f93e308 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.event.boundary; import ch.sportchef.business.event.entity.Event; diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index 0e83438..1e41c2a 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.event.boundary; import ch.sportchef.business.event.entity.Event; diff --git a/src/main/java/ch/sportchef/business/event/entity/Event.java b/src/main/java/ch/sportchef/business/event/entity/Event.java index 24e2689..c887926 100644 --- a/src/main/java/ch/sportchef/business/event/entity/Event.java +++ b/src/main/java/ch/sportchef/business/event/entity/Event.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.event.entity; import ch.sportchef.business.adapter.LocalDateAdapter; From c74a396b3383f81597c3ca7af52f99c6951ba30a Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 14 Apr 2015 21:57:12 +0200 Subject: [PATCH 078/369] #32 Add license information to user classes --- .../business/user/boundary/UserManager.java | 17 +++++++++++++++++ .../business/user/boundary/UserResource.java | 17 +++++++++++++++++ .../business/user/boundary/UsersResource.java | 17 +++++++++++++++++ .../ch/sportchef/business/user/entity/User.java | 17 +++++++++++++++++ 4 files changed, 68 insertions(+) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java index 4a679f9..3b61543 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.user.boundary; import ch.sportchef.business.user.entity.User; diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java index 58eb044..23b070e 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.user.boundary; import ch.sportchef.business.user.entity.User; diff --git a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java index 4352fe3..0199023 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.user.boundary; import ch.sportchef.business.user.entity.User; diff --git a/src/main/java/ch/sportchef/business/user/entity/User.java b/src/main/java/ch/sportchef/business/user/entity/User.java index 74a18d0..dc1df4a 100644 --- a/src/main/java/ch/sportchef/business/user/entity/User.java +++ b/src/main/java/ch/sportchef/business/user/entity/User.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.user.entity; import javax.persistence.Entity; From efd7cdd90e9a25e7d9b515fca49dc957ac80caa3 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 15 Apr 2015 21:57:29 +0200 Subject: [PATCH 079/369] #32 Add license information to JAX-RS configuration --- .../sportchef/business/JAXRSConfiguration.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/ch/sportchef/business/JAXRSConfiguration.java b/src/main/java/ch/sportchef/business/JAXRSConfiguration.java index 1dfc648..cdee2a3 100644 --- a/src/main/java/ch/sportchef/business/JAXRSConfiguration.java +++ b/src/main/java/ch/sportchef/business/JAXRSConfiguration.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business; import javax.ws.rs.ApplicationPath; From 1c72e770918c979de75f09063067c3ea7d88f483 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 16 Apr 2015 21:57:54 +0200 Subject: [PATCH 080/369] #32 Add license information to integration tests --- .../business/event/bundary/EventResourceIT.java | 17 +++++++++++++++++ .../business/user/bundary/UserResourceIT.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java b/src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java index 9b34460..642349c 100644 --- a/src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java +++ b/src/test/java/ch/sportchef/business/event/bundary/EventResourceIT.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.event.bundary; import com.airhacks.rulz.jaxrsclient.JAXRSClientProvider; diff --git a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java index c00b1cb..6a0ca79 100644 --- a/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java +++ b/src/test/java/ch/sportchef/business/user/bundary/UserResourceIT.java @@ -1,3 +1,20 @@ +/** + * SportChef – Sports Competition Management Software + * Copyright (C) 2015 Marcus Fihlon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see >. + */ package ch.sportchef.business.user.bundary; import com.airhacks.rulz.jaxrsclient.JAXRSClientProvider; From 3554a3d8d7e58196b0b86bc9b5e67fd957bbc4c8 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 18 Apr 2015 16:32:54 +0200 Subject: [PATCH 081/369] #37 add new web-font "Roboto" --- src/main/webapp/css/main.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css index 780758d..1e150b8 100644 --- a/src/main/webapp/css/main.css +++ b/src/main/webapp/css/main.css @@ -15,6 +15,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see >. */ +@import url(https://fonts.googleapis.com/css?family=Roboto:400,100,300,500,700,900); + body { background-color: lightblue; } \ No newline at end of file From 66d03bd55e88ff60076ba1c72112e6879a96cfc9 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 19 Apr 2015 16:33:24 +0200 Subject: [PATCH 082/369] #37 remove blue background color --- src/main/webapp/css/main.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css index 1e150b8..f767b14 100644 --- a/src/main/webapp/css/main.css +++ b/src/main/webapp/css/main.css @@ -18,5 +18,4 @@ @import url(https://fonts.googleapis.com/css?family=Roboto:400,100,300,500,700,900); body { - background-color: lightblue; } \ No newline at end of file From cf4f4aea9830142086e223dd9292eb3bb5626c45 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 20 Apr 2015 16:33:59 +0200 Subject: [PATCH 083/369] #37 define font-weight property --- src/main/webapp/css/main.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css index f767b14..1fc8482 100644 --- a/src/main/webapp/css/main.css +++ b/src/main/webapp/css/main.css @@ -18,4 +18,10 @@ @import url(https://fonts.googleapis.com/css?family=Roboto:400,100,300,500,700,900); body { + font-family: 'Roboto', sans-serif; + font-weight: 400; +} + +.header.paper-card .title-text.paper-card { + font-weight: 700; } \ No newline at end of file From b26156e848b1b0e3a3325cc5a4f7fb431ae42699 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 21 Apr 2015 16:35:23 +0200 Subject: [PATCH 084/369] #37 remove placeholder image --- src/main/webapp/images/sportler.jpg | Bin 176230 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/webapp/images/sportler.jpg diff --git a/src/main/webapp/images/sportler.jpg b/src/main/webapp/images/sportler.jpg deleted file mode 100644 index 5d4ddc296fb0460b23ff9f61db514cb8c5b5fc05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176230 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'B2jORG}%)E|x-@cO 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 ?5lSe&UOb|sG{q6jV^ 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 Date: Wed, 22 Apr 2015 16:36:50 +0200 Subject: [PATCH 085/369] #37 remove unused action buttons --- .../sportchef-event/sportchef-event.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index dd246ec..55ed2c4 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -46,13 +46,7 @@ {{event.location}}
{{event.date}} {{event.time}} - From 2a6a503de21969c4ca9e9b2c41da8e3e17e2bee7 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 23 Apr 2015 16:37:34 +0200 Subject: [PATCH 086/369] #37 output date/time and location with a label --- .../sportchef-event/sportchef-event.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index 55ed2c4..dcb1ca9 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -43,9 +43,8 @@

- {{event.location}}
- {{event.date}} {{event.time}} -
+ {{event.date}} {{event.time}}
+ {{event.location}} From 6babce18ffb1b114a6eb35cd01c91c9ec090ec70 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 24 Apr 2015 16:38:43 +0200 Subject: [PATCH 087/369] #37 inline CSS cleanup --- .../sportchef-event/sportchef-event.html | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index dcb1ca9..6d44400 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -28,15 +28,11 @@ From 43195f7953be86cda16d392a4e6db288c736b2c3 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 25 Apr 2015 16:39:36 +0200 Subject: [PATCH 088/369] #37 remove button test code --- src/main/webapp/index.html | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 751e08f..0d17f90 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -21,20 +21,5 @@ - - - - - SportChef - - - - - - - - raised button - - \ No newline at end of file From 6a1aa4f6202166c8661fd6a2152855eec59f6e2c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 26 Apr 2015 16:39:59 +0200 Subject: [PATCH 089/369] #37 add redirect to events page --- src/main/webapp/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 0d17f90..e538f51 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -21,5 +21,6 @@ + \ No newline at end of file From 2f2ed43d0e9018de25f0f84da952e52d0c43a8ec Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 29 Apr 2015 13:45:47 +0200 Subject: [PATCH 090/369] #13 Fix HTML5 validation error: Doctype must be in first line --- src/main/webapp/admin.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/admin.html b/src/main/webapp/admin.html index 2b96beb..320f8d8 100644 --- a/src/main/webapp/admin.html +++ b/src/main/webapp/admin.html @@ -1,3 +1,5 @@ + + - + From 8a489a9724fbcdabffdc13f784d062e12f008bd3 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 30 Apr 2015 13:46:59 +0200 Subject: [PATCH 091/369] #13 remove test CSS styles --- .../sportchef-eventform/sportchef-eventform.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index 3f83e03..cf014b4 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -30,15 +30,8 @@ From 82e2b96081fb1d618124328e9f58ebb9b08e0b78 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 1 May 2015 13:47:50 +0200 Subject: [PATCH 092/369] #13 remove unnecessary spaces --- .../sportchef-eventform/sportchef-eventform.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index cf014b4..fa5ab11 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -42,8 +42,8 @@ - Submit + From 3bacb375b6cc23cdd76c7891cf40cb58379674cd Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 3 May 2015 13:49:24 +0200 Subject: [PATCH 094/369] #13 prefer single quotes over double quotes --- .../sportchef-eventform/sportchef-eventform.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index cbde7df..c5deae6 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -56,11 +56,11 @@ // register a new element called sportchef-eventform Polymer({ - is: "sportchef-eventform", + is: 'sportchef-eventform', properties: { contentType: { type: String, - value: "application/json" + value: 'application/json' }, }, listeners: { From 9d08470237cf4b478c713c97589d93710ef8bd4c Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 4 May 2015 13:50:00 +0200 Subject: [PATCH 095/369] #13 remove console output --- .../sportchef-eventform/sportchef-eventform.html | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index c5deae6..ee0e8ce 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -67,7 +67,6 @@ 'iron-form-response': 'formResponse', }, formResponse: function(event) { - console.log('There was a response'); var pmn = document.querySelector('#waitForResponse'); pmn.innerHTML = "Event erstellt
Sie werden gleich weitergeleitet"; setTimeout(function(){ From ee7278dc7b2ead409339743d1bbd8804e5b1f459 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 5 May 2015 14:22:04 +0200 Subject: [PATCH 096/369] #13 remove unnecessary imports --- .../sportchef-eventform/sportchef-eventform.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index ee0e8ce..2cd1777 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -20,9 +20,6 @@ - - - From e66f2898011084e2f298b924a782876b6c82ffd6 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 6 May 2015 14:22:46 +0200 Subject: [PATCH 097/369] #13 submit button should be labelled "create" --- .../sportchef-eventform/sportchef-eventform.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index 2cd1777..1703a8c 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -39,8 +39,8 @@ - Submit + Create From 3c76245ccd09fb734bd16c9c456b7759052138e0 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 7 May 2015 14:24:18 +0200 Subject: [PATCH 098/369] #13 event form should have a more specific ID and an action URL without server part --- .../sportchef-eventform/sportchef-eventform.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index 1703a8c..23c38cb 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -35,11 +35,11 @@
-
+ Create
@@ -48,7 +48,7 @@
From 41364c5a51871c6fac3c9426fef9732041febbae Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 11 May 2015 14:27:36 +0200 Subject: [PATCH 102/369] #13 message should be green and bold --- .../sportchef-eventform/sportchef-eventform.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index 180221b..0606fbc 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -29,6 +29,9 @@ paper-card { margin: 0.5em; } + #message { + color: rgb(0, 128, 0); + font-weight: bold; } From 90b5f7fbadf51f0bfc75b2cf0808b58d18c2f6c9 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 13 May 2015 14:30:50 +0200 Subject: [PATCH 103/369] #38 Remove unnecessary imports from event component --- .../sportchef_components/sportchef-event/sportchef-event.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index 6d44400..e308637 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -18,9 +18,6 @@ - - - From 6adbdb4f847f1d28f077729e47f2fe3286cf302b Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 17 May 2015 08:57:15 +0200 Subject: [PATCH 104/369] #44 Cleanup pom file --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba41661..32097b1 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,6 @@ airomem-core 1.0.2 - junit junit From 32e0a7a1ad8b7edec4670b3bfea64a73ac742667 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 18 May 2015 08:57:53 +0200 Subject: [PATCH 105/369] #44 Organize imports --- .../ch/sportchef/business/event/boundary/EventManager.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index fb0c71b..d3cafb8 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -19,13 +19,6 @@ import ch.sportchef.business.event.entity.Event; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.List; From 19c5910e9851b5c4d0c1529d94798dc1e1edf738 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 19 May 2015 08:58:39 +0200 Subject: [PATCH 106/369] #44 Serializable classes should specify serialVersionUID --- .../ch/sportchef/business/event/boundary/EventManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index d3cafb8..101c17a 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -27,7 +27,9 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; -public class EventManager implements Serializable{ +public class EventManager implements Serializable { + + private static final long serialVersionUID = 1L; private final Map events = new ConcurrentHashMap<>(); From 28499143e528282ada6a0c73c05f34a7f859917b Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 20 May 2015 08:58:58 +0200 Subject: [PATCH 107/369] #44 Serializable classes should specify serialVersionUID --- src/main/java/ch/sportchef/business/event/entity/Event.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/event/entity/Event.java b/src/main/java/ch/sportchef/business/event/entity/Event.java index 2a6cdbe..611df4f 100644 --- a/src/main/java/ch/sportchef/business/event/entity/Event.java +++ b/src/main/java/ch/sportchef/business/event/entity/Event.java @@ -37,8 +37,10 @@ @Entity @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class Event implements Serializable{ +public class Event implements Serializable { + private static final long serialVersionUID = 1L; + @Id @GeneratedValue private long eventId; From b0a7569ca86a1c0afdcf442971a88ffef21c5eb7 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 21 May 2015 08:59:41 +0200 Subject: [PATCH 108/369] #44 managerController should be manager only --- .../business/event/boundary/EventsResource.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index 68f9af9..c9806fd 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -37,15 +37,13 @@ @Stateless @Path("events") @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - public class EventsResource { - - private SimpleController managerController = SimpleController.loadOptional("events", () -> new EventManager()); + private SimpleController manager = SimpleController.loadOptional("events", () -> new EventManager()); @POST public Response save(@Valid final Event event, @Context final UriInfo info) { - final Event saved = this.managerController.executeAndQuery((mgr) -> mgr.createNew(event)) ; + final Event saved = this.manager.executeAndQuery((mgr) -> mgr.createNew(event)) ; final long eventId = saved.getEventId(); final URI uri = info.getAbsolutePathBuilder().path("/" + eventId).build(); return Response.created(uri).build(); @@ -53,13 +51,13 @@ public Response save(@Valid final Event event, @Context final UriInfo info) { @GET public Response findAll() { - final List allEvents = this.managerController.readOnly().findAll(); + final List allEvents = this.manager.readOnly().findAll(); return Response.ok(allEvents).build(); } @Path("{eventId}") public EventResource find(@PathParam("eventId") final long eventId) { - return new EventResource(eventId, this.managerController); + return new EventResource(eventId, this.manager); } } From 757cdb8ad67376377df3a8a13ebc1cd9ac6a7753 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 22 May 2015 09:00:21 +0200 Subject: [PATCH 109/369] #44 managerController should be manager only --- .../business/event/boundary/EventResource.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java index 453e702..e793c80 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventResource.java @@ -33,16 +33,17 @@ public class EventResource { private long eventId; - private SimpleController managerController; - public EventResource(final long eventId, final SimpleController managerController) { + private SimpleController manager; + + public EventResource(final long eventId, final SimpleController manager) { this.eventId = eventId; - this.managerController = managerController; + this.manager = manager; } @GET public Event find() { - final Event event = this.managerController.readOnly().findByEventId(this.eventId); + final Event event = this.manager.readOnly().findByEventId(this.eventId); if (event == null) { throw new NotFoundException(String.format("event with id '%d' not found", eventId)); } @@ -53,7 +54,7 @@ public Event find() { public Response update(@Valid final Event event, @Context final UriInfo info) { find(); // only update existing events event.setEventId(this.eventId); - final Event updatedEvent = this.managerController.executeAndQuery( mgr -> mgr.update(event)); + final Event updatedEvent = this.manager.executeAndQuery(mgr -> mgr.update(event)); final URI uri = info.getAbsolutePathBuilder().build(); return Response.ok(updatedEvent).header("Location", uri.toString()).build(); } @@ -61,8 +62,7 @@ public Response update(@Valid final Event event, @Context final UriInfo info) { @DELETE public Response delete() { final Event event = find(); // only delete existing events - this.managerController.execute( mgr -> mgr.delete(event.getEventId())); + this.manager.execute(mgr -> mgr.delete(event.getEventId())); return Response.noContent().build(); } - } From 340ceb1816f3f429417475b498ac679e2710a736 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 25 May 2015 19:37:13 +0200 Subject: [PATCH 110/369] #48 correct method naming --- .../java/ch/sportchef/business/event/boundary/EventManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index 101c17a..8725e92 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -36,10 +36,10 @@ public class EventManager implements Serializable { private final AtomicLong eventSeq = new AtomicLong(1); - public Event createNew(@NotNull final Event event) { final long newId = eventSeq.incrementAndGet(); event.setEventId(newId); this.events.put(newId, event); + public Event create(@NotNull final Event event) { return event; } From ce4411b57fb8e4f3274a75ae9c3191178c255879 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 26 May 2015 19:37:32 +0200 Subject: [PATCH 111/369] #48 correct variable naming --- .../ch/sportchef/business/event/boundary/EventManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java index 8725e92..ba58a62 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventManager.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventManager.java @@ -36,10 +36,10 @@ public class EventManager implements Serializable { private final AtomicLong eventSeq = new AtomicLong(1); - final long newId = eventSeq.incrementAndGet(); - event.setEventId(newId); - this.events.put(newId, event); public Event create(@NotNull final Event event) { + final long eventId = eventSeq.incrementAndGet(); + event.setEventId(eventId); + this.events.put(eventId, event); return event; } From 74007a96e1e35a951b0fd8887313ffd27a518542 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 27 May 2015 19:38:06 +0200 Subject: [PATCH 112/369] #48 correct method naming --- .../ch/sportchef/business/event/boundary/EventsResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index c9806fd..bc9ece5 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -43,7 +43,7 @@ public class EventsResource { @POST public Response save(@Valid final Event event, @Context final UriInfo info) { - final Event saved = this.manager.executeAndQuery((mgr) -> mgr.createNew(event)) ; + final Event saved = this.manager.executeAndQuery((mgr) -> mgr.create(event)); final long eventId = saved.getEventId(); final URI uri = info.getAbsolutePathBuilder().path("/" + eventId).build(); return Response.created(uri).build(); From 01e1b265c8675c7a3ab907a631daecddedc72ba7 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 28 May 2015 19:38:28 +0200 Subject: [PATCH 113/369] #48 correct variable naming --- .../ch/sportchef/business/event/boundary/EventsResource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index bc9ece5..9910f6c 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -51,8 +51,8 @@ public Response save(@Valid final Event event, @Context final UriInfo info) { @GET public Response findAll() { - final List allEvents = this.manager.readOnly().findAll(); - return Response.ok(allEvents).build(); + final List events = this.manager.readOnly().findAll(); + return Response.ok(events).build(); } @Path("{eventId}") From 91ca1cc33a9a2cc94dbf760f6cb0ef1582752a91 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Fri, 29 May 2015 19:39:41 +0200 Subject: [PATCH 114/369] #48 Folder name should be equal to package name --- .../ch/sportchef/business/event/boundary/EventsResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java index 9910f6c..7967ccc 100644 --- a/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java +++ b/src/main/java/ch/sportchef/business/event/boundary/EventsResource.java @@ -39,7 +39,7 @@ @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public class EventsResource { - private SimpleController manager = SimpleController.loadOptional("events", () -> new EventManager()); + private SimpleController manager = SimpleController.loadOptional(Event.class.getName(), () -> new EventManager()); @POST public Response save(@Valid final Event event, @Context final UriInfo info) { From 66649fb81d017db2989e3579e6054bc587218a82 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 30 May 2015 19:40:35 +0200 Subject: [PATCH 115/369] #48 Rewrite User Manager to use AeroMem --- .../business/user/boundary/UserManager.java | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java index 3b61543..bd294ef 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserManager.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserManager.java @@ -20,40 +20,44 @@ import ch.sportchef.business.user.entity.User; import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; import javax.validation.constraints.NotNull; +import java.io.Serializable; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; @Stateless -public class UserManager { +public class UserManager implements Serializable { - @PersistenceContext - private EntityManager em; + private static final long serialVersionUID = 1L; - public User save(@NotNull final User user) { - return this.em.merge(user); + private final Map users = new ConcurrentHashMap<>(); + + private final AtomicLong userSeq = new AtomicLong(1); + + public User create(@NotNull final User user) { + final long userId = userSeq.incrementAndGet(); + user.setUserId(userId); + this.users.put(userId, user); + return user; + } + + public User update(@NotNull final User user) { + this.users.put(user.getUserId(), user); + return user; } public User findByUserId(final long userId) { - return this.em.find(User.class, userId); + return this.users.get(userId); } public List findAll() { - final CriteriaBuilder cb = this.em.getCriteriaBuilder(); - final CriteriaQuery cq = cb.createQuery(User.class); - final Root rootEntry = cq.from(User.class); - final CriteriaQuery all = cq.select(rootEntry); - final TypedQuery allQuery = this.em.createQuery(all); - return allQuery.getResultList(); + return this.users.values().stream().collect(Collectors.toList()); } public void delete(final long userId) { - final User reference = em.getReference(User.class, userId); - em.remove(reference); + this.users.remove(userId); } } From 4a613658c1de01880f3f4cabdadb9d1bb2e644f6 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sun, 31 May 2015 19:41:08 +0200 Subject: [PATCH 116/369] #48 Modify Users Resource to work with the new User Manager --- .../business/user/boundary/UsersResource.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java index 0199023..d59456d 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UsersResource.java @@ -18,9 +18,9 @@ package ch.sportchef.business.user.boundary; import ch.sportchef.business.user.entity.User; +import pl.setblack.airomem.core.SimpleController; import javax.ejb.Stateless; -import javax.inject.Inject; import javax.validation.Valid; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -39,12 +39,11 @@ @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public class UsersResource { - @Inject - private UserManager manager; + private SimpleController manager = SimpleController.loadOptional(User.class.getName(), () -> new UserManager()); @POST public Response save(@Valid final User user, @Context final UriInfo info) { - final User saved = this.manager.save(user); + final User saved = this.manager.executeAndQuery((mgr) -> mgr.create(user)); final long userId = saved.getUserId(); final URI uri = info.getAbsolutePathBuilder().path("/" + userId).build(); return Response.created(uri).build(); @@ -52,8 +51,8 @@ public Response save(@Valid final User user, @Context final UriInfo info) { @GET public Response findAll() { - final List allUsers = this.manager.findAll(); - return Response.ok(allUsers).build(); + final List users = this.manager.readOnly().findAll(); + return Response.ok(users).build(); } @Path("{userId}") From c0dfb8d78f4312ec78d578392e6d94b5130ce0be Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Mon, 1 Jun 2015 19:41:30 +0200 Subject: [PATCH 117/369] #48 Modify User Resource to work with the new User Manager --- .../business/user/boundary/UserResource.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java index 23b070e..d36caf3 100644 --- a/src/main/java/ch/sportchef/business/user/boundary/UserResource.java +++ b/src/main/java/ch/sportchef/business/user/boundary/UserResource.java @@ -18,6 +18,7 @@ package ch.sportchef.business.user.boundary; import ch.sportchef.business.user.entity.User; +import pl.setblack.airomem.core.SimpleController; import javax.validation.Valid; import javax.ws.rs.DELETE; @@ -32,16 +33,17 @@ public class UserResource { private long userId; - private UserManager manager; - public UserResource(final long userId, final UserManager manager) { + private SimpleController manager; + + public UserResource(final long userId, final SimpleController manager) { this.userId = userId; this.manager = manager; } @GET public User find() { - final User user = this.manager.findByUserId(this.userId); + final User user = this.manager.readOnly().findByUserId(this.userId); if (user == null) { throw new NotFoundException(String.format("user with id '%d' not found", userId)); } @@ -52,7 +54,7 @@ public User find() { public Response update(@Valid final User user, @Context final UriInfo info) { find(); // only update existing users user.setUserId(this.userId); - final User updatedUser = this.manager.save(user); + final User updatedUser = this.manager.executeAndQuery(mgr -> mgr.update(user)); final URI uri = info.getAbsolutePathBuilder().build(); return Response.ok(updatedUser).header("Location", uri.toString()).build(); } @@ -60,7 +62,7 @@ public Response update(@Valid final User user, @Context final UriInfo info) { @DELETE public Response delete() { final User user = find(); // only delete existing users - this.manager.delete(user.getUserId()); + this.manager.execute(mgr -> mgr.delete(user.getUserId())); return Response.noContent().build(); } From 54242b960023dc0ee144fe83f6d3251ac07183c9 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Tue, 2 Jun 2015 19:42:14 +0200 Subject: [PATCH 118/369] #48 For Persistence User has to be serializable --- src/main/java/ch/sportchef/business/user/entity/User.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/sportchef/business/user/entity/User.java b/src/main/java/ch/sportchef/business/user/entity/User.java index dc1df4a..6fee6dc 100644 --- a/src/main/java/ch/sportchef/business/user/entity/User.java +++ b/src/main/java/ch/sportchef/business/user/entity/User.java @@ -26,11 +26,14 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; @Entity @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class User { +public class User implements Serializable { + + private static final long serialVersionUID = 1L; @Id @GeneratedValue From 87485ce64bb42a50c97ddef42867394900abb726 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 4 Jun 2015 18:49:34 +0200 Subject: [PATCH 119/369] #50 Write a test for LocalTimeAdapter --- .../adapter/LocalTimeAdapterTest.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/test/java/ch/sportchef/business/adapter/LocalTimeAdapterTest.java diff --git a/src/test/java/ch/sportchef/business/adapter/LocalTimeAdapterTest.java b/src/test/java/ch/sportchef/business/adapter/LocalTimeAdapterTest.java new file mode 100644 index 0000000..28ae9f7 --- /dev/null +++ b/src/test/java/ch/sportchef/business/adapter/LocalTimeAdapterTest.java @@ -0,0 +1,38 @@ +package ch.sportchef.business.adapter; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.time.LocalTime; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +public class LocalTimeAdapterTest { + + private static final String TIME_TEST_STRING = "13:02"; + private static final LocalTime TIME_TEST_OBJECT = LocalTime.of(13, 2); + + private static LocalTimeAdapter adapter; + + @BeforeClass + public static void beforeClass() { + adapter = new LocalTimeAdapter(); + } + + @AfterClass + public static void afterClass() { + adapter = null; + } + + @Test + public void marshal() throws Exception { + assertThat(adapter.marshal(TIME_TEST_OBJECT), is(TIME_TEST_STRING)); + } + + @Test + public void unmarshal() throws Exception { + assertThat(adapter.unmarshal(TIME_TEST_STRING), is(TIME_TEST_OBJECT)); + } +} From 15f8c98a1e436c03ae5900aa59a0009027991dce Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 6 Jun 2015 18:51:11 +0200 Subject: [PATCH 120/369] #49 Write a test for LocalDateAdapter --- .../adapter/LocalDateAdapterTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/test/java/ch/sportchef/business/adapter/LocalDateAdapterTest.java diff --git a/src/test/java/ch/sportchef/business/adapter/LocalDateAdapterTest.java b/src/test/java/ch/sportchef/business/adapter/LocalDateAdapterTest.java new file mode 100644 index 0000000..149b3e6 --- /dev/null +++ b/src/test/java/ch/sportchef/business/adapter/LocalDateAdapterTest.java @@ -0,0 +1,39 @@ +package ch.sportchef.business.adapter; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.time.LocalDate; + +import static java.time.Month.AUGUST; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +public class LocalDateAdapterTest { + + private static final String DATE_TEST_STRING = "2015-08-31"; + private static final LocalDate DATE_TEST_OBJECT = LocalDate.of(2015, AUGUST, 31); + + private static LocalDateAdapter adapter; + + @BeforeClass + public static void beforeClass() { + adapter = new LocalDateAdapter(); + } + + @AfterClass + public static void afterClass() { + adapter = null; + } + + @Test + public void marshal() throws Exception { + assertThat(adapter.marshal(DATE_TEST_OBJECT), is(DATE_TEST_STRING)); + } + + @Test + public void unmarshal() throws Exception { + assertThat(adapter.unmarshal(DATE_TEST_STRING), is(DATE_TEST_OBJECT)); + } +} From 559aac62fc9a0c595dfd33a4d2e65a1beda79471 Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Thu, 5 Nov 2015 20:09:59 +0100 Subject: [PATCH 121/369] Add License to Webapp-files --- src/main/webapp/css/main.css | 17 +++++++++++++++++ src/main/webapp/events.html | 17 +++++++++++++++++ src/main/webapp/index.html | 17 +++++++++++++++++ .../sportchef-event/sportchef-event.html | 17 +++++++++++++++++ .../sportchef-events/sportchef-events.html | 17 +++++++++++++++++ 5 files changed, 85 insertions(+) diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css index 4a57d6b..780758d 100644 --- a/src/main/webapp/css/main.css +++ b/src/main/webapp/css/main.css @@ -1,3 +1,20 @@ +/* + SportChef – Sports Competition Management Software + Copyright (C) 2015 Marcus Fihlon + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see >. +*/ body { background-color: lightblue; } \ No newline at end of file diff --git a/src/main/webapp/events.html b/src/main/webapp/events.html index 0d41eda..7843b44 100644 --- a/src/main/webapp/events.html +++ b/src/main/webapp/events.html @@ -1,3 +1,20 @@ + diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 4e0be92..1763963 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -1,3 +1,20 @@ + diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index 47868f0..dd246ec 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -1,3 +1,20 @@ + diff --git a/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html b/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html index cd92972..afb9ab5 100644 --- a/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html +++ b/src/main/webapp/sportchef_components/sportchef-events/sportchef-events.html @@ -1,3 +1,20 @@ + From bd1f4f207ac6cc9332f6554a3c640ea9b5191b84 Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Thu, 5 Nov 2015 22:24:45 +0100 Subject: [PATCH 122/369] [WIP] sportchef-eventform (submit failing) --- src/main/webapp/admin.html | 38 +++++++++ .../sportchef-eventform.html | 77 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 src/main/webapp/admin.html create mode 100644 src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html diff --git a/src/main/webapp/admin.html b/src/main/webapp/admin.html new file mode 100644 index 0000000..2b96beb --- /dev/null +++ b/src/main/webapp/admin.html @@ -0,0 +1,38 @@ + + + + + + + + + + SportChef Events + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html new file mode 100644 index 0000000..8b08be6 --- /dev/null +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + From 4db4d32cbab75c1ac7240e8b37148187d2c4edb8 Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Fri, 13 Nov 2015 21:04:17 +0100 Subject: [PATCH 123/369] Add an Event is possible with the admin.html --- bower.json | 3 ++- .../sportchef-eventform/sportchef-eventform.html | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 2573dd2..8daea68 100644 --- a/bower.json +++ b/bower.json @@ -17,6 +17,7 @@ "dependencies": { "polymer": "Polymer/polymer#^1.2.1", "paper-elements": "PolymerElements/paper-elements#~1.0.5", - "iron-ajax": "PolymerElements/iron-ajax#~1.0.7" + "iron-ajax": "PolymerElements/iron-ajax#~1.0.7", + "iron-form": "PolymerElements/iron-form#~1.0.11" } } diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index 8b08be6..7aecf2e 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -19,6 +19,7 @@ + @@ -70,7 +71,10 @@ Polymer({ is: "sportchef-eventform", properties: { - contentType: "application/json" + contentType: { + type: String, + value: "application/json" + }, } }); From 5abb223011bca777749c648f65a0273d1c3be1ed Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Fri, 13 Nov 2015 21:24:37 +0100 Subject: [PATCH 124/369] When event was created a message is shown and user is being redirected --- .../sportchef-eventform/sportchef-eventform.html | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html index 7aecf2e..3f83e03 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html +++ b/src/main/webapp/sportchef_components/sportchef-eventform/sportchef-eventform.html @@ -44,6 +44,7 @@
+
@@ -75,7 +76,18 @@ type: String, value: "application/json" }, - } + }, + listeners: { + 'iron-form-response': 'formResponse', + }, + formResponse: function(event) { + console.log('There was a response'); + var pmn = document.querySelector('#waitForResponse'); + pmn.innerHTML = "Event erstellt
Sie werden gleich weitergeleitet"; + setTimeout(function(){ + document.location.href = "events.html"; + }, 5000) + }, }); From 633cbf2477bc5108d7656b378f98ba4958c4ade7 Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Sat, 14 Nov 2015 17:22:58 +0100 Subject: [PATCH 125/369] Bumped dependencies --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 8daea68..1bf68aa 100644 --- a/bower.json +++ b/bower.json @@ -15,8 +15,8 @@ "tests" ], "dependencies": { - "polymer": "Polymer/polymer#^1.2.1", - "paper-elements": "PolymerElements/paper-elements#~1.0.5", + "polymer": "Polymer/polymer#^1.2.2", + "paper-elements": "PolymerElements/paper-elements#~1.0.6", "iron-ajax": "PolymerElements/iron-ajax#~1.0.7", "iron-form": "PolymerElements/iron-form#~1.0.11" } From 91a42aaf0884629f2a1b808ad177644f74e8ed10 Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Thu, 3 Dec 2015 19:30:47 +0100 Subject: [PATCH 126/369] Bumped Bower Dependencies Polymer/polymer 1.2.2 -> 1.2.3 --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 1bf68aa..68f38cb 100644 --- a/bower.json +++ b/bower.json @@ -15,7 +15,7 @@ "tests" ], "dependencies": { - "polymer": "Polymer/polymer#^1.2.2", + "polymer": "Polymer/polymer#^1.2.3", "paper-elements": "PolymerElements/paper-elements#~1.0.6", "iron-ajax": "PolymerElements/iron-ajax#~1.0.7", "iron-form": "PolymerElements/iron-form#~1.0.11" From 9653d0974a6056f1406c16b2a30c37ccc980390d Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Thu, 10 Dec 2015 20:06:05 +0100 Subject: [PATCH 127/369] Add eventlist and deletebutton to admin.html --- src/main/webapp/admin.html | 2 + .../sportchef-eventlist.html | 46 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html diff --git a/src/main/webapp/admin.html b/src/main/webapp/admin.html index 2b96beb..9d52fac 100644 --- a/src/main/webapp/admin.html +++ b/src/main/webapp/admin.html @@ -27,12 +27,14 @@ + + \ No newline at end of file diff --git a/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html b/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html new file mode 100644 index 0000000..f7f316f --- /dev/null +++ b/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + From fa6fbe933d476c2c56fe1bbc6c9a2c09d5900e4d Mon Sep 17 00:00:00 2001 From: Patrick Reiemrs Date: Thu, 10 Dec 2015 21:14:36 +0100 Subject: [PATCH 128/369] Add function to delete events --- .../sportchef-eventlist.html | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html b/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html index f7f316f..cc61b0e 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html +++ b/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html @@ -29,8 +29,13 @@
@@ -38,6 +43,18 @@ \ No newline at end of file From 1a1a3b14eddbd7ef7722acd86eff8f7e18487759 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Wed, 10 Jun 2015 16:04:01 +0200 Subject: [PATCH 131/369] #54 Show event list below new event form --- src/main/webapp/admin.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/webapp/admin.html b/src/main/webapp/admin.html index 21f6a75..7772610 100644 --- a/src/main/webapp/admin.html +++ b/src/main/webapp/admin.html @@ -36,6 +36,7 @@ +
From 790ab95a71975ead96faa7de9a410d2d23ee34a4 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Thu, 11 Jun 2015 16:10:06 +0200 Subject: [PATCH 132/369] #54 Use jQuery for AJAX request --- .../sportchef-eventlist.html | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html b/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html index cc61b0e..fd13cf4 100644 --- a/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html +++ b/src/main/webapp/sportchef_components/sportchef-eventlist/sportchef-eventlist.html @@ -21,6 +21,7 @@ + + - - + + + +
+
+
+
+ + + +
+
+ Nur Favoriten zeigen +
+ + +
+
+
+
- - +
+
+ \ No newline at end of file diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index e538f51..b38c0a0 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -1,4 +1,4 @@ - + - - - - + + + \ No newline at end of file diff --git a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html index e308637..32f08e1 100644 --- a/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html +++ b/src/main/webapp/sportchef_components/sportchef-event/sportchef-event.html @@ -15,28 +15,30 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see >. --> - - - - + + + +