package org.openntf.domino.tests.rpr; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import lotus.domino.NotesException; import org.junit.Test; import org.junit.runner.RunWith; import org.openntf.domino.Database; import org.openntf.domino.DbDirectory; import org.openntf.domino.Session; import org.openntf.domino.design.AboutDocument; import org.openntf.domino.design.DatabaseDesign; import org.openntf.domino.design.DesignBase; import org.openntf.domino.design.DesignCollection; import org.openntf.domino.design.impl.DatabaseClassLoader; import org.openntf.domino.design.impl.ODPMapping; import org.openntf.domino.design.impl.OnDiskProject; import org.openntf.domino.design.impl.OtherDesignElement; import org.openntf.domino.exceptions.OpenNTFNotesException; import org.openntf.domino.junit.DominoJUnitRunner; import org.openntf.domino.utils.Factory; import org.openntf.domino.utils.Factory.SessionType; @RunWith(DominoJUnitRunner.class) public class DesignClassTest { //@Test public void testDBClassLoader() throws ClassNotFoundException { Session sess = Factory.getSession(SessionType.CURRENT); Database db = sess.getDatabase("D:/Daten/notesdaten_9/localdb/proglib4work2.nsf"); ClassLoader cl = new DatabaseClassLoader(db.getDesign(), Factory.getClassLoader(), true, true); Class<?> cls = cl.loadClass("de.foconis.core.util.LSStringUtil"); // XPage - java System.out.println(cls); cls = cl.loadClass("org.junit.Assert"); // JAR System.out.println(cls); //Class<?> cls = cl.loadClass("com.googlecode.htmlcompressor.compressor.Compressor"); cls = cl.loadClass("FocMessageDigestFactory"); // Script-Lib System.out.println(cls); } //@Test public void testDesignFactory() throws IOException { Session sess = Factory.getSession(SessionType.CURRENT); DbDirectory dir = sess.getDbDirectory(""); for (Database db : dir) { try { db.open(); } catch (OpenNTFNotesException e) { e.printStackTrace(); } if (db.isOpen()) { System.out.println("DB under test" + db); testDb(db); } } //Database db = sess.getDatabase("D:/Daten/notesdaten_9/localdb/proglib4work2.nsf"); //Database db = sess.getDatabase("D:/Daten/notesdaten_9/localdb/empty.ns9"); } protected void testDb(final Database db) { DatabaseDesign design = db.getDesign(); System.out.println("Design: " + design.getClass().getName()); DesignCollection<DesignBase> allDesign = design.getDesignElements("@ALL"); Map<Class<?>, AtomicInteger> counter = new HashMap<Class<?>, AtomicInteger>(); for (DesignBase des : allDesign) { if (!counter.containsKey(des.getClass())) { counter.put(des.getClass(), new AtomicInteger()); } counter.get(des.getClass()).incrementAndGet(); } int i = 0; int j = 0; for (ODPMapping mapping : ODPMapping.values()) { Class<? extends DesignBase> cls = mapping.getInstanceClass(); if (cls == OtherDesignElement.class) { } else { DesignCollection<? extends DesignBase> ret = design.getDesignElements(cls); j = 0; for (@SuppressWarnings("unused") DesignBase b : ret) { i++; j++; } int cnt; if (!counter.containsKey(cls)) { cnt = 0; } else { cnt = counter.get(cls).get(); } if (j == cnt) { System.out.println(j + "\t " + cnt + "\t" + cls.getName()); } else { System.err.println(j + "\t " + cnt + "\t" + cls.getName()); } //if (j == 0) // System.err.println("No design element of " + cls.getName() + " found"); } } System.out.println("Total design elements " + i); } //@Test public void testDesignClass() throws IOException { Session sess = Factory.getSession(SessionType.CURRENT); //Database db = sess.getDatabase("D:/Daten/notesdaten_9/localdb/empty.ns9"); //Database db = sess.getDatabase("D:/Daten/notesdaten_9/empty2.nsf"); //Database db = sess.getDatabase("D:/Daten/notesdaten_9/localdb/proglib4work2.nsf"); Database db = sess.getDatabase("srv-01-ndev2!!entwicklung/alex/proglib4work22.nsf"); testDb(db); DatabaseDesign design = db.getDesign(); // -X = no AgentData DesignCollection<DesignBase> elems = design .getDesignElements("!@Contains($Flags;{X}) & !($TITLE={WEB-INF/classes/plugin/Activator.class}:{$BEProfileR7}) " // + ""); // + "& @IsAvailable($ACLDigest) "); //+ "& @contains($TITLE;{gadproxy}) "); System.out.println("Count: " + elems.getCount()); File root = new File("D:/daten/temp/ods3"); OnDiskProject odp = new OnDiskProject(root); //PrintWriter pw = new PrintWriter(oFile); for (DesignBase elem : elems) { //System.out.println(elem.getClass().getSimpleName() + "'" + elem.getNoteID() + "\t" + elem.getName() + "\t" // + elem.getDocument().getItemValueString("$FLAGS")); try { odp.export(elem); // //elem.getDxlString(null) // String odp = elem.getOnDiskPath(); // if (StringUtil.isEmpty(odp)) { // odp = elem.getNoteID() + ".note"; // } // File odsFile = new File(root, odp); // System.out.println(elem.getClass().getName() + "\t\t\t" + odsFile); // odsFile.getParentFile().mkdirs(); // ensure the path exists // elem.writeOnDiskFile(odsFile); // if (elem instanceof HasMetadata) { // File meta = new File(odsFile.getAbsolutePath() + ".metadata"); // ((HasMetadata) elem).writeOnDiskMeta(meta); // } } catch (Exception ne) { ne.printStackTrace(); } // String path = "./" + elem.getOnDiskPath(); // String ext = elem.getOnDiskExtension(); // if (path != null && ext != null && !path.endsWith(ext)) // path = path + ext; // pw.println(path + "\t'" + elem.getClass().getSimpleName() + "\t" + elem.getNoteID() + "\t" + elem.getName() + "\t" // + elem.getDocument().getItemValueString("$FLAGS")); // if (elem instanceof HasMetadata) { // pw.println(path + ".metadata"); // } // if (elem instanceof CustomControl) { // pw.println(path + "-config"); // } } } //@Test public void testCreation() { DbDirectory dbdir = Factory.getSession(SessionType.CURRENT).getDbDirectory(""); Database db = dbdir.createDatabase("D:/Daten/notesdaten_9/localdb/pw" + System.currentTimeMillis() + ".nsf", true); AboutDocument abd = new org.openntf.domino.design.impl.AboutDocument(db); abd.save(); } @Test public void testDXLImport() throws NotesException { lotus.domino.Session session = lotus.domino.NotesFactory.createSession(); //Factory.getSession(SessionType.CURRENT); lotus.domino.Database db = session.getDatabase("", "D:/Daten/notesdaten_9/empty2.nsf"); lotus.domino.Stream stream = session.createStream(); stream.open("d:/daten/form_dxl.txt", "UTF-8"); lotus.domino.DxlImporter importer = session.createDxlImporter(); importer.setDesignImportOption(6); importer.setCompileLotusScript(false); importer.setExitOnFirstFatalError(false); importer.setReplicaRequiredForReplaceOrUpdate(false); String dxl = stream.readText(); stream.close(); System.out.println("Importing...."); try { importer.importDxl(dxl, db); System.out.println(importer.getFirstImportedNoteID()); } catch (NotesException e) { e.printStackTrace(); System.err.println(importer.getLog()); } } }