All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.wicp.tams.component.tools.TapestryAssist Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
package net.wicp.tams.component.tools;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.tapestry5.Asset;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.commons.Configuration;
import org.apache.tapestry5.commons.MappedConfiguration;
import org.apache.tapestry5.commons.Messages;
import org.apache.tapestry5.commons.services.CoercionTuple;
import org.apache.tapestry5.commons.util.StringToEnumCoercion;
import org.apache.tapestry5.http.services.Request;
import org.apache.tapestry5.http.services.RequestGlobals;
import org.apache.tapestry5.http.services.Response;
import org.apache.tapestry5.json.JSONArray;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.AssetSource;
import org.apache.tapestry5.util.TextStreamResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import lombok.extern.slf4j.Slf4j;
import net.wicp.tams.common.Result;
import net.wicp.tams.common.apiext.CollectionUtil;
import net.wicp.tams.common.apiext.IOUtil;
import net.wicp.tams.common.apiext.StringUtil;
import net.wicp.tams.common.apiext.json.EasyUiAssist;
import net.wicp.tams.common.apiext.json.JSONUtil;
import net.wicp.tams.common.callback.IConvertValue;
import net.wicp.tams.common.constant.ContentType;

@Slf4j
public abstract class TapestryAssist {
	public static final String[][] specialChar_value = new String[][] { { "\"", "\\\\\"" } };
	private static Logger logger = LoggerFactory.getLogger(TapestryAssist.class);

	/*****
	 * 返回TextStreamResponse
	 *
	 * @param opt
	 * @return
	 */
	public static TextStreamResponse getTextStreamResponse(Result opt) {
		return getTextStreamResponse(opt.retJsonObj().toJSONString());
	}

	/*****
	 * 返回TextStreamResponse
	 *
	 * @param jsonStr json格式的字符串
	 * @return
	 */
	public static TextStreamResponse getTextStreamResponse(String jsonStr) {
		return new TextStreamResponse("text/html", jsonStr);
	}

	/*****
	 * 返回一个空的streamResponse
	 *
	 * @return
	 */
	public static TextStreamResponse getTextStreamResponseEmpty() {
		return new TextStreamResponse("text/html", EasyUiAssist.getJsonForGridEmpty());
	}

	/***
	 * 得到本地文件的流
	 * 
	 * @param rootDir
	 * @param filePath
	 * @return
	 */
	public static StreamResponse getFileStreamResponse(String rootDir, final String filePath) {
		int indexOf = filePath.lastIndexOf(".");
		String suffix = filePath.substring(indexOf);
		return new StreamResponse() {
			public String getContentType() {
				return ContentType.findSuffix(suffix).getValue();
			}
			public InputStream getStream() {
				try {
					String filePathTrue = IOUtil.mergeFolderAndFilePath(rootDir, filePath);
					FileInputStream inputStream = new FileInputStream(new File(filePathTrue));
					return inputStream;
				} catch (FileNotFoundException e) {
					log.error("下载文件失败", e);
					return null;
				}
			}

			public void prepareResponse(Response response) {
				int lastIndexOf = filePath.lastIndexOf("/");
				String filename = filePath.substring(lastIndexOf+1);
				response.setHeader("Content-Disposition", "attachment; filename="+filename);
			}
		};
	}

	/***
	 * 把tapestry的路径转为系统文件的路径,如果不存在相关文件就会抛出异常
	 *
	 * @param assetSource
	 * @param tPath
	 * @return
	 */
	public static String getResPathByTPath(AssetSource assetSource, String tPath) {
		if (assetSource == null || StringUtil.isNull(tPath)) {
			return "";
		}
		Asset asset = assetSource.getExpandedAsset(tPath);
		return asset.getResource().toURL().toString().replace("file:/", "");
	}

	/****
	 * 把JSONArray转成List,页按"index"域排序
	 *
	 * @param arry
	 * @param comp 比较对象
	 * @return
	 */
	public static List getJSONObjectList(JSONArray arry, CompartorJson comp) {
		List retObjList = new ArrayList();
		if (arry == null || arry.length() == 0) {
			return retObjList;
		}
		for (int i = 0; i < arry.length(); i++) {
			JSONObject eleObject = arry.getJSONObject(i);
			retObjList.add(eleObject);
		}
		if (comp != null) {
			Collections.sort(retObjList, comp);
		}
		return retObjList;
	}

	public static List getJSONObjectList(JSONArray arry) {
		return getJSONObjectList(arry, null);
	}

	/****
	 * 通过key得到国际化信息
	 *
	 * @param messages
	 * @param key
	 * @param param
	 * @return
	 */
	public static String LK(Messages messages, String key, Object... param) {
		if (StringUtil.isNull(key) || !messages.contains(key)) {
			return String.format(messages.get("common.hint.needI18n"), key); // 提示缺少国际化
		}
		return String.format(messages.get(key), param);
	}

	/****
	 * 得到请求的参数,如果是数组则对象是JSONArray,否则是String
	 *
	 * @param request
	 * @return
	 */
	public static JSONObject packParams(Request request, boolean convert) {
		JSONObject retobj = new JSONObject();
		if (request == null) {
			return retobj;
		}
		List keys = request.getParameterNames();
		if (CollectionUtils.isNotEmpty(keys)) {
			for (String key : keys) {
				if (key.endsWith("[]")) {
					String[] objs = request.getParameters(key);
					if (ArrayUtils.isNotEmpty(objs)) {
						JSONArray ary = new JSONArray();
						for (int i = 0; i < objs.length; i++) {
							ary.put(convert ? JSONUtil.convertJsonValue(StringUtil.trimSpace(objs[i]))
									: StringUtil.trimSpace(objs[i]));
						}
						retobj.put(key.replace("[]", ""), ary);
					}
				} else {
					String str = ArrayUtils.isNotEmpty(request.getParameters(key))
							? CollectionUtil.arrayJoin(request.getParameters(key), ",")
							: request.getParameter(key);// 存在如:下拉多选值,奇怪的是:修改前如果选择了一项,request.getParameter(key)不为空,如果修改前没有选择项则为空?
					retobj.put(key, convert ? JSONUtil.convertJsonValue(StringUtil.trimSpace(str))
							: StringUtil.trimSpace(request.getParameter(key)));// 去除前后空格,复制粘贴失误
				}
			}
		}
		return retobj;
	}

	/****
	 * 得到参数的值,如果是数组则只取第一个元素
	 *
	 * @param params
	 * @param name
	 * @return
	 */
	public static String getParam(JSONObject params, String name) {
		if (!params.has(name)) {
			return null;
		}
		Object obj = params.opt(name);
		if (obj == null) {
			return null;
		}
		if (obj instanceof JSONArray) {
			JSONArray temp = (JSONArray) obj;
			return temp.getString(0);
		} else {
			return String.valueOf(obj);
		}
	}

	/***
	 * 得到参数的多值,如果只有一个元素只返回一个元素的JSONArray
	 *
	 * @param params
	 * @param name
	 * @return
	 */
	public static JSONArray getParams(JSONObject params, String name) {
		if (!params.has(name)) {
			return null;
		}
		Object obj = params.opt(name);
		if (obj == null) {
			return null;
		}
		if (obj instanceof JSONArray) {
			JSONArray temp = (JSONArray) obj;
			return temp;
		} else {
			JSONArray temp = new JSONArray(obj);
			return temp;
		}
	}

	public static JSONObject buildSelGroupInit(List allObj, List selIds, String[] aliasTitles,
			Map> convertsMap) {
		JSONObject ret = new JSONObject();
		if (CollectionUtils.isEmpty(allObj)) {
			ret.put("data", new JSONArray());
			ret.put("sel", new JSONArray());
			return ret;
		}
		String dataStr = JSONUtil.getJsonForListAlias(allObj, aliasTitles, convertsMap);
		JSONArray dataary = new JSONArray(dataStr);
		ret.put("data", dataary);
		JSONArray selId = new JSONArray();
		if (CollectionUtils.isNotEmpty(selIds)) {
			for (Object ele : selIds) {// 请用Object,因为有可能是整形传过来
				boolean include = false;
				for (int i = 0; i < dataary.size(); i++) {
					JSONObject obj = dataary.getJSONObject(i);
					if (obj.getString("id").equals(String.valueOf(ele))) {
						include = true;
						break;
					}
				}
				if (include) {
					selId.add(String.valueOf(ele));
				}
			}
		}
		ret.put("sel", selId);
		return ret;
	}

	/***
	 * 把数据转成SelGroup可以识别的数据
	 *
	 * @param allObj
	 * @param selIds
	 * @return
	 */
	public static JSONObject buildSelGroupInit(List allObj, List selIds) {
		return buildSelGroupInit(allObj, selIds, null, null);
	}

	/****
	 * 把请求字段封装到Bean中
	 *
	 * @param clazz
	 * @param request
	 * @param convert 是否转为满足json格式的字符器
	 * @return
	 */
	public static  T getBeanFromPage(Class clazz, Request request, boolean convert) {
		JSONObject packParams = packParams(request, convert);
		return getBeanFromPage(clazz, packParams);
	}

	public static  T getBeanFromPage(Class clazz, Request request) {
		return getBeanFromPage(clazz, request, true);
	}

	public static  T getBeanFromPage(Class clazz, JSONObject packParams) {
		try {
			T retobj = clazz.newInstance();
			if (packParams.length() == 0) {
				return retobj;
			}
			for (String key : packParams.keys()) {
				StringUtil.packObj(retobj, key, packParams.getString(key));
			}
			return retobj;
		} catch (Exception e) {
			throw new IllegalAccessError("request转为业务对象时异常" + e.getMessage());
		}
	}

	public static  T getBeanFromPage(Class clazz, RequestGlobals requestGlob) {
		return getBeanFromPage(clazz, requestGlob.getRequest());
	}

	/****
	 * 把请求封装为一个Map
	 * 
	 * @param request
	 * @return
	 */
	public static Map getParameterMap(Request request) {
		List names = request.getParameterNames();
		Map paramsMap = new HashMap();
		StringBuilder sb = new StringBuilder();
		for (String name : names) {
			Object[] values = request.getParameters(name);
			if (values != null) {
				String key = name.replaceAll("\\[\\]", "");
				if (values.length == 1) {
					paramsMap.put(key, values[0]);
				} else {
					paramsMap.put(key, values);
				}
				String v = Arrays.asList(values).toString();
				sb.append("key = ").append(key).append(" , value = ").append(v).append("\r\n");
			}
		}
		logger.debug("The parameters:\r\n" + sb.toString());
		return paramsMap;
	}

	/***
	 * 添加枚举类的转换器,5.6使用
	 * 
	 * @param configuration
	 * @param enumType
	 */
	@SuppressWarnings("rawtypes")
	public static  void addEnumCoercion(Configuration configuration, Class enumType) {
		configuration.add(CoercionTuple.create(String.class, enumType, StringToEnumCoercion.create(enumType)));
	}

	/***
	 * 添加枚举类的转换器,5.7使用
	 * 
	 * @param 
	 * @param configuration
	 * @param enumType
	 */
	@SuppressWarnings("rawtypes")
	public static  void addEnumCoercion(
			MappedConfiguration configuration, Class enumType) {
		CoercionTuple tuple = CoercionTuple.create(String.class, enumType, StringToEnumCoercion.create(enumType));
		configuration.add(tuple.getKey(), tuple);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy