www/views/itemlists/syncfilter/ajax.jsp

Code
Comments
Other
Rev Date Author Line
6770 13 Mar 15 nicklas 1 <%-- $Id$
6770 13 Mar 15 nicklas 2   ------------------------------------------------------------------
6770 13 Mar 15 nicklas 3   Copyright (C) 2015 Nicklas Nordborg
6770 13 Mar 15 nicklas 4
6770 13 Mar 15 nicklas 5   This file is part of BASE - BioArray Software Environment.
6770 13 Mar 15 nicklas 6   Available at http://base.thep.lu.se/
6770 13 Mar 15 nicklas 7
6770 13 Mar 15 nicklas 8   BASE is free software; you can redistribute it and/or
6770 13 Mar 15 nicklas 9   modify it under the terms of the GNU General Public License
6770 13 Mar 15 nicklas 10   as published by the Free Software Foundation; either version 3
6770 13 Mar 15 nicklas 11   of the License, or (at your option) any later version.
6770 13 Mar 15 nicklas 12
6770 13 Mar 15 nicklas 13   BASE is distributed in the hope that it will be useful,
6770 13 Mar 15 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
6770 13 Mar 15 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6770 13 Mar 15 nicklas 16   GNU General Public License for more details.
6770 13 Mar 15 nicklas 17
6770 13 Mar 15 nicklas 18   You should have received a copy of the GNU General Public License
6770 13 Mar 15 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6770 13 Mar 15 nicklas 20   ------------------------------------------------------------------
6770 13 Mar 15 nicklas 21
6770 13 Mar 15 nicklas 22   @author Nicklas
6770 13 Mar 15 nicklas 23 --%>
6770 13 Mar 15 nicklas 24 <%@ page pageEncoding="UTF-8" session="false" contentType="application/json"
6770 13 Mar 15 nicklas 25   import="net.sf.basedb.core.SessionControl"
6770 13 Mar 15 nicklas 26   import="net.sf.basedb.core.DbControl"
6770 13 Mar 15 nicklas 27   import="net.sf.basedb.core.Item"
6770 13 Mar 15 nicklas 28   import="net.sf.basedb.core.ItemContext"
6770 13 Mar 15 nicklas 29   import="net.sf.basedb.core.SyncFilter"
6770 13 Mar 15 nicklas 30   import="net.sf.basedb.core.SyncFilter.SourceItemTransform"
6770 13 Mar 15 nicklas 31   import="net.sf.basedb.core.PropertyFilter"
6770 13 Mar 15 nicklas 32   import="net.sf.basedb.clients.web.Base"
6770 13 Mar 15 nicklas 33   import="net.sf.basedb.util.Values"
6770 13 Mar 15 nicklas 34   import="net.sf.basedb.util.error.ThrowableUtil"
6770 13 Mar 15 nicklas 35   import="net.sf.basedb.util.formatter.Formatter"
6770 13 Mar 15 nicklas 36   import="net.sf.basedb.util.formatter.PropertyFilterFormatter"
6770 13 Mar 15 nicklas 37   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
6770 13 Mar 15 nicklas 38   import="net.sf.basedb.clients.web.WebException"
6770 13 Mar 15 nicklas 39   import="net.sf.basedb.clients.web.util.HTML"
6770 13 Mar 15 nicklas 40   import="org.json.simple.JSONObject"
6770 13 Mar 15 nicklas 41   import="java.util.Date"
6793 24 Mar 15 nicklas 42   import="java.util.List"
6770 13 Mar 15 nicklas 43 %>
6770 13 Mar 15 nicklas 44 <%!
6770 13 Mar 15 nicklas 45   String formatFilter(DbControl dc, SyncFilter syncFilter)
6770 13 Mar 15 nicklas 46   {
6770 13 Mar 15 nicklas 47     StringBuilder sb = new StringBuilder();
6770 13 Mar 15 nicklas 48     Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(dc.getSessionControl());
7564 08 Jan 19 nicklas 49     Formatter<PropertyFilter> filterFormatter = new PropertyFilterFormatter(dc, dateFormatter, true);
6770 13 Mar 15 nicklas 50     for (int filterRow = 0; filterRow < syncFilter.getFilterRows(); filterRow++)
6770 13 Mar 15 nicklas 51     {
7564 08 Jan 19 nicklas 52       sb.append(filterRow > 0 ? "\n<operator>OR</operator> " : "");
6793 24 Mar 15 nicklas 53       List<String> filters = SyncFilter.getFormattedAndSortedFilters(syncFilter.getPropertyFilters(filterRow), filterFormatter);
7564 08 Jan 19 nicklas 54       sb.append(Values.getString(filters, "\n   <operator>AND</operator> ", true));
6770 13 Mar 15 nicklas 55     }
6770 13 Mar 15 nicklas 56     return sb.toString();
6770 13 Mar 15 nicklas 57   }
6770 13 Mar 15 nicklas 58 %>
6770 13 Mar 15 nicklas 59 <%
6770 13 Mar 15 nicklas 60 response.setHeader("Cache-Control", "no-cache, max-age=0");
6770 13 Mar 15 nicklas 61 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
6770 13 Mar 15 nicklas 62 final String ID = sc.getId();
6770 13 Mar 15 nicklas 63 final String cmd = request.getParameter("cmd");
6770 13 Mar 15 nicklas 64 final String root = request.getContextPath()+"/";
6770 13 Mar 15 nicklas 65 out.clear();
6770 13 Mar 15 nicklas 66 JSONObject json = new JSONObject();
6770 13 Mar 15 nicklas 67 json.put("status", "ok");
6770 13 Mar 15 nicklas 68 DbControl dc = null;
6770 13 Mar 15 nicklas 69 try
6770 13 Mar 15 nicklas 70 {
6770 13 Mar 15 nicklas 71   if ("GetCurrentFilter".equals(cmd))
6770 13 Mar 15 nicklas 72   {
7954 12 May 21 nicklas 73     dc = sc.newDbControl(":Get current sync filter");
6770 13 Mar 15 nicklas 74     
6770 13 Mar 15 nicklas 75     // Get the current sync filter item we are editing
6770 13 Mar 15 nicklas 76     ItemContext cc = sc.getCurrentContext(Item.SYNCFILTER);
7605 26 Feb 19 nicklas 77     SyncFilter syncFilter = cc.getObject("item");
6770 13 Mar 15 nicklas 78     
6770 13 Mar 15 nicklas 79     // Get the requested source item type in the edit dialog
6770 13 Mar 15 nicklas 80     Item sourceItemType = Item.valueOf(request.getParameter("sourceItemType"));
6788 20 Mar 15 nicklas 81     SourceItemTransform sourceItemTransform = SourceItemTransform.valueOf(request.getParameter("sourceItemTransform"));
6788 20 Mar 15 nicklas 82     
6788 20 Mar 15 nicklas 83     if (sourceItemTransform != syncFilter.getSourceItemTransformation())
6788 20 Mar 15 nicklas 84     {
6788 20 Mar 15 nicklas 85       syncFilter.setSyncContext(null, sourceItemTransform);
6788 20 Mar 15 nicklas 86     }
6770 13 Mar 15 nicklas 87
6770 13 Mar 15 nicklas 88     // If they match we return the formatted filter, otherwise not
6770 13 Mar 15 nicklas 89     if (sourceItemType == syncFilter.getSourceItemType())
6770 13 Mar 15 nicklas 90     {
7889 04 Dec 20 nicklas 91       json.put("filter", HTML.encodeTags(formatFilter(dc, syncFilter), "value|name|operator|function|missing"));
6770 13 Mar 15 nicklas 92     }
6770 13 Mar 15 nicklas 93   }
6770 13 Mar 15 nicklas 94   else if ("CopySyncFilterToItemContext".equals(cmd))
6770 13 Mar 15 nicklas 95   {
7954 12 May 21 nicklas 96     dc = sc.newDbControl(":Copy sync filter to item context");
6785 19 Mar 15 nicklas 97     int syncFilterId = Values.getInt(request.getParameter("syncfilter_id"));
6785 19 Mar 15 nicklas 98     String srcType = Values.getStringOrNull(request.getParameter("sourceItemType"));
6785 19 Mar 15 nicklas 99     
6770 13 Mar 15 nicklas 100     // Get the current sync filter item we are editing
6785 19 Mar 15 nicklas 101     SyncFilter syncFilter;
6785 19 Mar 15 nicklas 102     Item sourceItemType;
6785 19 Mar 15 nicklas 103     if (syncFilterId == 0)
6785 19 Mar 15 nicklas 104     {
6785 19 Mar 15 nicklas 105       ItemContext cc = sc.getCurrentContext(Item.SYNCFILTER);
7605 26 Feb 19 nicklas 106       syncFilter = cc.getObject("item");
6785 19 Mar 15 nicklas 107     }
6785 19 Mar 15 nicklas 108     else
6785 19 Mar 15 nicklas 109     {
6785 19 Mar 15 nicklas 110       syncFilter = SyncFilter.getById(dc, syncFilterId);
6785 19 Mar 15 nicklas 111     }
6770 13 Mar 15 nicklas 112     
6785 19 Mar 15 nicklas 113     if (srcType == null)
6785 19 Mar 15 nicklas 114     {
6785 19 Mar 15 nicklas 115       sourceItemType = syncFilter.getSourceItemType();
6785 19 Mar 15 nicklas 116     }
6785 19 Mar 15 nicklas 117     else
6785 19 Mar 15 nicklas 118     {
6785 19 Mar 15 nicklas 119       // Get the requested source item type in the edit dialog
6785 19 Mar 15 nicklas 120       sourceItemType = Item.valueOf(srcType);
6785 19 Mar 15 nicklas 121     }
6770 13 Mar 15 nicklas 122     
6770 13 Mar 15 nicklas 123     // If they match we copy the filter to the requested item context
6770 13 Mar 15 nicklas 124     if (sourceItemType == syncFilter.getSourceItemType())
6770 13 Mar 15 nicklas 125     {
6770 13 Mar 15 nicklas 126       syncFilter.copyToContext(sc.getCurrentContext(sourceItemType));
6770 13 Mar 15 nicklas 127     }
6770 13 Mar 15 nicklas 128   }
6770 13 Mar 15 nicklas 129   else if ("CopyItemContextToSyncFilter".equals(cmd))
6770 13 Mar 15 nicklas 130   {
7954 12 May 21 nicklas 131     dc = sc.newDbControl(":Copy item context to sync filter");
6785 19 Mar 15 nicklas 132     int syncFilterId = Values.getInt(request.getParameter("syncfilter_id"));
6785 19 Mar 15 nicklas 133
6785 19 Mar 15 nicklas 134     SyncFilter syncFilter;
6785 19 Mar 15 nicklas 135     Item sourceItemType;
6785 19 Mar 15 nicklas 136     SourceItemTransform transform;
6785 19 Mar 15 nicklas 137     if (syncFilterId == 0)
6785 19 Mar 15 nicklas 138     {
6785 19 Mar 15 nicklas 139       // Get the current sync filter item we are editing
6785 19 Mar 15 nicklas 140       ItemContext cc = sc.getCurrentContext(Item.SYNCFILTER);
7605 26 Feb 19 nicklas 141       syncFilter = cc.getObject("item");
6785 19 Mar 15 nicklas 142
6785 19 Mar 15 nicklas 143       // Get the requested source item type in the edit dialog
6785 19 Mar 15 nicklas 144       sourceItemType = Item.valueOf(request.getParameter("sourceItemType"));
6785 19 Mar 15 nicklas 145       transform = SourceItemTransform.valueOf(request.getParameter("sourceItemTransform"));
6785 19 Mar 15 nicklas 146     }
6785 19 Mar 15 nicklas 147     else
6785 19 Mar 15 nicklas 148     {
6785 19 Mar 15 nicklas 149       syncFilter = SyncFilter.getById(dc, syncFilterId);
6785 19 Mar 15 nicklas 150       sourceItemType = syncFilter.getSourceItemType();
6785 19 Mar 15 nicklas 151       transform = syncFilter.getSourceItemTransformation();
6785 19 Mar 15 nicklas 152     }
6770 13 Mar 15 nicklas 153     
6770 13 Mar 15 nicklas 154     // Copy back to the current filter
6770 13 Mar 15 nicklas 155     syncFilter.setSyncContext(sc.getCurrentContext(sourceItemType), transform);
6770 13 Mar 15 nicklas 156     
7564 08 Jan 19 nicklas 157     json.put("filter", HTML.encodeTags(formatFilter(dc, syncFilter), "value|name|operator|function"));
6785 19 Mar 15 nicklas 158     dc.commit();
6770 13 Mar 15 nicklas 159   }
6770 13 Mar 15 nicklas 160   else
6770 13 Mar 15 nicklas 161   {
6770 13 Mar 15 nicklas 162     throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
6770 13 Mar 15 nicklas 163   }
6770 13 Mar 15 nicklas 164 }
6770 13 Mar 15 nicklas 165 catch (Throwable t)
6770 13 Mar 15 nicklas 166 {
6770 13 Mar 15 nicklas 167   t.printStackTrace();
6770 13 Mar 15 nicklas 168   json.clear();
6770 13 Mar 15 nicklas 169   json.put("status", "error");
6770 13 Mar 15 nicklas 170   json.put("message", t.getMessage());
6770 13 Mar 15 nicklas 171   json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
6770 13 Mar 15 nicklas 172 }
6770 13 Mar 15 nicklas 173 finally
6770 13 Mar 15 nicklas 174 {
6770 13 Mar 15 nicklas 175   json.writeJSONString(out);
6770 13 Mar 15 nicklas 176   out.flush();
6770 13 Mar 15 nicklas 177   if (dc != null) dc.close();
6770 13 Mar 15 nicklas 178 }
6770 13 Mar 15 nicklas 179 %>