Getting MDR 4.0 working with TCK
"Brian Topping" <[email protected]> Wed, 20 Oct 2004 07:21:25 -0400
| Newsgroups | gmane.comp.java.netbeans.modules.mdr.devel |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. ------_=_NextPart_001_01C4B696.EFA79900 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Martin & Co. I'm trying to get the JMI TCK working against the MDR 4.0 sources, but = not having much luck. I think I usually get an NPE on all the tests except = the SignatureTest. Since MDR still works, I'm guessing it's in the = interface to the TCK. I updated it as best I could and attached it here. It is = loading the test MOF input files and generating the first dozen or so lines of = the classes in the output directory but dies on every test as in this stack trace: DEBUG [20 Oct '04 7:09:01] - metamodel=3Dcz.tst.Cluster DEBUG [20 Oct '04 7:09:01] - xmi import = path=3Dmetamodels/cz/tst/Cluster.xml ERROR [20 Oct '04 7:09:01] -=20 java.lang.NullPointerException at java.util.Hashtable.get(Hashtable.java:333) at org.netbeans.lib.jmi.mapping.GenericMapper.getTypeName(GenericMapper.java= :185 ) at org.netbeans.lib.jmi.mapping.JavaMapper.structureTemplate(JavaMapper.java= :107 0) at org.netbeans.lib.jmi.mapping.GenericMapper.visitRefObject(GenericMapper.j= ava: 353) at org.netbeans.lib.jmi.mapping.GenericMapper.visitRefObject(GenericMapper.j= ava: 330) at org.netbeans.lib.jmi.mapping.GenericMapper.visitRefPackage(GenericMapper.= java :384) at org.netbeans.lib.jmi.mapping.GenericMapper.visitRefBaseObject(GenericMapp= er.j ava:392) at org.netbeans.lib.jmi.mapping.JMIMapperImpl.generate(JMIMapperImpl.java:57= ) at org.netbeans.mdr.jmitck.OldNBMDRGenerator.generateJMI(OldNBMDRGenerator.j= ava: 318) at org.netbeans.mdr.jmitck.OldNBMDRGenerator.generate(OldNBMDRGenerator.java= :137 ) at com.sun.jmitck.MetamodelLoader.loadIfNecessary(MetamodelLoader.java:96) at com.sun.jmitck.mapping.JmiMappingTestScript.setupIfNecessary(JmiMappingTe= stSc ript.java:93) at com.sun.jmitck.mapping.JmiMappingTestScript.runScript(JmiMappingTestScrip= t.ja va:51) at com.sun.jmitck.JmiScript.run(JmiScript.java:70) at com.sun.javatest.Script.run(Script.java:220) at com.sun.javatest.Harness.runTest(Harness.java:648) at com.sun.javatest.Harness.access$800(Harness.java:33) at com.sun.javatest.Harness$2.run(Harness.java:748) INFO [20 Oct '04 7:09:01] - =3D=3D=3D Test Completed (mapping/cz/tst/testpackage1/SubclassClass.html/Test48) <<<< I've attached the Generator I cooked up from what's in the TCK. Summary = of changes were to take the generator class out of the loader loop; I think = I understand the use of MetaInfServicesLookup now and it didn't look = compatible with the code that was in the Generator. Otherwise, just went through = and converted to using the static getInstance interfaces on the four points = the Generator grabs classes from the MDR classpath. It seems like it = wouldn't be loading the MOF if it was really bad, but I'm not sure. Thanks a bunch for any time you can make for this. -b ------_=_NextPart_001_01C4B696.EFA79900 Content-Type: application/octet-stream; name="OldNBMDRGenerator.java" Content-Transfer-Encoding: base64 Content-Description: OldNBMDRGenerator.java Content-Disposition: attachment; filename="OldNBMDRGenerator.java" LyoKICogJEZpbGUkICAgICAgICAkUmV2aXNpb24kICAgJERhdGUkICAkQXV0aG9yJAogKgogKiBD b3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu CiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuCiAqLwpwYWNrYWdlIG9yZy5uZXRi ZWFucy5tZHIuam1pdGNrOwoKaW1wb3J0IGNvbS5zdW4uamF2YXRlc3QuU3RhdHVzOwppbXBvcnQg b3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CmltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWls ZEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlByb2plY3Q7CmltcG9ydCBv cmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5KYXZhYzsKaW1wb3J0IG9yZy5uZXRiZWFucy5h cGkubWRyLkNyZWF0aW9uRmFpbGVkRXhjZXB0aW9uOwppbXBvcnQgb3JnLm5ldGJlYW5zLmFwaS5t ZHIuSk1JTWFwcGVyOwppbXBvcnQgb3JnLm5ldGJlYW5zLmFwaS5tZHIuTURSTWFuYWdlcjsKaW1w b3J0IG9yZy5uZXRiZWFucy5hcGkubWRyLk1EUmVwb3NpdG9yeTsKaW1wb3J0IG9yZy5uZXRiZWFu cy5hcGkueG1pLlhNSVJlYWRlcjsKaW1wb3J0IG9yZy5uZXRiZWFucy5hcGkueG1pLlhNSVJlYWRl ckZhY3Rvcnk7CmltcG9ydCBvcmcubmV0YmVhbnMubW9kdWxlcy5qbWl1dGlscy5GU1NGSW1wbDsK aW1wb3J0IG9yZy5vcGVuaWRlLmZpbGVzeXN0ZW1zLkxvY2FsRmlsZVN5c3RlbTsKaW1wb3J0IG9y Zy5vcGVuaWRlLnV0aWwuTG9va3VwOwppbXBvcnQgb3JnLm9wZW5pZGUudXRpbC5Mb29rdXBMaXN0 ZW5lcjsKCmltcG9ydCBqYXZheC5qbWkubW9kZWwuTW9kZWxQYWNrYWdlOwppbXBvcnQgamF2YXgu am1pLnJlZmxlY3QuUmVmUGFja2FnZTsKaW1wb3J0IGphdmF4LmptaS54bWkuTWFsZm9ybWVkWE1J RXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5GaWxlOwppbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0 U3RyZWFtOwppbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKaW1wb3J0IGphdmEubmV0LlVSTDsK aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsK Ci8qKgogKiBJbnRlcmFjdGluZyB3aXRoIEpNSSBUQ0sgZm9yIHRoZSBjb2RlIGdlbmVyYXRpb24K ICogZmVhdHVyZXMgb2YgTmV0YmVhbnMgTURSIGltcGxlbWVudGF0aW9uIG9mIEpNSS4KICovCnB1 YmxpYyBjbGFzcyBPbGROQk1EUkdlbmVyYXRvciBpbXBsZW1lbnRzIGNvbS5zdW4uam1pdGNrLnZl bmRvcndyYXBwZXIuR2VuZXJhdG9yIHsKICAgIHByaXZhdGUgTURSZXBvc2l0b3J5IHJlcG9zaXRv cnkgPSBudWxsOwogICAgcHJpdmF0ZSBQcm9wZXJ0aWVzIHByb3BzOwogICAgcHJpdmF0ZSBGaWxl IGZpbGVSb290RGlyOwogICAgcHJpdmF0ZSBGaWxlIGdlbmVyYXRlZEZpbGVEaXI7CiAgICBwcml2 YXRlIFByaW50V3JpdGVyIHN0YWNrVHJhY2VMb2dXcml0ZXIgPSBudWxsOwogICAgLyoqCiAgICAg KiBAcGFyYW0gQXJyYXlMaXN0IC0gZm9yIFJlcG9zaXRvcnlMb29rdXAuCiAgICAgKi8KCiAgICBw cml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nID0gTG9nZ2VyLmdldExvZ2dlcihPbGROQk1E UkdlbmVyYXRvci5jbGFzcyk7CgogICAgLyoqCiAgICAgKiBJbnN0YW50aWF0ZSBMb29rdXAgJmFt cDsgY3JlYXRlIG5ldyBSZXBvc2l0b3J5TG9va3VwLgogICAgICovCiAgICBwdWJsaWMgT2xkTkJN RFJHZW5lcmF0b3IoKSB7CiAgICAgICAgLy8gcHJvcGVydGllcyBzZXQgZm9yIHJ1bm5pbmcgTURS IHdpdGhvdXQgTmV0YmVhbnMgSURFCiAgICAgICAgaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3Jn Lm9wZW5pZGUudmVyc2lvbiIpID09IG51bGwpIHsKICAgICAgICAgICAgU3lzdGVtLnNldFByb3Bl cnR5KCJvcmcubmV0YmVhbnMubWRyLnN0b3JhZ2Vtb2RlbC5TdG9yYWdlRmFjdG9yeUNsYXNzTmFt ZSIsICJvcmcubmV0YmVhbnMubWRyLnBlcnNpc3RlbmNlLmJ0cmVlaW1wbC5idHJlZXN0b3JhZ2Uu QnRyZWVGYWN0b3J5Iik7CiAgICAgICAgfQoKLy8gICAgICBpbnN0YW5jZXMuYWRkKG5ldyBOQk1E Uk1hbmFnZXJJbXBsKCkpOwovLyAgICAgIGluc3RhbmNlcy5hZGQobmV3IFhNSVNheFJlYWRlcklt cGwoKSk7Ci8vICAgICAgaW5zdGFuY2VzLmFkZChuZXcgSk1JTWFwcGVySW1wbCgpKTsKLy8gICAg ICBpbnN0YW5jZXMuYWRkKG5ldyBYTUlXcml0ZXJJbXBsKCkpOwoKICAgICAgICB0cnkgewogICAg ICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCJzdGFj a3RyYWNlLmxvZyIpOwogICAgICAgICAgICBzdGFja1RyYWNlTG9nV3JpdGVyID0gbmV3IFByaW50 V3JpdGVyKG91dCk7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAg Ly8gRmlsZU5vdEZvdW5kRXhjZXB0aW9uIG9yIFNlY3VyaXR5RXhjZXB0aW9uCiAgICAgICAgICAg IGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUGVy Zm9ybSBhbnkgcmVxdWlyZWQgaW5paWFsaXphdGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogICAgICog TURSIHdpbGwgZ2VuZXJhdGUgSk1JIGZpbGVzIHRvICRUQ0tESVIvc2VydmVycywgdGh1cyB3ZSB3 aWxsCiAgICAgKiBoYXZlIHRvIGlucHV0IHRoZSBzYW1lIHBhdGggaW4gSmF2YXRlc3QgQ29uZmln dXJhdGlvbiBJbnRlcnZpZXcuCiAgICAgKgogICAgICogQHBhcmFtIHAgICAgICAgcHJvcGVydGll cyBsb2FkZWQgZnJvbSBhIHByb3BlcnRpZXMgZmlsZSwgaWYgcHJvdmlkZWQKICAgICAqICAgICAg ICAgICAgICAgIGJ5IHRoZSB2ZW5kb3IgKG1heSBiZSBudWxsKQogICAgICogQHBhcmFtIHJvb3RE aXIgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciB0aGUgSmF2YXRlc3QgZXhlY3V0aW9uCiAgICAgKi8K ICAgIHB1YmxpYyB2b2lkIGluaXQoUHJvcGVydGllcyBwLCBGaWxlIHJvb3REaXIpIHsKICAgICAg ICB0aGlzLnByb3BzID0gcDsKICAgICAgICB0aGlzLmZpbGVSb290RGlyID0gcm9vdERpcjsKCiAg ICAgICAgLy8gbWltaWMgUkkgVENLIFdyYXBwZXIsIGdlbmVyYXRlIEpNSSB0byByb290RGlyL3Nl cnZlcnMKICAgICAgICBTdHJpbmcgZ2VuRmlsZVBhdGggPSByb290RGlyLnRvU3RyaW5nKCkgKyBT eXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIikgKyAic2VydmVycyI7CiAgICAgICAg U3lzdGVtLnNldFByb3BlcnR5KCJvcmcubmV0YmVhbnMubWRyLnBlcnNpc3RlbmNlLkRpciIsIGdl bkZpbGVQYXRoKTsKCiAgICAgICAgbG9nLmRlYnVnKCJyb290RGlyID0gIiArIHJvb3REaXIpOwog ICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8vIGxvY2F0aW9uIGZvciBnZW5lcmF0aW5nIEpNSSBj bGFzcyBmaWxlcwogICAgICAgICAgICBnZW5lcmF0ZWRGaWxlRGlyID0gbmV3IEZpbGUoZ2VuRmls ZVBhdGgpOwogICAgICAgICAgICBnZW5lcmF0ZWRGaWxlRGlyLm1rZGlyKCk7CiAgICAgICAgICAg IGdlbkZpbGVQYXRoID0gZ2VuZXJhdGVkRmlsZURpci5nZXRDYW5vbmljYWxQYXRoKCk7CiAgICAg ICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiU2VydmVyLkRpcmVjdG9yeSIsIGdlbkZpbGVQYXRo KTsKICAgICAgICB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAg ICBpb2UucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2VMb2dXcml0ZXIpOwogICAgICAgICAgICBs b2cuZXJyb3IoIiIsIGlvZSk7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u KCJFcnJvciBpbiBjcmVhdGluZyBwYXRoIGZvciBKTUkgZ2VuZXJhdGlvbiEiKTsKICAgICAgICB9 CiAgICAgICAgbG9nLmRlYnVnKCJnZW5GaWxlUGF0aCA9ICIgKyBnZW5GaWxlUGF0aCk7CgogICAg ICAgIHJlcG9zaXRvcnkgPSBNRFJNYW5hZ2VyLmdldERlZmF1bHQoKS5nZXREZWZhdWx0UmVwb3Np dG9yeSgpOwogICAgICAgIGxvZy5kZWJ1ZygicmVwb3NpdG9yeSA9ICIgKyByZXBvc2l0b3J5KTsK ICAgICAgICBpZiAocmVwb3NpdG9yeSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgUnVu dGltZUV4Y2VwdGlvbigiUmVwb3NpdG9yeSBub3QgZm91bmQhIik7CiAgICAgICAgZWxzZQogICAg ICAgICAgICByZXBvc2l0b3J5LmdldEV4dGVudE5hbWVzKCk7CS8vIHN0YXJ0IHVwIHRoZSByZXBv c2l0b3J5CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgY29kZSBjb3JyZXNwb25k aW5nIHRvIHRoZSBuYW1lZCBtZXRhbW9kZWwuICBUaGlzCiAgICAgKiBtZXRob2QgbXVzdCBsb2Fk IHRoZSBYTUkgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZXRhbW9kZWwKICAgICAqIG5hbWUs IGFuZCBnZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBieXRlIGNvZGUgYWNjb3JkaW5nIHRvIHRo ZQogICAgICogSk1JIHNwZWNpZmljYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIG1ldGFtb2Rl bCAgICAgIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1ldGFtb2RlbCwgd2hpY2gKICAg ICAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGNvcnJlc3BvbmQgdG8gYW4gWE1JIGZpbGUg aW4gdGhlIDxjb2RlPm1ldGFtb2RlbHM8L2NvZGU+CiAgICAgKiAgICAgICAgICAgICAgICAgICAg ICAgZGlyZWN0b3J5CiAgICAgKiBAcGFyYW0gU3RyaW5nICAgICAgICAgeG1pRmlsZUxvY2F0aW9u IGZpbGUgbG9jYXRpb24gb2YgdGhlIFhNSSBmaWxlCiAgICAgKiBAcGFyYW0gaW50ZXJmYWNlc09u bHkgW2lnbm9yZWQgYnkgTURSXQogICAgICogICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHdo ZW4gb25seSB0aGUgaW50ZXJmYWNlcywgZW51bQogICAgICogICAgICAgICAgICAgICAgICAgICAg IGNsYXNzZXMsIGFuZCBleGNlcHRpb25zIHNwZWNpZmllZCBieSB0aGUgSk1JIG5lZWQgYmUgZ2Vu ZXJhdGVkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgIFdoZW4gZmFsc2UsIHRoZSBpbXBs ZW1lbnRhdGlvbiBvZiB0aG9zZSBpbnRlcmZhY2VzIG11c3QgYWxzbyBiZQogICAgICogICAgICAg ICAgICAgICAgICAgICAgIGdlbmVhdGVkLgogICAgICogQHJldHVybiBhIFN0YXR1cyBpbnN0YW5j ZSwgc2V0IHRvIGVpdGhlciBwYXNzZWQsIGlmIGNvZGUKICAgICAqICAgICAgICAgZ2VuZXJhdGlv biBjb21wbGV0ZWQsIG9yIHRvIGVycm9yLCBpZiBub3QuCiAgICAgKi8KICAgIHB1YmxpYyBTdGF0 dXMgZ2VuZXJhdGUoU3RyaW5nIG1ldGFtb2RlbCwgU3RyaW5nIHhtaUltcG9ydFBhdGgsIGJvb2xl YW4gaW50ZXJmYWNlc09ubHkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsb2cuZGVidWco Im1ldGFtb2RlbD0iICsgbWV0YW1vZGVsKTsKICAgICAgICAgICAgbG9nLmRlYnVnKCJ4bWkgaW1w b3J0IHBhdGg9IiArIHhtaUltcG9ydFBhdGgpOwoKICAgICAgICAgICAgbG9hZFhNSU1vZGVsKG1l dGFtb2RlbCwgeG1pSW1wb3J0UGF0aCk7CiAgICAgICAgICAgIGdlbmVyYXRlSk1JKG1ldGFtb2Rl bCwgZ2VuZXJhdGVkRmlsZURpcik7CiAgICAgICAgICAgIGNvbXBpbGVKTUkoZ2VuZXJhdGVkRmls ZURpcik7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgLy90LnBy aW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICBsb2cuZXJyb3IoIiIsIHQpOwogICAgICAgICAg ICByZXR1cm4gU3RhdHVzLmVycm9yKHQudG9TdHJpbmcoKSk7CiAgICAgICAgfQoKICAgICAgICBy ZXR1cm4gU3RhdHVzLnBhc3NlZCgiQ29kZSBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IGZvciBtZXRh bW9kZWw6ICIgKyBtZXRhbW9kZWwpOwogICAgfQoKICAgIC8qKgogICAgICogW1JldHVybnMgbnVs bCBzaW5jZSBNRFIgaGFzIG5vIHN1Y2ggZGVwZW5kZW5jeS5dCiAgICAgKiA8cC8+CiAgICAgKiBS ZXR1cm5zIHRoZSBjbGFzc3BhdGggcmVxdWlyZWQgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZS4gIFRo aXMKICAgICAqIG1ldGhvZCBvbmx5IG5lZWRzIHRvIGNyZWF0ZSB0aGUgY2xhc3NwYXRoIGlmIHRo ZSBjbGFzc3BhdGggb2YKICAgICAqIGdlbmVyYXRlZCBjb2RlIGNoYW5nZXMgZnJvbSBvbmUgZ2Vu ZXJhdGlvbiBleGVjdXRpb24gdG8gdGhlCiAgICAgKiBuZXh0LiAgRm9yIGluc3RhbmNlLCBpZiB0 aGUgaW1wbGVtZW50aW9uIHBsYWNlcyB0aGUgZ2VuZXJhdGVkCiAgICAgKiBjb2RlIGluIGEgamFy IGZpbGUgbmFtZWQgYWZ0ZXIgdGhlIG1ldGFtb2RlbCwgdGhpcyBtZXRob2Qgd291bGQKICAgICAq IGJlIGludm9rZWQuICBUaGUgY2hvaWNlIHdoZXRoZXIgdGhpcyBtZXRob2QgaXMgaW52b2tlZCBv ciBub3QgaXMKICAgICAqIGNvbnRyb2xsZWQgYnkgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBz ZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KICAgICAqIGVkaXRvci4KICAgICAqCiAgICAgKiBAcGFy YW0gbWV0YW1vZGVsIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbWV0YW1vZGVsICh0 aGUKICAgICAqICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lIHRoYXQgaXMgcGFzc2VkIGluIHRv IHRoZSBnZW5lcmF0ZSBtZXRob2QpLgogICAgICogQHJldHVybiBhIGNsYXNzcGF0aCwgdXNpbmcg dGhlIGNsYXNzcGF0aCBzZXBhcmF0b3JzIGFwcHJvcHJpYXRlCiAgICAgKiAgICAgICAgIGZvciB0 aGUgY3VycmVudCBwbGF0Zm9ybQogICAgICovCiAgICBwdWJsaWMgU3RyaW5nIGdldE1ldGFtb2Rl bExvYWRQYXRoKFN0cmluZyBtZXRhbW9kZWwpIHsKICAgICAgICAvLyByZXR1cm4gInNlcnZlcnM6 bmV0YmVhbnMvbmJtZHIuamFyIjsKICAgICAgICAvLyBsZXQgdGhlIENvbmZpZ3VyYXRpb24gRWRp dG9yIHRha2VzIGNhcmUgb2YgaXQ7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoq CiAgICAgKiBSZXR1cm5zIGEgbmV3IFJlZlBhY2thZ2UsIHJldHVybmluZyBhIHVuaXF1ZSBpZGVu dGlmaWVyLCB3aGljaAogICAgICogY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBuZXcgUmVmUGFj a2FnZS4KICAgICAqIFByZS1jb25kaXRpb24gZm9yIE1EUjogdGhlIGdlbmVyYXRlZCBpbnRlcmZh Y2VzIG11c3QgYmUgY29udGFpbmVkIGluIHRoZQogICAgICogJENMQVNTUEFUSC4KICAgICAqCiAg ICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgdGhlIG5hbWUgb2YgdGhlIE1vZGVsLlBhY2thZ2UgZGVm aW5pbmcgdGhlIFJlZlBhY2thZ2UKICAgICAqIEBwYXJhbSBwcmVmaXggICAgICB0aGUgcGFja2Fn ZSBwcmVmaXggdXNlZCBpbiBjb2RlIGdlbmVyYXRpb24gKGFzCiAgICAgKiAgICAgICAgICAgICAg ICAgICAgZGVmaW5lZCBieSBhIHRhZyBpbiB0aGUgbWV0YW1vZGVsKQogICAgICogQHJldHVybiBS ZWZQYWNrYWdlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UsIG51bGwgaWYgZXJyb3Igb2NjdXJlZAog ICAgICovCiAgICBwdWJsaWMgUmVmUGFja2FnZSBjcmVhdGVSZWZQYWNrYWdlKFN0cmluZyBwYWNr YWdlTmFtZSwgU3RyaW5nIHByZWZpeCkgewogICAgICAgIFN0cmluZyBuYW1lc1tdID0gcmVwb3Np dG9yeS5nZXRFeHRlbnROYW1lcygpOwogICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgaW5z dGFuY2VzCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewog ICAgICAgICAgICBSZWZQYWNrYWdlIGV4dGVudCA9IHJlcG9zaXRvcnkuZ2V0RXh0ZW50KG5hbWVz W2ldKTsKICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBpdCBpcyBpbnN0YW5jZSBvZiBNT0Yg bW9kZWwKICAgICAgICAgICAgaWYgKGV4dGVudCBpbnN0YW5jZW9mIGphdmF4LmptaS5tb2RlbC5N b2RlbFBhY2thZ2UpIHsKICAgICAgICAgICAgICAgIGphdmF4LmptaS5tb2RlbC5Nb2RlbFBhY2th Z2UgcGtnID0gKGphdmF4LmptaS5tb2RlbC5Nb2RlbFBhY2thZ2UpIGV4dGVudDsKICAgICAgICAg ICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHBhY2thZ2VzIGluIHRoZSBpbnN0YW5j ZQogICAgICAgICAgICAgICAgZm9yIChqYXZhLnV0aWwuSXRlcmF0b3IgaXQgPSBwa2cuZ2V0TW9m UGFja2FnZSgpLnJlZkFsbE9mQ2xhc3MoKS5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7KSB7CiAg ICAgICAgICAgICAgICAgICAgamF2YXguam1pLm1vZGVsLk1vZlBhY2thZ2UgdGVtcCA9IChqYXZh eC5qbWkubW9kZWwuTW9mUGFja2FnZSkgaXQubmV4dCgpOwogICAgICAgICAgICAgICAgICAgIC8v IGNoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgaXMgb2YgdGhlIHNlYXJjaGVkIG5hbWUgYW5kIHdo ZXRoZXIgaXQgaXMgb3V0ZXJtb3N0CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAuZ2V0TmFt ZSgpLmVxdWFscyhwYWNrYWdlTmFtZSkgJiYgdGVtcC5nZXRDb250YWluZXIoKSA9PSBudWxsKQog ICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBvc2l0b3J5LmNyZWF0ZUV4dGVudCgiSW5z dGFuY2Ugb2YgIiArIHBhY2thZ2VOYW1lLCB0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAg fSBjYXRjaCAoQ3JlYXRpb25GYWlsZWRFeGNlcHRpb24gY2ZlKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjZmUucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2VMb2dXcml0ZXIpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKCIiLCBjZmUpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oY2ZlLmdldE1lc3NhZ2Uo KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgICAvLyBwYWNrYWdlIHRoYXQgaGFzIHRvIGJlIGluc3RhbnRp YXRlZCBjb3VsZCBub3QgYmUgZm91bmQKICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv bigiUGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiIG5vdCBmb3VuZC4iKTsKICAgIH0KCiAgICAv KioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgWG1pUmVhZGVyLgogICAgICoKICAgICAq IEByZXR1cm4gWG1pUmVhZGVyIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBqYXZheC5qbWku eG1pLlhtaVJlYWRlciBjcmVhdGVYbWlSZWFkZXIoKSB7CiAgICAgICAgcmV0dXJuIFhNSVJlYWRl ckZhY3RvcnkuZ2V0RGVmYXVsdCgpLmNyZWF0ZVhNSVJlYWRlcigpOwogICAgfQoKICAgIC8qKgog ICAgICogW05vIGFjdGlvbiBmb3IgTURSXQogICAgICogQ2xlYW4tdXAgYWZ0ZXIgYSBsaXN0IG9m IFJlZlBhY2thZ2UgaW5zdGFuY2VzLCBhZnRlciBjb21wbGV0aW9uCiAgICAgKiBvZiBhIHRlc3Qu ICBBbiBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbiB0aGUgb3BvcnR1bml0eSB0byByZW1vdmUKICAg ICAqIG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgZXh0ZW50cyBhcyB0aGUgcmVzdWx0IG9mIHRoZSB0 ZXN0LCBvcgogICAgICogcGVyZm9ybSBhbnkgb3RoZXIgdXNlZnVsIGNsZWFudXAuICBObyBhY3Rp b24gaXMgbmVjZXNzYXJ5OwogICAgICogaG93ZXZlciwgY2xlYW51cCBhY3Rpdml0aWVzIG1heSBh dm9pZCBpc3N1ZXMgc3VjaCBhcyBydW5uaW5nIG91dAogICAgICogb2YgbWVtb3J5LCBmYWlsaW5n IHN1YnNlcXVlbnQgdGVzdHMgZHVlIHRvIGEgcHJldmlvdXMgdGVzdAogICAgICogZmFpbHVyZSB0 aGF0IGNvcnJ1cHRzIGFuIGV4dGVudCwgZXRjLgogICAgICoKICAgICAqIEBwYXJhbSByZWZQYWNr YWdlcyBhIGxpc3Qgb2YgdGhlIFJlZlBhY2thZ2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZvciBhIHRl c3QuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHJldGlyZShSZWZQYWNrYWdlIHJlZlBhY2thZ2Up IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdG9wLWxldmVsIFJlZlBhY2thZ2UsIGFzIGlk ZW5pdGlmaWVkIGJ5IHRoZSBhcmd1bWVudC4KICAgICAqIFRoZSB0b3AtbGV2ZWwgUmVmUGFja2Fn ZSBjb3JyZXNwb25kcyB0byBhIHRvcC1sZXZlbAogICAgICogTW9kZWwuUGFja2FnZSBpbiBhIG1l dGFtb2RlbC4gIFRoZSBpZGVudGlmaWVyIG1heSBiZQogICAgICogaW1wbGVtZW50YXRpb24tc3Bl Y2lmaWMsIGJ1dCBtdXN0IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZQogICAgICogUmVmUGFja2FnZS4g IElmIHRoZSBSZWZQYWNrYWdlIGRvZXMgbm90IGV4aXN0LCB0aGUKICAgICAqIGltcGxlbWVudGF0 aW9uIG1heSBlaXRoZXIgcmV0dXJuIG51bGwsIG9yIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZQogICAg ICogYW5kIHJldHVybiBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gaWQgdW5pcXVlbHkgaWRlbnRp ZmllcyBhIFJlZlBhY2thZ2UKICAgICAqIEByZXR1cm4gUmVmUGFja2FnZSBpbnN0YW5jZSBhY2Nv cmRpbmcgdG8gaWQKICAgICAqLwogICAgcHJpdmF0ZSBSZWZQYWNrYWdlIGdldFJlcG9zaXRvcnko U3RyaW5nIGlkKSB7Ci8vICAgICAgTURSZXBvc2l0b3J5IG1kciA9IE1EUk1hbmFnZXIuZ2V0RGVm YXVsdCgpLmdldFJlcG9zaXRvcnkoaWQpOwovLyAgICAgIC8vIG51bGwgaWYgdGhlIHJlcG9zaXRv cnkgb2YgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgZXhpc3QKLy8gICAgICBpZihtZHIgPT0gbnVs bCkKICAgICAgICByZXR1cm4gcmVwb3NpdG9yeS5nZXRFeHRlbnQoaWQpOwogICAgfQoKICAgIC8q KgogICAgICogTG9hZCBhIG1ldGFtb2RlbCBmcm9tIFhNSSBmaWxlIHRvIHRoZSBkZWZhdWx0IHJl cG9zaXRvcnkgdW5kZXIgPGNvZGU+bmFtZTwvY29kZT4uCiAgICAgKgogICAgICogQHBhcmFtIFN0 cmluZyBwYWNrYWdlIG5hbWUKICAgICAqIEBwYXJhbSBTdHJpbmcgeG1pRmlsZW5hbWUKICAgICAq IEB0aHJvd3MgRXhjZXB0aW9uIHdyYXBwZXIgZm9yIENyZWF0aW9uRmFpbGVkRXhjZXB0aW9uLAog ICAgICogICAgICAgICAgICAgICAgICAgSU9FeGNlcHRpb24sIGFuZCBNYWxmb3JtZWRYTUlFeGNl cHRpb24KICAgICAqLwogICAgcHJpdmF0ZSB2b2lkIGxvYWRYTUlNb2RlbChTdHJpbmcgbmFtZSwg U3RyaW5nIHhtaUZpbGVuYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAvLyBpcyBtb2Rl bCBsb2FkZWQgYWxyZWFkeT8KICAgICAgICAvL2xvZy5kZWJ1ZygibG9hZFhNSU1vZGVsKG5hbWU9 IiArIG5hbWUgKyAiLCB4bWlGaWxlbmFtZT0iICsgeG1pRmlsZW5hbWUgKyAiKSIpOwogICAgICAg IFJlZlBhY2thZ2UgbXAgPSByZXBvc2l0b3J5LmdldEV4dGVudChuYW1lKTsKICAgICAgICBpZiAo bXAgPT0gbnVsbCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9sb2cuZGVi dWcoInJlcG9zaXRvcnkgPSAiICsgcmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICBsb2cuZGVi dWcoInhtaUZpbGVuYW1lID0gIiArIHhtaUZpbGVuYW1lKTsKCiAgICAgICAgICAgICAgICAvL1VS TCB4bWlVUkwgPSBOQk1EUkdlbmVyYXRvci5jbGFzcy5nZXRSZXNvdXJjZSh4bWlGaWxlbmFtZSk7 CiAgICAgICAgICAgICAgICBGaWxlIHhtaUZpbGUgPSBuZXcgRmlsZSh4bWlGaWxlbmFtZSk7CiAg ICAgICAgICAgICAgICBVUkwgeG1pVVJMID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmICh4bWlG aWxlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB4bWlVUkwgPSB4bWlGaWxlLnRvVVJM KCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5l dyBFeGNlcHRpb24oIk51bGxQb2ludGVyRXhjZXB0aW9uOiBmaWxlbmFtZSAiICsgeG1pRmlsZW5h bWUgKyAiIG5vdCBmb3VuZCEgbG9hZFhNSU1vZGVsIGZhaWxlZC4iKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygieG1pVVJMPSAiICsgeG1pVVJMKTsKICAgICAg ICAgICAgICAgIFN0cmluZyB4bWlVUkxTdHJpbmcgPSBudWxsOwogICAgICAgICAgICAgICAgaWYg KHhtaVVSTCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgeG1pVVJMU3RyaW5nID0geG1p VVJMLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk51bGxQb2ludGVyRXhjZXB0aW9uOiBmaWxlbmFtZSAi ICsgeG1pRmlsZW5hbWUgKyAiIG5vdCBmb3VuZCEgbG9hZFhNSU1vZGVsIGZhaWxlZC4iKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygieG1pVVJMU3RyaW5nID0g IiArIHhtaVVSTFN0cmluZyk7CgogICAgICAgICAgICAgICAgUmVmUGFja2FnZSBtb2RlbCA9IHJl cG9zaXRvcnkuY3JlYXRlRXh0ZW50KG5hbWUpOwogICAgICAgICAgICAgICAgWE1JUmVhZGVyIHht aXJlYWRlciA9IFhNSVJlYWRlckZhY3RvcnkuZ2V0RGVmYXVsdCgpLmNyZWF0ZVhNSVJlYWRlcigp OwogICAgICAgICAgICAgICAgeG1pcmVhZGVyLnJlYWQoeG1pVVJMU3RyaW5nLCBtb2RlbCk7CiAg ICAgICAgICAgIH0gY2F0Y2ggKENyZWF0aW9uRmFpbGVkRXhjZXB0aW9uIGNmZSkgewogICAgICAg ICAgICAgICAgY2ZlLnByaW50U3RhY2tUcmFjZShzdGFja1RyYWNlTG9nV3JpdGVyKTsKICAgICAg ICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNyZWF0aW9uRmFpbGVkRXhjZXB0aW9uOiBD b3VsZCBub3QgcmVhZCB0aGUgcmVxdWlyZWQgWE1JIGZpbGUuICIgKyBjZmUuZ2V0TWVzc2FnZSgp KTsKICAgICAgICAgICAgfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAg ICAgICAgICAgIGlvZS5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZUxvZ1dyaXRlcik7CiAgICAg ICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJT0V4Y2VwdGlvbjogQ291bGQgbm90IHJl YWQgdGhlIHJlcXVpcmVkIFhNSSBmaWxlLiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CiAgICAgICAg ICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFhNSUV4Y2VwdGlvbiB4bWllKSB7CiAgICAgICAgICAgICAg ICB4bWllLnByaW50U3RhY2tUcmFjZShzdGFja1RyYWNlTG9nV3JpdGVyKTsKICAgICAgICAgICAg ICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlNBWEV4Y2VwdGlvbjogQ291bGQgbm90IHJlYWQgdGhl IHJlcXVpcmVkIFhNSSBmaWxlLiAiICsgeG1pZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICB9 CiAgICAgICAgfSAvL2Vsc2UgTW9kZWwgaGFzIHByb2JhYmx5IGJlZW4gbG9hZGVkCiAgICB9Cgog ICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBKTUkgY2xhc3NlcyBhY2NvcmRpbmlnIHRvIHBrZ05hbWUg c3RvcmVkIGluIE1EUi4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyaW5nIHBrZ05hbWUKICAgICAq IEBwYXJhbSBGaWxlICAgZ2VuRmlsZVBhdGgKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIHdyYXBw ZXIgZm9yIGphdmEuYmVhbnMuUHJvcGVydHlWZXRvRXhjZXB0aW9uCiAgICAgKiAgICAgICAgICAg ICAgICAgICBhbmQgamF2YS5pby5JT0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIHZvaWQg Z2VuZXJhdGVKTUkoU3RyaW5nIHBrZ05hbWUsIEZpbGUgZ2VuRmlsZVBhdGgpIHRocm93cyBFeGNl cHRpb24gewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIG9yZy5vcGVuaWRlLmZpbGVzeXN0ZW1z LkZpbGVTeXN0ZW0gdGFyZ2V0RlMgPSBuZXcgb3JnLm9wZW5pZGUuZmlsZXN5c3RlbXMuTG9jYWxG aWxlU3lzdGVtKCk7CiAgICAgICAgICAgICgoTG9jYWxGaWxlU3lzdGVtKSB0YXJnZXRGUykuc2V0 Um9vdERpcmVjdG9yeShnZW5GaWxlUGF0aCk7CgogICAgICAgICAgICBNb2RlbFBhY2thZ2UgcGtn ID0gKE1vZGVsUGFja2FnZSkgZ2V0UmVwb3NpdG9yeShwa2dOYW1lKTsKCiAgICAgICAgICAgIEpN SU1hcHBlciBqbWlNYXBwZXIgPSAoSk1JTWFwcGVyKUxvb2t1cC5nZXREZWZhdWx0KCkubG9va3Vw KEpNSU1hcHBlci5jbGFzcyk7CiAgICAgICAgICAgIGptaU1hcHBlci5nZW5lcmF0ZShuZXcgRlNT RkltcGwodGFyZ2V0RlMpLCBwa2cpOwogICAgICAgIH0gY2F0Y2ggKGphdmEuYmVhbnMuUHJvcGVy dHlWZXRvRXhjZXB0aW9uIHByb3BlKSB7CiAgICAgICAgICAgIHByb3BlLnByaW50U3RhY2tUcmFj ZShzdGFja1RyYWNlTG9nV3JpdGVyKTsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigi UHJvcGVydHlWZXRvRXhjZXB0aW9uOiBVbmFibGUgdG8gY3JlYXRlIEphdmFEYXRhT2JqZWN0ISAi ICsgcHJvcGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0 aW9uIGlvZSkgewogICAgICAgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2VMb2dX cml0ZXIpOwogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJT0V4Y2VwdGlvbjogVW5h YmxlIHRvIGNyZWF0ZSBKYXZhRGF0YU9iamVjdCEgIiArIGlvZS5nZXRNZXNzYWdlKCkpOwogICAg ICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENvbXBpbGUgTURSIGdlbmVyYXRlZCBKTUkgc291 cmNlIGZpbGVzIGluIDxjb2RlPmdlbkZpbGVQYXRoPC9jb2RlPi4KICAgICAqIFVzZSBKYXJrYXRh IEFudCBQcm9qZWN0IHRvIGNvbXBpbGUgcmVjdXJzaXZlbHkgd2hpY2ggd2lsbCBzdWJzZXF1ZW50 bHkKICAgICAqIGNhbGwgPGNvZGU+Y29tLnN1bi50b29scy5qYXZhYy5NYWluPC9jb2RlPi4KICAg ICAqIE5vdGU6IGlmIHRoZXJlIGlzIGFueSBjb21waWxhdGlvbiBlcnJvciBpbiBvbmUgc3ViLWRp cmVjdG9yeSwgQW50IHdvdWxkCiAgICAgKiBiYWlsIG91dC4KICAgICAqCiAgICAgKiBAcGFyYW0g RmlsZSBnZW5GaWxlUGF0aAogICAgICogQHRocm93cyBFeGNlcHRpb24gd3JhcHBlciBmb3Igb3Jn LmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSB2b2lk IGNvbXBpbGVKTUkoRmlsZSBnZW5GaWxlUGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAg bG9nLmRlYnVnKCJTdGFydCBjb21waWxpbmcgZmlsZXMgaW4gIiArIGdlbkZpbGVQYXRoKTsKICAg ICAgICB0cnkgewogICAgICAgICAgICBKYXZhYyBhbnRKYXZhYyA9IG5ldyBvcmcuYXBhY2hlLnRv b2xzLmFudC50YXNrZGVmcy5KYXZhYygpOwogICAgICAgICAgICBQcm9qZWN0IGFudFByb2ogPSBu ZXcgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdCgpOwoKICAgICAgICAgICAgYW50UHJvai5p bml0KCk7CgogICAgICAgICAgICBhbnRKYXZhYy5zZXRQcm9qZWN0KGFudFByb2opOwogICAgICAg ICAgICBhbnRKYXZhYy5zZXRTcmNkaXIobmV3IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlBh dGgobnVsbCwgZ2VuRmlsZVBhdGgudG9TdHJpbmcoKSkpOwogICAgICAgICAgICBhbnRKYXZhYy5z ZXREZXN0ZGlyKGdlbkZpbGVQYXRoKTsKCiAgICAgICAgICAgIGFudEphdmFjLnNldENsYXNzcGF0 aChuZXcgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuUGF0aChudWxsLCBTeXN0ZW0uZ2V0UHJv cGVydHkoImphdmEuY2xhc3MucGF0aCIpKSk7CgogICAgICAgICAgICBhbnRKYXZhYy5leGVjdXRl KCk7ICAvLyBjb21waWxlIGFsbCBKYXZhIHNvdXJjZSBmaWxlcyBpbiBnZW5GaWxlUGF0aAogICAg ICAgIH0gY2F0Y2ggKEJ1aWxkRXhjZXB0aW9uIGJ1aWxkRXgpIHsKICAgICAgICAgICAgYnVpbGRF eC5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZUxvZ1dyaXRlcik7CiAgICAgICAgICAgIGxvZy5l cnJvcigiIiwgYnVpbGRFeCk7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkJ1aWxk RXhjZXB0aW9uOiBFcnJvciBvY2N1cmVkIHdoZW4gY29tcGlsaW5nLiAiICsgYnVpbGRFeCk7CiAg ICAgICAgfQogICAgICAgIGxvZy5kZWJ1ZygiRmluaXNoZWQgY29tcGlsaW5nIGZpbGVzIGluICIg KyBnZW5GaWxlUGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBmb3IgUmVwb3NpdG9yeUxvb2t1 cAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZXN1bHQgZXh0ZW5kcyBMb29rdXAu UmVzdWx0IHsKICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdCByZXN1bHQgPSBuZXcgQXJy YXlMaXN0KCk7CgogICAgICAgIHB1YmxpYyBSZXN1bHQoT2JqZWN0IG8pIHsKICAgICAgICAgICAg aWYgKG8gIT0gbnVsbCkgcmVzdWx0LmFkZChvKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAg ICAgICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZXJlIGlz IGEgcG9zc2libGUKICAgICAgICAgKiBjaGFuZ2UgaW4gdGhpcyByZXN1bHQuCiAgICAgICAgICoK ICAgICAgICAgKiBAcGFyYW0gbCB0aGUgbGlzdGVuZXIgdG8gYWRkCiAgICAgICAgICovCiAgICAg ICAgcHVibGljIHZvaWQgYWRkTG9va3VwTGlzdGVuZXIoTG9va3VwTGlzdGVuZXIgbCkgewogICAg ICAgICAgICAvLyB0aGlzIGxvb2t1cCBuZXZlciBjaGFuZ2VzIHNvIG5vdGhpbmcgbmVlZCB0byBi ZSByZWdpc3RlcmVkCiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgYWxsIGlu c3RhbmNlcyBpbiB0aGUgcmVzdWx0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBjb2xs ZWN0aW9uIG9mIGFsbCBpbnN0YW5jZXMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgamF2YS51 dGlsLkNvbGxlY3Rpb24gYWxsSW5zdGFuY2VzKCkgewogICAgICAgICAgICByZXR1cm4gcmVzdWx0 OwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogVW5yZWdpc3RlcnMgYSBsaXN0ZW5l ciBwcmV2aW91c2x5IGFkZGVkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGwgdGhlIGxp c3RlbmVyIHRvIHJlbW92ZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxv b2t1cExpc3RlbmVyKExvb2t1cExpc3RlbmVyIGwpIHsKICAgICAgICAgICAgLy8gbm90aGluZyB3 YXMgcmVnaXN0ZXJlZAogICAgICAgIH0KICAgIH0gLy8gZW5kIHByaXZhdGUgc3RhdGljIGNsYXNz IFJlc3VsdAoKICAgIC8qcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAg IHsKICAgICAgIE5CTURSR2VuZXJhdG9yIG5ibWRyID0gbmV3IE5CTURSR2VuZXJhdG9yKCk7CiAg ICAgICB0cnkgewogICAgICAgICAgb3JnLmFwYWNoZS5sb2c0ai5Qcm9wZXJ0eUNvbmZpZ3VyYXRv ci5jb25maWd1cmUobmJtZHIuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZSgibG9nZ2VyLnByb3BlcnRp ZXMiKSk7CiAgICAgICAgICBuYm1kci5pbml0KG51bGwsIG5ldyBGaWxlKCIvZXhwb3J0L2hvbWUv am1pdGNrIikpOwogICAgICAgICAgLy9uYm1kci5nZW5lcmF0ZSgiY29tLnRzdC5HcmFwaFRoZW9y eSIsICJtZXRhbW9kZWxzL2NvbS90c3QvR3JhcGhUaGVvcnkueG1sIiwgZmFsc2UpOwogICAgICAg ICAgLy9uYm1kci5nZW5lcmF0ZSgiY29tLnRzdC5TaW1wbGVNb2RlbCIsICJtZXRhbW9kZWxzL2Nv bS90c3QvU2ltcGxlTW9kZWwueG1sIiwgZmFsc2UpOwogICAgICAgICAgbmJtZHIuZ2VuZXJhdGUo ImN6LnRzdC5DbHVzdGVyIiwgIm1ldGFtb2RlbHMvY3ovdHN0L0NsdXN0ZXIueG1sIiwgZmFsc2Up OwogICAgICAgICAgLy9uYm1kci5nZW5lcmF0ZSgiY29tLnRzdDIuUmVmZXJlbmNlTW9kZWwiLCAi bWV0YW1vZGVscy9jb20vdHN0Mi9SZWZlcmVuY2VNb2RlbC54bWwiLCBmYWxzZSk7CiAgICAgICAg ICAvL25ibWRyLmdlbmVyYXRlKCJjb20udHN0My5Db21wb3NpdGlvbiIsICJtZXRhbW9kZWxzL2Nv bS90c3QzL0NvbXBvc2l0aW9uLnhtbCIsIGZhbHNlKTsKICAgICAgICAgIC8vbmJtZHIuZ2VuZXJh dGUoImNvbS50c3Q0LkNvbnRhaW5tZW50IiwgIm1ldGFtb2RlbHMvY29tL3RzdDQvQ29udGFpbm1l bnQueG1sIiwgZmFsc2UpOwogICAgICAgICAgUmVmUGFja2FnZSBwa2cgPSBuYm1kci5jcmVhdGVS ZWZQYWNrYWdlKCJjb20udHN0LlNpbXBsZU1vZGVsIiwgIiIpOwogICAgICAgfSBjYXRjaChUaHJv d2FibGUgdCkgewogICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KICAgIH0q Lwp9Cg== ------_=_NextPart_001_01C4B696.EFA79900--