Ninja framework changes

This commit is contained in:
Anshul BANSAL 2019-12-08 14:40:42 +02:00
parent d21a7b9e5c
commit e6f6fd1ca7
15 changed files with 209 additions and 164 deletions

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<!-- Database settings for development-->
<persistence-unit name="dev_unit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.connection.autocommit" value="true" />
<!-- Connection Pooling settings -->
<property name="hibernate.connection.provider_class"
value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.max_size" value="100" />
<property name="hibernate.c3p0.min_size" value="0" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.idle_test_period" value="300" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.timeout" value="100" />
</properties>
</persistence-unit>
</persistence>

View File

@ -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;

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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=

View File

@ -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!
header.home=Home!
helloMsg=Hello, welcome to Ninja Framework!

View File

@ -0,0 +1,2 @@
header.home=Accueil!
helloMsg=Bonjour, bienvenue dans Ninja Framework!

View File

@ -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<EntityManager> 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<String> 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<User> users = (List<User>) 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");
}
}

View File

@ -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;
}
}

View File

@ -1,7 +1,9 @@
package services;
import models.User;
public interface UserService {
String getUserName();
User getUser();
}

View File

@ -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;
}
}

View File

@ -2,8 +2,8 @@
<@layout.myLayout "Home page">
<h1>${i18n("hello.world")}</h1>
<p>${i18n("hello.world.json")}</p>
<a href="/hello_world.json">Hello World Json</a>
<h1>${i18n("helloMsg")}</h1>
<a href="/userJson">User Json</a>
</@layout.myLayout>

View File

@ -6,11 +6,11 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">${i18n("header.title")}</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="/">${i18n("header.home")}</a></li>
<li class=""><a href="/hello">Hello</a></li>
</ul>
</div>
<!--/.navbar-collapse -->

View File

@ -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!"));
}
}

View File

@ -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());
}
}