import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.EmbeddedObject;
import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.RichTextItem;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.cso.Item;
public class AutoExtract extends NotesThread {
static Logger logger = Logger.getLogger(AutoExtract.class);
public static void main(String argv[]) {
AutoExtract t = new AutoExtract();
try {
t.start();
} catch (Exception e) {
logger.error(e.getMessage());
} finally {
t.termThread();
}
}
public void runNotes() {
Document doc = null;
Document tmpdoc = null;
Database db = null;
View view = null;
StringBuilder sb = new StringBuilder();
Database localdb = null;
Document tempdoc = null;
try {
PropertyConfigurator.configure("log4j.properties");
String filepath = "conf.properties";
Properties pro = new Properties();
FileInputStream fin = new FileInputStream(filepath);
pro.load(fin);
String ip = pro.get("ip").toString();
String notesid = pro.get("notesid").toString();
String password = pro.get("password").toString();
String port = pro.get("port").toString();
String dbname = pro.get("dbname").toString();
String localpath = pro.get("localpath").toString();
String backmail = pro.get("backmail").toString();
String localdatabase = pro.get("localdb").toString();
String localpwd = pro.get("localpwd").toString();
String mailswitch = pro.get("mailswitch").toString();
Session s = NotesFactory.createSession((String) null,
(String) null, localpwd);
logger.debug(s.getPlatform());
logger.debug(s.getUserName());
localdb = s.getDatabase("", localdatabase);
logger.debug(localdb.getFilePath());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
logger.debug("Start at: " + sdf.format(new Date()));
logger.debug("ip : " + ip);
logger.debug("notesid : " + notesid);
logger.debug("password :" + password);
logger.debug("port : " + port);
logger.debug("dbname : " + dbname);
logger.debug("localpath : " + localpath);
logger.debug("backmail : " + backmail);
logger.debug("mailswitch : " + mailswitch);
File file = new File(localpath);
if (!file.exists() && !file.isDirectory()) {
logger.debug("Directory not exist, mkdir!");
file.mkdir();
}
db = getConnection(ip, port, notesid, password, dbname);
logger.debug(db.getTitle());
if (db == null) {
logger.error("db is null,return!");
return;
}
view = db.getView("($Inbox)");
logger.debug(view.getEntryCount());
doc = view.getFirstDocument();
while (doc != null) {
tmpdoc = view.getNextDocument(doc);
try {
logger.debug("开始处理:" + doc.getItemValueString("Subject"));
tempdoc = localdb.createDocument();
tempdoc.createRichTextItem("Body");
Vector<?> items = doc.getItems();
for (int j = 0; j < items.size(); j++) {
Item item = (Item) items.elementAt(j);
tempdoc.replaceItemValue(item.getName(), item
.getValueString());
}
RichTextItem rt = null;
if (tempdoc.hasItem("Body")) {
rt = (RichTextItem) tempdoc.getFirstItem("Body");
logger.debug("包含Body域");
} else {
rt = tempdoc.createRichTextItem("Body");
logger.debug("创建Body域");
}
RichTextItem body = (RichTextItem) doc.getFirstItem("Body");
if (body != null) {
Vector<?> v = body.getEmbeddedObjects();
if (v != null) {
logger.debug("附件个数: " + v.size());
Enumeration<?> e = v.elements();
while (e.hasMoreElements()) {
EmbeddedObject eo = (EmbeddedObject) e
.nextElement();
if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) {
eo.extractFile(file.getPath()
+ File.separator + eo.getSource());
logger.debug("执行拆离: " + eo.getSource());
rt.embedObject(
EmbeddedObject.EMBED_ATTACHMENT,
null, file.getPath()
+ File.separator
+ eo.getSource(), eo
.getSource());
logger.debug("执行附加操作");
}
}
} else {
logger.debug("v is null!");
}
} else {
logger.debug("body is null!");
}
logger.debug("执行保存操作");
tempdoc.save();
tempdoc.putInFolder("($Inbox)");
if ("1".equals(mailswitch)) {
sb.delete(0, sb.length());
sb.append("IPA ");
sb.append(sdf.format(new Date()));
sb.append(doc.getItemValueString("Subject"));
doc.replaceItemValue("Subject", sb.toString());
doc.replaceItemValue("SendTo", backmail);
doc.replaceItemValue("CopyTo", "");
doc.replaceItemValue("BlindCopyTo", "");
doc.send();
logger.debug("执行发送操作");
}
doc.remove(true);
logger.debug("执行删除操作");
} catch (Exception innere) {
System.out.println(innere.getMessage());
logger.debug(innere.getMessage());
}
doc.recycle();
tempdoc.recycle();
doc = tmpdoc;
}
logger.debug("Finished at: " + sdf.format(new Date()));
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getStackTrace());
} finally {
try {
if (db != null) {
db.recycle();
}
if (doc != null) {
doc.recycle();
}
if (tmpdoc != null) {
tmpdoc.recycle();
}
if (view != null) {
view.recycle();
}
} catch (NotesException e) {
// TODO Auto-generated catch block
logger.error(e.getStackTrace());
}
}
}
public static Database getConnection(String ip, String port,
String notesID, String password, String dbname)
throws NotesException {
Database db;
String host = ip + ":" + port;
Session s = NotesFactory.createSession(host, notesID, password);
db = s.getDatabase("", dbname);
if (!db.isOpen()) {
logger.error("Error occured in getConnection, " + dbname
+ "does not exist!");
return null;
} else {
logger.debug("title of " + dbname + " is " + db.getTitle());
return db;
}
}
}