📄 folderlist.java
字号:
package fengyun.Fastmail.beans;
import java.io.*;
import javax.mail.*;
import java.util.Vector;
import java.sql.ResultSet;
import fengyun.Fastmail.Maildir.*;
import java.sql.SQLException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
/**
* 邮件夹列表处理
* @author sanware & fengyun
* @version 1.01
*/
public class FolderList {
private static BeansConstants CONST = BeansConstants.getInstance();
/**
* 邮件夹列表
*/
public Vector lists = new Vector();
public int quotasize = 0;
/**
* 构造FolderList
* @param httpsession HttpSession
*/
public FolderList(HttpSession httpsession) throws MessagingException {
String userid = (String)httpsession.getAttribute(CONST.FastmailUserid);
String sql = "select folderindex,folderid,foldername,type from folderlist where userid = ? order by folderindex";
String quotasql = "select quota from mailbox where userid = ?";
try {
Mysql mysql = (Mysql) httpsession.getAttribute(CONST.FastmailMysql);
mysql.prepareStatement(sql);
mysql.setString(1,userid);
ResultSet RS = mysql.executeQuery();
if (RS.next()) {
do {
FolderSummary fs = new FolderSummary(RS.getInt(1),RS.getString(2),RS.getString(3),RS.getInt(4));
lists.addElement(fs);
}
while(RS.next());
}
mysql.prepareStatement(quotasql);
mysql.setString(1,userid);
RS = mysql.executeQuery();
if (RS.next()) {
quotasize = RS.getInt(1) * 1024;
}
else {
quotasize = 3 * 1024 * 1024;
}
mysql.close();
mysql = null;
RS.close();
RS = null;
httpsession.removeAttribute(CONST.FastmailMysql);
}
catch(Exception e) {
throw new MessagingException("SQL ERROR:" + e.getMessage());
}
}
/**
* 返回邮件夹的上一级邮件夹
* @param summary 邮件夹摘要
* @return FolderSummay 上一级邮件夹
*/
public FolderSummary getParent(FolderSummary summary) {
int index = summary.getParentIndex();
for(int i = 0; i < lists.size(); i++) {
if (((FolderSummary)lists.get(i)).getIndex() == index) return (FolderSummary)lists.get(i);
}
return null;
}
/**
* 返回子邮件夹
* @param summary 邮件夹摘要
* @return FolderSummary[] 邮件夹摘要集
*/
public FolderSummary[] getChildren(FolderSummary summary) {
Vector vSummary = new Vector();
for(int i = 0; i < lists.size(); i++) {
if (summary.isChild((FolderSummary)lists.get(i))) {
vSummary.addElement(lists.get(i));
}
}
if (vSummary.size() > 0) {
FolderSummary[] fs = new FolderSummary[vSummary.size()];
vSummary.toArray(fs);
return fs;
}
else {
vSummary = null;
return null;
}
}
/**
* 返回某一级上的所有邮件夹
* @param level 级
* @return FolderSummary[] 邮件夹摘要集
*/
public FolderSummary[] getFolderSummarys(int level) {
Vector vSummary = new Vector();
for(int i = 0; i < lists.size(); i++) {
if (((FolderSummary)lists.get(i)).getLevel() == level) {
vSummary.addElement(lists.get(i));
}
}
if (vSummary.size() > 0) {
FolderSummary[] fs = new FolderSummary[vSummary.size()];
vSummary.toArray(fs);
return fs;
}
else {
vSummary = null;
return null;
}
}
/**
* 新建邮件夹
* @param parent 上一级邮件夹的摘要
* @param foldername 邮件夹名称
*/
public static int addFolder(HttpServletRequest request) {
String foldername = request.getParameter(CONST.foldername);
String strParentIndex = request.getParameter(CONST.folderid);
HttpSession httpsession = request.getSession(false);
if (foldername == null || strParentIndex == null || "".equals(foldername) || "".equals(strParentIndex) || httpsession == null)
return CONST.HTTPREQUEST_ERROR;
FolderView folderview = (FolderView)httpsession.getAttribute(CONST.FastmailFolderView);
if (folderview == null) return CONST.HTTPREQUEST_ERROR;
FolderList folderlist = folderview.folderlist;
int parentindex = Integer.parseInt(strParentIndex);
int folderindex = 0;
int type = 0;
String folderid = null;
if (parentindex < CONST.revbox) { //根目录
int tmp = CONST.revbox;
for(int i = 5; i < 10; i++) {
if (folderlist.getFolderid(i * tmp) == null) {
folderindex = i * tmp;
folderid = String.valueOf(folderindex);
break;
}
}
}
else {
FolderSummary parent = folderlist.getFolderSummary(parentindex);
if (parent == null) return CONST.HTTPREQUEST_ERROR;
int level = parent.getLevel();
if (level >= CONST.maxlevel) return CONST.CANTCREATEFOLD;
level = CONST.maxlevel - level;
if (level == 1) type = 1;
int tmp = 1;
for(int i = 1; i < level; i++) {
tmp *= 10;
}
for(int i = 1; i < 10; i++) {
if (folderlist.getFolderid(parentindex + i * tmp) == null) {
folderindex = parentindex + i * tmp;
folderid = parent.getName() + File.separator + String.valueOf(folderindex);
break;
}
}
}
if (folderindex == 0) return CONST.CANTCREATEFOLD;
//创建邮件夹
String userid = (String)httpsession.getAttribute(CONST.FastmailUserid);
MaildirStore store = (MaildirStore)httpsession.getAttribute(CONST.FastmailStore);
if (userid == null || store == null) return CONST.HTTPSESSION_ERROR;
if (!store.makeFolder(folderid)) return CONST.CANTCREATEFOLD;
/* String sql = "insert into folderlist (userid,folderindex,folderid,foldername,type) values ('"
+ userid + "','" + folderindex + "','" + folderid
+ "','" + foldername + "',"+ type + ")";*/
String sql = "insert into folderlist (userid,folderindex,folderid,foldername,type) values (?,?,?,?,?)";
try {
Mysql mysql = new Mysql(sql);
mysql.setString(1,userid);
mysql.setInt(2,folderindex);
mysql.setString(3,folderid);
mysql.setString(4,foldername);
mysql.setInt(5,type);
mysql.executeUpdate();
mysql.close();
mysql = null;
}
catch(Exception e) {
return CONST.SQL_ERROR;
}
FolderSummary fs = new FolderSummary(folderindex,folderid,foldername,type);
int index = folderlist.lists.size();
for(int i = 0; i < index; i++) {
FolderSummary tmpFS = (FolderSummary)folderlist.lists.get(i);
if (tmpFS.getIndex() > folderindex) {
index = i;
break;
}
}
folderlist.lists.insertElementAt(fs,index);
try {
MaildirFolder mf = (MaildirFolder)store.getFolder(fs.getName());
if (!mf.isOpen()) mf.open(0);
MaildirFolderSummary mfs = mf.getSummary();
folderview.views.put(new Integer(fs.getIndex()),mfs);
}
catch(Exception e) {
e.printStackTrace();
}
return CONST.OK;
}
/**
* 删除文件夹
* @param request HttpServletRequest
*/
public static int deleteFolder(HttpServletRequest request) {
String strFolderIndex = request.getParameter(CONST.folderid);
HttpSession httpsession = request.getSession(false);
if (httpsession == null) return CONST.HTTPREQUEST_ERROR;
int FolderIndex = Integer.parseInt(strFolderIndex);
if (FolderIndex % CONST.revbox == 0 && (FolderIndex <= CONST.dsbbox))
return CONST.CANTDELETEFOLD;
String userid = (String)httpsession.getAttribute(CONST.FastmailUserid);
FolderView folderview = (FolderView)httpsession.getAttribute(CONST.FastmailFolderView);
MaildirStore store = (MaildirStore)httpsession.getAttribute(CONST.FastmailStore);
if (userid == null || folderview == null || store == null) return CONST.HTTPREQUEST_ERROR;
FolderList folderlist = folderview.folderlist;
FolderSummary fs = folderlist.getFolderSummary(FolderIndex);
if (fs == null) return CONST.FOLDERID_ERROR;
if (!store.deleteFolder(fs.getName())) return CONST.CANTDELETEFOLD;
String sql = "delete from folderlist where userid = ? and folderindex = ?";
try {
Mysql mysql = new Mysql(sql);
mysql.setString(1,userid);
mysql.setInt(2,FolderIndex);
mysql.executeUpdate();
mysql.close();
mysql = null;
}
catch(Exception e) {
return CONST.SQL_ERROR;
}
folderlist.lists.removeElement(fs);
return CONST.OK;
}
/**
* 邮件夹是否有子邮件夹
* @return 是否有子邮件夹
*/
public boolean hasChild(FolderSummary summary) {
return (getChildren(summary) !=null);
}
/**
* 根据名称返回索引
* @param folderid 邮件夹名称
* @return int 索引
*/
public int getIndex(String folderid) {
for(int i = 0;i < lists.size();i++) {
FolderSummary fs = (FolderSummary) lists.get(i);
if (folderid.equals(fs.getName())) {
return fs.getIndex();
}
}
return -1;
}
/**
* 根据索引返回名称
* @param index 邮件夹索引
* @return String 邮件夹名称
*/
public String getFolderid(int index) {
for(int i = 0;i < lists.size();i++) {
FolderSummary fs = (FolderSummary) lists.get(i);
if (fs.getIndex() == index) {
return fs.getName();
}
}
return null;
}
/**
* 根据索引返回摘要
* @param index 索引
* @return FolderSummary 邮件夹摘要
*/
public FolderSummary getFolderSummary(int index) {
for(int i = 0;i < lists.size();i++) {
FolderSummary fs = (FolderSummary) lists.get(i);
if (fs.getIndex() == index) {
return fs;
}
}
return null;
}
/**
* 根据索引返回邮件夹所在级
*/
public int getLevel(int index) {
for(int i = 0;i < lists.size();i++) {
FolderSummary fs = (FolderSummary) lists.get(i);
if (fs.getIndex() == index) {
return fs.getLevel();
}
}
return 0;
}
/**
* 根据索引返回显示名称
* @param index 索引
* @return String 显示名称
*/
public String getViewName(int index) {
for(int i = 0;i < lists.size();i++) {
FolderSummary fs = (FolderSummary) lists.get(i);
if (fs.getIndex() == index) {
return fs.getViewName();
}
}
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -