Newer
Older
CosmosServer / src / test / java / hibernateTest / models / Users.java
package hibernateTest.models;

import com.example.cosmos_serversb.entities.Token;
import com.example.cosmos_serversb.models.DeleteResult;

import javax.inject.Singleton;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import hibernateTest.entities.Event;
import hibernateTest.entities.Group;
import hibernateTest.entities.Request;
import hibernateTest.entities.User;
import org.hibernate.Criteria;
import org.hibernate.SessionBuilder;
import org.hibernate.criterion.Restrictions;
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;

    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 String createToken(String uId) {
        //Tokenを作成しuIdと関連付けしDBに保存し作成したTokenを返す
        //String token = UUID.randomUUID().toString();
        //return token;
        return null;
    }

    public static String createUId() {
        //uIdを作成し既存していないかチェック後DBに保存し作成したuIdを返す
        String uId = UUID.randomUUID().toString();
        return uId;
    }

    public static User createUser(String name, String pw, String iconImage) {

        Session session = sessionFactory.openSession();
        session.beginTransaction();
        //名前、パスワード、アイコンイメージを保存
        User testUser = new User(name,getInstance().createUId(), "http://test.com",pw,iconImage);
        System.out.println(testUser.getUri());
        session.save(testUser);
        //hibernateテスト出力用
        List userResult = session.createQuery( "from User" ).list();
        for ( User user : (List<User>) userResult ) {
            System.out.println( "User (" + 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 User setUser(String uId, String name, String pw, String iconImage) {

        Session session = sessionFactory.openSession();
        session.beginTransaction();
        User testUser = new User(name,uId,"http://test.com",pw,iconImage);
        Criteria criteria = session.createCriteria(Request.class).add(Restrictions.eq("rId", "333"));
        Request editRequest = (Request) criteria.uniqueResult();
        if(editRequest != null) {
            editRequest.setProduct("Chocolate ice !!");
            session.update(editRequest);
        }
        session.getTransaction().commit();
        session.close();

        //testUser.token.add(getInstance().createToken(testUser.uId));
        //testUser.token.add(getInstance().createToken(testUser.uId));

        return testUser;
    }

    public static User getUserById(String uId) {
        //与えられたuIdのUser情報を返す
        User editUser;
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        List userResult = session.createQuery("from User").list();
        for ( hibernateTest.entities.User user : (List<hibernateTest.entities.User>) userResult){
            editUser = user;
            if (editUser.getuId().equals(uId)){
                return editUser;
            }
        }
        session.getTransaction().commit();
        session.close();

        //testUser.token.add(getInstance().createToken(testUser.uId));
        //testUser.token.add(getInstance().createToken(testUser.uId));

        return null;
    }

    public static User getUserByToken(String token) {
        //与えられたTokenに紐づくUser情報を返す
        User testUser = new User("test",  getInstance().createUId(), "http://test.com", "testpw", "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, "222");
        if(deleteRequest != null){
            session.delete(deleteRequest);
        }
        session.getTransaction().commit();
        session.close();

        return DeleteResult.SUCCESS;
    }

    public static Token login(String uId) {
        //Token testtoken = new Token(getInstance().createToken(uId));
        //tokenを作成後値を返す
        //return testtoken;//testToken
        return null;
    }

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