Changeset 20835 in main


Ignore:
Timestamp:
06/17/20 16:58:34 (3 weeks ago)
Author:
GarthBraithwaite_STG
Message:

java, db, admin, view - added not null Dim value sort order (needed for kendo group bys). Added DYNAMIC_VALUES_FLAG to the dim table. Simplified admin spring security to always go to edit IP list request when logging in and out. Added password encoding to admin spring security def. Updated admin to v5 spring. Removed common dimensions from QM result.xslt and set rest of standard xml defs to always use external defs. Simplified result.xslt Result.dataSource template to always produce a list even if only 1 entry. This was done to be consist and match the look of the other types of meta data being reported on. Added processing the user defined selections for the UserSelections?.xslt and Dataset.xslt json code. Changed NOT_ASSOCIATED_FLAG to NOT_SELECTABLE as this element was renamed some time ago. Updated/reverted QueryModuleRequestNameValuePairs? to add the proxy to the cross parameter to get user defined dims to work again.

Location:
trunk
Files:
13 added
11 deleted
32 edited

Legend:

Unmodified
Added
Removed
  • trunk/db/src/main/scripts/mysql/tab_c-misc_update_v3.sql

    r19586 r20835  
    5858  GEOGRAPHY_FLAG                  varchar    (1),
    5959  PROXY_FLAG                      varchar    (1),
     60  DYNAMIC_VALUES_FLAG             varchar    (1),
    6061  /* */
    6162  SORT_ORDER                      int             default null,
     
    7677  ACTIVE_FLAG                     varchar    (1),
    7778  NOT_SELECTABLE_FLAG             varchar    (1),
    78   SORT_ORDER                      int             default null,
     79  SORT_ORDER                      int             not null,
    7980  /* */
    8081  constraint DIMENSION_VALUE_UK
  • trunk/db/src/main/scripts/mysql/tab_c-validation.sql

    r19496 r20835  
    8888  DESCRIPTION                     varchar  (500),
    8989  PERIOD_FLAG                     varchar    (1),
     90  GEOGRAPHY_FLAG                  varchar    (1),
    9091  COMMUNITY_FLAG                  varchar    (1),
    91   GEOGRAPHY_FLAG                  varchar    (1),
     92  DYNAMIC_VALUES_FLAG             varchar    (1),
    9293  PROXY_FLAG                      varchar    (1),
    9394  /* */
     
    110111  ACTIVE_FLAG                     varchar    (1),
    111112  NOT_SELECTABLE_FLAG             varchar    (1),
    112   SORT_ORDER                      int             default null,
     113  SORT_ORDER                      int             not null,
    113114  /* */
    114115  constraint DIMENSION_VALUE_UK
  • trunk/db/src/main/scripts/mysql/update_tabs.sql

    r20669 r20835  
    2727alter table DATA_SOURCE add column URL         varchar(1024) after DATA_ISSUES;
    2828
     29update DIMENSION_VALUE set SORT_ORDER = 99999 where SORT_ORDER is null;
     30alter table DIMENSION_VALUE modify SORT_ORDER int not null;
    2931
    3032alter table VALUE_TYPE change column XSLT_FORMAT_PATTERN XSLT_FORMAT_PATTERN varchar(50);
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/config/spring/dimension.xml

    r17155 r20835  
    8686
    8787                                <entry key="proxyDimensionName" value="PROXY_DIMENSION_NAME"/>
     88                                <entry key="periodFlag"    value="PERIOD_FLAG"/>
    8889                                <entry key="communityFlag" value="COMMUNITY_FLAG"/>
    89                                 <entry key="periodFlag"    value="PERIOD_FLAG"/>
    9090                                <entry key="geographyFlag" value="GEOGRAPHY_FLAG"/>
    9191                                <entry key="proxyFlag"     value="PROXY_FLAG"/>
     92                                <entry key="dynamicValuesFlag" value="DYNAMIC_VALUES_FLAG"/>
    9293
    9394                                <entry key="activeFlag"  value="ACTIVE_FLAG"/>
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/config/spring/dispatcher_servlet.xml

    r18447 r20835  
    268268                                <entry key="/view/**"     value-ref="viewAccessDeniedController"/>
    269269
    270 
    271                                 <!-- W E L C O M E   /   I N D E X    H A N D L E R -->
    272                                 <!-- This mechanism along with the servlet and welcome-file-list
    273                                         definitions in the web.xml and servlet spec 2.4 allow for
    274                                         a servlet to directly handle an application root request
    275                                         (what used to be implemented as a redirect within the
    276                                         index.html file).
    277                                 -->
    278                                 <entry key="/" value-ref="indicatorEditListController"/>
    279270                        </map>
    280271                </property>
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/config/spring/security-db_authentication.xml

    r10260 r20835  
    8787        <bean id="securityDBAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    8888                <property name="userDetailsService" ref="securityDBAuthenticationUserDetailsService"/>
     89                <property name="passwordEncoder"    ref="securityPasswordEncoder"/>
    8990        </bean>
    9091
     
    110111                <property name="authenticationFailureHandler" ref="securityAuthenticationFailedAuthenticationHandler"/>
    111112
     113                <!-- set this to always forward to the IP list request.  This is safe and
     114                        makes it cleaner and easier as there's no dispacther serverlt, web.xml,
     115                        and index.jsp needed.
     116
     117                        The main issue with this approach is that this code ALWAYS goes to the
     118                        edit IP list page even if alwaysUseDefault is set to false (which is
     119                        the default). 
     120                -->
     121                <property name="authenticationSuccessHandler">
     122                        <bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
     123                                <property name="defaultTargetUrl" value="#{securityDefaultLandingURL.string}"/>
     124                        </bean>
     125                </property>
     126
    112127                <!-- if using DB authentication, might want to use the DB UserLogService:
    113128                <property name="userLogService"           ref="securityDBAuthenticationUserLogService"/>
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/config/spring/security-xml_authentication.xml

    r17143 r20835  
    2323        <bean id="securityXMLAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    2424                <property name="userDetailsService" ref="securityXMLAuthenticationUserDetailsService"/>
     25                <property name="passwordEncoder"    ref="securityPasswordEncoder"/>
    2526        </bean>
    2627
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/config/spring/security.xml

    r17645 r20835  
    1717                See the security_notes.txt file for more info on the app's security.
    1818        -->
     19
     20        <!-- =================================================== R E S O R U C E S -->
     21        <bean id="securityDefaultLandingURL" class="org.ibisph.model.StringHolder">
     22                <description>
     23                        Default URL redirected to after successful login.
     24                </description>
     25                <constructor-arg value="/edit/indicator/list"/>
     26        </bean>
     27
     28        <bean id="securityPostLogoutRedirectURL" class="org.ibisph.model.StringHolder">
     29                <description>
     30                        URL redirected to after logout
     31                </description>
     32                <constructor-arg value="#{securityDefaultLandingURL.string}"/>
     33        </bean>
     34
     35        <bean id="securityAuthorityAdmin" class="org.ibisph.model.StringHolder">
     36                <constructor-arg type="java.lang.String" value="admin"/>
     37        </bean>
     38
     39
     40        <bean id="securityIntegrationLoggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
     41
     42
    1943        <!-- ============================================= F I L T E R   P R O X Y -->
    2044        <bean id="securityFilterChainProxy" class="org.springframework.security.web.FilterChainProxy">
     
    105129
    106130
    107         <!-- =================================================== R E S O R U C E S -->
    108         <bean id="securityAuthorityAdmin" class="org.ibisph.model.StringHolder">
    109                 <constructor-arg type="java.lang.String" value="admin"/>
    110         </bean>
    111 
    112         <bean id="securityPostLogoutRedirectURL" class="org.ibisph.model.StringHolder">
    113                 <description>
    114                         URL redirected to after logout
    115                 </description>
    116                 <constructor-arg value="/"/>
    117         </bean>
    118 
    119         <bean id="securityIntegrationLoggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
    120 
    121 
    122131        <!-- ======================================================= F I L T E R S -->
    123132        <bean id="securitySecurityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
     
    189198                <property name="JDBCTemplateFactory" ref="commonJDBCTemplateFactory"/>
    190199        </bean>
     200
     201<!--
     202        <bean id ="securityPasswordEncoder" class="org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method="getInstance"/>
     203-->
     204        <bean id ="securityPasswordEncoder" class="org.springframework.security.crypto.password.DelegatingPasswordEncoder">
     205                <description>
     206                        The delegating encoder allows for various encoders to be used.  These
     207                        encoders can be anything from no encoding/plain text to standard
     208                        public/private key enctrption to the current state of the art slow
     209                        salt based hash encoders.  The delegator simply goes through the map
     210                        to determine which encoder to use.  The map key is the prefix of the
     211                        encoded string surrounded by braces example: {key}.  The authentication
     212                        provider simply calls the "match" with the plain text and the encoded
     213                        text and returns the test.  The default ID encoder specifies the encoder
     214                        to be used when some code is encoding a value.  The delegating encoder
     215                        a great way to have multiple encoders available and to add new ones in
     216                        the future as they become available.
     217
     218                        There are 2 use cases.  1) user authentication (plain text from login
     219                        page) against their encoded (XML/db) stored password string, 2) when
     220                        creating or updating an existing user's password (new registration or
     221                        when saving a user via the admin app - if coded to do so). 
     222
     223                        The "noop" handles the case of no encoding (plain text).  However, when
     224                        using this delegating code the non encoded password still requires a
     225                        matching value prefix with "{noop}" or "{plaintext}" (see below for
     226                        a null value entry).  For example in a user XML file element would 
     227                        look like: [PASSWORD]{noop}MyNotVerySecretPassword[/PASSWORD].
     228
     229                        The other way to handle no encoding is to simply use the NoOpPasswordEncoder
     230                        directly.  The NoOp is deprecated because SS want to let us know it
     231                        is insecure and for legacy use only.  However, they do NOT have plans
     232                        for this to go away anytime soon.  Using a null key for noop works as
     233                        of 6/8/2020. 
     234
     235                        IMPORTANT NOTE: Password encoding is NOT wired up to auto encode when
     236                        saving a new self registered user (or any other field).  The password
     237                        in the ibis UserDetails object is a simple string that is either plain
     238                        text or some encoded value that is read in and used to authenticate. 
     239                        The authentication provider has a handle to the UserDetails and does a
     240                        "match" call.  To encode a value it MUST be explicitly encoded prior
     241                        to saving it. 
     242
     243                        IMPORTANT NOTE #2: If a one way hash type encoder there is NO way of
     244                        decoding it back to its original value so you can't simply decode and
     245                        email a user their password.  Once set the only option is to reset it
     246                        and allow the user to enter a new value which is then encoded and saved.
     247
     248                        IMPORTANT NOTE #3: Encoded values are only good for use with the app/
     249                        code that originally encoded them.  If a value is encoded by some
     250                        other means e.g. a db trigger or some other auto encode feature of a
     251                        db these values must be decoded when selected from the db to be used
     252                        (unless a special encoder is deployed and wired into the app).
     253                </description>
     254                <constructor-arg index="0" value="bcrypt"/>
     255                <constructor-arg index="1">
     256                        <map>
     257                                <entry><key><null/></key><bean class="org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method="getInstance"/></entry>
     258                                <entry key="bcrypt"><bean class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/></entry>
     259                        </map>
     260                </constructor-arg>
     261        </bean>
    191262
    192263
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/jsp/dimension/_help.jsp

    r17155 r20835  
    8181<c:set var="proxyDimensionNameHelp">
    8282        A <span class="Bold">Proxy Dimension</span> is a way to group similar dimensions. For instance,
    83         you might put all age group dimensions into an AgeGrpProxy dimension. This variable is not
    84         in use, yet.
     83        you might want all age group dimensions to be associated with the AgeGrpProxy dimension.
     84        See the help for the proxy for more information.
    8585</c:set>
    8686
    8787<c:set var="proxyFlagHelp">
    88         The <span class="Bold">Proxy Flag</span> tags this dimension as a proxy definition.
    89         Currently this flag value is not used by the view system but likely will be.
    90         This will allow the XSLT code to easily determine if it should be displayed
    91         as a dimension selection or if it should only be used for the query builder
    92         display by selections.
     88        The <span class="Bold">Proxy Flag</span> tags this dimension as a more general
     89        proxy definition that does NOT contain any dimension values.  Currently proxy
     90        dimensions are NOT implemented for the indicator profile data.  It is currently
     91        only used for grouping data on the dataset query dimensions.  This proxy mechanism
     92        provides a single grouping selection umbrella over one of several associated
     93        selections a user might choose.  For example Year is a proxy dimension that is
     94        on the grouping selection menu (single year, 3 and 5 year grouping are NOT
     95        listed on the grouping menu - only the year proxy).  Single year, three and five
     96        year groups are all associated with this proxy so if a user selects a 3 year group
     97        the "Year" proxy knows to group the data by 3 year groups.  For this to work
     98        the associated Proxy Dimension Name MUST be entered into the actual, real
     99        dimension definition.
    93100</c:set>
    94101
     
    117124</c:set>
    118125
     126<c:set var="dynamicValuesFlagHelp">
     127        Check the <span class="Bold">Dynamic Values</span> box if this dimension is
     128        used for special backend IBISQ query results where the dimension values are
     129        generated by SAS and are not specified or controlled via database dimension
     130        value entries.
     131</c:set>
     132
    119133
    120134<%-- standard variable definitions that are likely good enough...
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/jsp/dimension/detail.jsp

    r18564 r20835  
    4545                                "
    4646                        />
     47                        <tag:detailTableRowCheckbox label="Is Period" name="periodFlag"
     48                                checked="${dimension.period}" help="${periodFlagHelp}"
     49                                note="(check if this dimension is a period)"
     50                        />
    4751                        <tag:detailTableRowCheckbox label="Is Community" name="communityFlag"
    4852                                checked="${dimension.community}" help="${communityFlagHelp}"
    4953                                note="(check if this dimension is a community)"
    50                         />
    51                         <tag:detailTableRowCheckbox label="Is Period" name="periodFlag"
    52                                 checked="${dimension.period}" help="${periodFlagHelp}"
    53                                 note="(check if this dimension is a period)"
    5454                        />
    5555                        <tag:detailTableRowCheckbox label="Is Geography" name="geographyFlag"
     
    6161                                note="(check if this dimension is a proxy)"
    6262                        />
     63                        <tag:detailTableRowCheckbox label="Is Dynamic" name="dynamicValuesFlag"
     64                                checked="${dimension.dynamicValuesFlag}" help="${dynamicValuesFlagHelp}"
     65                                note="(check if this dimension has dynamic dimension values)"
     66                        />
    6367                        <tag:detailTableRowSeperator/>
    6468                        <tag:detailTableRowInput    label="Sort Order"  name="sortOrder"   maxlength="10" value="${dimension.sortOrder}" type="number" cssClass="SortOrder" help="${sortOrderHelp}"/>
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/jsp/dimension/value/_help.jsp

    r19357 r20835  
    7676
    7777
     78<c:set var="sortOrderHelp">
     79        <span class="Bold">Sort Order</span> controls the order that the dimension value will appear on
     80        the list page and in any selection lists. Items with duplicate sort order values will be sorted,
     81        within that sort order value, on some other field, such as the name or title.
     82        <br/><br/>
     83
     84        <div class="Bold">IMPORTANT NOTE:</div>
     85        The sort order field is also used to control/specify data grouping for the data
     86        table and two dimensional charts.  If values are not unique then the data will
     87        be combined and will be able to be displayed properly.
     88</c:set>
     89
     90
    7891<%-- standard variable definitions that are likely good enough...
    7992<c:set var="descriptionHelp">
    80 </c:set>
    81 
    82 <c:set var="sortOrderHelp">
    8393</c:set>
    8494
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/jsp/dimension/value/detail.jsp

    r19380 r20835  
    3030                        <tag:detailTableRowInput    label="Authority Name" name="authorityName" maxlength="100" value="${dimensionValue.authorityName}" help="${authorityNameHelp}"/>
    3131                        <tag:detailTableRowSeperator/>
    32                         <tag:detailTableRowInput    label="Sort Order"     name="sortOrder"   maxlength="10" value="${dimensionValue.sortOrder}" type="number" cssClass="SortOrder" help="${sortOrderHelp}"/>
     32                        <tag:detailTableRowInput    label="Sort Order"     name="sortOrder"   maxlength="10" value="${dimensionValue.sortOrder}" required="true" type="number" cssClass="SortOrder" help="${sortOrderHelp}"/>
    3333                        <tag:detailTableRowCheckbox label="Is Active"      name="activeFlag" checked="${dimensionValue.active}" help="${activeFlagHelp}"/>
    3434                        <tag:detailTableRowCheckbox label="Is Not Selectable" name="notSelectableFlag" checked="${dimensionValue.notSelectable}" help="${notSelectableFlagHelp}"/>
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/jsp/dimension/value/list.jsp

    r19380 r20835  
    5656                                <th scope="col">Description</th>
    5757                                <th scope="col" class="Authority">Authority Name</th>
    58                                 <th scope="col" class="SortOrder" title="Value used to determine how to order records (must be blank or numeric and can include decimal points).">Sort Order</th>
     58                                <th scope="col" class="SortOrder" title="Value used to determine how to order records (must be blank or numeric and can include decimal points).">Sort Order *</th>
    5959                                <th scope="col" class="ActiveFlag" title="Controls if this item shows up in validation lists and if it is publishable.">Active</th>
    6060                                <th scope="col" class="ActiveFlag" title="Controls if this item shows up in dimension selection lists.">Hidden</th>
     
    8787                                </td>
    8888                                <td class="SortOrder">
    89                                         <input type="number" name="sortOrder" maxlength="10" value="${value.sortOrder}" ${onChange}/>
     89                                        <input type="number" name="sortOrder" required="required" maxlength="10" value="${value.sortOrder}" ${onChange}/>
    9090                                </td>
    9191                                <td class="ActiveFlag">
  • trunk/ibisph-admin/src/main/webapp/WEB-INF/web.xml

    r19756 r20835  
    464464
    465465
    466         <!-- =============================== D E F A U L T / W E L C O M E   P A G E -->
    467         <!--
    468                 NOTE: This has to be a physical file for anything prior to Servlet API 2.4.
    469                 If 2.4+ you can map the servlet then use the servlet name in the welcome
    470                 list.
    471 
    472                 For db authentication implementation the welcome list can simply point
    473                 to the Welcome.html file as shown here:
    474 
    475                 <welcome-file>Welcome.html</welcome-file>
    476 
    477                 The problem with this approach is that once authenticated and if the
    478                 user hits the root of the app it will display the login page again. 
    479                 This is not typically what is wanted.  If the welcome file points to
    480                 the indicator list (as is typically done for Siteminder/pre auth)  then
    481                 a Non Authenticated Exception is thrown which then brings up the logon
    482                 page (Welcome.html) anyway.  The user can bookmark the /Welcome.html
    483                 page as the default and the exception will not be thrown. 
    484 
    485                 Since the default behavior is to show the indicator list for all users
    486                 AND since the user won't have any indicators/be able to do anything if
    487                 they're not authenticated the list it is.  This also makes this web.xml
    488                 consistent between the siteminder and db implemenations.
    489 
    490                 For the default "/" to go to the "edit/indicator/list" request, an  "/"
    491                 entry is needed in the dispatcher_servlet.xml at the end that looks like:
    492                 <prop key="/">Indicator.Edit.List.Controller</prop>
    493         -->
    494         <welcome-file-list>
    495                 <welcome-file>edit/indicator/list</welcome-file>
    496         </welcome-file-list>
    497 
    498 
    499466        <!-- ======================================= H T T P   E R R O R   P A G E S -->
    500467        <error-page><error-code>401</error-code><location>/WEB-INF/jsp/error/detail.jsp?message=You are not authorized to view the requested resource.</location></error-page>
  • trunk/ibisph-view/src/main/webapp/WEB-INF/config/spring/query.xml

    r20583 r20835  
    217217<ref bean="commonAncillaryValuesModelMap"/>
    218218<ref bean="commonDataSourcesModelMap"/>
    219 <ref bean="commonDimensionsModelMap"/>
    220219<ref bean="commonMeasuresModelMap"/>
    221220<ref bean="commonValueTypesModelMap"/>
     
    243242<ref bean="commonAncillaryValuesModelMap"/>
    244243<ref bean="commonDataSourcesModelMap"/>
    245 <ref bean="commonDimensionsModelMap"/>
    246244<ref bean="commonMeasuresModelMap"/>
    247245<ref bean="commonValueTypesModelMap"/>
  • trunk/ibisph-view/src/main/webapp/WEB-INF/config/spring/security.xml

    r20786 r20835  
    1010                See the security_notes.txt file for more info on the view app's security.
    1111        -->
     12
     13        <!-- =================================================== R E S O R U C E S -->
     14        <bean id="securityIntegrationLoggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
     15
     16        <bean id="securityPostLogoutRedirectURL" class="org.ibisph.model.StringHolder">
     17                <description>
     18                        URL redirected to after logout
     19                </description>
     20                <constructor-arg value="/"/>
     21        </bean>
     22
    1223
    1324        <!-- ============================================= F I L T E R   P R O X Y -->
     
    151162                        </list>
    152163                </constructor-arg>
    153         </bean>
    154 
    155 
    156 
    157         <!-- =================================================== R E S O R U C E S -->
    158         <bean id="securityIntegrationLoggerListener" class="org.springframework.security.authentication.event.LoggerListener"/>
    159 
    160         <bean id="securityPostLogoutRedirectURL" class="org.ibisph.model.StringHolder">
    161                 <description>
    162                         URL redirected to after logout
    163                 </description>
    164                 <constructor-arg value="/"/>
    165164        </bean>
    166165
     
    281280        <bean id="securityAuthenticationProviderList" class="java.util.ArrayList">
    282281                <description>
    283                         Defines the types of provides to be used for authenticating a user.
     282                        Defines the types of providers to be used for authenticating a user.
    284283                        This list can be 1:n with the first being tried then the next etc
    285284                        until successful/all providers have been tried.
  • trunk/ibisph-view/src/main/webapp/xsd/dimensions.xsd

    r17155 r20835  
    2828
    2929                                                        <xsd:choice>
    30                                                                 <!-- dynamic means that the user or the backend actually provides this value -->
     30                                                                <!-- Cynamic flag means that there are NOT supposed
     31                                                                        to be dim values.  This is needed for backend
     32                                                                        IBISQ where the user has entered custom/user
     33                                                                        defined values that the backend processes. 
     34
     35                                                                        NOTE: This helps document usage. However, the
     36                                                                        admin app does NOT enforce this restriction
     37                                                                        so this flag can be set and the user can still
     38                                                                        enter dim values (but some XSLT code does check
     39                                                                        for the flag).
     40                                                                -->
    3141                                                                <xsd:element name="DYNAMIC_VALUES_FLAG" type="xsd:string" minOccurs="0" maxOccurs="1"/>
    3242                                                                <xsd:element name="VALUES" minOccurs="0" maxOccurs="1">
  • trunk/ibisph-view/src/main/webapp/xsd/query_module.xsd

    r20699 r20835  
    4848                                <xsd:element name="QUERY_APPLICATION_REQUEST_ADD_NON_FILTERED_GROUP_BY_DIMENSION_VALUES_FLAG" type="xsd:string" minOccurs="0">
    4949                                        <xsd:annotation><xsd:documentation xml:lang="en">
    50                                         used in AddIBISQResultToQueryModule when building the request
     50                                        Controls non filtered values to be included in the IBISQ request. 
     51                                        This is used in AddIBISQResultToQueryModule when building the request
    5152                                        URL.  This is the part of the IBIS-Q data frame effort.  IBIS-Q
    5253                                        conf must still be done for this to work.  Also available in
    5354                                        the CONFIGURATION section which overrides this optional value.
     55                                        See Lois for if this is actually needed as of 6/15/2020 it's not
     56                                        very clear that this is 100% valid as in some cases "unknown"
     57                                        dim values are needed to be processed to give a correct total
     58                                        value from IBISQ. 
    5459                                        </xsd:documentation></xsd:annotation>
    5560                                </xsd:element>
     
    246251                                                        <!-- backend data frame flag.  Overrides root QDS value. -->
    247252                                                        <xsd:element name="QUERY_APPLICATION_REQUEST_ADD_NON_FILTERED_GROUP_BY_DIMENSION_VALUES_FLAG" type="xsd:string" minOccurs="0"/>
     253
    248254
    249255                                                        <!-- only works when spring java config is wired to
  • trunk/ibisph-view/src/main/webapp/xslt/html/query/UserSelections.xslt

    r20667 r20835  
    5656                <xsl:param name="selectedDimensionValues" ibis:doc="text nodes used as a key to get actual dim value."/>
    5757
    58                 <xsl:variable name="dimensionValues" select="$dimension/VALUES/VALUE[normalize-space(text()[1]) = $selectedDimensionValues]"/>
    59                 <xsl:for-each select="$dimensionValues">
    60                         <xsl:sort select="SORT_ODRER" order="ascending" data-type="number"/>
    61                         <xsl:if test="position() != 1">, </xsl:if>
    62                         <xsl:value-of select="ibis:getDimensionValueTitle(.)"/>
    63                 </xsl:for-each>
     58                <xsl:if test="not($dimension/DYNAMIC_VALUES_FLAG)">
     59                        <xsl:variable name="dimensionValues" select="$dimension/VALUES/VALUE[normalize-space(text()[1]) = $selectedDimensionValues]"/>
     60                        <xsl:for-each select="$dimensionValues">
     61                                <xsl:sort select="SORT_ODRER" order="ascending" data-type="number"/>
     62                                <xsl:if test="position() != 1">, </xsl:if>
     63                                <xsl:value-of select="ibis:getDimensionValueTitle(.)"/>
     64                        </xsl:for-each>
     65                </xsl:if>
     66
     67                <xsl:if test="exists($dimension/DYNAMIC_VALUES_FLAG)">
     68                        <xsl:for-each select="$selectedDimensionValues">
     69                                <xsl:if test="position() != 1">, </xsl:if>
     70                                <xsl:value-of select="."/>
     71                        </xsl:for-each>
     72                </xsl:if>
    6473        </xsl:template>
    6574
  • trunk/ibisph-view/src/main/webapp/xslt/html/query/module/builder/Builder.xslt

    r20667 r20835  
    120120        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    121121        <xsl:template match="PARAMETERS/PARAMETER" mode="Builder.hiddenInput"
    122                 ibis:doc="Match template with a 'HIDDEN_PARAMETER' mode that
     122                ibis:doc="Match template with a 'HIDDEN_INPUT_FLAG' mode that
    123123                        creates a 'hidden' 'input' element with the appropriate name and
    124124                        value attributes."
  • trunk/ibisph-view/src/main/webapp/xslt/html/query/module/result/Page.xslt

    r20639 r20835  
    248248                </xsl:call-template>
    249249
    250 
    251250                <xsl:call-template name="ContentContainer.expandable">
    252251                        <xsl:with-param name="title" select="'Technical Notes'"/>
  • trunk/ibisph-view/src/main/webapp/xslt/html/query/module/result/Result.xslt

    r20796 r20835  
    2323        />
    2424
    25         <xsl:param name="Result.useExternalXML" select="true()"
    26                 ibis:doc="Controls where the supplemental XML data resides.  If true then
    27                         the XML to be referenced is an external XML file.  If false then the
    28                         XML resides within the IP XML file.  For adopters that want 100%
    29                         self contained IP XML set this to false.  For database/centralized
    30                         data referencing set to true.
    31                 "
    32         />
    33 
    3425        <xsl:param name="AncillaryValues"/>
    35         <xsl:param name="Result.ancillaryValues" select="if($Result.useExternalXML or not($Result.queryModule/ANCILLARY_VALUES)) then $AncillaryValues/ANCILLARY_VALUES else $Result.queryModule/ANCILLARY_VALUES"/>
     26        <xsl:param name="Result.ancillaryValues" select="$AncillaryValues/ANCILLARY_VALUES"/>
    3627
    3728        <xsl:param name="DataSources"/>
    38         <xsl:param name="Result.dataSources" select="if($Result.useExternalXML or not($Result.queryModule/DATA_SOURCES))
    39                 then $DataSources/DATA_SOURCES/DATA_SOURCE[NAME = $Result.queryConfiguration/DATA_SOURCE_NAMES/DATA_SOURCE_NAME]
    40                 else $Result.queryModule/DATA_SOURCES/DATA_SOURCE[NAME = $Result.queryConfiguration/DATA_SOURCE_NAMES/DATA_SOURCE_NAME]"
    41         />
    42 
    43         <xsl:param name="Dimensions"/>
    44         <xsl:param name="Result.dimensions" select="if($Result.useExternalXML or not($Result.queryModule/DIMENSIONS))
    45                 then $Dimensions/DIMENSIONS
    46                 else $Result.queryModule/DIMENSIONS"
    47         />
     29        <xsl:param name="Result.dataSources" select="$DataSources/DATA_SOURCES/DATA_SOURCE[NAME = $Result.queryConfiguration/DATA_SOURCE_NAMES/DATA_SOURCE_NAME]"/>
     30
     31        <xsl:param name="Result.dimensions" select="$Result.queryModule/DIMENSIONS"/>
    4832
    4933        <xsl:param name="Measures"/>
    50         <xsl:param name="Result.measure" select="if($Result.useExternalXML or not($Result.queryModule/MEASURES))
    51                 then $Measures/MEASURES/MEASURE[NAME=$Result.queryConfiguration/MEASURE_NAME]
    52                 else $Result.queryModule/MEASURES/MEASURE[NAME=$Result.queryConfiguration/MEASURE_NAME]"
    53         />
     34        <xsl:param name="Result.measure" select="$Measures/MEASURES/MEASURE[NAME=$Result.queryConfiguration/MEASURE_NAME]"/>
    5435
    5536        <xsl:param name="ValueTypes"/>
    56         <xsl:param name="Result.valueTypes" select="if($Result.useExternalXML or not($Result.queryModule/VALUE_TYPES)) 
    57                 then $ValueTypes/VALUE_TYPES
    58                 else $Result.queryModule/VALUE_TYPES"
    59         />
     37        <xsl:param name="Result.valueTypes" select="$ValueTypes/VALUE_TYPES"/>
    6038
    6139        <xsl:param name="ValueAttributes"/>
    62         <xsl:param name="Result.valueAttributes" select="if($Result.useExternalXML or not($Result.queryModule/VALUE_ATTRIBUTES)) 
    63                 then $ValueAttributes/VALUE_ATTRIBUTES
    64                 else $Result.queryModule/VALUE_ATTRIBUTES"
    65         />
     40        <xsl:param name="Result.valueAttributes" select="$ValueAttributes/VALUE_ATTRIBUTES"/>
    6641
    6742
     
    160135                        </xsl:call-template>
    161136                </xsl:variable>
    162 
     137<xsl:message select="'recordDimensionFields:'"/>
     138<xsl:message select="$recordDimensionFields"/>
    163139                <xsl:variable name="recordAncillaryValueFields">
    164140                        <xsl:call-template name="Interactive.recordAncillaryValueFields">
     
    375351                <xsl:param name="dataSources" select="$Result.dataSources"/>
    376352
    377                 <xsl:if test="1 = count($dataSources)">
    378                         <xsl:call-template name="ContentContainer.contentBlock">
    379                                 <xsl:with-param name="title" select="'Data Source'"/>
    380                                 <xsl:with-param name="content" select="$dataSources[1]/TEXT"/>
    381                                 <xsl:with-param name="addWikiAttribute"     select="true()"/>
    382                         </xsl:call-template>
    383                 </xsl:if>
    384 
    385                 <xsl:if test="1 &lt; count($dataSources)">
    386                         <xsl:call-template name="ContentContainer.contentBlock">
    387                                 <xsl:with-param name="title" select="'Data Sources'"/>
    388                                 <xsl:with-param name="content">
    389                                         <ul>
    390                                         <xsl:for-each select="$dataSources">
    391                                                 <xsl:sort select="SORT_ODRER" order="ascending" data-type="number"/>
    392                                                 <xsl:sort select="TITLE"      order="ascending" data-type="text"/>
    393                                                 <li>
    394                                                         <xsl:copy-of select="TEXT"/>
    395                                                 </li>
    396                                         </xsl:for-each>
    397                                         </ul>
    398                                 </xsl:with-param>
    399                                 <xsl:with-param name="addWikiAttribute"     select="true()"/>
    400                         </xsl:call-template>
    401                 </xsl:if>
     353                <xsl:call-template name="ContentContainer.contentBlock">
     354                        <xsl:with-param name="title" select="'Data Sources'"/>
     355                        <xsl:with-param name="content">
     356                                <ul>
     357                                <xsl:for-each select="$dataSources">
     358                                        <xsl:sort select="SORT_ODRER" order="ascending" data-type="number"/>
     359                                        <xsl:sort select="TITLE"      order="ascending" data-type="text"/>
     360                                        <li>
     361                                                <xsl:copy-of select="TEXT"/>
     362                                        </li>
     363                                </xsl:for-each>
     364                                </ul>
     365                        </xsl:with-param>
     366                        <xsl:with-param name="addWikiAttribute"     select="true()"/>
     367                </xsl:call-template>
    402368        </xsl:template>
    403369
  • trunk/ibisph-view/src/main/webapp/xslt/json/Dataset.xslt

    r20732 r20835  
    125125
    126126        <xsl:template name="Dataset.datasetRecordDimensionJSON"
    127                 ibis:doc="Internal helper that localizes creating data source record dimension json."
     127                ibis:doc="Internal helper that localizes creating the dimension portion
     128                        of the kendo data source field json.
     129                "
    128130        >
    129                 <xsl:param name="datasetRecordDimension"/>
     131                <xsl:param name="datasetRecordDimension" ibis:doc="record's DIMENSION NOT the actual associated dimension."/>
    130132                <xsl:param name="recordDimensionFields"/>
    131                 <xsl:param name="dimensions"/>
     133                <xsl:param name="dimensionFieldName" select="$recordDimensionFields/RECORD_DIMENSION_FIELD[DIMENSION_NAMES/DIMENSION_NAME = $datasetRecordDimension/NAME]/NAME"/>
     134                <xsl:param name="dimensions" ibis:doc="All dimensions"/>
     135                <xsl:param name="dimension" select="$dimensions/DIMENSION[NAME=$datasetRecordDimension/NAME]"/>
    132136
    133                 <xsl:variable name="dimensionValue" select="($dimensions/DIMENSION[NAME=$datasetRecordDimension/NAME]/VALUES/VALUE[ normalize-space(text()[1]) = $datasetRecordDimension/VALUE/text()[1] ])[1]"/>
    134                 <xsl:variable name="dimensionFieldName" select="$recordDimensionFields/RECORD_DIMENSION_FIELD[DIMENSION_NAMES/DIMENSION_NAME = $datasetRecordDimension/NAME]/NAME"/>
     137                <xsl:variable name="dimensionValue"  select="if(exists($dimension/DYNAMIC_VALUES_FLAG))
     138                        then $datasetRecordDimension/VALUE
     139                        else ($dimension/VALUES/VALUE[ normalize-space(text()[1]) = $datasetRecordDimension/VALUE/text()[1] ])[1]
     140                "/>
     141<!-- GARTH TODO: remove
     142<xsl:message select="'GARTH datasetRecordDimension, dimensionValue:'"/>
     143<xsl:message select="$datasetRecordDimension"/>
     144<xsl:message select="$dimensionValue"/>
     145-->
    135146
    136147        <xsl:text/>
    137148        ,"<xsl:value-of select="$dimensionFieldName"/>":"<xsl:value-of         select="concat($datasetRecordDimension/NAME, '.', normalize-space($dimensionValue/text()[1]) )"/>"
    138         ,"<xsl:value-of select="$dimensionFieldName"/>Title":"<xsl:value-of    select="$dimensionValue/TITLE"/>"
     149        ,"<xsl:value-of select="$dimensionFieldName"/>Title":"<xsl:value-of    select="ibis:getDimensionValueTitle($dimensionValue)"/>"
    139150        ,"<xsl:value-of select="$dimensionFieldName"/>SortOrder":<xsl:value-of select="if(not($dimensionValue/SORT_ORDER)) then 0 else $dimensionValue/SORT_ORDER"/>
    140151        <xsl:text/>
  • trunk/ibisph/src/main/java/org/ibisph/indicatorprofile/databean/Dimension.java

    r17632 r20835  
    2020    addField("DESCRIPTION",    Field.TYPE_STRING);
    2121    addField("PROXY_DIMENSION_NAME", Field.TYPE_STRING);
     22    addField("GEOGRAPHY_FLAG", Field.TYPE_STRING);
     23    addField("COMMUNITY_FLAG", Field.TYPE_STRING);
    2224    addField("PERIOD_FLAG",    Field.TYPE_STRING);
    23     addField("COMMUNITY_FLAG", Field.TYPE_STRING);
    24     addField("GEOGRAPHY_FLAG", Field.TYPE_STRING);
    2525    addField("PROXY_FLAG",     Field.TYPE_STRING);
     26    addField("DYNAMIC_VALUES_FLAG", Field.TYPE_STRING);
    2627    addField("SORT_ORDER",     Field.TYPE_BIGDECIMAL);
    2728    addField("ACTIVE_FLAG",    Field.TYPE_STRING);
     
    6061    return( getStringFieldValue("PROXY_FLAG") );
    6162  }
     63  public String getDynamicValuesFlag() {
     64    return( getStringFieldValue("DYNAMIC_VALUES_FLAG") );
     65  }
    6266  public String getSortOrder() {
    6367    return( getStringFieldValue("SORT_ORDER") );
     
    8286    return( org.ibisph.util.StrLib.isSomething(getProxyFlag()) );
    8387  }
     88  public boolean isDynamicValuesFlag() {
     89    return( org.ibisph.util.StrLib.isSomething(getDynamicValuesFlag()) );
     90  }
     91
    8492  public boolean isActive() {
    8593    return( org.ibisph.util.StrLib.isSomething(getActiveFlag()) );
  • trunk/ibisph/src/main/java/org/ibisph/indicatorprofile/databean/DimensionValue.java

    r16500 r20835  
    1919    addField("DESCRIPTION",    Field.TYPE_STRING);
    2020    addField("AUTHORITY_NAME", Field.TYPE_STRING);
    21     addField("SORT_ORDER",     Field.TYPE_BIGDECIMAL);
     21    addField("SORT_ORDER",     Field.TYPE_BIGDECIMAL, false, true);
    2222    addField("ACTIVE_FLAG",    Field.TYPE_STRING);
    2323    addField("NOT_SELECTABLE_FLAG", Field.TYPE_STRING);
  • trunk/ibisph/src/main/java/org/ibisph/querymodule/modelmap/AddAuthorizedSelectedDimensions.java

    r13025 r20835  
    134134
    135135            // loop all the AUTH DIM VALUE elements to auto add.  Check that the
    136             // user has the needed privs.  If has auth set the flag (need to track
     136            // user has the needed privs.  If has auth, set the flag (need to track
    137137            // so that if the user does not have any auths then need to throw.
    138138            List<Node> dimensionWithAuthorityValueList = XMLLib.getNodes(dimensionWithAuthority, "VALUES/VALUE");
    139139            for(Node dimensionWithAuthorityValue : dimensionWithAuthorityValueList) {
    140140              String authority = XMLLib.getText(dimensionWithAuthorityValue, "AUTHORITY");
    141               Node notAssociated = XMLLib.getNode(dimensionWithAuthorityValue, "NOT_ASSOCIATED_FLAG");
    142               if(userDetails.hasAuthority(authority) && (null == notAssociated)) {
     141              Node notSelectable = XMLLib.getNode(dimensionWithAuthorityValue, "NOT_SELECTABLE_FLAG");
     142              if(userDetails.hasAuthority(authority) && (null == notSelectable)) {
    143143                hasAnAuthority = true;
    144144                String valueText = XMLLib.getText(dimensionWithAuthorityValue);
  • trunk/ibisph/src/main/java/org/ibisph/querymodule/service/QueryModuleRequestNameValuePairs.java

    r17596 r20835  
    250250  ) throws Exception {
    251251
     252    String selectedCategoryGroupBy = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/CATEGORY_DIMENSION_NAME");
     253    String selectedSeriesGroupBy   = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/SERIES_DIMENSION_NAME");
     254    String selectedOtherGroupBy    = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/OTHER_DIMENSION_NAME");
     255
    252256    String actualCategoryGroupBy   = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/ACTUAL_GROUP_BY/CATEGORY_DIMENSION_NAME");
    253257    String actualSeriesGroupBy     = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/ACTUAL_GROUP_BY/SERIES_DIMENSION_NAME");
    254258    String actualOtherGroupBy      = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/ACTUAL_GROUP_BY/OTHER_DIMENSION_NAME");
    255259
    256     // first do the cross params
    257     if((null != actualSeriesGroupBy) && actualSeriesGroupBy.equals(actualCategoryGroupBy)) actualSeriesGroupBy = null;
    258 
    259     _addDelimitedNameValuePair(null, "cross1", actualCategoryGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
     260    // If series and category are same clear series.
     261    if((selectedSeriesGroupBy != null) && selectedSeriesGroupBy.equals(selectedCategoryGroupBy)) selectedSeriesGroupBy = null;
     262
     263    // Set the cross params.  Always have a category.  Need to handle special
     264    // cross 3 and if not cross3 then do cross2.  In 2018 simplified code was
     265    // implemented that just used the actuals and only set the associated selected
     266    // if needed.  This worked for most QMs but it did NOT work when doing dynamic
     267    // dimensions e.g. user defined dimension values for dims like Year9 or YearGrp9.
     268    // Notes and a ticket specify that the xxxProxy is required by the IBISQ code
     269    // to work.  As such the crosses are set to the selected value NOT the actuals.
     270    _addDelimitedNameValuePair(null, "cross1", selectedCategoryGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
    260271    if(StrLib.isSomething(actualOtherGroupBy)) {
    261       _addDelimitedNameValuePair(null, "cross2", actualSeriesGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
     272      _addDelimitedNameValuePair(null, "cross2", selectedOtherGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
    262273      if(StrLib.isSomething(actualSeriesGroupBy))
    263         _addDelimitedNameValuePair(null, "cross3", actualSeriesGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
    264     }
    265     else if(StrLib.isSomething(actualSeriesGroupBy))
    266       _addDelimitedNameValuePair(null, "cross2", actualSeriesGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
    267 
    268     // next if doing the data frame or there are authorized dimension values
    269     // or the flag is set to add all then add all non filtered group by values.
     274        _addDelimitedNameValuePair(null, "cross3", selectedSeriesGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
     275    }
     276    else if(StrLib.isSomething(selectedSeriesGroupBy))
     277      _addDelimitedNameValuePair(null, "cross2", selectedSeriesGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
     278
     279    // Next add the actual to selected proxy group bys as IBIS-Q requires them
     280    // for custom user defined/entered dynamic entries e.g. Year9.
     281
     282// GARTH TODO: previous versions of this code had this at the end for some reason???  There's not checking or dependence so not sure why???
     283// This code does NOT check if the selected is the proxy and actual is associated.
     284// it also does not reference the dim DYNAMIC_VALUE_FLAG which it should???
     285// maybe it should only set if proxy and dynamic????
     286    if(StrLib.isSomething(selectedCategoryGroupBy) && !selectedCategoryGroupBy.equals(actualCategoryGroupBy)) _addDelimitedNameValuePair(null, selectedCategoryGroupBy, actualCategoryGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
     287    if(StrLib.isSomething(selectedSeriesGroupBy)   && !selectedSeriesGroupBy.equals(actualSeriesGroupBy))     _addDelimitedNameValuePair(null, selectedSeriesGroupBy,   actualSeriesGroupBy,   false, null, nameValuePairs, urlCharacterEncoding);
     288    if(StrLib.isSomething(selectedOtherGroupBy)    && !selectedOtherGroupBy.equals(actualOtherGroupBy))       _addDelimitedNameValuePair(null, selectedOtherGroupBy,    actualOtherGroupBy,    false, null, nameValuePairs, urlCharacterEncoding);
     289
     290    // lastly, if doing the data frame or there are authorized dimension values
     291    // or the flag is set to add all (QUERY_APPLICATION_REQUEST_ADD_NON_FILTERED_GROUP_BY_DIMENSION_VALUES_FLAG)
     292    // then add all non filtered group by values.
    270293    boolean addNonFiltered = this.addNonFilteredGroupByDimensionValues || this.hasAddNonFilteredGroupByDimensionValuesFlag(document);
    271294    if(addNonFiltered || processAuthorities) {
     
    275298    }
    276299
    277     // lastly, need to add any proxy group bys as IBIS-Q still uses them for
    278     // certain modules as per ZW/Tong 10/27/2014.
    279     // Custom entries e.g. Year9 = 1999-2010 needs YearProxy to work.
    280     String selectedCategoryGroupBy = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/CATEGORY_DIMENSION_NAME");
    281     String selectedSeriesGroupBy   = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/SERIES_DIMENSION_NAME");
    282     String selectedOtherGroupBy    = XMLLib.getText(document, "/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/OTHER_DIMENSION_NAME");
    283 
    284     if(StrLib.isSomething(selectedCategoryGroupBy) && !selectedCategoryGroupBy.equals(actualCategoryGroupBy)) _addDelimitedNameValuePair(null, selectedCategoryGroupBy, actualCategoryGroupBy, false, null, nameValuePairs, urlCharacterEncoding);
    285     if(StrLib.isSomething(selectedSeriesGroupBy)   && !selectedSeriesGroupBy.equals(actualSeriesGroupBy))     _addDelimitedNameValuePair(null, selectedSeriesGroupBy,   actualSeriesGroupBy,   false, null, nameValuePairs, urlCharacterEncoding);
    286     if(StrLib.isSomething(selectedOtherGroupBy)    && !selectedOtherGroupBy.equals(actualOtherGroupBy))       _addDelimitedNameValuePair(null, selectedOtherGroupBy,    actualOtherGroupBy,    false, null, nameValuePairs, urlCharacterEncoding);
    287300  } //-------------------------- End of Method ------------------------------
    288301
     
    339352
    340353    // finally if here then the add all flag is set or the group by dim has
    341     // values that require an authority - so all them all...
    342     String xpath = "/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME = '" + groupByDimensionName + "']/VALUES/VALUE";
    343     if(this.excludeNotAssociatedDimensionValues) xpath = xpath + "[not(NOT_ASSOCIATED_FLAG)]";
     354    // values that require an authority - so add them all...
     355// GARTH TODO: this is hard coded to use internal QM dims!!!!!!!!!!!!!!
     356String xpath = "/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME = '" + groupByDimensionName + "']/VALUES/VALUE";
     357    if(this.excludeNotAssociatedDimensionValues) xpath = xpath + "[not(NOT_SELECTABLE_FLAG)]";
    344358    List<Node> dimensionValues = XMLLib.getNodes(queryModule, xpath);
    345359    if(0 == dimensionValues.size()) {
  • trunk/ibisph/src/main/java/org/ibisph/user/modelmap/ProcessUserRegistration.java

    r19891 r20835  
    4343  }
    4444
     45  public void setBaseEmailVerificationRequestPath(String baseEmailVerificationRequestPath) {
     46    this.baseEmailVerificationRequestPath = baseEmailVerificationRequestPath;
     47  }
     48 
    4549  public void setEmailVerificationService(EmailAccountAccess emailVerificationService) {
    4650    this.emailVerificationService = emailVerificationService;
     
    155159    }
    156160    catch(AddressException ae) {
    157       logger.warn(".processModelMap - Email Address error, Address: {}", userEmailAddress);
     161      logger.error(".processModelMap - Address Exception (could also be due to the sending account setup) - Email Address: {}", userEmailAddress, ae);
    158162      setStatus(userProfileDocument, AbstractUserStatus.INVALID_EMAIL_ADDRESS_STATUS);
    159       return(false);
     163//      return(false);
    160164    }
    161165    catch(Exception e) {
    162166      logger.error(".processModelMap - General Email Error. Address: {}", userEmailAddress, e);
    163167      setStatus(userProfileDocument, AbstractUserStatus.EMAIL_ERROR_STATUS);
    164       return(false);
     168//      return(false);
    165169    }
    166170
  • trunk/ibisph/src/main/java/org/ibisph/user/springsecurity/DAOUserDetailsService.java

    r11741 r20835  
    1414import org.ibisph.user.databean.RoleToUser;
    1515import org.ibisph.util.StrLib;
    16 import org.ibisph.user.springsecurity.UserDetails;
    1716
    1817/**
     
    126125      authoritySet
    127126    );
    128 
    129127    return(userDetails);
    130128  } //-------------------------- End of Method ------------------------------
  • trunk/ibisph/src/main/java/org/ibisph/user/springsecurity/UserProfileXMLUserDetailsService.java

    r6282 r20835  
    1111import org.springframework.security.core.userdetails.UserDetailsService;
    1212import org.springframework.security.core.userdetails.UsernameNotFoundException;
    13 
    1413import org.dom4j.Node;
    1514
     
    4342  protected String filePath = "";
    4443  protected DocumentDAO documentDAOService = null;
    45 
    4644
    4745  // was used prior to 8/1/09.  left here for future...
     
    139137      authoritySet
    140138    );
    141 
    142139    return(userDetails);
    143140  } //-------------------------- End of Method ------------------------------
Note: See TracChangeset for help on using the changeset viewer.