<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Introduced bug from vim fixed.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a><br><b>Sent: </b>Wednesday, January 4, 2017 5:15 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:roy.walmsley@ntlworld.com">Roy Walmsley</a>; <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>RE: bug in X3D Java SAI. comparing string arrays</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The only reason the existing code works is because you are passing in an array list instead of a string array.  For example, I don’t think this code works like you expect:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        @Override<o:p></o:p></p><p class=MsoNormal>          public FontStyleObject setJustify(String[] newValue)<o:p></o:p></p><p class=MsoNormal>          {<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                  // Check that newValue parameter has one of the allowed legal   values before assigning to scene graph<o:p></o:p></p><p class=MsoNormal>                  if (!(<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_MIDDLE) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_MIDDLE_BEGIN) |  |<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_MIDDLE_END) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_MIDDLE_FIRST) |  |<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_MIDDLE_MIDDLE)   ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_BEGIN) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_BEGIN_BEGIN) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_BEGIN_END) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_BEGIN_FIRST) ||                          Arrays.asList(newValue).equals(JUSTIFY_BEGIN_MIDDLE) |  |<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_END) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_END_BEGIN) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_END_END) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_END_FIRST) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_END_MIDDLE) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_FIRST) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_FIRST_BEGIN) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_FIRST_END) ||<o:p></o:p></p><p class=MsoNormal>                          Arrays.asList(newValue).equals(JUSTIFY_FIRST_FIRST) ||                          Arrays.asList(newValue).equals(JUSTIFY_FIRST_MIDDLE)))   {<o:p></o:p></p><p class=MsoNormal>                        throw new org.web3d.x3d.sai.InvalidFieldValueException  ("FontStyle justify newValue=\"" +  Arrays.toString(newValue) + "\" has illegal value, must use a valid enumeration string.");<o:p></o:p></p><p class=MsoNormal>                  }<o:p></o:p></p><p class=MsoNormal>                  if (newValue == null) return this; // newValueNullReturnThis<o:p></o:p></p><p class=MsoNormal>                  justify.clear(); // reset<o:p></o:p></p><p class=MsoNormal>                  for (int i = 0; i < newValue.length; i++)<o:p></o:p></p><p class=MsoNormal>                  {<o:p></o:p></p><p class=MsoNormal>                          justify.add(newValue[i]);<o:p></o:p></p><p class=MsoNormal>                  }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                  return this;<o:p></o:p></p><p class=MsoNormal>          }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a><br><b>Sent: </b>Wednesday, January 4, 2017 5:05 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:roy.walmsley@ntlworld.com">Roy Walmsley</a>; <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>RE: bug in X3D Java SAI. comparing string arrays<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Changing this code is useful, because the Java SAI may be used from another language, say Python, from which converting from DOM to Python, the constants are not immediately available (but perhaps in the Object Model??).  We should allow for programmers to NOT use the constants, I think, in an understandable way, perhaps by providing our own equals method or by converting both Arrays to strings and then comparing the strings.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a><br><b>Sent: </b>Tuesday, January 3, 2017 11:01 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:roy.walmsley@ntlworld.com">Roy Walmsley</a>; <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>bug in X3D Java SAI. comparing string arrays<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The following code shows the problem with comparing string arrays.  The equals returns false, so the exception is thrown.<o:p></o:p></p><p class=MsoNormal>Please revamp this code, then apply to stylesheet code to create better SAI.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><pre><span style='color:black'>package org;<o:p></o:p></span></pre><pre><span style='color:black'><o:p> </o:p></span></pre><pre><span style='color:black'>import java.util.*;<o:p></o:p></span></pre><pre><span style='color:black'><o:p> </o:p></span></pre><pre><span style='color:black'>public class X3DObject {<o:p></o:p></span></pre><pre><span style='color:black'>        public static final ArrayList<String> JUSTIFY_MIDDLE_MIDDLE = new ArrayList<>(Arrays.asList("\"MIDDLE\",\"MIDDLE\""));<o:p></o:p></span></pre><pre><span style='color:black'>        public X3DObject() {<o:p></o:p></span></pre><pre><span style='color:black'>        }<o:p></o:p></span></pre><pre><span style='color:black'>        public void setStringArray(String [] array) throws Exception {<o:p></o:p></span></pre><pre><span style='color:black'>               if (!(Arrays.asList(array).equals(JUSTIFY_MIDDLE_MIDDLE))) {<o:p></o:p></span></pre><pre><span style='color:black'>                       throw new Exception("Illegal "+ Arrays.toString(array));<o:p></o:p></span></pre><pre><span style='color:black'>               }<o:p></o:p></span></pre><pre><span style='color:black'>        }<o:p></o:p></span></pre><pre><span style='color:black'>        public static void main(String [] args) throws Exception {<o:p></o:p></span></pre><pre><span style='color:black'>               new X3DObject().setStringArray(new String[] {"MIDDLE", "MIDDLE"});<o:p></o:p></span></pre><pre><span style='color:black'>        }<o:p></o:p></span></pre><pre><span style='color:black'>}<o:p></o:p></span></pre><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>