From d0cb11fcb8aa56081291f40746ec1c85844ed6a5 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Thu, 26 Dec 2013 16:44:48 +0000
Subject: [PATCH] #333 feature - Fixed some JPA config issues

---
 securis/src/main/resources/META-INF/persistence.xml                   |   21 +++++++
 securis/src/main/java/net/curisit/securis/db/License.java             |   24 ++++---
 securis/src/main/java/net/curisit/securis/db/User.java                |   13 ++--
 securis/src/main/java/net/curisit/securis/db/Organization.java        |    2 
 securis/src/main/java/net/curisit/securis/MainApp.java                |   34 +++++------
 securis/src/main/java/net/curisit/securis/services/BasicServices.java |   21 +++++++
 securis/src/main/java/net/curisit/securis/dao/UserDao.java            |   39 +++++++++++++
 securis/src/main/java/net/curisit/securis/db/Pack.java                |    8 --
 8 files changed, 118 insertions(+), 44 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/MainApp.java b/securis/src/main/java/net/curisit/securis/MainApp.java
index 2d81bbb..62d5e13 100644
--- a/securis/src/main/java/net/curisit/securis/MainApp.java
+++ b/securis/src/main/java/net/curisit/securis/MainApp.java
@@ -1,6 +1,7 @@
 package net.curisit.securis;
 
 import java.net.URI;
+import java.util.Properties;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -29,6 +30,8 @@
 import com.google.inject.Injector;
 import com.google.inject.Key;
 import com.google.inject.name.Names;
+import com.google.inject.persist.PersistFilter;
+import com.google.inject.persist.jpa.JpaPersistModule;
 
 public class MainApp {
 
@@ -44,8 +47,17 @@
 	public static void main(String[] args) throws Exception {
 		log.info("SeCuris init...");
 
-		injector = Guice.createInjector(new SecurisModule(), new RequestsModule());
-		// createBiDirectionalGuiceBridge(ServiceLocatorFactory.getInstance().create("default"), new SecurisModule());
+		SecurisModule securisModule = new SecurisModule();
+		JpaPersistModule jpaPersistModule = new JpaPersistModule("localdb");
+		Properties props = new Properties();
+		props.put("javax.persistence.jdbc.password", securisModule.getPassword());
+		props.put("javax.persistence.jdbc.url", securisModule.getUrl(securisModule.getAppDir()));
+		log.info("BD Url: {} {}", securisModule.getUrl(securisModule.getAppDir()), securisModule.getPassword());
+		jpaPersistModule.properties(props);
+
+		injector = Guice.createInjector(securisModule, new RequestsModule(), jpaPersistModule);
+		// injector.getInstance(JpaInitializer.class);
+
 		startServer(injector.getInstance(Key.get(URI.class, Names.named("base-uri"))));
 		while (true) {
 			Thread.currentThread().sleep(100);
@@ -63,7 +75,7 @@
 		context.setInitParameter("resteasy.role.based.security", "true");
 		context.setInitParameter("resteasy.providers", DefaultExceptionHandler.class.getName());
 		context.addFilter(new FilterHolder(injector.getInstance(AuthFilter.class)), "/*", null);
-
+		context.addFilter(new FilterHolder(injector.getInstance(PersistFilter.class)), "/*", null);
 		ServletHolder sh = new ServletHolder(HttpServletDispatcher.class);
 		sh.setName("resteasy");
 		context.addServlet(sh, "/*");
@@ -97,9 +109,6 @@
 
 	}
 
-	/**
-	 * User: Nuwan.N.Bandara
-	 */
 	@Provider
 	public static class DefaultExceptionHandler implements ExceptionMapper<Exception> {
 
@@ -122,16 +131,3 @@
 	}
 
 }
-
-/*
- * Constraint constraint = new Constraint(); constraint.setName(Constraint.__FORM_AUTH);; constraint.setRoles(new String[]{"user","admin","moderator"}); constraint.setAuthenticate(true);
- * 
- * ConstraintMapping constraintMapping = new ConstraintMapping(); constraintMapping.setConstraint(constraint); constraintMapping.setPathSpec("/*");
- * 
- * ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler(); securityHandler.addConstraintMapping(constraintMapping); HashLoginService loginService = new HashLoginService(); loginService.putUser("username", new
- * Password("password"), new String[] {"user"}); securityHandler.setLoginService(loginService);
- * 
- * FormAuthenticator authenticator = new FormAuthenticator("/login", "/login", false); securityHandler.setAuthenticator(authenticator);
- * 
- * context.setSecurityHandler(securityHandler);
- */
\ No newline at end of file
diff --git a/securis/src/main/java/net/curisit/securis/dao/UserDao.java b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
new file mode 100644
index 0000000..037c12d
--- /dev/null
+++ b/securis/src/main/java/net/curisit/securis/dao/UserDao.java
@@ -0,0 +1,39 @@
+package net.curisit.securis.dao;
+
+import java.util.Date;
+
+import javax.inject.Inject;
+import javax.inject.Provider;
+import javax.inject.Singleton;
+import javax.persistence.EntityManager;
+
+import net.curisit.integrity.commons.Utils;
+import net.curisit.securis.db.User;
+
+@Singleton
+public class UserDao {
+
+	@Inject
+	public UserDao() {
+	}
+
+	@Inject
+	Provider<EntityManager> emProvider;
+
+	@com.google.inject.persist.Transactional
+	public User test(String username) {
+		EntityManager em = emProvider.get();
+		User user = new User();
+		user.setUsername(username);
+		user.setFullName("Rob San");
+		user.setPassword(Utils.sha256("rob"));
+		user.setLang("en");
+		user.setCreationTimestamp(new Date());
+		user.setRoles(User.Rol.ADMIN | User.Rol.ADVANCE);
+		user.setShortName("Rob");
+		em.persist(user);
+		User u2 = em.find(User.class, username);
+		return u2;
+	}
+
+}
diff --git a/securis/src/main/java/net/curisit/securis/db/License.java b/securis/src/main/java/net/curisit/securis/db/License.java
index c23180b..fb4ce46 100644
--- a/securis/src/main/java/net/curisit/securis/db/License.java
+++ b/securis/src/main/java/net/curisit/securis/db/License.java
@@ -5,6 +5,7 @@
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
@@ -24,12 +25,13 @@
 @Entity
 @Table(name = "license")
 @NamedQueries(
-	{ @NamedQuery(name = "list-licenses", query = "SELECT pa FROM Pack pa") })
+	{ @NamedQuery(name = "list-licenses", query = "SELECT l FROM License l") })
 public class License implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 	@Id
+	@GeneratedValue
 	private int id;
 
 	private String code;
@@ -42,8 +44,8 @@
 	private Organization organization;
 
 	@ManyToOne
-	@JoinColumn(name = "license_type_id")
-	private LicenseType licenseType;
+	@JoinColumn(name = "pack_id")
+	private Pack pack;
 
 	@ManyToOne
 	@JoinColumn(name = "created_by")
@@ -79,14 +81,6 @@
 		this.organization = organization;
 	}
 
-	public LicenseType getLicenseType() {
-		return licenseType;
-	}
-
-	public void setLicenseType(LicenseType licenseType) {
-		this.licenseType = licenseType;
-	}
-
 	public User getCreatedBy() {
 		return createdBy;
 	}
@@ -103,4 +97,12 @@
 		this.numLicenses = numLicenses;
 	}
 
+	public Pack getPack() {
+		return pack;
+	}
+
+	public void setPack(Pack pack) {
+		this.pack = pack;
+	}
+
 }
diff --git a/securis/src/main/java/net/curisit/securis/db/Organization.java b/securis/src/main/java/net/curisit/securis/db/Organization.java
index 0f43b92..71a7ebc 100644
--- a/securis/src/main/java/net/curisit/securis/db/Organization.java
+++ b/securis/src/main/java/net/curisit/securis/db/Organization.java
@@ -49,7 +49,7 @@
 	joinColumns =
 		{ @JoinColumn(name = "organization_id", referencedColumnName = "id") }, //
 	inverseJoinColumns =
-		{ @JoinColumn(name = "user_id", referencedColumnName = "id") })
+		{ @JoinColumn(name = "user_id", referencedColumnName = "username") })
 	private List<User> users;
 
 	@ManyToOne
diff --git a/securis/src/main/java/net/curisit/securis/db/Pack.java b/securis/src/main/java/net/curisit/securis/db/Pack.java
index 04e3306..4c93f08 100644
--- a/securis/src/main/java/net/curisit/securis/db/Pack.java
+++ b/securis/src/main/java/net/curisit/securis/db/Pack.java
@@ -10,7 +10,6 @@
 import javax.persistence.FetchType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
@@ -55,12 +54,7 @@
 	@JoinColumn(name = "created_by")
 	private User createdBy;
 
-	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
-	@JoinTable(name = "license", //
-	joinColumns =
-		{ @JoinColumn(name = "pack_id") }, //
-	inverseJoinColumns =
-		{ @JoinColumn(name = "id") })
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "pack")
 	private Set<License> licenses;
 
 	private int numLicenses;
diff --git a/securis/src/main/java/net/curisit/securis/db/User.java b/securis/src/main/java/net/curisit/securis/db/User.java
index e96102e..ba5890f 100644
--- a/securis/src/main/java/net/curisit/securis/db/User.java
+++ b/securis/src/main/java/net/curisit/securis/db/User.java
@@ -35,12 +35,13 @@
 
 	@Id
 	private String username;
+
 	private String password;
 	@JsonProperty(value = "short_name")
 	@Column(name = "short_name")
 	private String shortName;
 
-	private int role;
+	private int roles;
 
 	@JsonProperty(value = "full_name")
 	@Column(name = "full_name")
@@ -61,7 +62,7 @@
 	@ManyToMany
 	@JoinTable(name = "user_organization", //
 	joinColumns =
-		{ @JoinColumn(name = "user_id", referencedColumnName = "id") }, //
+		{ @JoinColumn(name = "user_id", referencedColumnName = "username") }, //
 	inverseJoinColumns =
 		{ @JoinColumn(name = "organization_id", referencedColumnName = "id") } //
 	)
@@ -83,12 +84,12 @@
 		this.password = password;
 	}
 
-	public int getRole() {
-		return role;
+	public int getRoles() {
+		return roles;
 	}
 
-	public void setRole(int role) {
-		this.role = role;
+	public void setRoles(int roles) {
+		this.roles = roles;
 	}
 
 	public String getFullName() {
diff --git a/securis/src/main/java/net/curisit/securis/services/BasicServices.java b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
index 8fe0f5b..6216867 100644
--- a/securis/src/main/java/net/curisit/securis/services/BasicServices.java
+++ b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
@@ -3,15 +3,21 @@
 import java.net.URI;
 import java.util.Date;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriBuilder;
+
+import net.curisit.securis.dao.UserDao;
+import net.curisit.securis.db.User;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,10 +28,12 @@
  * @author roberto <roberto.sanchez@curisit.net>
  */
 @Path("/")
+@Singleton
 public class BasicServices {
 
 	private static final Logger log = LoggerFactory.getLogger(BasicServices.class);
 
+	@Inject
 	public BasicServices() {
 	}
 
@@ -54,4 +62,17 @@
 		return Response.ok().entity("License server running OK. Date: " + new Date()).build();
 	}
 
+	@Inject
+	UserDao userDao;
+
+	@GET
+	@Path("/test")
+	@Produces(
+		{ MediaType.TEXT_PLAIN })
+	public Response test(@QueryParam("u") String username) {
+		User user = userDao.test(username);
+
+		return Response.ok().entity("User: " + user).build();
+	}
+
 }
diff --git a/securis/src/main/resources/META-INF/persistence.xml b/securis/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..0404023
--- /dev/null
+++ b/securis/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.0"
+	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">
+	<persistence-unit name="localdb" transaction-type="RESOURCE_LOCAL">
+		<description>SeCuris LocalDB</description>
+		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+
+<!-- 		<class>net.curisit.securis.db.UserSettingsUnits</class>   -->
+
+
+		<properties>
+			<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
+			<property name="javax.persistence.jdbc.url"
+				value="jdbc:h2:/tmp/.CurisIntegrity/db/curissecuris" />
+			<property name="javax.persistence.jdbc.user" value="curis" />
+			<property name="javax.persistence.jdbc.password" value="53curi5" />
+			<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
+		</properties>
+	</persistence-unit>
+</persistence>

--
Gitblit v1.3.2