package dials.datastore;
import com.hazelcast.core.MapStore;
import dials.model.FeatureModel;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import java.util.*;
public class DialsMapStore implements MapStore<String, FeatureModel> {
private static EntityManagerHelper entityManagerHelper;
@Override
public void store(String key, FeatureModel value) {
entityManagerHelper.getEntityManager().getTransaction().begin();
entityManagerHelper.getEntityManager().merge(value);
entityManagerHelper.getEntityManager().getTransaction().commit();
}
@Override
public void storeAll(Map<String, FeatureModel> map) {
entityManagerHelper.getEntityManager().getTransaction().begin();
for (FeatureModel feature : map.values()) {
entityManagerHelper.getEntityManager().merge(feature);
}
entityManagerHelper.getEntityManager().getTransaction().commit();
}
@Override
public void delete(String key) {
entityManagerHelper.getEntityManager().getTransaction().begin();
Query query = entityManagerHelper.getEntityManager()
.createQuery("delete from FeatureModel where featureName = :featureName")
.setParameter("featureName", key);
query.executeUpdate();
entityManagerHelper.getEntityManager().getTransaction().commit();
}
@Override
public void deleteAll(Collection<String> keys) {
entityManagerHelper.getEntityManager().getTransaction().begin();
Query query = entityManagerHelper.getEntityManager()
.createQuery("delete from FeatureModel");
query.executeUpdate();
entityManagerHelper.getEntityManager().getTransaction().commit();
}
@Override
public FeatureModel load(String key) {
TypedQuery<FeatureModel> query =
entityManagerHelper.getEntityManager()
.createQuery("from FeatureModel where feature_name = :featureName", FeatureModel.class)
.setParameter("featureName", key)
.setMaxResults(1);
try {
return query.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@Override
public Map<String, FeatureModel> loadAll(Collection<String> keys) {
Map<String, FeatureModel> models = new HashMap<>();
TypedQuery<FeatureModel> query = entityManagerHelper.getEntityManager()
.createQuery("from FeatureModel", FeatureModel.class);
for (FeatureModel feature : query.getResultList()) {
models.put(feature.getFeatureName(), feature);
}
return models;
}
@Override
public Set<String> loadAllKeys() {
Set<String> keys = new HashSet<>();
TypedQuery<String> query = entityManagerHelper.getEntityManager()
.createQuery("select featureName from FeatureModel", String.class);
keys.addAll(query.getResultList());
return keys;
}
public static void setEntityManagerHelper(EntityManagerHelper helper) {
entityManagerHelper = helper;
}
}