diff --git a/ninja/src/main/java/META-INF/persistence.xml b/ninja/src/main/java/META-INF/persistence.xml new file mode 100644 index 0000000000..bfdd6ad8e8 --- /dev/null +++ b/ninja/src/main/java/META-INF/persistence.xml @@ -0,0 +1,33 @@ + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ninja/src/main/java/conf/Filters.java b/ninja/src/main/java/conf/Filters.java index cfd04e8ec2..b201780fa1 100644 --- a/ninja/src/main/java/conf/Filters.java +++ b/ninja/src/main/java/conf/Filters.java @@ -1,20 +1,3 @@ -/** - * Copyright (C) 2012-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - package conf; import java.util.List; diff --git a/ninja/src/main/java/conf/Module.java b/ninja/src/main/java/conf/Module.java index e5ec39d2de..f7c03a4b26 100644 --- a/ninja/src/main/java/conf/Module.java +++ b/ninja/src/main/java/conf/Module.java @@ -1,20 +1,3 @@ -/** - * Copyright (C) 2012-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - package conf; import com.google.inject.AbstractModule; @@ -26,10 +9,8 @@ import services.UserServiceImpl; @Singleton public class Module extends AbstractModule { - protected void configure() { - // bind your injections here! bind(UserService.class).to(UserServiceImpl.class); } diff --git a/ninja/src/main/java/conf/Routes.java b/ninja/src/main/java/conf/Routes.java index 7db2d7a107..4f23fd37fe 100644 --- a/ninja/src/main/java/conf/Routes.java +++ b/ninja/src/main/java/conf/Routes.java @@ -1,23 +1,5 @@ -/** - * Copyright (C) 2012-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - package conf; - import ninja.AssetsController; import ninja.Router; import ninja.application.ApplicationRoutes; @@ -29,19 +11,17 @@ public class Routes implements ApplicationRoutes { public void init(Router router) { router.GET().route("/").with(ApplicationController::index); - router.GET().route("/hello_world.json").with(ApplicationController::helloWorldJson); - + router.GET().route("/hello").with(ApplicationController::helloWorld); + router.GET().route("/userJson").with(ApplicationController::userJson); + router.GET().route("/users").with(ApplicationController::fetchUsers); - /////////////////////////////////////////////////////////////////////// - // Assets (pictures / javascript) - /////////////////////////////////////////////////////////////////////// + //Assets router.GET().route("/assets/webjars/{fileName: .*}").with(AssetsController::serveWebJars); router.GET().route("/assets/{fileName: .*}").with(AssetsController::serveStatic); - /////////////////////////////////////////////////////////////////////// - // Index / Catchall shows index page - /////////////////////////////////////////////////////////////////////// + //Index router.GET().route("/.*").with(ApplicationController::index); + } } diff --git a/ninja/src/main/java/conf/application.conf b/ninja/src/main/java/conf/application.conf index 3b2e96f702..3bfbc70e1a 100644 --- a/ninja/src/main/java/conf/application.conf +++ b/ninja/src/main/java/conf/application.conf @@ -15,12 +15,20 @@ application.name=baeldung ninja application application.cookie.prefix=NINJA #ISO Language Code, optionally followed by a valid ISO Country Code. -application.languages=en +application.languages=fr,en application.session.expire_time_in_seconds=3600 application.session.send_only_if_changed=true application.session.transferred_over_https_only=false +ninja.port=8000 + # enable ssl with self-signed cert in dev & test modes -ninja.ssl.port=8443 +ninja.ssl.port=8001 application.secret = fxSjSL9Q017BSL7gBnkyo2Prln7uXaXIT35gotXRIED8c46OSa8s4QdoIQdTsEtj + +# h2 jpa configuration +ninja.jpa.persistence_unit_name=dev_unit +db.connection.url=jdbc:h2:./devDb +db.connection.username=sa +db.connection.password= diff --git a/ninja/src/main/java/conf/messages.properties b/ninja/src/main/java/conf/messages.properties index f163d33260..3bddfcd8c7 100644 --- a/ninja/src/main/java/conf/messages.properties +++ b/ninja/src/main/java/conf/messages.properties @@ -1,21 +1,2 @@ -# -# Copyright (C) 2012 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# This file is utf-8 -header.title=Hello World! -header.home=BAM! -hello.world=Hello World! -hello.world.json=There is also Json rendering you can check out! \ No newline at end of file +header.home=Home! +helloMsg=Hello, welcome to Ninja Framework! \ No newline at end of file diff --git a/ninja/src/main/java/conf/messages_fr.properties b/ninja/src/main/java/conf/messages_fr.properties new file mode 100644 index 0000000000..89264e0cb9 --- /dev/null +++ b/ninja/src/main/java/conf/messages_fr.properties @@ -0,0 +1,2 @@ +header.home=Accueil! +helloMsg=Bonjour, bienvenue dans Ninja Framework! \ No newline at end of file diff --git a/ninja/src/main/java/controllers/ApplicationController.java b/ninja/src/main/java/controllers/ApplicationController.java index bd62e5fb84..65c95e9204 100644 --- a/ninja/src/main/java/controllers/ApplicationController.java +++ b/ninja/src/main/java/controllers/ApplicationController.java @@ -1,36 +1,83 @@ package controllers; +import ninja.Context; import ninja.Result; import ninja.Results; +import ninja.i18n.Lang; +import ninja.i18n.Messages; +import ninja.jpa.UnitOfWork; import services.UserService; + +import java.util.List; +import java.util.Optional; + import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.Query; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import com.google.inject.Provider; import com.google.inject.Singleton; +import models.User; +import com.google.inject.persist.Transactional; + @Singleton public class ApplicationController { + @Inject + Lang lang; + + @Inject + Messages msg; + private static Log logger = LogFactory.getLog(ApplicationController.class); + @Inject + Provider entitiyManagerProvider; + @Inject UserService userService; public Result index() { - return Results.html(); + Result result = Results.html(); + lang.setLanguage("fr", result); + return result; + + } + + public Result userJson() { + User user = userService.getUser(); + logger.info(user); + return Results.json().render(user); + } + + public Result helloWorld(Context context) { + Optional language = Optional.of("en"); + String helloMsg = msg.get("helloMsg", language).get(); + return Results.text().render(helloMsg); } - public Result helloWorldJson() { - SimplePojo simplePojo = new SimplePojo(); - simplePojo.content = "Hello World! Hello Json!"; - logger.info(userService.getUserName()); - return Results.json().render(simplePojo); + @UnitOfWork + public Result fetchUsers() { + insertUser(); + EntityManager entityManager = entitiyManagerProvider.get(); + Query q = entityManager.createQuery("SELECT x FROM User x"); + List users = (List) q.getResultList(); + System.out.println(users); + return Results.text().render("Done"); } - public static class SimplePojo { - public String content; + @Transactional + public Result insertUser() { + EntityManager entityManager = entitiyManagerProvider.get(); + User user = userService.getUser(); + entityManager.persist(user); + entityManager.flush(); + + return Results.text().render("Inserted"); } - + } diff --git a/ninja/src/main/java/models/User.java b/ninja/src/main/java/models/User.java new file mode 100644 index 0000000000..d1b18cfa83 --- /dev/null +++ b/ninja/src/main/java/models/User.java @@ -0,0 +1,22 @@ +package models; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + Long id; + + public String firstName; + public String email; + + public String toString() { + return firstName + " : " + email; + } + +} diff --git a/ninja/src/main/java/services/UserService.java b/ninja/src/main/java/services/UserService.java index 100761a2ab..a549b48e48 100644 --- a/ninja/src/main/java/services/UserService.java +++ b/ninja/src/main/java/services/UserService.java @@ -1,7 +1,9 @@ package services; +import models.User; + public interface UserService { - String getUserName(); + User getUser(); } diff --git a/ninja/src/main/java/services/UserServiceImpl.java b/ninja/src/main/java/services/UserServiceImpl.java index a0dec61084..3ffa53400f 100644 --- a/ninja/src/main/java/services/UserServiceImpl.java +++ b/ninja/src/main/java/services/UserServiceImpl.java @@ -1,10 +1,15 @@ package services; +import models.User; + public class UserServiceImpl implements UserService { - + @Override - public String getUserName() { - return "Eugen Parashic"; + public User getUser() { + User user = new User(); + user.firstName = "Norman"; + user.email = "norman@email.com"; + return user; } } diff --git a/ninja/src/main/java/views/ApplicationController/index.ftl.html b/ninja/src/main/java/views/ApplicationController/index.ftl.html index ab2edaf69b..10f6612d54 100644 --- a/ninja/src/main/java/views/ApplicationController/index.ftl.html +++ b/ninja/src/main/java/views/ApplicationController/index.ftl.html @@ -2,8 +2,8 @@ <@layout.myLayout "Home page"> -

${i18n("hello.world")}

-

${i18n("hello.world.json")}

-Hello World Json +

${i18n("helloMsg")}

+ +User Json \ No newline at end of file diff --git a/ninja/src/main/java/views/layout/header.ftl.html b/ninja/src/main/java/views/layout/header.ftl.html index 8794ee5c68..ebd55a9f4c 100644 --- a/ninja/src/main/java/views/layout/header.ftl.html +++ b/ninja/src/main/java/views/layout/header.ftl.html @@ -6,11 +6,11 @@ - ${i18n("header.title")} diff --git a/ninja/src/test/java/controllers/ApiControllerDocTesterTest.java b/ninja/src/test/java/controllers/ApiControllerDocTesterTest.java index af4f5ba85f..e383859dfb 100644 --- a/ninja/src/test/java/controllers/ApiControllerDocTesterTest.java +++ b/ninja/src/test/java/controllers/ApiControllerDocTesterTest.java @@ -1,78 +1,38 @@ -/** - * Copyright (C) 2012-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Copyright (C) 2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package controllers; - -import org.junit.Test; - -import ninja.NinjaDocTester; -import org.doctester.testbrowser.Request; -import org.doctester.testbrowser.Response; -import org.hamcrest.CoreMatchers; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertThat; +import javax.inject.Inject; + +import org.doctester.testbrowser.Request; +import org.doctester.testbrowser.Response; +import org.junit.Test; +import org.mockito.Mock; + +import ninja.NinjaDocTester; +import services.UserService; + public class ApiControllerDocTesterTest extends NinjaDocTester { String URL_INDEX = "/"; - String URL_HELLO_WORLD_JSON = "/hello_world.json"; + String URL_HELLO = "/hello"; + String URL_USER_JSON = "/userJson"; + String URL_USERS = "/users"; + + @Mock + UserService userService; @Test public void testGetIndex() { - - Response response = makeRequest( - Request.GET().url( - testServerUrl().path(URL_INDEX))); - - assertThat(response.payload, containsString("Hello World!")); - assertThat(response.payload, containsString("BAM!")); - - + Response response = makeRequest(Request.GET().url(testServerUrl().path(URL_INDEX))); + assertThat(response.payload, containsString("Bonjour, bienvenue dans Ninja Framework!")); } @Test - public void testGetHelloWorldJson() { - - Response response = makeRequest( - Request.GET().url( - testServerUrl().path(URL_HELLO_WORLD_JSON))); - - ApplicationController.SimplePojo simplePojo - = response.payloadJsonAs(ApplicationController.SimplePojo.class); - - assertThat(simplePojo.content, CoreMatchers.equalTo("Hello World! Hello Json!")); - - + public void testGetHello() { + Response response = makeRequest(Request.GET().url(testServerUrl().path(URL_HELLO))); + assertThat(response.payload, containsString("Hello, welcome to Ninja Framework!")); } - + } diff --git a/ninja/src/test/java/controllers/ApiControllerMockTest.java b/ninja/src/test/java/controllers/ApiControllerMockTest.java new file mode 100644 index 0000000000..3057613d2e --- /dev/null +++ b/ninja/src/test/java/controllers/ApiControllerMockTest.java @@ -0,0 +1,41 @@ +package controllers; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertThat; + +import javax.inject.Inject; + +import org.doctester.testbrowser.Request; +import org.doctester.testbrowser.Response; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; + +import ninja.NinjaRunner; +import ninja.Result; +import services.UserService; + +@RunWith(NinjaRunner.class) +public class ApiControllerMockTest { + + @Inject private UserService userService; + + ApplicationController applicationController; + + @Before + public void setupTest() { + applicationController = new ApplicationController(); + applicationController.userService = userService; + } + + @Test + public void testThatGetUserJson() { + Result result = applicationController.userJson(); + System.out.println(result.getRenderable()); + assertEquals(userService.getUser().toString(), result.getRenderable().toString()); + } + +}