package com.hongqiang.shop.common.template;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import com.hongqiang.shop.common.utils.Filter;
import com.hongqiang.shop.common.utils.FreeMarkers;
import com.hongqiang.shop.common.utils.Order;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
public abstract class BaseDirective implements TemplateDirectiveModel {
private static final String USE_CACHE = "useCache";
private static final String CACHE_REGION = "cacheRegion";
private static final String ID = "id";
//由页面设定多少个,然后调用findpage或者findlist得到个数为count的结果集,返回给前端
private static final String COUNT = "count";
private static final String ORDER_BY = "orderBy";
private static final String ASTERISK = "\\s*,\\s*";
private static final String ADDITION = "\\s+";
protected boolean setFreemarker(Environment paramEnvironment,
Map<String, TemplateModel> paramMap) throws TemplateModelException {
Boolean localBoolean = FreeMarkers.getParameter(USE_CACHE,
Boolean.class, paramMap);
return localBoolean != null ? localBoolean.booleanValue() : true;
}
protected String getFreemarkerCacheRegion(Environment paramEnvironment,
Map<String, TemplateModel> paramMap) throws TemplateModelException {
String str = FreeMarkers.getParameter(CACHE_REGION,
String.class, paramMap);
return str != null ? str : paramEnvironment.getTemplate().getName();
}
protected Long getFreemarkerLong(Map<String, TemplateModel> paramMap)
throws TemplateModelException {
return FreeMarkers.getParameter(ID, Long.class, paramMap);
}
protected Integer getFreemarkerCount(Map<String, TemplateModel> paramMap)
throws TemplateModelException {
return FreeMarkers.getParameter(COUNT, Integer.class,
paramMap);
}
protected List<Filter> getFreemarkerFilter(
Map<String, TemplateModel> paramMap, Class<?> paramClass,
String[] paramArrayOfString) throws TemplateModelException {
ArrayList<Filter> localArrayList = new ArrayList<Filter>();
PropertyDescriptor[] arrayOfPropertyDescriptor1 = PropertyUtils
.getPropertyDescriptors(paramClass);
for (PropertyDescriptor localPropertyDescriptor : arrayOfPropertyDescriptor1) {
String str = localPropertyDescriptor.getName();
Class<?> localClass = localPropertyDescriptor.getPropertyType();
if ((ArrayUtils.contains(paramArrayOfString, str))
|| (!paramMap.containsKey(str)))
continue;
Object localObject = FreeMarkers.getParameter(str, localClass,
paramMap);
localArrayList.add(Filter.eq(str, localObject));
}
return localArrayList;
}
protected List<Order> getFreemarkerOrder(
Map<String, TemplateModel> paramMap, String[] paramArrayOfString) throws TemplateModelException {
String str1 = StringUtils.trim(FreeMarkers.getParameter(
ORDER_BY, String.class, paramMap));
ArrayList<Order> localArrayList = new ArrayList<Order>();
if (StringUtils.isNotEmpty(str1)) {
String[] arrayOfString1 = str1.split(ASTERISK);
for (String str2 : arrayOfString1) {
if (!StringUtils.isNotEmpty(str2))
continue;
Object localObject = null;
Order.Direction localDirection = null;
String[] arrayOfString3 = str2.split(ADDITION);
if (arrayOfString3.length == 1) {
localObject = arrayOfString3[0];
} else {
if (arrayOfString3.length < 2)
continue;
localObject = arrayOfString3[0];
try {
localDirection = Order.Direction
.valueOf(arrayOfString3[1]);
} catch (IllegalArgumentException localIllegalArgumentException) {
continue;
}
}
if (ArrayUtils.contains(paramArrayOfString, localObject))
continue;
localArrayList.add(new Order((String)localObject, localDirection));
}
}
return localArrayList;
}
protected void setFreemarker(String paramString, Object paramObject,
Environment paramEnvironment,
TemplateDirectiveBody paramTemplateDirectiveBody)
throws TemplateException, IOException {
TemplateModel localTemplateModel = FreeMarkers.getVariable(paramString,
paramEnvironment);
FreeMarkers.setVariable(paramString, paramObject, paramEnvironment);
paramTemplateDirectiveBody.render(paramEnvironment.getOut());
FreeMarkers.setVariable(paramString, localTemplateModel,
paramEnvironment);
}
protected void setFreemarker(Map<String, Object> paramMap,
Environment paramEnvironment,
TemplateDirectiveBody paramTemplateDirectiveBody)
throws TemplateException, IOException {
HashMap<String, Object> localHashMap = new HashMap<String, Object>();
Iterator<String> localIterator = paramMap.keySet().iterator();
while (localIterator.hasNext()) {
String str = localIterator.next();
TemplateModel localTemplateModel = FreeMarkers.getVariable(str,
paramEnvironment);
localHashMap.put(str, localTemplateModel);
}
FreeMarkers.setVariables(paramMap, paramEnvironment);
paramTemplateDirectiveBody.render(paramEnvironment.getOut());
FreeMarkers.setVariables(localHashMap, paramEnvironment);
}
}