Changeset 7557 for branches/3.13-stable


Ignore:
Timestamp:
Dec 19, 2018, 3:58:34 PM (3 years ago)
Author:
Nicklas Nordborg
Message:

Fixes #2141: Invalid sync filter causes item list to be inaccessible

The exception is now caught and displayed in the "Matching items" column.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.13-stable/www/views/itemlists/view_list.jsp

    r7546 r7557  
    439439              SourceItemTransform transform = sf.getSourceItemTransformation();
    440440             
    441               StringBuilder sb = new StringBuilder();
    442               for (int filterRow = 0; filterRow < sf.getFilterRows(); filterRow++)
     441              boolean disabled = sf.isDisabled();
     442              boolean inSync = false;
     443              Throwable syncException = null;
     444              int currentMatching = 0;
     445              String filterString = "";
     446              try
    443447              {
    444                 sb.append(filterRow > 0 ? "\n<operator>OR</operator> " : "");
    445                 List<String> filters = SyncFilter.getFormattedAndSortedFilters(sf.getPropertyFilters(filterRow), filterFormatter);
    446                 sb.append(Values.getString(filters, "\n   <operator>AND</operator> ", true));
     448                StringBuilder sb = new StringBuilder();
     449                for (int filterRow = 0; filterRow < sf.getFilterRows(); filterRow++)
     450                {
     451                  sb.append(filterRow > 0 ? "\n<operator>OR</operator> " : "");
     452                  List<String> filters = SyncFilter.getFormattedAndSortedFilters(sf.getPropertyFilters(filterRow), filterFormatter);
     453                  sb.append(Values.getString(filters, "\n   <operator>AND</operator> ", true));
     454                }
     455                filterString = sb.toString();
     456
     457                if (!disabled)
     458                {
     459                  inSync = sf.isInSync(dc);
     460                  currentMatching = sf.getCurrentMatchingSource(dc);
     461                  listIsInSync &= inSync;
     462                }
    447463              }
    448               boolean disabled = sf.isDisabled();
    449               boolean inSync = !disabled && sf.isInSync(dc);
    450               if (!disabled) listIsInSync &= inSync;
     464              catch (Throwable t)
     465              {
     466                syncException = t;
     467                listIsInSync = false;
     468              }
    451469              int lastSyncMatchingSource = sf.getLastSyncMatchingSource();
    452470              int lastSyncMatchingTransformed = sf.getLastSyncMatchingTransformed();
     
    516534                  }
    517535                  %>
    518                   <pre class="filtertext" id="syncfilter.<%=filterId%>"><%=HTML.encodeTags(sb.toString(), "value|name|operator|function")%></pre></tbl:cell>
     536                  <pre class="filtertext" id="syncfilter.<%=filterId%>"><%=HTML.encodeTags(filterString, "value|name|operator|function")%></pre></tbl:cell>
    519537                <tbl:cell column="inSync">
    520538                  <base:icon
     
    524542                </tbl:cell>
    525543                <tbl:cell column="matching">
    526                   <span class="<%=!inSync ? "not-in-sync" : "" %>">
    527                     <%=lastSyncMatchingSource == -1 ? "?" : lastSyncMatchingSource%>
    528                     <span class="itemsubtype">(<%=sf.getSourceItemType() %>)</span>
     544                  <%
     545                  if (syncException != null)
     546                  {
     547                    %>
     548                    <div class="messagecontainer error"><%=HTML.encodeTags(syncException.getMessage())%></div>
    529549                    <%
    530                     if (transform != SourceItemTransform.NONE)
     550                  }
     551                  else
     552                  {
     553                    %>
     554                    <span class="<%=!inSync ? "not-in-sync" : "" %>">
     555                      <%=lastSyncMatchingSource == -1 ? "?" : lastSyncMatchingSource%>
     556                      <span class="itemsubtype">(<%=sf.getSourceItemType() %>)</span>
     557                      <%
     558                      if (transform != SourceItemTransform.NONE)
     559                      {
     560                        %>
     561                        › <%=lastSyncMatchingTransformed == -1 ? "?" : lastSyncMatchingTransformed%>
     562                        <span class="itemsubtype">(<%=list.getMemberType() %>)</span>
     563                        <%
     564                      }
     565                      %>
     566                    </span>
     567                    <%
     568                    if (!inSync && !disabled)
    531569                    {
    532570                      %>
    533                       › <%=lastSyncMatchingTransformed == -1 ? "?" : lastSyncMatchingTransformed%>
    534                       <span class="itemsubtype">(<%=list.getMemberType() %>)</span>
     571                      (<%=currentMatching%> › ?)
    535572                      <%
    536573                    }
    537                     %>
    538                   </span>
    539                   <%
    540                   if (!inSync && !disabled)
    541                   {
    542                     %>
    543                     (<%=sf.getCurrentMatchingSource(dc)%> › ?)
    544                     <%
    545574                  }
    546575                  %>
Note: See TracChangeset for help on using the changeset viewer.