📄 modelutils.java
字号:
/*
* LumaQQ - Java QQ Client
*
* Copyright (C) 2004 luma <stubma@163.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.tsinghua.lumaqq;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.swt.graphics.Image;
import edu.tsinghua.lumaqq.models.ClusterModel;
import edu.tsinghua.lumaqq.models.FriendModel;
import edu.tsinghua.lumaqq.models.GroupModel;
import edu.tsinghua.lumaqq.models.IQQNode;
import edu.tsinghua.lumaqq.models.MobileModel;
import edu.tsinghua.lumaqq.qq.Util;
import edu.tsinghua.lumaqq.qq.beans.ClusterInfo;
import edu.tsinghua.lumaqq.qq.beans.ContactInfo;
import edu.tsinghua.lumaqq.qq.beans.QQFriend;
import edu.tsinghua.lumaqq.utils.OptionUtil;
import edu.tsinghua.lumaqq.utils.RemarkUtil;
import edu.tsinghua.lumaqq.xml.faces.Faces;
import edu.tsinghua.lumaqq.xml.faces.FacesImpl;
import edu.tsinghua.lumaqq.xml.groups.Cluster;
import edu.tsinghua.lumaqq.xml.groups.ClusterImpl;
import edu.tsinghua.lumaqq.xml.groups.Friend;
import edu.tsinghua.lumaqq.xml.groups.FriendImpl;
import edu.tsinghua.lumaqq.xml.groups.Group;
import edu.tsinghua.lumaqq.xml.groups.GroupImpl;
import edu.tsinghua.lumaqq.xml.groups.Groups;
import edu.tsinghua.lumaqq.xml.groups.GroupsImpl;
import edu.tsinghua.lumaqq.xml.logins.Logins;
import edu.tsinghua.lumaqq.xml.logins.LoginsImpl;
import edu.tsinghua.lumaqq.xml.mobiles.Mobile;
import edu.tsinghua.lumaqq.xml.mobiles.Mobiles;
import edu.tsinghua.lumaqq.xml.mobiles.MobilesImpl;
import edu.tsinghua.lumaqq.xml.proxies.Proxies;
import edu.tsinghua.lumaqq.xml.proxies.ProxiesImpl;
import edu.tsinghua.lumaqq.xml.remarks.Remark;
import edu.tsinghua.lumaqq.xml.remarks.Remarks;
import edu.tsinghua.lumaqq.xml.remarks.RemarksImpl;
import edu.tsinghua.lumaqq.xml.replies.Replies;
import edu.tsinghua.lumaqq.xml.replies.RepliesImpl;
import edu.tsinghua.lumaqq.xml.sysopts.GUIOption;
import edu.tsinghua.lumaqq.xml.sysopts.GUIOptionImpl;
import edu.tsinghua.lumaqq.xml.sysopts.LoginOption;
import edu.tsinghua.lumaqq.xml.sysopts.LoginOptionImpl;
import edu.tsinghua.lumaqq.xml.sysopts.MessageOption;
import edu.tsinghua.lumaqq.xml.sysopts.MessageOptionImpl;
import edu.tsinghua.lumaqq.xml.sysopts.Options;
import edu.tsinghua.lumaqq.xml.sysopts.OptionsImpl;
import edu.tsinghua.lumaqq.xml.sysopts.OtherOption;
import edu.tsinghua.lumaqq.xml.sysopts.OtherOptionImpl;
import edu.tsinghua.lumaqq.xml.sysopts.SyncOption;
import edu.tsinghua.lumaqq.xml.sysopts.SyncOptionImpl;
import edu.tsinghua.swt.models.INode;
/**
* 这个类负责提供一些创建数据的方法,纯粹是为了免得个别的文件行数太多,
* 所以把这些集中操作底层数据的方法抽出来放在一个工具类里
*
* @author 马若劼
*/
public class ModelUtils {
// Log
private static Log log = LogFactory.getLog(ModelUtils.class);
/**
* 从QQFriend类创建一个contact info结构
* @param friend QQFriend
* @return ContactInfo
*/
public static ContactInfo createContact(QQFriend friend) {
ContactInfo ret = new ContactInfo();
ret.infos[ret.nick] = friend.nick;
ret.infos[ret.qqStr] = String.valueOf(friend.qqNum);
ret.infos[ret.age] = String.valueOf(friend.age);
if(friend.isGG())
ret.infos[ret.gender] = LumaQQ.getString("gender.gg");
else
ret.infos[ret.gender] = LumaQQ.getString("gender.mm");
return ret;
}
/**
* 从FriendModel创建一个ContactInfo
* @param f
* @return
*/
public static ContactInfo createContact(FriendModel f) {
ContactInfo ret = new ContactInfo();
ret.infos[ret.nick] = (String)f.getProperty(INode.NAME);
ret.infos[ret.qqStr] = ((Integer)f.getProperty(IQQNode.QQ_NUMBER)).toString();
ret.infos[ret.face] = ((Integer)f.getProperty(IQQNode.HEAD)).toString();
return ret;
}
/**
* 从Friend元素创建一个ContactInfo对象
* @param friend Friend元素对象
* @return ContactInfo
*/
public static ContactInfo createContact(Friend friend) {
ContactInfo ret = new ContactInfo();
ret.infos[ret.qqStr] = friend.getQqNum();
ret.infos[ret.nick] = friend.getNick();
ret.infos[ret.name] = friend.getName();
ret.infos[ret.age] = friend.getAge();
ret.infos[ret.face] = friend.getFace();
ret.infos[ret.gender] = friend.getGender();
ret.infos[ret.country] = friend.getCountry();
ret.infos[ret.province] = friend.getProvince();
ret.infos[ret.city] = friend.getCity();
ret.infos[ret.email] = friend.getEmail();
ret.infos[ret.address] = friend.getAddress();
ret.infos[ret.zipcode] = friend.getZipcode();
ret.infos[ret.telephone] = friend.getTelephone();
ret.infos[ret.mobile] = friend.getMobile();
ret.infos[ret.college] = friend.getCollege();
ret.infos[ret.occupation] = friend.getOccupation();
ret.infos[ret.homepage] = friend.getHomepage();
ret.infos[ret.intro] = friend.getIntro();
ret.infos[ret.horoscope] = friend.getHoroscope();
ret.infos[ret.zodiac] = friend.getZodiac();
ret.infos[ret.blood] = friend.getBlood();
ret.infos[ret.openContact] = friend.getOpenContact();
ret.infos[ret.openHp] = friend.getOpenHp();
ret.infos[ret.authType] = friend.getAuthType();
return ret;
}
/**
* 从XML元素中创建GroupModel
* @param group Group元素对象
* @return GroupModel
*/
public static GroupModel createGroupModel(Group group) {
GroupModel ret = new GroupModel(group.getName());
ret.addProperty(IQQNode.FRIENDLY, group.getFriendly());
ret.addProperty(IQQNode.BLACKLIST, group.getBlacklist());
ret.addProperty(IQQNode.VISIBLE, group.getVisible());
ret.addProperty(IQQNode.UPLOAD, group.getUpload());
ret.addProperty(IQQNode.CLUSTER, group.getIsCluster());
return ret;
}
/**
* 从Friend元素创建一个FriendModel
* @param friend Friend元素对象
* @return FriendModel
*/
public static FriendModel createFriendModel(Friend friend) {
// 得到头像ID,如果解析失败,使用缺省值0,加1是因为初始都是不在线状态
int faceId = Util.getInt(friend.getFace(), 0);
// 得到初始聊天窗口位置
int locationX = Util.getInt(friend.getLocationX(), -1);
int locationY = Util.getInt(friend.getLocationY(), -1);
// 得到头像,加1是因为一开始都要把好友置成离线状态
Image face = IconHolder.getInstance().getHead(faceId + 1);
// 创建FriendModel
FriendModel ret = new FriendModel(friend.getNick(), face);
// 设置其他属性
ret.addProperty(IQQNode.QQ_NUMBER, new Integer(friend.getQqNum()));
ret.addProperty(IQQNode.HEAD, new Integer(faceId));
ret.addProperty(IQQNode.NICK, friend.getNick());
ret.addProperty(IQQNode.MEMBER, friend.getMember());
ret.addProperty(IQQNode.STATUS, IQQNode.VALUE_OFFLINE);
ret.addProperty(IQQNode.CONTACT, createContact(friend));
ret.addProperty(IQQNode.TALK_MODE, friend.getTalkMode());
ret.addProperty(IQQNode.LOCATION_X, new Integer(locationX));
ret.addProperty(IQQNode.LOCATION_Y, new Integer(locationY));
if(!OptionUtil.getInstance().isShowNick()) {
Remark remark = RemarkUtil.getInstance().getRemark(friend.getQqNum());
if(remark != null)
ret.addProperty(IQQNode.NAME, remark.getName());
}
return ret;
}
/**
* 从一个Mobile元素对象创建一个MobileModel对象
*
* @param mobile
* Mobile元素对象
* @return
* MobileModel对象
*/
public static MobileModel createMobileModel(Mobile mobile) {
MobileModel mm = new MobileModel(mobile.getName(), mobile.getNumber());
return mm;
}
/**
* 从QQFriend类创建一个FriendModel
* @param friend
* @return
*/
public static FriendModel createFriendModel(QQFriend friend) {
// 得到头像,加1是因为一开始都要把好友置成离线状态
Image face = IconHolder.getInstance().getHead(friend.face + 1);
// 创建FriendModel
FriendModel ret = new FriendModel(friend.nick, face);
// 设置其他属性
ret.addProperty(IQQNode.QQ_NUMBER, new Integer(friend.qqNum));
ret.addProperty(IQQNode.HEAD, new Integer(friend.face));
ret.addProperty(IQQNode.NICK, friend.nick);
ret.addProperty(IQQNode.LOGIN_TIME, new Date(friend.loginTime).toString());
ret.addProperty(IQQNode.STATUS, IQQNode.VALUE_OFFLINE);
ret.addProperty(IQQNode.MEMBER, String.valueOf(friend.isMember()));
ret.addProperty(IQQNode.CONTACT, createContact(friend));
if(!OptionUtil.getInstance().isShowNick()) {
Remark remark = RemarkUtil.getInstance().getRemark(friend.qqNum);
if(remark != null)
ret.addProperty(IQQNode.NAME, remark.getName());
}
return ret;
}
/**
* 创建群的Model
* @param cluster
* @return
*/
public static ClusterModel createClusterModel(Cluster cluster) {
int faceId = Util.getInt(cluster.getFace(), 4);
// 得到头像
Image face = IconHolder.getInstance().getClusterHead(faceId);
// 创建FriendModel
ClusterModel ret = new ClusterModel(cluster.getClusterId(), cluster.getName(), face);
// 设置其他属性
ClusterInfo info = createClusterInfo(cluster);
ret.addProperty(IQQNode.HEAD, new Integer(faceId));
ret.addProperty(IQQNode.INFO, info);
ret.addProperty(IQQNode.TYPE, new Integer(info.type));
String s = cluster.getMessage();
if(s.equalsIgnoreCase(IQQNode.VALUE_EJECT))
ret.addProperty(IQQNode.MESSAGE, IQQNode.VALUE_EJECT);
else if(s.equalsIgnoreCase(IQQNode.VALUE_RECORD))
ret.addProperty(IQQNode.MESSAGE, IQQNode.VALUE_RECORD);
else if(s.equalsIgnoreCase(IQQNode.VALUE_BLOCK))
ret.addProperty(IQQNode.MESSAGE, IQQNode.VALUE_BLOCK);
else if(s.equalsIgnoreCase(IQQNode.VALUE_SHOW_NUMBER))
ret.addProperty(IQQNode.MESSAGE, IQQNode.VALUE_SHOW_NUMBER);
else
ret.addProperty(IQQNode.MESSAGE, IQQNode.VALUE_ACCEPT);
return ret;
}
/**
* 从Cluster创建一个ClusterInfo对象
* @param cluster Cluster对象
* @return 创建的ClusterInfo对象
*/
public static ClusterInfo createClusterInfo(Cluster cluster) {
ClusterInfo ret = new ClusterInfo();
try {
ret.name = cluster.getName();
ret.description = cluster.getDescription();
ret.notice = cluster.getNotice();
ret.clusterId = Integer.parseInt(cluster.getClusterId());
ret.externalId = Integer.parseInt(cluster.getExternalId());
ret.type = (byte)Integer.parseInt(cluster.getType());
ret.authType = (byte)Integer.parseInt(cluster.getAuthType());
ret.category = (char)Integer.parseInt(cluster.getCategory());
ret.creator = Integer.parseInt(cluster.getCreator());
} catch (NumberFormatException e) {
log.error(e.getMessage());
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -