package com.adaptrex.core.view.tapestry.components;
import javax.servlet.http.HttpServletRequest;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.RequestGlobals;
import com.adaptrex.core.view.StoreComponent;
public class Store {
@Inject private RequestGlobals requestGlobals;
@Parameter @Property private String ns;
@Parameter @Property private String namespace;
@Parameter @Property private String factory;
@Parameter @Property private String table;
@Parameter @Property private String name;
@Parameter @Property private Object clearonpageload;
@Parameter @Property private Object clearremovedonload;
@Parameter @Property private Object autosync;
@Parameter @Property private Object autoload;
@Parameter @Property private Object remotegroup;
@Parameter @Property private Object remotesort;
@Parameter @Property private Object remotefilter;
@Parameter @Property private Object sortonfilter;
@Parameter @Property private String buffered;
@Parameter @Property private Object inline;
@Parameter @Property private String where;
@Parameter @Property private String param;
@Parameter @Property private String filter;
@Parameter @Property private String group;
@Parameter @Property private String sort;
@Parameter @Property private Integer start;
@Parameter @Property private Integer pagesize;
@Parameter @Property private Object rest;
@Parameter @Property private String include;
@Parameter @Property private String exclude;
@Parameter @Property private String associations;
public String getBody() {
HttpServletRequest request = requestGlobals.getHTTPServletRequest();
if (ns == null) ns = namespace;
StoreComponent storeComponent = new StoreComponent(request, table, factory);
if (ns != null) storeComponent.setNamespace(ns);
if (name != null) storeComponent.setModelName(name);
if (include != null) storeComponent.setInclude(include);
if (exclude != null) storeComponent.setExclude(exclude);
if (associations != null) storeComponent.setAssociations(associations);
if (where != null) storeComponent.setWhere(where);
if (pagesize != null)
storeComponent.setPageSize(getInteger(pagesize));
if (start != null)
storeComponent.setStart(getInteger(start));
if (rest != null)
storeComponent.setRest(String.valueOf(rest));
if (clearonpageload != null)
storeComponent.setClearOnPageLoad(getBoolean(clearonpageload));
if (clearremovedonload != null)
storeComponent.setClearRemovedOnLoad(getBoolean(clearremovedonload));
if (autosync != null)
storeComponent.setAutoSync(getBoolean(autosync));
if (autoload != null)
storeComponent.setAutoLoad(getBoolean(autoload));
if (remotegroup != null)
storeComponent.setRemoteGroup(getBoolean(remotegroup));
if (remotesort != null)
storeComponent.setRemoteSort(getBoolean(remotesort));
if (remotefilter != null)
storeComponent.setRemoteFilter(getBoolean(remotefilter));
if (sortonfilter != null)
storeComponent.setSortOnFilter(getBoolean(sortonfilter));
if (inline != null)
storeComponent.setInline(getBoolean(inline));
if (buffered != null && !buffered.contains("false")) {
storeComponent.setBuffered(true);
if (!buffered.equals("true")) {
String[] parts = buffered.split(":");
storeComponent.setTrailingBufferZone(Integer.valueOf(parts[0]));
if (parts.length > 0) {
storeComponent.setLeadingBufferZone(Integer.valueOf(parts[1]));
}
if (parts.length > 1) {
storeComponent.setPurgePageCount(Integer.valueOf(parts[2]));
}
}
}
if (param != null) {
for (String p : param.split(",")) {
String[] parts = p.split("=");
storeComponent.addParam(parts[0], parts[1]);
}
}
if (filter != null) {
for (String p : filter.split(",")) {
String[] parts = p.split("=");
storeComponent.addFilter(parts[0], parts[1]);
}
}
if (group != null) {
for (String groupItem : group.split(",")) {
String[] parts = groupItem.split(":");
String property = parts[0];
String direction = parts.length > 1 ? parts[1] : null;
String root = parts.length > 2 ? parts[2] : null;
storeComponent.addGrouper(property, direction, root);
}
}
if (sort != null) {
for (String sortItem : sort.split(",")) {
String[] parts = sortItem.split(":");
String property = parts[0];
String direction = parts.length > 1 ? parts[1] : "ASC";
String root = parts.length > 2 ? parts[2] : null;
storeComponent.addSorter(property, direction, root);
}
}
return storeComponent.toString();
}
private Boolean getBoolean(Object param) {
if (param.getClass().equals(String.class)) {
param = Boolean.valueOf(String.valueOf(param));
}
return (Boolean) param;
}
private Integer getInteger(Object param) {
if (param.getClass().equals(String.class)) {
param = Integer.valueOf(String.valueOf(param));
}
return (Integer) param;
}
}