From 6ea1561f76116ba874b60f1bb512606f46b8e88e Mon Sep 17 00:00:00 2001 From: Bojnourdi Date: Tue, 18 Aug 2015 11:42:01 +0200 Subject: [PATCH] Improving the management of the locks for studies Code cleanup --- .../src/java/com/edf/gde/dao/StudyDao.java | 3 +++ .../com/edf/gde/dao/impl/StudyDaoImpl.java | 8 ++++++ .../java/com/edf/gde/dao/lock/LockStatus.java | 27 +++++++++++++++++++ .../src/java/com/edf/gde/ejb/StudyEJB.java | 24 ++++++++++++++--- .../src/java/com/edf/gde/entities/Study.java | 12 ++++++++- .../edf/gde/services/AttributesService.java | 1 + .../com/edf/gde/services/ProfilesService.java | 1 + .../com/edf/gde/services/StudyService.java | 5 ++-- .../com/edf/gde/services/UserService.java | 1 + 9 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/lock/LockStatus.java diff --git a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/StudyDao.java b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/StudyDao.java index d51bf4c..385cf56 100644 --- a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/StudyDao.java +++ b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/StudyDao.java @@ -3,6 +3,7 @@ */ package com.edf.gde.dao; +import com.edf.gde.dao.lock.LockStatus; import com.edf.gde.transferables.StudyTO; import java.util.Date; @@ -30,4 +31,6 @@ public interface StudyDao { StudyTO updateStudy(StudyTO sto); + LockStatus getLockStatus(long studyId); + } diff --git a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/impl/StudyDaoImpl.java b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/impl/StudyDaoImpl.java index 6321042..f8df6d9 100644 --- a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/impl/StudyDaoImpl.java +++ b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/impl/StudyDaoImpl.java @@ -4,6 +4,7 @@ package com.edf.gde.dao.impl; import com.edf.gde.dao.StudyDao; +import com.edf.gde.dao.lock.LockStatus; import com.edf.gde.entities.Study; import com.edf.gde.transferables.StudyTO; import java.util.Date; @@ -85,4 +86,11 @@ public class StudyDaoImpl implements StudyDao { return findBy("Study.findByDeletionDate", "deletionDate", deletionDate); } + @Override + public LockStatus getLockStatus(long studyId) { + Study study = em.find(Study.class, studyId); + LockStatus lockStatus = new LockStatus(study.isLocked(), study.getLockOwner()); + return lockStatus; + } + } diff --git a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/lock/LockStatus.java b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/lock/LockStatus.java new file mode 100644 index 0000000..63829e3 --- /dev/null +++ b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/dao/lock/LockStatus.java @@ -0,0 +1,27 @@ +/* + * (C) 2015 EDF + */ +package com.edf.gde.dao.lock; + +/** + * + * @author Kavoos + */ +public class LockStatus { + private final boolean locked; + private final long userId; + + public LockStatus(boolean locked, long userId) { + this.locked = locked; + this.userId = userId; + } + + public boolean isLocked() { + return locked; + } + + public long getUserId() { + return userId; + } + +} diff --git a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/ejb/StudyEJB.java b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/ejb/StudyEJB.java index 1215792..7044817 100644 --- a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/ejb/StudyEJB.java +++ b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/ejb/StudyEJB.java @@ -5,6 +5,7 @@ package com.edf.gde.ejb; import com.edf.gde.dao.StudyDao; import com.edf.gde.dao.impl.StudyDaoImpl; +import com.edf.gde.dao.lock.LockStatus; import com.edf.gde.transferables.StudyTO; import java.util.Date; import javax.ejb.Stateless; @@ -23,18 +24,29 @@ public class StudyEJB { @PersistenceContext(unitName = "GDE-ejbPU") private EntityManager em; - public StudyTO createStudy(StudyTO sto) { + public StudyTO createStudy(long userId, StudyTO sto) { StudyDao dao = new StudyDaoImpl(em); + sto.setLockOwner(userId); return dao.createStudy(sto); } public void deleteStudy(long studyId) { StudyDao dao = new StudyDaoImpl(em); + LockStatus lockStatus = dao.getLockStatus(studyId); + if (lockStatus.isLocked()) { + throw new RuntimeException("Study is locked"); + } dao.deleteStudy(studyId); } - public StudyTO updateStudy(StudyTO sto) { + public StudyTO updateStudy(long userId, StudyTO sto) { StudyDao dao = new StudyDaoImpl(em); + LockStatus lockStatus = dao.getLockStatus(sto.getId()); + if (lockStatus.isLocked()) { + if (lockStatus.getUserId() != userId) { + throw new RuntimeException("Study is locked"); + } + } return dao.updateStudy(sto); } @@ -68,8 +80,14 @@ public class StudyEJB { return dao.findByDeletionDate(deletionDate); } - public void setStudyState(long studyId, boolean state) { + public void setStudyState(long userId, long studyId, boolean state) { StudyDaoImpl dao = new StudyDaoImpl(em); + LockStatus lockStatus = dao.getLockStatus(studyId); + if (lockStatus.isLocked()) { + if (lockStatus.getUserId() != userId) { + throw new RuntimeException("Study is locked"); + } + } dao.findById(studyId).setLocked(state); } } diff --git a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/entities/Study.java b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/entities/Study.java index bfe0078..07cfd8f 100644 --- a/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/entities/Study.java +++ b/projects/GDE_App/GDE-ejb/src/java/com/edf/gde/entities/Study.java @@ -70,7 +70,7 @@ public class Study implements Serializable { @Column(name ="locked") private boolean locked; @Column(name ="lock_owner") - private long lockOwner; + private Long lockOwner; public Study() { } @@ -159,6 +159,14 @@ public class Study implements Serializable { this.locked = locked; } + public long getLockOwner() { + return lockOwner; + } + + public void setLockOwner(long lockOwner) { + this.lockOwner = lockOwner; + } + public static Study fromStudyTO(StudyTO sto) { Study s = new Study(); s.creationDate = sto.getCreationDate(); @@ -171,6 +179,7 @@ public class Study implements Serializable { s.valid = sto.getValid(); s.profileId = sto.getProfileId()==0?null:sto.getProfileId(); s.locked = sto.isLocked(); + s.lockOwner= sto.getLockOwner()==0?null:sto.getLockOwner(); return s; } @@ -186,6 +195,7 @@ public class Study implements Serializable { sto.setValid(this.valid); sto.setProfileId(this.profileId==null?0:this.profileId); sto.setLocked(this.locked); + sto.setLockOwner(this.lockOwner==null?0:this.lockOwner); return sto; } diff --git a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/AttributesService.java b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/AttributesService.java index 05d47a8..cb8a16c 100644 --- a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/AttributesService.java +++ b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/AttributesService.java @@ -94,6 +94,7 @@ public class AttributesService extends BaseService { } catch (RuntimeException ex) { // Return error on any error... resultTO.setCode(CommandResultTO.ERROR); + resultTO.setMsg(ex.getMessage()); ex.printStackTrace(); } finally { send(resultTO, response); diff --git a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/ProfilesService.java b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/ProfilesService.java index e0ead90..09d1d0e 100644 --- a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/ProfilesService.java +++ b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/ProfilesService.java @@ -86,6 +86,7 @@ public class ProfilesService extends BaseService { } catch (RuntimeException ex) { // Return error on any error... resultTO.setCode(CommandResultTO.ERROR); + resultTO.setMsg(ex.getMessage()); ex.printStackTrace(); } finally { send(resultTO, response); diff --git a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/StudyService.java b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/StudyService.java index 4f53707..4f4a9bd 100644 --- a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/StudyService.java +++ b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/StudyService.java @@ -45,7 +45,7 @@ public class StudyService extends BaseService { switch (commandTO.getMethod()) { case CREATESTUDY: { StudyTO studyTO = fromJson(commandTO.getData(), StudyTO.class); - StudyTO newStudyTO = studyEjb.createStudy(studyTO); + StudyTO newStudyTO = studyEjb.createStudy(userEjb.findUser(credentials.getLogin()).getId(),studyTO); resultTO.setData(toJson(newStudyTO)); } break; @@ -53,7 +53,7 @@ public class StudyService extends BaseService { long studyId = commandTO.getLong("studyId"); int lock = commandTO.getInt("lock"); boolean status = (lock == 1); - studyEjb.setStudyState(studyId, status); + studyEjb.setStudyState(userEjb.findUser(credentials.getLogin()).getId(),studyId, status); } break; case READSTUDY: { @@ -71,6 +71,7 @@ public class StudyService extends BaseService { } catch (Exception ex) { // Return error on any error... resultTO.setCode(CommandResultTO.ERROR); + resultTO.setMsg(ex.getMessage()); ex.printStackTrace(); } finally { send(resultTO, response); diff --git a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/UserService.java b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/UserService.java index f8d93d3..bbc28a2 100644 --- a/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/UserService.java +++ b/projects/GDE_App/GDE-war/src/java/com/edf/gde/services/UserService.java @@ -101,6 +101,7 @@ public class UserService extends BaseService { } catch (RuntimeException ex) { // Return error on any error... resultTO.setCode(CommandResultTO.ERROR); + resultTO.setMsg(ex.getMessage()); ex.printStackTrace(); } finally { send(resultTO, response); -- 2.39.2