package com.example.cosmos_serversb.models; import java.util.List; import java.util.UUID; import javax.inject.Singleton; import com.example.cosmos_serversb.entities.*; import com.fasterxml.jackson.databind.ObjectMapper; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; @Singleton public class Users { private static Users theInstance = null; private static SessionFactory sessionFactory; private static String baseURI = "http://nitta-lab-www.is.konan-u.ac.jp/"; private static String AppName = "cosmos"; public static void setUp() { // A SessionFactory is set up once for an application! final StandardServiceRegistry registry = new StandardServiceRegistryBuilder() .configure() // configures settings from hibernate.cfg.xml .build(); try { sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory(); } catch (Exception e) { // The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory // so destroy it manually. StandardServiceRegistryBuilder.destroy( registry ); } } public static void tearDown() { try { if (sessionFactory != null) { sessionFactory.close(); } } catch (Exception e) { System.out.println("Exception!"); } } private Users() { setUp(); } public static Users getInstance() { if (theInstance == null) { theInstance = new Users(); } return theInstance; } public static Token createToken(String uId) { //Tokenを作成しuIdと関連付けしDBに保存し作成したTokenを返す String token = UUID.randomUUID().toString(); Token testToken =new Token(token, uId); Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(testToken); session.getTransaction().commit(); session.close(); return testToken; } public static String createUId() { //uIdを作成し既存していないかチェック後DBに保存し作成したuIdを返す String uId = UUID.randomUUID().toString(); return uId; } public static User createUser(String name, String pw, String iconImage) { String uId = getInstance().createUId(); String uri = baseURI + AppName +"/users/" +uId; Session session = sessionFactory.openSession(); session.beginTransaction(); User testUser = new User(name, uId, uri, iconImage);//名前、uId、ユーザーuri、パスワード、アイコンイメージを保存 session.save(testUser); //出力 // List userResult = session.createQuery( "from User" ).list(); // for ( User user : (List<User>) userResult ) { // System.out.println( "UserId (" + user.getuId() + ") : " + user.getUri() + ": " + user.getName()); // } session.getTransaction().commit(); session.close(); //// testUser.token.add(getInstance().createToken(testUser.uId)); // testUser.token.add(getInstance().createToken(testUser.uId)); return testUser; } public static PutUser setUser(String uId, String name, String pw, String iconImage) { Session session = sessionFactory.openSession(); session.beginTransaction(); List usersList = session.createQuery( "from User" ).list(); for ( User user : (List<User>) usersList ) { if(user.getuId() == uId){ user.setName(name); if(iconImage != null) { user.setIconUri(iconImage); } session.update(user); break; } } //ここの2行でUser.javaからUriとuIdを参照 User findUser = (User) session.load(User.class, uId); PutUser putUser = new PutUser(findUser.getUri(),findUser.getuId()); session.getTransaction().commit(); session.close(); // testUser.token.add(getInstance().createToken(testUser.uId)); // testUser.token.add(getInstance().createToken(testUser.uId)); //表示するのはUriとuIdのみ return putUser; } public static User getUserById(String uId) { //与えられたuIdのUser情報を返す Session session = sessionFactory.openSession(); session.beginTransaction(); List usersList = session.createQuery( "from User" ).list(); //uIdを比較し、一致した場合はNameとiconUriを返す。一致しない場合はbreak for ( User user : (List<User>) usersList ) { if (user.getuId() == uId) { User findUser = (User) session.load(User.class, uId); ObjectMapper mapper = new ObjectMapper(); return mapper.addMixIn(findUser, findUser.removeuIdAnduri()); // System.out.println( "name: " + user.getName() + "iconUri : " + user.getIconUri());] }else{ break; } } session.getTransaction().commit(); session.close(); // testUser.token.add(getInstance().createToken(testUser.uId)); // testUser.token.add(getInstance().createToken(testUser.uId)); //一致しない場合は返す必要がないのでnull return null; } public static User getUserByToken(String token) { //与えられたTokenに紐づくUser情報を返す User testUser = new User("test", getInstance().createUId(), "http://test.com", "http://localhost:8080/iconImage/b4bb7db0-cc0c-4ee1-816f-8304add12da8.jpg"); // testUser.token.add(getInstance().createToken(testUser.uId)); // testUser.token.add(getInstance().createToken(testUser.uId)); return testUser; } public static DeleteResult deleteUser(String uId) { Session session = sessionFactory.openSession(); session = sessionFactory.openSession(); session.beginTransaction(); Request deleteRequest = (Request) session.load(Request.class, uId); if(deleteRequest != null){ session.delete(deleteRequest); System.out.println("massage: Already Deleted"); } session.getTransaction().commit(); session.close(); return DeleteResult.SUCCESS; } public static Token login(String uId) { Token testtoken = getInstance().createToken(uId); //tokenを作成後値を返す return testtoken;//testToken } public static DeleteResult logout(String token) { if(Users.getInstance().getUserByToken(token).uId == null) { return DeleteResult.FAILURE; }else{ // Users.getInstance().getUserByToken(token).token.remove(Users.getInstance().getUserByToken(token).token.indexOf(token)); return DeleteResult.SUCCESS; } } public static boolean checkToken(String uId, String token) { //与えられたtokenとUserのtokenを比較し結果を返す return true; } public static boolean checkPassword(String uId, String pw) { //与えられたパスワードとUserのパスワードを比較し結果を返す return true; } }