Skip to content
Snippets Groups Projects
Commit d27e56df authored by anttil's avatar anttil
Browse files

BIS-51 / SP-96: Do authorization of deletion/reassignment of Experiment -> Project links separately

SVN: 25576
parent 9d3fe4b7
No related branches found
No related tags found
No related merge requests found
...@@ -16,13 +16,10 @@ ...@@ -16,13 +16,10 @@
package ch.systemsx.cisd.openbis.generic.server; package ch.systemsx.cisd.openbis.generic.server;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.DAOFactory;
import ch.systemsx.cisd.openbis.generic.shared.IRelationshipService; import ch.systemsx.cisd.openbis.generic.shared.IRelationshipService;
import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession; import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession;
import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
...@@ -39,15 +36,23 @@ public class RelationshipService implements IRelationshipService ...@@ -39,15 +36,23 @@ public class RelationshipService implements IRelationshipService
private static final String ERR_PROJECT_NOT_FOUND = private static final String ERR_PROJECT_NOT_FOUND =
"No project for experiment '%s' could be found in the database."; "No project for experiment '%s' could be found in the database.";
private org.hibernate.SessionFactory sessionFactory; private DAOFactory daoFactory;
@Override @Override
public void reassignProject(IAuthSession session, ProjectIdentifier projectId, public void reassignProject(IAuthSession session, ProjectIdentifier projectId,
ExperimentIdentifier experimentId) ExperimentIdentifier experimentId)
{ {
ProjectPE previousProject =
findProject(new ProjectIdentifier(experimentId.getDatabaseInstanceCode(),
experimentId.getSpaceCode(), experimentId.getProjectCode()));
ProjectPE project = findProject(projectId); ProjectPE project = findProject(projectId);
ExperimentPE experiment = findExperiment(experimentId);
ProjectPE previousProject = experiment.getProject(); ExperimentPE experiment =
daoFactory.getExperimentDAO().tryFindByCodeAndProject(previousProject,
experimentId.getExperimentCode());
if (project.equals(previousProject)) if (project.equals(previousProject))
{ {
return; return;
...@@ -60,33 +65,21 @@ public class RelationshipService implements IRelationshipService ...@@ -60,33 +65,21 @@ public class RelationshipService implements IRelationshipService
experiment.setProject(project); experiment.setProject(project);
} }
private ProjectPE findProject(ProjectIdentifier id) private ProjectPE findProject(ProjectIdentifier projectId)
{ {
ProjectPE project =
daoFactory.getProjectDAO().tryFindProject(projectId.getDatabaseInstanceCode(),
projectId.getSpaceCode(), projectId.getProjectCode());
final Criteria criteria =
this.sessionFactory.getCurrentSession().createCriteria(ProjectPE.class);
criteria.add(Restrictions.eq("code", CodeConverter.tryToDatabase(id.getProjectCode())));
final Criteria spaceCriteria = criteria.createCriteria("space");
spaceCriteria.add(Restrictions.eq("code", CodeConverter.tryToDatabase(id.getSpaceCode())));
ProjectPE project = (ProjectPE) criteria.uniqueResult();
if (project == null) if (project == null)
{ {
throw UserFailureException.fromTemplate(ERR_PROJECT_NOT_FOUND, id); throw UserFailureException.fromTemplate(ERR_PROJECT_NOT_FOUND, projectId);
} }
return project; return project;
} }
private ExperimentPE findExperiment(ExperimentIdentifier id) public void setDaoFactory(DAOFactory daoFactory)
{
final Criteria criteria =
this.sessionFactory.getCurrentSession().createCriteria(ExperimentPE.class);
criteria.add(Restrictions.eq("code", CodeConverter.tryToDatabase(id.getExperimentCode())));
return (ExperimentPE) criteria.uniqueResult();
}
public void setSessionFactory(org.hibernate.SessionFactory sessionFactory)
{ {
this.sessionFactory = sessionFactory; this.daoFactory = daoFactory;
} }
} }
...@@ -422,11 +422,14 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper ...@@ -422,11 +422,14 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper
} }
updateProperties(updates.getProperties()); updateProperties(updates.getProperties());
if (updates.getProjectIdentifier().getProjectCode().equals( ProjectPE project = findProject(updates.getProjectIdentifier());
experiment.getProject().getCode()) == false) ProjectPE previousProject = experiment.getProject();
if (project.equals(previousProject) == false)
{ {
relationshipService.reassignProject(session, updates.getProjectIdentifier(), relationshipService.reassignProject(session, updates.getProjectIdentifier(),
new ExperimentIdentifier(updates.getProjectIdentifier(), experiment new ExperimentIdentifier(new ProjectIdentifier(previousProject.getSpace()
.getDatabaseInstance().getCode(), previousProject.getSpace().getCode(),
previousProject.getCode()), experiment
.getCode())); .getCode()));
} }
......
...@@ -249,9 +249,15 @@ public final class ExperimentTable extends AbstractBusinessObject implements IEx ...@@ -249,9 +249,15 @@ public final class ExperimentTable extends AbstractBusinessObject implements IEx
if (updates.isProjectUpdateRequested()) if (updates.isProjectUpdateRequested())
{ {
ProjectPE previousProject = experiment.getProject();
ProjectIdentifier previousProjectId =
new ProjectIdentifier(previousProject.getSpace().getDatabaseInstance()
.getCode(), previousProject.getSpace().getCode(), previousProject
.getCode());
relationshipService relationshipService
.reassignProject(session, updates.getProjectIdentifier(), .reassignProject(session, updates.getProjectIdentifier(),
new ExperimentIdentifier(updates.getProjectIdentifier(), experiment new ExperimentIdentifier(previousProjectId, experiment
.getCode())); .getCode()));
} }
} }
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<bean id="relationship-service" <bean id="relationship-service"
class="ch.systemsx.cisd.openbis.generic.server.RelationshipService"> class="ch.systemsx.cisd.openbis.generic.server.RelationshipService">
<property name="sessionFactory" ref="hibernate-session-factory" /> <property name="daoFactory" ref="dao-factory" />
</bean> </bean>
<bean id="sql-script-provider" class="ch.systemsx.cisd.dbmigration.DBMigrationEngine" <bean id="sql-script-provider" class="ch.systemsx.cisd.dbmigration.DBMigrationEngine"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment