source: trunk/www/admin/plugintypes/list_plugintypes.jsp @ 4906

Last change on this file since 4906 was 4906, checked in by Martin Svensson, 13 years ago

References #1128 More item-pages updated

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 15.4 KB
Line 
1<%-- $Id: list_plugintypes.jsp 4906 2009-04-24 13:53:14Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.PluginType"
31  import="net.sf.basedb.core.ItemQuery"
32  import="net.sf.basedb.core.Include"
33  import="net.sf.basedb.core.Type"
34  import="net.sf.basedb.core.ItemResultIterator"
35  import="net.sf.basedb.core.ItemResultList"
36  import="net.sf.basedb.core.ItemContext"
37  import="net.sf.basedb.core.Permission"
38  import="net.sf.basedb.core.PluginDefinition"
39  import="net.sf.basedb.core.query.Orders"
40  import="net.sf.basedb.core.query.Hql"
41  import="net.sf.basedb.core.query.Restrictions"
42  import="net.sf.basedb.core.query.Expressions"
43  import="net.sf.basedb.core.plugin.GuiContext"
44  import="net.sf.basedb.core.plugin.Plugin"
45  import="net.sf.basedb.util.Enumeration"
46  import="net.sf.basedb.clients.web.Base"
47  import="net.sf.basedb.clients.web.ModeInfo"
48  import="net.sf.basedb.clients.web.PermissionUtil"
49  import="net.sf.basedb.clients.web.util.HTML"
50  import="net.sf.basedb.util.Values"
51  import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
52  import="net.sf.basedb.util.formatter.Formatter"
53  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
54  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
55  import="net.sf.basedb.clients.web.extensions.JspContext"
56  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
57  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
58  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
59  import="java.util.Date"
60  import="java.util.List"
61  import="java.util.Map"
62%>
63<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
64<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
65<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
66<%!
67  private static final Item itemType = Item.PLUGINTYPE;
68  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
69%>
70<%
71final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
72final String ID = sc.getId();
73final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
74final boolean writePermission = sc.hasPermission(Permission.WRITE, itemType);
75final boolean deletePermission = sc.hasPermission(Permission.DELETE, itemType);
76final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
77
78final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
79final String callback = request.getParameter("callback");
80final String title = mode.generateTitle("plugin type", "plugin types");
81final DbControl dc = sc.newDbControl();
82ItemResultIterator<PluginType> pluginTypes = null;
83try
84{
85  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
86  // Query for plugins relatated to the current type
87  final ItemQuery<PluginDefinition> pluginQuery = PluginDefinition.getQuery();
88  pluginQuery.include(cc.getInclude());
89  pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
90  pluginQuery.join(Hql.innerJoin("pluginTypes", "pt"));
91  pluginQuery.restrict(Restrictions.eq(Hql.alias("pt"), Expressions.parameter("pluginType")));
92  pluginQuery.order(Orders.asc(Hql.property("name"))); 
93
94  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
95  try
96  {
97    final ItemQuery<PluginType> query = Base.getConfiguredQuery(cc, true, PluginType.getQuery(), mode);
98    pluginTypes = query.iterate(dc);
99  }
100  catch (Throwable t)
101  {
102    cc.setMessage(t.getMessage());
103  }
104  int numListed = 0;
105  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
106  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
107  %>
108  <base:page title="<%=title==null ? "Plugin types" : title%>" type="<%=mode.getPageType()%>">
109  <base:head scripts="menu.js,table.js" styles="menu.css,table.css">
110    <ext:scripts context="<%=jspContext%>" />
111    <ext:stylesheets context="<%=jspContext%>" />
112    <script language="JavaScript">
113    var submitPage = 'index.jsp';
114    var formId = 'pluginTypes';
115    function newItem()
116    {
117      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
118    }
119    function editItem(itemId)
120    {
121      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
122    }
123    function viewItem(itemId)
124    {
125      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
126    }
127    function itemOnClick(evt, itemId)
128    {
129      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
130    }
131    function deleteItems()
132    {
133      var frm = document.forms[formId];
134      if (Forms.numChecked(frm) == 0)
135      {
136        alert('Please select at least one item in the list');
137        return;
138      }
139      frm.action = submitPage;
140      frm.cmd.value = 'DeleteItems';
141      frm.submit();
142    }
143    function restoreItems()
144    {
145      var frm = document.forms[formId];
146      if (Forms.numChecked(frm) == 0)
147      {
148        alert('Please select at least one item in the list');
149        return;
150      }
151      frm.action = submitPage;
152      frm.cmd.value = 'RestoreItems';
153      frm.submit();
154    }
155    function deleteItemPermanently(itemId)
156    {
157      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', itemId);
158    }
159    function configureColumns()
160    {
161      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
162    }
163    function runPlugin(cmd)
164    {
165      Table.submitToPopup(formId, cmd, 740, 540);
166    }
167    function returnSelected()
168    {
169      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
170      window.close();
171    }
172    function presetOnChange()
173    {
174      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
175    }
176    </script>
177  </base:head>
178 
179  <base:body>
180    <%
181    if (cc.getMessage() != null)
182    {
183      %>
184      <div class="error"><%=cc.getMessage()%></div>
185      <%
186      cc.setMessage(null);
187    }
188    %>
189    <tbl:table 
190      id="pluginTypes" 
191      clazz="itemlist" 
192      columns="<%=cc.getSetting("columns")%>"
193      sortby="<%=cc.getSortProperty()%>" 
194      direction="<%=cc.getSortDirection()%>"
195      title="<%=title%>"
196      action="index.jsp"
197      sc="<%=sc%>"
198      item="<%=itemType%>"
199      >
200      <tbl:hidden 
201        name="mode" 
202        value="<%=mode.getName()%>" 
203      />
204      <tbl:hidden 
205        name="callback" 
206        value="<%=callback%>" 
207        skip="<%=callback == null%>" 
208      />
209      <tbl:columndef 
210        id="name"
211        property="name"
212        datatype="string"
213        title="Name"
214        sortable="true" 
215        filterable="true"
216        exportable="true"
217        show="always" 
218      />
219      <tbl:columndef 
220        id="id"
221        clazz="uniquecol"
222        property="id"
223        datatype="int"
224        title="ID"
225        sortable="true"
226        filterable="true"
227        exportable="true"
228      />
229      <tbl:columndef 
230        id="entryDate"
231        property="entryDate"
232        datatype="date"
233        title="Registered"
234        sortable="true" 
235        filterable="true"
236        exportable="true"
237        formatter="<%=dateFormatter%>"
238      />
239      <tbl:columndef 
240        id="interfaceName"
241        clazz="uniquecol"
242        property="interfaceName"
243        datatype="string"
244        title="Interface"
245        sortable="true" 
246        filterable="true"
247        exportable="true"
248      />
249      <tbl:columndef 
250        id="jarPath"
251        property="jarPath"
252        datatype="string"
253        title="Jar path"
254        sortable="true" 
255        filterable="true"
256        exportable="true"
257      />
258      <tbl:columndef
259        id="plugins"
260        title="Plugins"
261        property="&plugins(name)"
262        datatype="string"
263        filterable="true"
264        exportable="true"
265      />
266      <tbl:columndef 
267        id="description"
268        property="description"
269        datatype="string"
270        title="Description" 
271        sortable="true" 
272        filterable="true" 
273        exportable="true"
274      />
275      <tbl:toolbar
276        visible="<%=mode.hasToolbar()%>"
277        >
278        <tbl:button 
279          disabled="<%=createPermission ? false : true%>" 
280          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
281          onclick="newItem()" 
282          title="New&hellip;" 
283          tooltip="<%=createPermission ? "Create new plugin type" : "You do not have permission to create plugin types"%>" 
284        />
285        <tbl:button 
286          disabled="<%=deletePermission ? false : true%>" 
287          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
288          onclick="deleteItems()" 
289          title="Delete" 
290          tooltip="<%=deletePermission ? "Delete the selected items" : "You do not have permission to delete plugin types" %>" 
291        />
292        <tbl:button 
293          disabled="<%=writePermission ? false : true%>" 
294          image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
295          onclick="restoreItems()" 
296          title="Restore" 
297          tooltip="<%=writePermission ? "Restore the selected (deleted) items" : "You do not have permission to edit plugin types" %>" 
298        />
299        <tbl:button 
300          image="columns.gif" 
301          onclick="configureColumns()" 
302          title="Columns&hellip;" 
303          tooltip="Show, hide and re-order columns" 
304        />
305        <tbl:button 
306          image="import.gif" 
307          onclick="runPlugin('ImportItems')" 
308          title="Import&hellip;" 
309          tooltip="Import data" 
310          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
311        />
312        <tbl:button 
313          image="export.gif" 
314          onclick="runPlugin('ExportItems')" 
315          title="Export&hellip;" 
316          tooltip="Export data" 
317          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
318        />
319        <tbl:button 
320          image="runplugin.gif" 
321          onclick="runPlugin('RunListPlugin')" 
322          title="Run plugin&hellip;" 
323          tooltip="Run a plugin" 
324          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
325        />
326        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
327          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
328      </tbl:toolbar>
329      <tbl:navigator
330        page="<%=cc.getPage()%>" 
331        rowsperpage="<%=cc.getRowsPerPage()%>" 
332        totalrows="<%=pluginTypes == null ? 0 : pluginTypes.getTotalCount()%>" 
333        visible="<%=mode.hasNavigator()%>"
334      />
335      <tbl:data>
336        <tbl:columns>
337        <tbl:presetselector 
338          clazz="columnheader"
339          colspan="3"
340          onchange="presetOnChange()"
341        />
342        </tbl:columns>
343
344        <tr>
345          <tbl:header 
346            clazz="index"
347            >&nbsp;</tbl:header>
348          <tbl:header 
349            clazz="check" 
350            visible="<%=mode.hasCheck()%>"
351            ><base:icon 
352              image="check_uncheck.gif" 
353              tooltip="Check/uncheck all" 
354              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
355            /></tbl:header>
356          <tbl:header 
357            clazz="check" 
358            visible="<%=mode.hasRadio()%>"
359            >&nbsp;</tbl:header>
360          <tbl:header 
361            clazz="icons" 
362            visible="<%=mode.hasIcons()%>"
363            >&nbsp;</tbl:header>
364          <tbl:propertyfilter />
365        </tr>
366         
367          <tbl:rows>
368          <%
369          int index = cc.getPage()*cc.getRowsPerPage();
370          int selectedItemId = cc.getId();
371          if (pluginTypes != null)
372          {           
373            while (pluginTypes.hasNext())
374            {
375              PluginType item = pluginTypes.next();
376              int itemId = item.getId();
377              String name = HTML.encodeTags(item.getName());
378              String tooltip = mode.isSelectionMode() ? 
379                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
380              String deletePermanently = "deleteItemPermanently("+itemId+")";
381              index++;
382              numListed++;
383              %>
384              <tbl:row>
385                <tbl:header 
386                  clazz="index"
387                  ><%=index%></tbl:header>
388                <tbl:header 
389                  clazz="check" 
390                  visible="<%=mode.hasCheck()%>"
391                  ><input 
392                    type="checkbox" 
393                    name="<%=itemId%>" 
394                    value="<%=itemId%>" 
395                    title="<%=name%>" 
396                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
397                  ></tbl:header>
398                <tbl:header 
399                  clazz="check" 
400                  visible="<%=mode.hasRadio()%>"
401                  ><input 
402                    type="radio" 
403                    name="item_id" 
404                    value="<%=itemId%>" 
405                    title="<%=name%>" 
406                    <%=selectedItemId == itemId ? "checked" : ""%>
407                  ></tbl:header>
408                <tbl:header 
409                  clazz="icons" 
410                  visible="<%=mode.hasIcons()%>"
411                  ><base:icon 
412                    image="<%=deletePermission ? "deleted.gif" : "deleted_disabled.gif"%>"
413                    onclick="<%=deletePermission ? deletePermanently : null%>"
414                    tooltip="This item has been scheduled for deletion" 
415                    visible="<%=item.isRemoved()%>"
416                  />&nbsp;</tbl:header>
417                <tbl:cell column="name"><div class="link" 
418                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
419                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
420                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
421                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
422                <tbl:cell column="interfaceName"><%=item.getInterfaceName()%></tbl:cell>
423                <tbl:cell column="jarPath"><%=Values.getString(item.getJarPath(), "<i>-&nbsp;internal&nbsp;-</i>")%></tbl:cell>
424                <tbl:cell column="plugins">
425                  <%
426                  pluginQuery.setParameter("pluginType", itemId, Type.INT);
427                  try
428                  {
429                    String separator = "";
430                    for (PluginDefinition p : pluginQuery.list(dc))
431                    {
432                      out.write(separator);
433                      if (mode.hasPropertyLink())
434                      {
435                        out.write(Base.getLinkedName(ID, new NameablePluginAdaptor(p), false, mode.hasEditLink()));
436                      }
437                      else
438                      {
439                        out.write(HTML.encodeTags(p.getName()));
440                      }
441                      separator = ", ";
442                    }
443                  }
444                  catch (Throwable t)
445                  {
446                    %>
447                    <div class="error"><%=t.getMessage()%></div>
448                    <%
449                  }
450                  %>
451                </tbl:cell>
452                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
453              </tbl:row>
454              <%
455              }
456            }
457          %>
458          </tbl:rows>
459      </tbl:data>
460      <%
461      if (numListed == 0)
462      {
463        %>
464        <tbl:panel><%=pluginTypes == null || pluginTypes.getTotalCount() == 0 ? "No plugin types were found" : "No plugin types on this page. Please select another page!" %></tbl:panel>
465        <%
466      }
467      else
468      {
469        %>
470        <tbl:navigator
471          page="<%=cc.getPage()%>" 
472          rowsperpage="<%=cc.getRowsPerPage()%>" 
473          totalrows="<%=pluginTypes == null ? 0 : pluginTypes.getTotalCount()%>" 
474          visible="<%=mode.hasNavigator()%>"
475          locked="true"
476        />
477        <%
478      }
479      %>
480    </tbl:table>
481    <base:buttongroup align="center" clazz="fixedatbottom">
482      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
483      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
484      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
485    </base:buttongroup>
486    <br><br><br>
487  </base:body>
488  </base:page>
489  <%
490}
491finally
492{
493  if (pluginTypes != null) pluginTypes.close();
494  if (dc != null) dc.close();
495}
496%>
Note: See TracBrowser for help on using the repository browser.