www/views/itemlists/syncfilter/edit_syncfilter.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"
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.Permission"
6770 13 Mar 15 nicklas 30   import="net.sf.basedb.core.ItemList"
6770 13 Mar 15 nicklas 31   import="net.sf.basedb.core.SyncFilter"
6770 13 Mar 15 nicklas 32   import="net.sf.basedb.core.SyncFilter.SourceItemTransform"
6770 13 Mar 15 nicklas 33   import="net.sf.basedb.core.Metadata"
6770 13 Mar 15 nicklas 34   import="net.sf.basedb.core.PermissionDeniedException"
6770 13 Mar 15 nicklas 35   import="net.sf.basedb.core.plugin.GuiContext"
6770 13 Mar 15 nicklas 36   import="net.sf.basedb.clients.web.Base"
6770 13 Mar 15 nicklas 37   import="net.sf.basedb.clients.web.util.HTML"
6770 13 Mar 15 nicklas 38   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
6770 13 Mar 15 nicklas 39   import="net.sf.basedb.clients.web.extensions.JspContext"
6770 13 Mar 15 nicklas 40   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 41   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
6770 13 Mar 15 nicklas 42   import="net.sf.basedb.util.Values"
6770 13 Mar 15 nicklas 43   import="net.sf.basedb.util.listable.ListableUtil"
6774 17 Mar 15 nicklas 44   import="net.sf.basedb.util.listable.SourceItemTransformerFactory"
6770 13 Mar 15 nicklas 45   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
6770 13 Mar 15 nicklas 46   import="java.util.List"
6770 13 Mar 15 nicklas 47   import="org.json.simple.JSONObject"
6770 13 Mar 15 nicklas 48   import="org.json.simple.JSONArray"
6770 13 Mar 15 nicklas 49 %>
6770 13 Mar 15 nicklas 50 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
6770 13 Mar 15 nicklas 51 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
6770 13 Mar 15 nicklas 52 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
6770 13 Mar 15 nicklas 53 <%!
6770 13 Mar 15 nicklas 54   private static JSONArray toJSONArray(List<Item> items)
6770 13 Mar 15 nicklas 55   {
6770 13 Mar 15 nicklas 56     JSONArray json = new JSONArray();
6787 19 Mar 15 nicklas 57     if (items != null)
6770 13 Mar 15 nicklas 58     {
6787 19 Mar 15 nicklas 59       for (Item i : items)
6787 19 Mar 15 nicklas 60       {
6787 19 Mar 15 nicklas 61         JSONObject jsonItem = new JSONObject();
6787 19 Mar 15 nicklas 62         jsonItem.put("name", i.name());
6787 19 Mar 15 nicklas 63         jsonItem.put("title", i.toString());
6787 19 Mar 15 nicklas 64         json.add(jsonItem);
6787 19 Mar 15 nicklas 65       }
6770 13 Mar 15 nicklas 66     }
6770 13 Mar 15 nicklas 67     return json;
6770 13 Mar 15 nicklas 68   }
6770 13 Mar 15 nicklas 69 %>
6770 13 Mar 15 nicklas 70 <%
6770 13 Mar 15 nicklas 71 final Item itemType = Item.SYNCFILTER;
6770 13 Mar 15 nicklas 72 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
6770 13 Mar 15 nicklas 73 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
6770 13 Mar 15 nicklas 74 final int itemId = cc.getId();
6770 13 Mar 15 nicklas 75 final int listId = Values.getInt(request.getParameter("list_id"));
6770 13 Mar 15 nicklas 76 final String ID = sc.getId();
6770 13 Mar 15 nicklas 77 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 78 final DbControl dc = sc.newDbControl(":Edit "+itemType);
6770 13 Mar 15 nicklas 79 try
6770 13 Mar 15 nicklas 80 {
6770 13 Mar 15 nicklas 81   String title = null;
6770 13 Mar 15 nicklas 82   ItemList list = ItemList.getById(dc, listId);
6770 13 Mar 15 nicklas 83   list.checkPermission(Permission.WRITE);
6770 13 Mar 15 nicklas 84   Item memberType = list.getMemberType();
6770 13 Mar 15 nicklas 85   Item sourceItemType = memberType;
6770 13 Mar 15 nicklas 86   SourceItemTransform sourceItemTransform = SourceItemTransform.NONE;
6787 19 Mar 15 nicklas 87   boolean sourceMustExist = true;
6770 13 Mar 15 nicklas 88   SyncFilter syncFilter = null;
6770 13 Mar 15 nicklas 89
6770 13 Mar 15 nicklas 90   if (itemId == 0)
6770 13 Mar 15 nicklas 91   {
6770 13 Mar 15 nicklas 92     title = "Create synchronization filter";
6770 13 Mar 15 nicklas 93     cc.removeObject("item");
6770 13 Mar 15 nicklas 94     cc.setObject("item", list.newSyncFilter(dc));
6770 13 Mar 15 nicklas 95   }
6770 13 Mar 15 nicklas 96   else
6770 13 Mar 15 nicklas 97   {
6770 13 Mar 15 nicklas 98     syncFilter = SyncFilter.getById(dc, itemId);
6770 13 Mar 15 nicklas 99     sourceItemType = syncFilter.getSourceItemType();
6770 13 Mar 15 nicklas 100     sourceItemTransform = syncFilter.getSourceItemTransformation();
6787 19 Mar 15 nicklas 101     sourceMustExist = syncFilter.getSourceItemMustExist();
6770 13 Mar 15 nicklas 102     cc.setObject("item", syncFilter);
6770 13 Mar 15 nicklas 103     dc.initCollection(syncFilter, "propertyFilters");
6770 13 Mar 15 nicklas 104     title = "Edit synchronization filter -- " + HTML.encodeTags(syncFilter.getName());
6770 13 Mar 15 nicklas 105   }
6770 13 Mar 15 nicklas 106   
6774 17 Mar 15 nicklas 107   SourceItemTransformerFactory factory = ListableUtil.getTransformerFactory(memberType);
6777 17 Mar 15 nicklas 108   List<Item> allowedChildItems = factory != null ? factory.getSupportedSourceItems(SourceItemTransform.CHILD_TO_PARENT) : null;
6777 17 Mar 15 nicklas 109   List<Item> allowedParentItems = factory != null ? factory.getSupportedSourceItems(SourceItemTransform.PARENT_TO_CHILD) : null;
6770 13 Mar 15 nicklas 110   
6770 13 Mar 15 nicklas 111   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), syncFilter);
7604 25 Feb 19 nicklas 112   ExtensionsInvoker<TabAction> invoker = EditUtil.useEditExtensions(jspContext);
6770 13 Mar 15 nicklas 113   %>
6770 13 Mar 15 nicklas 114   <base:page type="popup" title="<%=title%>" id="edit-page">
7564 08 Jan 19 nicklas 115   <base:head scripts="tabcontrol-2.js,~syncfilter.js" styles="tabcontrol.css,~filtertext.css">
6770 13 Mar 15 nicklas 116     <ext:scripts context="<%=jspContext%>" />
6770 13 Mar 15 nicklas 117     <ext:stylesheets context="<%=jspContext%>" />
6770 13 Mar 15 nicklas 118   </base:head>
6770 13 Mar 15 nicklas 119   <base:body>
6770 13 Mar 15 nicklas 120     <h1><%=title%> <base:help tabcontrol="settings"/></h1>
6787 19 Mar 15 nicklas 121
6770 13 Mar 15 nicklas 122     <div id="page-data" class="datacontainer"
6770 13 Mar 15 nicklas 123       data-list-member-type="<%=memberType.name()%>"
6770 13 Mar 15 nicklas 124       data-source-item-type="<%=sourceItemType.name() %>"
6770 13 Mar 15 nicklas 125       data-allowed-parent-items="<%=HTML.encodeTags(toJSONArray(allowedParentItems).toJSONString())%>"
6770 13 Mar 15 nicklas 126       data-allowed-child-items="<%=HTML.encodeTags(toJSONArray(allowedChildItems).toJSONString())%>"
6770 13 Mar 15 nicklas 127     ></div>
6770 13 Mar 15 nicklas 128     
6770 13 Mar 15 nicklas 129     <form action="index.jsp?ID=<%=ID%>" method="post" name="syncfilter">
6770 13 Mar 15 nicklas 130     <input type="hidden" name="cmd" value="UpdateItem">
6770 13 Mar 15 nicklas 131     <input type="hidden" name="list_id" value="<%=listId%>">
6770 13 Mar 15 nicklas 132
6770 13 Mar 15 nicklas 133     <t:tabcontrol id="settings"
6770 13 Mar 15 nicklas 134       subclass="content dialogtabcontrol"
6770 13 Mar 15 nicklas 135       position="bottom" remember="<%=syncFilter != null%>"
6770 13 Mar 15 nicklas 136       extensions="<%=invoker%>">
6770 13 Mar 15 nicklas 137     <t:tab id="info" title="Filter" helpid="syncfilter.edit">
6770 13 Mar 15 nicklas 138       <table class="fullform input100">
6770 13 Mar 15 nicklas 139       <tr>
6770 13 Mar 15 nicklas 140         <th>Name</th>
6770 13 Mar 15 nicklas 141         <td><input class="text required auto-init" data-auto-init="<%=syncFilter == null ? "focus-select" : "focus" %>" 
6770 13 Mar 15 nicklas 142           type="text" name="name" 
6770 13 Mar 15 nicklas 143           value="<%=HTML.encodeTags(syncFilter == null ? Values.getString(cc.getPropertyValue("name"), "New filter") : syncFilter.getName())%>" 
6770 13 Mar 15 nicklas 144           maxlength="<%=SyncFilter.MAX_NAME_LENGTH%>"></td>
6770 13 Mar 15 nicklas 145         <td></td>
6770 13 Mar 15 nicklas 146       </tr>
7881 01 Dec 20 nicklas 147       <tr style="vertical-align: top;">
7881 01 Dec 20 nicklas 148         <th>Filter group</th>
7881 01 Dec 20 nicklas 149         <td>
7881 01 Dec 20 nicklas 150           <select name="filterGroup" id="filterGroup" style="width: 6em;">
7881 01 Dec 20 nicklas 151             <%
7884 03 Dec 20 nicklas 152             String currentGrp = syncFilter == null ? request.getParameter("filterGroup") : syncFilter.getFilterGroup();
7881 01 Dec 20 nicklas 153             char[] suffix = {'+', '-'};
7881 01 Dec 20 nicklas 154             for (char letter = 'A'; letter <= 'Z'; letter++)
7881 01 Dec 20 nicklas 155             {
7881 01 Dec 20 nicklas 156               for (char s : suffix)
7881 01 Dec 20 nicklas 157               {
7881 01 Dec 20 nicklas 158                 String grp = Character.toString(letter)+Character.toString(s);
7881 01 Dec 20 nicklas 159                 String selected = grp.equals(currentGrp) ? "selected" : "";
7881 01 Dec 20 nicklas 160                 %>
7881 01 Dec 20 nicklas 161                 <option value="<%=grp%>" <%=selected%>><%=grp%>
7881 01 Dec 20 nicklas 162                 <%
7881 01 Dec 20 nicklas 163               }
7881 01 Dec 20 nicklas 164             }
7881 01 Dec 20 nicklas 165             %>
7881 01 Dec 20 nicklas 166           </select>
7881 01 Dec 20 nicklas 167           <ul>
7881 01 Dec 20 nicklas 168           <li>Items must match all filters with the same group.
7881 01 Dec 20 nicklas 169           <li>Items matching a "<b>+</b>" group are included in the list.
7881 01 Dec 20 nicklas 170           <li>Items matching a "<b>-</b>" group are excluded from the list.
7881 01 Dec 20 nicklas 171           <li>Groups are processed in alphabetical order. 
7881 01 Dec 20 nicklas 172           <li>Items that have been included may be excluded by a later group and vice versa.
7881 01 Dec 20 nicklas 173           </ul>
7881 01 Dec 20 nicklas 174         </td>
7881 01 Dec 20 nicklas 175         <td></td>
7881 01 Dec 20 nicklas 176       </tr>
6770 13 Mar 15 nicklas 177       <tr>
6794 24 Mar 15 nicklas 178         <th><label for="disabled">Disabled</label></th>
6794 24 Mar 15 nicklas 179         <td>
6794 24 Mar 15 nicklas 180           <input type="checkbox" name="disabled" id="disabled" <%=syncFilter != null && syncFilter.isDisabled() ? "checked" : "" %>>
6794 24 Mar 15 nicklas 181         </td>
6794 24 Mar 15 nicklas 182         <td></td>
6794 24 Mar 15 nicklas 183       </tr>
6794 24 Mar 15 nicklas 184       <tr>
6770 13 Mar 15 nicklas 185         <th>Filter</th>
6811 30 Mar 15 nicklas 186         <td colspan="2">
6770 13 Mar 15 nicklas 187           
6814 31 Mar 15 nicklas 188           <select name="sourceItemTransform" id="sourceItemTransform" style="width: 10em;">
6770 13 Mar 15 nicklas 189             <option value="NONE" <%=sourceItemTransform == SourceItemTransform.NONE ? "selected" : ""%>><%=memberType %>
6770 13 Mar 15 nicklas 190             <option value="PARENT_TO_CHILD" <%=sourceItemTransform == SourceItemTransform.PARENT_TO_CHILD ? "selected" : ""%>>Parent item
6770 13 Mar 15 nicklas 191             <option value="CHILD_TO_PARENT" <%=sourceItemTransform == SourceItemTransform.CHILD_TO_PARENT ? "selected" : ""%>>Child item
6770 13 Mar 15 nicklas 192           </select>
6787 19 Mar 15 nicklas 193           <span id="none-transform">
6787 19 Mar 15 nicklas 194             must match filter
6787 19 Mar 15 nicklas 195           </span>
6770 13 Mar 15 nicklas 196           <span id="parent-child-transform">
6770 13 Mar 15 nicklas 197             of type
6770 13 Mar 15 nicklas 198             <select name="sourceItemType" id="sourceItemType" style="width: 10em;">
6770 13 Mar 15 nicklas 199             </select>
6787 19 Mar 15 nicklas 200             that match filter
6811 30 Mar 15 nicklas 201             <select name="sourceMustExist" id="sourceMustExist" style="width: 8em;">
6787 19 Mar 15 nicklas 202               <option value="1" <%=sourceMustExist ? "selected" : "" %>>must exist
6787 19 Mar 15 nicklas 203               <option value="0" <%=!sourceMustExist ? "selected" : "" %>>must not exist
6787 19 Mar 15 nicklas 204             </select>
6770 13 Mar 15 nicklas 205           </span>
6770 13 Mar 15 nicklas 206         </td>
6770 13 Mar 15 nicklas 207       </tr>
6770 13 Mar 15 nicklas 208       <tr style="vertical-align: top;">
6770 13 Mar 15 nicklas 209         <th class="subprompt"></th>
6770 13 Mar 15 nicklas 210         <td>
7564 08 Jan 19 nicklas 211           <pre class="messagecontainer note filtertext" id="filter-info" style="height: 12em;"></pre>
6770 13 Mar 15 nicklas 212         </td>
6770 13 Mar 15 nicklas 213         <td>
6770 13 Mar 15 nicklas 214           <base:icon id="btnModifyFilter" image="edit.png" tooltip="Modify the filter" style="margin-top: 40px;" />
6770 13 Mar 15 nicklas 215         </td>
6770 13 Mar 15 nicklas 216       </tr>
6770 13 Mar 15 nicklas 217       <tr class="dynamic">
6770 13 Mar 15 nicklas 218         <th>Description</th>
6770 13 Mar 15 nicklas 219         <td>
6770 13 Mar 15 nicklas 220           <textarea class="text" rows="6" name="description" id="description"
6770 13 Mar 15 nicklas 221             ><%=HTML.encodeTags(syncFilter == null ? cc.getPropertyValue("description") : syncFilter.getDescription())%></textarea>
6770 13 Mar 15 nicklas 222         </td>
6770 13 Mar 15 nicklas 223         <td style="width: 20px;">
6770 13 Mar 15 nicklas 224           <base:zoom textarea="description" title="Description" />
6770 13 Mar 15 nicklas 225         </td>
6770 13 Mar 15 nicklas 226       </tr>
6770 13 Mar 15 nicklas 227       </table>
6770 13 Mar 15 nicklas 228     </t:tab>
6770 13 Mar 15 nicklas 229     </t:tabcontrol>
6770 13 Mar 15 nicklas 230     </form>
6770 13 Mar 15 nicklas 231
6770 13 Mar 15 nicklas 232     <div class="legend">
6770 13 Mar 15 nicklas 233       <base:icon image="required.png" />= required information
6770 13 Mar 15 nicklas 234     </div>
6770 13 Mar 15 nicklas 235
6770 13 Mar 15 nicklas 236     <base:buttongroup subclass="dialogbuttons">
6770 13 Mar 15 nicklas 237       <base:button id="btnSave" title="Save" />
6770 13 Mar 15 nicklas 238       <base:button id="close" title="Cancel" />
6770 13 Mar 15 nicklas 239     </base:buttongroup>
6770 13 Mar 15 nicklas 240   </base:body>
6770 13 Mar 15 nicklas 241   </base:page>
6770 13 Mar 15 nicklas 242   <%
6770 13 Mar 15 nicklas 243 }
6770 13 Mar 15 nicklas 244 finally
6770 13 Mar 15 nicklas 245 {
6770 13 Mar 15 nicklas 246   if (dc != null) dc.close();
6770 13 Mar 15 nicklas 247 }
6770 13 Mar 15 nicklas 248 %>