InquiryService.java
package sk.iway.iwcm.components.inquirySimple;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.database.JpaDB;
import sk.iway.iwcm.system.jpa.JpaTools;
import sk.iway.iwcm.utils.Pair;
@SuppressWarnings("rawtypes")
@RestController
public class InquiryService {
@RequestMapping(path="/rest/inquirySimple/saveAnswer/", method={RequestMethod.POST})
public Object saveAnswer(@RequestBody InquiryAnswerTransferBean answer, HttpServletRequest request)
{
String userId = getUserId(request);
Object result = saveAnswer(answer.getFormId(), userId, answer.getAnswers());
if(result == null)
{
Map<String, String> result2 = new HashMap<>();
result2.put("error", "V tejto ankete si uz hlasoval");
return result2;
}
return result;
}
public Map<String, InquiryResultBean> saveAnswer(String formId, String userId, List<String> answers)
{
if(canSaveAnswer(formId, userId))
{
for(String item : answers)
{
InquiryAnswerBean newItem = new InquiryAnswerBean();
newItem.setFormId(formId);
newItem.setUserId(userId);
newItem.setQuestionId(item);
newItem.save();
}
return getResultsForForm(formId);
}
return null;
}
protected List getResults(EntityManager em, String formId)
{
Query q = em.createQuery("select i.questionId,count(i.id) as cnt from InquiryAnswerBean i where i.formId = :formId group by i.questionId");
q.setParameter("formId", formId);
return q.getResultList();
}
protected Long getTotalCount(EntityManager em, String formId)
{
Query q = em.createQuery("select count(i.id) as cnt from InquiryAnswerBean i where i.formId = :formId group by i.formId");
q.setParameter("formId", formId);
List result = q.getResultList();
if(result != null && result.size() > 0)
{
return (Long)result.get(0);
}
return 0L;
}
public Map<String, InquiryResultBean> getResultsForForm(String formId)
{
Map<String, InquiryResultBean> valueToReturn = new HashMap<>();
EntityManager em = JpaTools.getEclipseLinkEntityManager();
List result = getResults(em, formId);
Long count = getTotalCount(em, formId);
if(result != null)
{
for(int i = 0; i < result.size(); i++)
{
Object[] o = (Object[])result.get(i);
InquiryResultBean ir = new InquiryResultBean();
ir.setCount((Long)o[1]);
double p = Math.round((count > 0 ? (Long)o[1] / (double)count * 100 : 0) * 100) / 100;
ir.setPercent(p);
valueToReturn.put((String)o[0], ir);
}
}
return valueToReturn;
}
public String getUserId(HttpServletRequest request)
{
Cookie[] cookies = request.getCookies();
try
{
return Tools.getCookieValue(cookies, "JSESSIONID", null);
}
catch(Exception e)
{
return null;
}
}
@SuppressWarnings("unchecked")
public boolean canSaveAnswer(String formId, String userId)
{
if(userId == null)
{
return false;
}
InquiryAnswerBean item = new JpaDB<InquiryAnswerBean>(InquiryAnswerBean.class).findFirstByProperties(new Pair("formId", formId), new Pair("userId", userId));
return item == null;
}
}