1 19 20 package org.netbeans.mdr.test; 21 22 import java.io.*; 23 import java.util.*; 24 import java.net.*; 25 26 import junit.extensions.*; 27 import junit.framework.*; 28 29 import org.netbeans.api.mdr.DTDProducer; 30 import org.netbeans.api.xmi.*; 31 import org.netbeans.api.xmi.sax.*; 32 import org.openide.util.Lookup; 33 34 import org.netbeans.mdr.util.*; 35 import org.netbeans.mdr.NBMDRepositoryImpl; 36 import org.netbeans.lib.jmi.xmi.*; 37 import org.netbeans.lib.jmi.mapping.*; 38 39 import org.xml.sax.*; 40 import org.xml.sax.helpers.DefaultHandler ; 41 import javax.xml.parsers.*; 42 43 import javax.jmi.reflect.*; 44 import javax.jmi.model.*; 45 46 49 public class DTDProducerTest extends MDRTestCase { 50 51 public DTDProducerTest(String testName) { 52 super (testName); 53 } 54 55 public static void main (String [] args) { 56 junit.textui.TestRunner.run (suite ()); 57 } 58 59 public static Test suite () { 60 TestSuite suite = new TestSuite (); 61 suite.addTestSuite (DTDProducerTest.class); 62 63 TestSetup setup = new TestSetup (suite) { 64 public void setUp () { 65 } 66 public void tearDown () { 67 } 68 }; 69 return setup; 70 } 71 72 74 public void test () { 75 doTest ("Text.xml", "Text", "text_inst"); 77 doTest ("Java.xml", "Core", "java_inst"); 78 } 79 80 public void doTest (String xmlName, String packageName, String fileName) { 81 RefPackage pkg = instantiateModel (xmlName, packageName, packageName + "_1"); 82 new RandomDataGenerator ().generate (pkg, 0, 12); 83 RefPackage pkg2 = instantiateModel (xmlName, packageName, packageName + "_2"); 84 85 Lookup lookup = Lookup.getDefault (); 86 DTDProducer producer = DTDProducer.getDefault (); 87 XMIWriter writer = XMIWriterFactory.getDefault ().createXMIWriter (); 88 XMIReader reader = XMIReaderFactory.getDefault ().createXMIReader (); 89 90 try { 91 OutputStream os = new FileOutputStream (getFile(fileName + ".dtd")); 92 producer.generate (os, pkg); 93 os.flush (); 94 os.close (); 95 } catch (Exception e) { 96 e.printStackTrace(); 97 fail (e.getMessage ()); 98 } 99 100 File file_temp = getFile (fileName + ".temp"); 101 File file = getFile (fileName + ".xml"); 102 103 try { 104 OutputStream os = new FileOutputStream (file_temp); 105 repository.beginTrans (true); 106 writer.write (os, fileName + ".temp", pkg, null); 107 os.flush (); 108 os.close (); 109 } catch (Exception e) { 110 e.printStackTrace(); 111 fail (e.getMessage ()); 112 } finally { 113 repository.endTrans (); 114 } 115 116 addDTDTag (file_temp, file, fileName + ".dtd"); 117 118 129 130 Validator validator = new Validator (); 131 validator.validate (file); 132 133 deleteModel (pkg); 134 deleteModel (pkg2); 135 } 136 137 private RefPackage instantiateModel (String docName, String mainPackageName, String extentName) { 138 ModelPackage pkg = loadMOFModel (docName, extentName + "_meta"); 139 RefPackage result = createExtent ( 140 findMofPackage (pkg, mainPackageName), 141 extentName 142 ); 143 return result; 144 } 145 146 private void deleteModel (RefPackage pkg) { 147 RefPackage meta = pkg.refMetaObject ().refOutermostPackage (); 148 pkg.refDelete (); 149 meta.refDelete (); 150 } 151 152 private void addDTDTag (File src, File dest, String dtdFileName) { 153 try { 154 InputStream in = new FileInputStream (src); 155 BufferedReader reader = new BufferedReader (new InputStreamReader(in)); 156 PrintStream writer = new PrintStream (new FileOutputStream (dest)); 157 String line = reader.readLine (); 158 writer.println (line); 159 writer.println ("<!DOCTYPE XMI SYSTEM \"" + dtdFileName + "\">"); 160 line = reader.readLine (); 161 while (line != null) { 162 writer.println (line); 163 line = reader.readLine(); 164 } 165 writer.close (); 166 writer.flush (); 167 } catch (IOException e) { 168 e.printStackTrace (); 169 fail (e.getMessage ()); 170 } 171 } 172 173 175 private class Validator extends DefaultHandler { 176 177 public void validate (File xmiFile) { 178 try { 179 InputSource input = new InputSource (new FileInputStream (xmiFile)); 180 input.setSystemId(xmiFile.toURL().toString()); 181 SAXParserFactory factory = SAXParserFactory.newInstance (); 182 factory.setValidating (true); 183 SAXParser saxParser = factory.newSAXParser (); 184 saxParser.parse (input, this); 185 } catch (Exception e) { 186 e.printStackTrace (); 187 fail (e.getMessage ()); 188 } 189 } 190 191 } 192 193 } 194 | Popular Tags |