package com.salesmanager.core.business.repositories.content;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.salesmanager.core.model.content.Content;
import com.salesmanager.core.model.content.ContentDescription;
import com.salesmanager.core.model.content.ContentType;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
public class ContentRepositoryImpl implements ContentRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Override
public List<ContentDescription> listNameByType(List<ContentType> contentType, MerchantStore store, Language language) {
StringBuilder qs = new StringBuilder();
qs.append("select c from Content c ");
qs.append("left join fetch c.descriptions cd join fetch c.merchantStore cm ");
qs.append("where c.contentType in (:ct) ");
qs.append("and cm.id =:cm ");
qs.append("and cd.language.id =:cl ");
qs.append("order by c.sortOrder");
String hql = qs.toString();
Query q = this.em.createQuery(hql);
q.setParameter("ct", contentType);
q.setParameter("cm", store.getId());
q.setParameter("cl", language.getId());
@SuppressWarnings("unchecked")
List<Content> contents = q.getResultList();
List<ContentDescription> descriptions = new ArrayList<ContentDescription>();
for(Content c : contents) {
String name = c.getDescription().getName();
String url = c.getDescription().getSeUrl();
ContentDescription contentDescription = new ContentDescription();
contentDescription.setName(name);
contentDescription.setSeUrl(url);
descriptions.add(contentDescription);
}
return descriptions;
}
@Override
public ContentDescription getBySeUrl(MerchantStore store,String seUrl) {
StringBuilder qs = new StringBuilder();
qs.append("select c from Content c ");
qs.append("left join fetch c.descriptions cd join fetch c.merchantStore cm ");
qs.append("where c.contentType in (:ct) ");
qs.append("where cm.id =:cm ");
qs.append("and cd.seUrl =:se ");
String hql = qs.toString();
Query q = this.em.createQuery(hql);
q.setParameter("cm", store.getId());
q.setParameter("se", seUrl);
Content content = (Content)q.getSingleResult();
if(content!=null) {
return content.getDescription();
}
@SuppressWarnings("unchecked")
List<Content> results = q.getResultList();
if (results.isEmpty()) {
return null;
} else if (results.size() >= 1) {
content = results.get(0);
}
if(content!=null) {
return content.getDescription();
}
return null;
}
}