Java拆离Lotus Notes Document的附件

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;
		}
	}

}


 

相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页