Changeset 7564


Ignore:
Timestamp:
Jan 8, 2019, 8:18:21 AM (3 years ago)
Author:
Nicklas Nordborg
Message:

Merged patch release 3.13.1 to the trunk.

Location:
trunk
Files:
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/core/net/sf/basedb/core/query/SharedToRestriction.java

    r6844 r7564  
    112112          sb.append("where " + users.toQl(query, dc));
    113113          sb.append(")");
    114           if (groups != null) sb.append(sharedTo ? " OR " : " AND ");
    115114        }
    116115        if (groups != null)
    117116        {
     117          if (users != null) sb.append(sharedTo ? " OR " : " AND ");
    118118          sb.append(root).append(".itemKey ").append(sharedTo ? "IN (" : "NOT IN (");
    119119          sb.append("select ik.id from GroupData grp JOIN grp.itemKeys ik ");
     
    125125      if (projects != null)
    126126      {
    127         if (sb.length() > 0) sb.append(sharedTo ? " OR " : " AND ");
     127        if (users != null || groups != null) sb.append(sharedTo ? " OR " : " AND ");
    128128        sb.append("(");
    129129        if (!sharedTo)
     
    176176          sb.append("where " + users.toString());
    177177          sb.append(")");
    178           if (groups != null) sb.append(sharedTo ? " OR " : " AND ");
    179178        }
    180179        if (groups != null)
    181180        {
     181          if (users != null) sb.append(sharedTo ? " OR " : " AND ");
    182182          sb.append("itemKey ").append(sharedTo ? "IN (" : "NOT IN (");
    183183          sb.append("select ik.id from GroupData grp JOIN grp.itemKeys ik ");
     
    189189      if (projects != null)
    190190      {
    191         if (sb.length() > 0) sb.append(sharedTo ? " OR " : " AND ");
     191        if (users != null || groups != null) sb.append(sharedTo ? " OR " : " AND ");
    192192        sb.append("(");
    193193        if (!sharedTo)
  • trunk/src/core/net/sf/basedb/util/formatter/PropertyFilterFormatter.java

    r7559 r7564  
    4848  private final DbControl dc;
    4949  private final Formatter<Date> dateFormatter;
     50  private final boolean tagElements;
    5051 
    5152  /**
     
    5455  public PropertyFilterFormatter(DbControl dc, Formatter<Date> dateFormatter)
    5556  {
     57    this(dc, dateFormatter, false);
     58  }
     59 
     60  /**
     61    Create a new formatter with option to create HTML-like tags around elements. The
     62    following tags are used: &lt;value&gt;, &lt;name&gt;, &lt;operator&gt;, &lt;function&gt;
     63    @since 3.13.1
     64  */
     65  public PropertyFilterFormatter(DbControl dc, Formatter<Date> dateFormatter, boolean tagElements)
     66  {
    5667    this.dc = dc;
    5768    this.dateFormatter = dateFormatter;
    58   }
    59  
     69    this.tagElements = tagElements;
     70  }
    6071 
    6172  /*
     
    8697      int startIndex = property.startsWith("##") ? 2 : 1;
    8798      int annotationTypeId = Values.getInt(property.substring(startIndex));
    88       sb.append("{").append(nameOfItem(dc, Item.ANNOTATIONTYPE, annotationTypeId, false)).append("}");
    89       sb.append(" ").append(operator).append(" ");
     99      sb.append("{").append(name(nameOfItem(dc, Item.ANNOTATIONTYPE, annotationTypeId, false))).append("}");
     100      sb.append(" ").append(operator(operator.toString())).append(" ");
    90101      if (operator.isListOperator() && value != null)
    91102      {
     
    94105      else
    95106      {
    96         sb.append(quote).append(value).append(quote);
     107        sb.append(value(quote+value+quote));
    97108      }
    98109    }
     
    103114      int fileTypeId = Values.getInt(property.substring(1, i));
    104115      String fileFilter = property.substring(i+1, property.length()-1);
    105       sb.append("{").append(nameOfItem(dc, Item.DATAFILETYPE, fileTypeId, false)).append("#").append(fileFilter).append("}");
    106       sb.append(" ").append(operator).append(" ");
     116      sb.append("{").append(name(nameOfItem(dc, Item.DATAFILETYPE, fileTypeId, false)+"#"+fileFilter)).append("}");
     117      sb.append(" ").append(operator(operator.toString())).append(" ");
    107118      if (operator.isListOperator() && value != null)
    108119      {
     
    111122      else
    112123      {
    113         sb.append(quote).append(value).append(quote);
     124        sb.append(value(quote+value+quote));
    114125      }
    115126    }
     
    117128    {
    118129      // Item list filter
    119       sb.append(operator == Operator.EQ ? "memberOfList(" : "NOT memberOfList(");
    120       sb.append(nameOfItem(dc, Item.ITEMLIST, Values.getInt(value), true));
     130      if (operator != Operator.EQ) sb.append(operator("NOT"));
     131      sb.append(function("memberOfList")).append("(");
     132      sb.append(value(nameOfItem(dc, Item.ITEMLIST, Values.getInt(value), true)));
    121133      sb.append(")");
    122134    }
     
    124136    {
    125137      WellCoordinateFormatter formatter = new WellCoordinateFormatter(property.equals("bioWell.row"));
    126       sb.append(property).append(" ").append(operator).append(" ");
     138      sb.append(name(property)).append(" ").append(operator(operator.toString())).append(" ");
    127139      List<Object> selected = filter.getValuesAsObjects();
    128140      if (selected.size() > 1) sb.append("(");
     
    133145        sb.append(sep);
    134146        sep = ", ";
    135         sb.append(formatter.format((Integer)index));
     147        sb.append(value(formatter.format((Integer)index)));
    136148      }
    137149      if (selected.size() > 1) sb.append(")");
     
    139151    else if (property.equals("parentType"))
    140152    {
    141       sb.append(property).append(" ").append(operator).append(" ");
     153      sb.append(name(property)).append(" ").append(operator(operator.toString())).append(" ");
    142154      List<Object> selected = filter.getValuesAsObjects();
    143155      if (selected.size() > 1) sb.append("(");
     
    148160        sb.append(sep);
    149161        sep = ", ";
    150         sb.append(Item.fromValue((Integer)index).toString());
     162        sb.append(value(Item.fromValue((Integer)index).toString()));
    151163      }
    152164      if (selected.size() > 1) sb.append(")");
     
    167179      if (nameOfItemType != null)
    168180      {
    169         sb.append(property).append(" ").append(operator).append(" ");
     181        sb.append(name(property)).append(" ").append(operator(operator.toString())).append(" ");
    170182        List<Object> itemIds = filter.getValuesAsObjects();
    171183        if (itemIds.size() > 1) sb.append("(");
     
    176188          sb.append(sep);
    177189          sep = ", ";
    178           sb.append(nameOfItem(dc, nameOfItemType, (Integer)id, true));
     190          sb.append(value(nameOfItem(dc, nameOfItemType, (Integer)id, true)));
    179191        }
    180192        if (itemIds.size() > 1) sb.append(")");
     
    186198          property = property.substring(1);
    187199        }
    188         sb.append(property).append(" ").append(operator).append(" ");
     200        sb.append(name(property)).append(" ").append(operator(operator.toString())).append(" ");
    189201        if (operator.isListOperator() && value != null)
    190202        {
     
    197209            value = dateFormatter.format((Date)Type.DATE.parseString(value));
    198210          }
    199           sb.append(quote).append(value).append(quote);
     211          sb.append(value(quote+value+quote));
    200212        }
    201213      }
     
    237249      sb.append(sep);
    238250      sep = ", ";
    239       sb.append(quote).append(v).append(quote);
     251      sb.append(value(quote+v+quote));
    240252    }
    241253    if (values.length > 1) sb.append(")");
    242254   
    243255  }
     256 
     257  private String value(String value)
     258  {
     259    return tagElements ? "<value>"+value+"</value>" : value;
     260  }
     261 
     262  private String name(String name)
     263  {
     264    return tagElements ? "<name>"+name+"</name>" : name;
     265  }
     266  private String operator(String op)
     267  {
     268    return tagElements ? "<operator>"+op+"</operator>" : op;
     269  }
     270  private String function(String function)
     271  {
     272    return tagElements ? "<function>"+function+"</function>" : function;
     273  }
     274
     275 
    244276}
  • trunk/www/admin/extensions/wizard.jsp

    r7235 r7564  
    4747  import="net.sf.basedb.clients.web.servlet.ContentSecurityPolicyFilter"
    4848  import="java.util.List"
     49  import="java.util.Date"
    4950  import="java.io.File"
    50   import="java.util.Date"
     51  import="java.io.FileNotFoundException"
    5152%>
    5253<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    131132          allowUninstall = true;
    132133          checkUninstall = true;
     134          error = new FileNotFoundException(xtFile.getFile() + " doesn't exist or is not readable.");
    133135        }
    134136        else if (!xtFile.isValid())
  • trunk/www/views/itemlists/syncfilter/ajax.jsp

    r6793 r7564  
    4747    StringBuilder sb = new StringBuilder();
    4848    Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(dc.getSessionControl());
    49     Formatter<PropertyFilter> filterFormatter = new PropertyFilterFormatter(dc, dateFormatter);
     49    Formatter<PropertyFilter> filterFormatter = new PropertyFilterFormatter(dc, dateFormatter, true);
    5050    for (int filterRow = 0; filterRow < syncFilter.getFilterRows(); filterRow++)
    5151    {
    52       sb.append(filterRow > 0 ? "\nOR " : "");
     52      sb.append(filterRow > 0 ? "\n<operator>OR</operator> " : "");
    5353      List<String> filters = SyncFilter.getFormattedAndSortedFilters(syncFilter.getPropertyFilters(filterRow), filterFormatter);
    54       sb.append(Values.getString(filters, "\n   AND ", true));
     54      sb.append(Values.getString(filters, "\n   <operator>AND</operator> ", true));
    5555    }
    5656    return sb.toString();
     
    8989    if (sourceItemType == syncFilter.getSourceItemType())
    9090    {
    91       json.put("filter", HTML.encodeTags(formatFilter(dc, syncFilter)));
     91      json.put("filter", HTML.encodeTags(formatFilter(dc, syncFilter), "value|name|operator|function"));
    9292    }
    9393  }
     
    155155    syncFilter.setSyncContext(sc.getCurrentContext(sourceItemType), transform);
    156156   
    157     json.put("filter", HTML.encodeTags(formatFilter(dc, syncFilter)));
     157    json.put("filter", HTML.encodeTags(formatFilter(dc, syncFilter), "value|name|operator|function"));
    158158    dc.commit();
    159159  }
  • trunk/www/views/itemlists/syncfilter/edit_syncfilter.jsp

    r6814 r7564  
    112112  %>
    113113  <base:page type="popup" title="<%=title%>" id="edit-page">
    114   <base:head scripts="tabcontrol-2.js,~syncfilter.js" styles="tabcontrol.css">
     114  <base:head scripts="tabcontrol-2.js,~syncfilter.js" styles="tabcontrol.css,~filtertext.css">
    115115    <ext:scripts context="<%=jspContext%>" />
    116116    <ext:stylesheets context="<%=jspContext%>" />
     
    178178        <th class="subprompt"></th>
    179179        <td>
    180           <pre class="messagecontainer note" id="filter-info" style="height: 12em; overflow: auto;"></pre>
     180          <pre class="messagecontainer note filtertext" id="filter-info" style="height: 12em;"></pre>
    181181        </td>
    182182        <td>
  • trunk/www/views/itemlists/view_list.jsp

    r7166 r7564  
    113113  %>
    114114  <base:page title="<%=title%>" id="view-page">
    115   <base:head scripts="table.js,tabcontrol-2.js,~lists.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
     115  <base:head scripts="table.js,tabcontrol-2.js,~lists.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css,~syncfilter/filtertext.css">
    116116    <ext:scripts context="<%=jspContext%>" />
    117117    <ext:stylesheets context="<%=jspContext%>" />
     
    431431            <%
    432432            int index = 0;
    433             Formatter<PropertyFilter> filterFormatter = new PropertyFilterFormatter(dc, dateFormatter);
     433            Formatter<PropertyFilter> filterFormatter = new PropertyFilterFormatter(dc, dateFormatter, true);
    434434            for (SyncFilter sf : syncFilters)
    435435            {
     
    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 ? "\nOR " : "");
    445                 List<String> filters = SyncFilter.getFormattedAndSortedFilters(sf.getPropertyFilters(filterRow), filterFormatter);
    446                 sb.append(Values.getString(filters, "\n   AND ", 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 id="syncfilter.<%=filterId%>"><%=HTML.encodeTags(sb.toString())%></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.