/*
* Copyright (c) 2017 OBiBa. All rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.obiba.magma.datasource.hibernate.converter;
import org.hibernate.criterion.Restrictions;
import org.obiba.magma.VariableEntity;
import org.obiba.magma.datasource.hibernate.domain.VariableEntityState;
import org.obiba.magma.support.VariableEntityBean;
public class VariableEntityConverter implements HibernateConverter<VariableEntityState, VariableEntity> {
//
// HibernateConverter Methods
//
@Override
public VariableEntityState marshal(VariableEntity variableEntity, HibernateMarshallingContext context) {
if(variableEntity == null) throw new IllegalArgumentException("variableEntity cannot be null");
if(context == null) throw new IllegalArgumentException("context cannot be null");
VariableEntityState variableEntityState = (VariableEntityState) context.getSessionFactory().getCurrentSession()
.createCriteria(VariableEntityState.class).add(Restrictions.eq("identifier", variableEntity.getIdentifier()))
.add(Restrictions.eq("type", variableEntity.getType())).uniqueResult();
if(variableEntityState == null) {
variableEntityState = new VariableEntityState(variableEntity.getIdentifier(), variableEntity.getType());
context.getSessionFactory().getCurrentSession().save(variableEntityState);
context.getSessionFactory().getCurrentSession().refresh(variableEntityState); //OPAL-2635
}
return variableEntityState;
}
@Override
public VariableEntity unmarshal(VariableEntityState variableEntityState, HibernateMarshallingContext context) {
return new VariableEntityBean(variableEntityState.getType(), variableEntityState.getIdentifier());
}
}