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; package conf;
import java.util.List; 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; package conf;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
@ -26,10 +9,8 @@ import services.UserServiceImpl;
@Singleton @Singleton
public class Module extends AbstractModule { public class Module extends AbstractModule {
protected void configure() { protected void configure() {
// bind your injections here!
bind(UserService.class).to(UserServiceImpl.class); 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; package conf;
import ninja.AssetsController; import ninja.AssetsController;
import ninja.Router; import ninja.Router;
import ninja.application.ApplicationRoutes; import ninja.application.ApplicationRoutes;
@ -29,19 +11,17 @@ public class Routes implements ApplicationRoutes {
public void init(Router router) { public void init(Router router) {
router.GET().route("/").with(ApplicationController::index); 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
// Assets (pictures / javascript)
///////////////////////////////////////////////////////////////////////
router.GET().route("/assets/webjars/{fileName: .*}").with(AssetsController::serveWebJars); router.GET().route("/assets/webjars/{fileName: .*}").with(AssetsController::serveWebJars);
router.GET().route("/assets/{fileName: .*}").with(AssetsController::serveStatic); router.GET().route("/assets/{fileName: .*}").with(AssetsController::serveStatic);
/////////////////////////////////////////////////////////////////////// //Index
// Index / Catchall shows index page
///////////////////////////////////////////////////////////////////////
router.GET().route("/.*").with(ApplicationController::index); router.GET().route("/.*").with(ApplicationController::index);
} }
} }

View File

@ -15,12 +15,20 @@ application.name=baeldung ninja application
application.cookie.prefix=NINJA application.cookie.prefix=NINJA
#ISO Language Code, optionally followed by a valid ISO Country Code. #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.expire_time_in_seconds=3600
application.session.send_only_if_changed=true application.session.send_only_if_changed=true
application.session.transferred_over_https_only=false application.session.transferred_over_https_only=false
ninja.port=8000
# enable ssl with self-signed cert in dev & test modes # enable ssl with self-signed cert in dev & test modes
ninja.ssl.port=8443 ninja.ssl.port=8001
application.secret = fxSjSL9Q017BSL7gBnkyo2Prln7uXaXIT35gotXRIED8c46OSa8s4QdoIQdTsEtj 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 @@
# header.home=Home!
# Copyright (C) 2012 the original author or authors. helloMsg=Hello, welcome to Ninja Framework!
#
# 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!

View File

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

View File

@ -1,36 +1,83 @@
package controllers; package controllers;
import ninja.Context;
import ninja.Result; import ninja.Result;
import ninja.Results; import ninja.Results;
import ninja.i18n.Lang;
import ninja.i18n.Messages;
import ninja.jpa.UnitOfWork;
import services.UserService; import services.UserService;
import java.util.List;
import java.util.Optional;
import javax.inject.Inject; import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import com.google.inject.Provider;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import models.User;
import com.google.inject.persist.Transactional;
@Singleton @Singleton
public class ApplicationController { public class ApplicationController {
@Inject
Lang lang;
@Inject
Messages msg;
private static Log logger = LogFactory.getLog(ApplicationController.class); private static Log logger = LogFactory.getLog(ApplicationController.class);
@Inject
Provider<EntityManager> entitiyManagerProvider;
@Inject @Inject
UserService userService; UserService userService;
public Result index() { 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() { @UnitOfWork
SimplePojo simplePojo = new SimplePojo(); public Result fetchUsers() {
simplePojo.content = "Hello World! Hello Json!"; insertUser();
logger.info(userService.getUserName()); EntityManager entityManager = entitiyManagerProvider.get();
return Results.json().render(simplePojo); 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 { @Transactional
public String content; 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; package services;
import models.User;
public interface UserService { public interface UserService {
String getUserName(); User getUser();
} }

View File

@ -1,10 +1,15 @@
package services; package services;
import models.User;
public class UserServiceImpl implements UserService { public class UserServiceImpl implements UserService {
@Override @Override
public String getUserName() { public User getUser() {
return "Eugen Parashic"; User user = new User();
user.firstName = "Norman";
user.email = "norman@email.com";
return user;
} }
} }

View File

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

View File

@ -6,11 +6,11 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a class="navbar-brand" href="/">${i18n("header.title")}</a>
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="active"><a href="/">${i18n("header.home")}</a></li> <li class="active"><a href="/">${i18n("header.home")}</a></li>
<li class=""><a href="/hello">Hello</a></li>
</ul> </ul>
</div> </div>
<!--/.navbar-collapse --> <!--/.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; 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.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat; 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 { public class ApiControllerDocTesterTest extends NinjaDocTester {
String URL_INDEX = "/"; 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 @Test
public void testGetIndex() { public void testGetIndex() {
Response response = makeRequest(Request.GET().url(testServerUrl().path(URL_INDEX)));
Response response = makeRequest( assertThat(response.payload, containsString("Bonjour, bienvenue dans Ninja Framework!"));
Request.GET().url(
testServerUrl().path(URL_INDEX)));
assertThat(response.payload, containsString("Hello World!"));
assertThat(response.payload, containsString("BAM!"));
} }
@Test @Test
public void testGetHelloWorldJson() { public void testGetHello() {
Response response = makeRequest(Request.GET().url(testServerUrl().path(URL_HELLO)));
Response response = makeRequest( assertThat(response.payload, containsString("Hello, welcome to Ninja Framework!"));
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!"));
} }
} }

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