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