package pl.zgora.uz.wmie.fe.ajax.table.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.Type;
import pl.zgora.uz.wmie.fe.service.PracownikService;
import pl.zgora.uz.wmie.fe.service.StanowiskoService;
import pl.zgora.uz.wmie.fe.dto.DataResult;
import pl.zgora.uz.wmie.fe.hbm.classes.Pracownik;
import pl.zgora.uz.wmie.fe.hbm.classes.Stanowisko;
import pl.zgora.uz.wmie.fe.util.BusinessUtil;
import pl.zgora.uz.wmie.fe.util.MessageUtil;
import pl.zgora.uz.wmie.fe.util.ValidatorUtil;
public class StanowskaTableAjaxAction {
/**
* Wartosc mowiaca o ilosci wierszy dla tabelki np.10 wierszy na raz w
* tablce(stronnicowanie)
*/
private final static int ROW_AMOUNT = 10;
public DataResult tableAjax(Map<String, String> filters,
String[] projections, String columnOrder, String columnOrderDir,
int startIndex) throws Exception{
StanowiskoService stanowiskoService = null;
List<Order> orders = null;
// stala czesc sluzaca sortowaniu
if (columnOrder.compareTo("null") != 0) {
orders = new ArrayList<Order>();
if (columnOrderDir.compareTo("desc") == 0) {
orders.add(Order.desc(columnOrder));
} else {
orders.add(Order.asc(columnOrder));
}
}
try {
stanowiskoService = (StanowiskoService) BusinessUtil
.findBusiness("StanowiskoService");
ProjectionList projectionList = Projections.projectionList();
for (int i = 0; i < projections.length; i++) {
projectionList.add(Projections.property(projections[i]));
}
List<Criterion> criterions = new ArrayList<Criterion>();
if (filters.size() > 0) {
if (!ValidatorUtil.isBlankOrNull(filters
.get(Stanowisko.PROPERTY_ID))) {
criterions.add(Restrictions.eq(Stanowisko.PROPERTY_ID,
Integer.parseInt(filters
.get(Stanowisko.PROPERTY_ID))));
}
if (!ValidatorUtil.isBlankOrNull(filters
.get(Stanowisko.PROPERTY_NAZWA))) {
criterions.add(Restrictions.like(Stanowisko.PROPERTY_NAZWA,
filters.get(Stanowisko.PROPERTY_NAZWA),
MatchMode.START));
}
if (!ValidatorUtil.isBlankOrNull(filters
.get(Stanowisko.PROPERTY_OBJECT_PPRACOWNIKS + "."
+ Pracownik.PROPERTY_ID))) {
criterions.add(Restrictions.eq(
Stanowisko.PROPERTY_OBJECT_PPRACOWNIKS + "."
+ Pracownik.PROPERTY_ID,
Integer.valueOf(filters
.get(Stanowisko.PROPERTY_OBJECT_PPRACOWNIKS
+ "." + Pracownik.PROPERTY_ID))));
}
}
DataResult dane = null;
startIndex = (startIndex - 1) * ROW_AMOUNT;
if (orders != null) {
dane = stanowiskoService.findByParams(projectionList,
criterions, orders, startIndex, ROW_AMOUNT);
} else {
dane = stanowiskoService.findByParams(projectionList,
criterions, startIndex, ROW_AMOUNT);
}
dane.setRowsPerPage(ROW_AMOUNT);
return dane;
} catch (Exception e) {
e.printStackTrace();
//pobranie req przy Ajaxie DWR
WebContext ctx = WebContextFactory.get();
HttpServletRequest req = ctx.getHttpServletRequest();
throw new Exception(MessageUtil.getMessage("stanowiska.table.exception", req.getLocale()));
}
}
}