Extract Lotus Notes database icon
Extract Lotus Notes database icon
- Create DatabaseIcon class as following
- Call DatabaseIcon.extract() method as following
Call DatabaseIcon.extract() method
String idfile = "";
String password = "";
String dbfile = "";
NotesThread.sinitThread();
Session s = NotesFactory.createSessionWithFullAccess();
s.createRegistration().switchToID(idfile, password);
Database d = s.getDatabase("", dbfile);
String filename = DatabaseIcon.extract(d);
logger.info(filename);
DatabaseIcon class
public static class DatabaseIcon {
public static String extract(Database d) {
String tag = null;
try {
NoteCollection nc = d.createNoteCollection(false);
nc.setSelectIcon(true);
nc.buildCollection();
String noteId = nc.getFirstNoteID();
int counter = 0;
while (noteId != null) {
counter++;
try {
Document doc = d.getDocumentByID(noteId);
DxlExporter dxl = d.getParent().createDxlExporter();
String xml = dxl.exportDxl(doc);
xml = xml.substring(xml.indexOf("<note "));
org.jsoup.nodes.Document jdoc = Jsoup.parse(xml);
Element ele = jdoc.select("rawitemdata").first();
String raw = ele.text().trim();
String temp = System.getProperty("java.io.tmpdir") + UUID.randomUUID().toString() + "\\";
File file = new File(temp);
file.mkdir();
String filename = temp + UUID.randomUUID().toString().replaceAll("-", "") + ".png";
byte[] buffer = decode(raw.getBytes());
Image image = byte2image(buffer);
ImageLoader loader = new ImageLoader();
loader.data = new ImageData[] {image.getImageData()};
loader.save(filename, SWT.IMAGE_PNG);
tag = filename;
} catch (Exception e) {
logger.error("", e);
}
if (counter >= nc.getCount()) {
noteId = null;
} else {
noteId = nc.getNextNoteID(noteId);
}
}
} catch (Exception e) {
logger.error("", e);
}
return tag;
}
private static Image byte2image(byte[] src) {
Image tag = new Image(Display.getDefault(), 32, 32);
GC gc = new GC(tag);
org.eclipse.swt.graphics.Color[] colors = new org.eclipse.swt.graphics.Color[16];
colors[0] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 0, 0);
colors[1] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 255, 255, 255);
colors[2] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 255, 0, 0);
colors[3] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 255, 0);
colors[4] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 0, 255);
colors[5] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 255, 0, 255);
colors[6] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 255, 255, 0);
colors[7] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 255, 255);
colors[8] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 128, 0, 0);
colors[9] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 128, 0);
colors[10] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 0, 128);
colors[11] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 128, 0, 128);
colors[12] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 128, 128, 0);
colors[13] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 0, 128, 128);
colors[14] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 128, 128, 128);
colors[15] = new org.eclipse.swt.graphics.Color(Display.getDefault(), 192, 192, 192);
gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
int start = 6 + 128;
int row = 0;
int col = 0;
for (int i = src.length - 16; i >= start; i -= 16) {
col = 0;
for (int j = i; j < i + 16; j++) {
byte b = src[j];
String s = String.format("%02X", b);
byte b1 = Byte.parseByte("0" + s.charAt(0), 16);
byte b2 = Byte.parseByte("0" + s.charAt(1), 16);
gc.setForeground(colors[b1]);
gc.drawPoint(col, row);
gc.setForeground(colors[b2]);
gc.drawPoint(col + 1, row);
col += 2;
}
row++;
}
return tag;
}
private static byte[] decode(byte[] b) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(b);
InputStream b64is = MimeUtility.decode(bais, "base64");
byte[] tmp = new byte[b.length];
int n = b64is.read(tmp);
byte[] res = new byte[n];
System.arraycopy(tmp, 0, res, 0, n);
return res;
}
}
No comments:
Post a Comment