<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
        <base href="https://issues.shibboleth.net/jira"> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt" bgcolor="#f5f5f5"> 
            <!-- header here --> 
            <tbody>
                <tr> 
                    <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                        <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                            <tbody>
                                <tr> 
                                    <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px" width="32"> <img id="header-avatar-image" class="image_fix" src="cid:jira-generated-image-avatar-4dc31c92-2f6a-4f84-bbb0-bf76483a9a5b" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top"> </td> 
                                    <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="rdw@iay.org.uk" id="email_rdw@iay.org.uk" href="https://issues.shibboleth.net/jira/secure/ViewProfile.jspa?name=rdw%40iay.org.uk" style="color:#0052cc;; color: #3b73af; text-decoration: none">Rod Widdowson</a> <strong>commented</strong> on <a href="https://issues.shibboleth.net/jira/browse/IDP-1121" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-7e0e1cc1-0323-458d-a081-d1de140989af" height="16" width="16" border="0" align="absmiddle" alt="Task"> IDP-1121</a> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                        <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                            <tbody>
                                <tr> 
                                    <!-- there needs to be content in the cell for it to render in some clients --> 
                                    <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 15px; background-color: #ffffff; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly" height="10" bgcolor="#ffffff"> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                            <tbody>
                                                <tr> 
                                                    <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1121" style="color: #3b73af; text-decoration: none">Re: V4 Deprecation work - Attribute Resolver</a> </span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; border-bottom: none; padding-bottom: 0" bgcolor="#ffffff"> 
                                        <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0"> <p style="margin: 10px 0 0 0; margin-top: 0">(Maybe we should take this back to the list, or perhaps discuss next Friday)</p> 
                                                        <blockquote style="margin: 10px 0 0 0; border-left: 1px solid #cccccc; color: #707070; margin-left: 19px; padding: 10px 20px">
                                                            <p style="margin: 10px 0 0 0; margin-top: 0">I'd rather not go changing behavior</p>
                                                        </blockquote> <p style="margin: 10px 0 0 0">Fair enough, I can make that work, its slightly grubby but thats the cost of legacy.</p> 
                                                        <blockquote style="margin: 10px 0 0 0; border-left: 1px solid #cccccc; color: #707070; margin-left: 19px; padding: 10px 20px">
                                                            <p style="margin: 10px 0 0 0; margin-top: 0">I'm not sure what the upside is. What's lost by just getting rid of the generic and using subclasses alone?</p>
                                                        </blockquote> <p style="margin: 10px 0 0 0">It's not so much as what is lost, as what can be gained by making the thing <em>really</em> generic: code simplicity (and indeed lines of code).</p> <p style="margin: 10px 0 0 0">As you say, what we have now is neither one nor the other so it suffers from the down sides of both - a pointless superfluity of question marks and a superfluity of instanceof.</p> <p style="margin: 10px 0 0 0">By dropping the generic we basically say that the world consists of three and a half different attributes</p> 
                                                        <ol> 
                                                            <li>String</li> 
                                                            <li>XMLObject</li> 
                                                            <li>ByteArray</li> 
                                                            <li>And the half being Scoped which is "string and a bit".</li> 
                                                        </ol> <p style="margin: 10px 0 0 0">The result is:</p> 
                                                        <ul> 
                                                            <li>That all these value types have to be in the public API.</li> 
                                                            <li>That anything which needs to know whats inside the value needs to know about all these possibly types (or at least that they exist) 
                                                                <ul> 
                                                                    <li>So we end up with cascaded <tt>if instanceof ... else if instanceof ...</tt> code in functions which <em>really</em> shouldn't have to bother.</li> 
                                                                    <li>The equivalent is that "<tt>#canEncodeValue()</tt> followed by an explicit cast" thing we have in the encoders and transcoders - which I didn't like when I introduced it but didn't see how to fix since I took the idPAttributeValue<?> thing as given.</li> 
                                                                </ul> </li> 
                                                            <li>I think I can see how you can introduce other attribute values types ("OpenIDEncodedAttributeValue") and I think everything will work, but its needlessly ugly (IMO)</li> 
                                                            <li>On the other hand the <b>only</b> Value type that can carry is XXX is one of our XXXAttibuteValue, or a derivation thereof. I don't know whether that matters.</li> 
                                                        </ul> <p style="margin: 10px 0 0 0">So, to my mind the code that is aware of the explicit types is at the wrong place ("too high").</p> <p style="margin: 10px 0 0 0">My feeling (and I haven't tried it out in the code) is that in addition to <tt>IdPAttribute#getAttributeValues</tt> (which remains of use everywhere where we are just throwing buckets of values around) we introduce:</p> 
                                                        <ul> 
                                                            <li><tt>List<String> IdPAttribute#getValuesAsString()</tt> which is used in the scripted and regexp definition to replace the 30 lines code (in each definition) which iterates over all values, checks to see if they are strings, warns if they are scoped, checks to see if they are empty and at the end conjurs up a String.</li> 
                                                        </ul> 
                                                        <ul> 
                                                            <li><tt>T List<T> IdPAttribute#getValuesAs(Class<T>)</tt> which would be called to avoid asking each encoder/transcoder whether it can encode a type before then asking it to do it. Instead the encoder/transcoder just gets calls that and there is no casting needed. (although I suspect that the IdPAttribute gets a bit grubby, but that is just one place)</li> 
                                                        </ul> 
                                                        <ul> 
                                                            <li>I hadn't realized it until just now, but in fact I think you are right that you could end up not needing the subclasses at all.... AttributeValues carry objects and IdPAttribute does the heavy lifting</li> 
                                                        </ul> <p style="margin: 10px 0 0 0">I would say that the transcoder code is currently asymmetric for this reason. The decodeValue side knows about <Type>, but the encode side needs to about TypeAttributeValue at a parameter level, when it might be better off knowing about AttributeValue<Type>.</p> <p style="margin: 10px 0 0 0">This just feels cleaner to me. But again I'll not die in a ditch over it. What I think we both agree on is that unless we promote type awareness into the Attributes getters (my proposal) there is absolutely no value whatsoever in have a <?> for the AttributeValue. Leave it generic-free and use instanceof and case (like we do now).</p> <p style="margin: 10px 0 0 0">And anyway, none of this is going to happen until <a href="https://issues.shibboleth.net/jira/browse/IDP-1434" title="Redesign Attribute encoding/decoding as a service" class="issue-link" data-issue-key="IDP-1434" style="color: #3b73af; text-decoration: none">IDP-1434</a> is done and settled.</p> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                                        <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                            <tbody>
                                                                <tr> 
                                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0; vertical-align: middle"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1121#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-bb9b3ffe-1f13-463c-9ba4-71fd58054e7c" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle"> </a> </td> 
                                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://issues.shibboleth.net/jira/browse/IDP-1121#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> </td> 
                                                                </tr> 
                                                            </tbody>
                                                        </table> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <!-- there needs to be content in the cell for it to render in some clients --> 
                                <tr> 
                                    <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #ffffff; border-top: 0; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly" height="5" bgcolor="#ffffff"> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                        <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                            <tbody>
                                <tr> 
                                    <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> This message was sent by Atlassian Jira <span id="footer-build-information">(v7.12.2#712003-<span title="61a922d5458c2b34faa51a4f8074da7e37e442eb" data-commit-id="61a922d5458c2b34faa51a4f8074da7e37e442eb}">sha1:61a922d</span>)</span> </td> 
                                    <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                        <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="https://issues.shibboleth.net/jira/images/mail/atlassian-email-logo.png" alt="Atlassian logo" title="Atlassian logo" width="191" height="24" class="image_fix"> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
            </tbody>
        </table>   
    </body>
</html>