/* * Copyright (c) 2001-2013 newgxu.cn <the original author or authors>. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package cn.newgxu.ng.api; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import cn.newgxu.bbs.domain.Forum; import cn.newgxu.bbs.domain.Honor; import cn.newgxu.bbs.domain.Reply; import cn.newgxu.bbs.domain.Topic; import cn.newgxu.bbs.domain.user.User; /** * * @author longkai * @email im.longkai@gmail.com * @since 2013-5-23 * @version 0.1 */ public class R { public static final String ID = "_ID"; public static final String DOMAIN = "http://bbs.newgxu.cn"; // public static final String DOMAIN = "http://192.168.3.4"; public static final class topic { public static final int LATEST_TOPICS = 0; public static final int REFRESH = 1; public static final int FETCH_MORE = 2; public static final int FORUM_LATEST_TOPICS = 3; public static final int FORUM_REFRESH = 4; public static final int FORUM_FETCH_MORE = 5; public static final int CLASSICS = -1; public static final String TITLE = "title"; public static final String ADDED_TIME = "added_time"; public static final String CLICK_TIMES = "click_times"; public static final String AUTHOR_NICK = "author_nick"; public static final String REPLIED_TIMES = "replied_times"; public static final String LAST_REPLIED_TIME = "last_replied_time"; public static final String LAST_REPLIED_USER_NICK = "last_replied_user_nick"; public static final String CONTENT = "content"; public static final String FORUM = "forum"; } public static final class user { public static final String USERNAME = "username"; public static final String NICK = "nick"; public static final String TITLE = "title"; public static final String PORTRAIT = "portrait"; public static final String DESC = "desc"; public static final String LOGIN_TIMES = "login_times"; public static final String LAST_LOGIN_TIME = "last_login_time"; public static final String SEX = "sex"; public static final String BIRTHDAY = "birthday"; public static final String EMAIL = "email"; public static final String HOMEPAGE = "homepage"; public static final String QQ = "qq"; public static final String PHONE = "phone"; public static final String CURRENT_POWER = "current_power"; public static final String MAX_POWER = "max_power"; public static final String TOPICS_COUNT = "topics_count"; public static final String REPLIES_COUNT = "replies_count"; public static final String FANTASTIC_COUNT = "FANTASTIC_COUNT"; public static final String EXPERIENCE = "experience"; public static final String XDB = "xdb"; public static final String REGISTER_TIME = "register_time"; public static final String HONORS = "honors"; } public static final class reply { public static final int LATEST = 0; public static final String TID = "tid"; public static final String POST_UID = "post_uid"; public static final String POST_USER_NICK = "post_user_nick"; public static final String POST_USER_PORTRAIT = "post_user_portrait"; public static final String TOPIC_TITLE = "topic_title"; public static final String POST_TIME = "post_time"; public static final String CONTENT = "content"; } public static final class forum { public static final String NAME = "name"; public static final String ABOUT = "about"; public static final String MONEY_PER_TOPIC = "money_per_topic"; public static final String MONEY_PER_REPLY = "money_per_reply"; public static final String EXP_PER_TOPIC = "exp_per_topic"; public static final String EXP_PER_REPLY = "exp_per_reply"; public static final String TOTAL_TOPICS_COUNT = "total_topics_count"; public static final String FANTASY_COUNT = "fantasy_count"; public static final String HOT = "hot"; public static final String MASTERS = "masters"; } public static final Map<String, Object> resolveReply2Map(Reply r) { Map<String, Object> m = new HashMap<String, Object>(); m.put(ID, r.getId()); m.put(reply.TID, r.getTopic().getId()); m.put(reply.POST_UID, r.getPostUser().getId()); m.put(reply.POST_USER_NICK, r.getPostUser().getNick()); m.put(reply.POST_USER_PORTRAIT, resolveFaceFromHtml(r.getPostUser() .getFace())); m.put(reply.POST_TIME, r.getPostTime().getTime()); m.put(reply.TOPIC_TITLE, r.getTopic().getTitle()); m.put(reply.CONTENT, bringBackDomain2Content(r.getContentFilter())); return m; } public static final Map<String, Object> resolveUser2Map(User u) { Map<String, Object> m = new HashMap<String, Object>(); m.put(ID, u.getId()); m.put(user.USERNAME, u.getUsername()); m.put(user.NICK, u.getNick()); m.put(user.TITLE, u.getTitle()); m.put(user.PORTRAIT, resolveFaceFromHtml(u.getFace())); m.put(user.DESC, u.getIdiograph()); m.put(user.LOGIN_TIMES, u.getLoginTimes()); m.put(user.LAST_LOGIN_TIME, u.getLastLoginTime().getTime()); m.put(user.SEX, u.isSex()); m.put(user.BIRTHDAY, u.getBirthday().getTime()); m.put(user.EMAIL, u.getEmail()); m.put(user.HOMEPAGE, u.getHomepage()); m.put(user.QQ, u.getQq()); m.put(user.PHONE, u.getTel()); m.put(user.CURRENT_POWER, u.getCurrentPower()); m.put(user.MAX_POWER, u.getMaxPower()); m.put(user.TOPICS_COUNT, u.getNumberOfTopic()); m.put(user.REPLIES_COUNT, u.getNumberOfReply()); m.put(user.FANTASTIC_COUNT, u.getNumberOfGood()); m.put(user.EXPERIENCE, u.getExp()); m.put(user.XDB, u.getMoney()); m.put(user.REGISTER_TIME, u.getRegisterTime().getTime()); List<Honor> honors = u.getHonors(); String str = ""; for (Honor h : honors) { str += h.getName() + "\n"; } m.put(user.HONORS, str); return m; } public static final Map<String, Object> resolveTopic2Map(Topic t) { Map<String, Object> map = new HashMap<String, Object>(); map.put(R.topic.ADDED_TIME, t.getCreationTime().getTime()); map.put(R.topic.AUTHOR_NICK, t.getUser().getNick()); map.put(R.topic.CLICK_TIMES, t.getClickTimes()); map.put(R.ID, t.getId()); map.put(R.topic.LAST_REPLIED_TIME, t.getReplyTime().getTime()); map.put(R.topic.LAST_REPLIED_USER_NICK, t.getReplyUser().getNick()); map.put(R.topic.REPLIED_TIMES, t.getReplyTimes()); map.put(R.topic.TITLE, t.getTitle()); return map; } public static final String IMAGE_PATTERN = "src=(.+)\\s"; private static Pattern pattern = Pattern .compile(IMAGE_PATTERN); private static Matcher matcher; public static final String resolveFaceFromHtml(String html) { // <img name=face src=/images/upload_files/2006-12-6/1.jpg border=1> if (html == null || html.length() < 1) { return null; } matcher = pattern.matcher(html); if (matcher.find()) { return DOMAIN + matcher.group(1); } else { return null; } } private static final Pattern p = Pattern .compile("(?i)src=/(.+?\\..{3,4})\\s"); private static Matcher m; /** 将html片段中的图片相对地址换成包含域名的绝对地址 */ public static final String bringBackDomain2Content(String content) { m = p.matcher(content); StringBuffer sb = new StringBuffer(); while (m.find()) { String src = m.group(1); System.out.println(src); m.appendReplacement(sb, "src='" + DOMAIN + "/" + src + "' "); } m.appendTail(sb); return sb.toString(); } public static final Map<String, Object> resolveForum2Map(Forum f) { Map<String, Object> m = new HashMap<String, Object>(); m.put(R.ID, f.getId()); m.put(forum.ABOUT, f.getDescription()); m.put(forum.EXP_PER_REPLY, f.getReplyExp()); m.put(forum.EXP_PER_TOPIC, f.getTopicExp()); m.put(forum.FANTASY_COUNT, f.getFantasyCount()); m.put(forum.MONEY_PER_REPLY, f.getReplyMoney()); m.put(forum.MONEY_PER_TOPIC, f.getTopicMoney()); m.put(forum.TOTAL_TOPICS_COUNT, f.getTopicsByForum()); m.put(forum.NAME, f.getName()); m.put(forum.HOT, f.isHot()); List<User> masters = f.getWebmasters(); String masterNames = ""; for (User u : masters) { masterNames += u.getNick() + " "; } m.put(forum.MASTERS, masterNames); return m; } }