source: trunk/www/common/import/select_plugin.jsp @ 5372

Last change on this file since 5372 was 5372, checked in by Nicklas Nordborg, 12 years ago

Fixes #1462: Select plugin+configuration in a single list

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.0 KB
Line 
1<%-- $Id: select_plugin.jsp 5372 2010-06-24 12:28:06Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
5  Copyright (C) 2007 Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24  @author Nicklas
25  @version 2.0
26--%>
27<%@ page session="false"
28  import="net.sf.basedb.core.SessionControl"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.PluginDefinition"
32  import="net.sf.basedb.core.PluginConfiguration"
33  import="net.sf.basedb.core.PluginType"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.ItemResultList"
36  import="net.sf.basedb.core.Include"
37  import="net.sf.basedb.core.Job"
38  import="net.sf.basedb.core.query.Hql"
39  import="net.sf.basedb.core.query.Expressions"
40  import="net.sf.basedb.core.query.Restrictions"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.plugin.GuiContext"
43  import="net.sf.basedb.core.plugin.Plugin"
44  import="net.sf.basedb.core.plugin.InteractivePlugin"
45  import="net.sf.basedb.core.plugin.AutoDetectingImporter"
46  import="net.sf.basedb.clients.web.Base"
47  import="net.sf.basedb.util.Values"
48  import="net.sf.basedb.util.ContextUtil"
49  import="net.sf.basedb.util.ContextUtil.ContextResult"
50  import="net.sf.basedb.clients.web.util.HTML"
51  import="java.util.Set"
52  import="java.util.Map"
53  import="java.util.List"
54%>
55<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
56<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
57
58<%
59final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
60final String ID = sc.getId();
61final Item itemType = Item.valueOf(request.getParameter("item_type"));
62final String subContext = Values.getString(request.getParameter("subcontext"), "");
63final GuiContext.Type contextType = GuiContext.Type.valueOf(request.getParameter("context_type"));
64final GuiContext context = new GuiContext(itemType, contextType);
65final String title = request.getParameter("title");
66final boolean noAutodetect = Values.getBoolean(request.getParameter("noautodetect"));
67final String message = request.getParameter("message");
68final boolean anotherIsOpen = sc.getSessionSetting("plugin.configure.plugin") != null;
69final DbControl dc = sc.newDbControl();
70final float scale = Base.getScale(sc);
71try
72{
73  final PluginType autoDetectingType = PluginType.getByInterfaceName(dc, AutoDetectingImporter.class.getName());
74
75  String jobName = Values.getString(request.getParameter("job_name"), title);
76 
77  List<ContextResult> contextResults = (List<ContextResult>)sc.getSessionSetting("IMPORTERS");
78  Set<String> messages = (Set<String>)sc.getSessionSetting("MESSAGES");
79  StringBuilder descriptions = new StringBuilder();
80  %>
81  <base:page type="popup" title="<%=title%>">
82  <base:head scripts="plugin.js">
83    <script language="JavaScript">
84    function doNext()
85    {
86      var frm = document.forms['import'];
87      var anotherIsOpen = <%=anotherIsOpen%>;
88      if (anotherIsOpen)
89      {
90        if (!confirm('Are you sure? Unsaved settings in the other wizard will be lost.')) return;
91        frm.warnIfOpen.value = '0';
92      }
93      frm.submit();
94    }
95   
96    var lastSelectedPlugin;
97    var lastSelectedConfig;
98    function pluginOnChange()
99    {
100      var frm = document.forms['import'];
101      var pluginList = frm.plugins;
102      var plugin = pluginList[pluginList.selectedIndex].plugin;
103      var config = pluginList[pluginList.selectedIndex].configuration;
104      var selectedValue = pluginList[pluginList.selectedIndex].value;
105     
106      if (lastSelectedPlugin)
107      {
108        Main.hide('description.'+lastSelectedPlugin.id);
109      }
110      if (lastSelectedConfig)
111      {
112        Main.hide('description.config.'+lastSelectedConfig.id);
113      }
114      Main.showHide('descriptions', plugin);
115      if (plugin)
116      {
117        Main.show('description.'+plugin.id);
118        frm.plugindefinition_id.value = plugin.id;
119        frm.pluginconfiguration_id.value = selectedValue == -1 ? -1 : 0;
120      }
121      else
122      {
123        frm.plugindefinition_id.value = selectedValue;
124      }
125      if (config)
126      {
127        Main.show('description.config.'+config.id);
128        frm.pluginconfiguration_id.value = config.id;
129      }
130      lastSelectedConfig = config;
131      lastSelectedPlugin = plugin;
132    }
133
134    function init()
135    {
136      var frm = document.forms['import'];
137      var pluginList = frm.plugins;
138     
139      <%
140      PluginDefinition lastPlugin = null;
141      for (ContextResult result : contextResults)
142      {
143        if (result.isInContext())
144        {
145          PluginDefinition pd = result.getPluginDefinition();
146          if (!pd.equals(lastPlugin))
147          {
148            lastPlugin = pd;
149            dc.reattachItem(pd, false);
150            boolean autoDetecting = !noAutodetect && pd.supports(autoDetectingType);
151            String supportsConfig = pd.supportsConfigurations() ? "true" : "false";
152            String requiresConfig = noAutodetect || pd.requiresConfiguration() ? "true" : "false";
153            descriptions.append("<div id=\"description." + pd.getId() +"\" style=\"display: none;\">");
154            descriptions.append(HTML.niceFormat("<b>" + pd.getName() + "</b>\n" + pd.getDescription()));
155            descriptions.append("</div>");
156            %>
157            var thePlugin = new Plugin(<%=pd.getId()%>, '<%=HTML.javaScriptEncode(pd.getName())%>', <%=autoDetecting%>, <%=supportsConfig%>, <%=requiresConfig%>);
158            <%
159          }
160          PluginConfiguration pc = result.getPluginConfiguration();
161          if (pc != null)
162          {
163            descriptions.append("<div id=\"description.config." + pc.getId() + "\" style=\"display: none; padding-top: 6px;\">");
164            descriptions.append(HTML.niceFormat("<b>" + pc.getName() + "</b>\n" +pc.getDescription()));           
165            descriptions.append("</div>");
166            %>
167            thePlugin.addConfiguration(<%=pc.getId()%>, '<%=HTML.javaScriptEncode(pc.getName())%>');
168            <%
169          }
170        }
171      }
172      %>     
173      Plugins.populateLists(pluginList);
174      pluginOnChange();
175    }
176    </script>
177  </base:head>
178  <base:body onload="init()">
179    <form name="import" action="index.jsp" method="post" onsubmit="return false;">
180    <input type="hidden" name="ID" value="<%=ID%>">
181    <input type="hidden" name="cmd" value="RunPlugin">
182    <input type="hidden" name="item_type" value="<%=itemType.name()%>">
183    <input type="hidden" name="subcontext" value="<%=subContext%>">
184    <input type="hidden" name="context_type" value="<%=contextType.name()%>">
185    <input type="hidden" name="title" value="<%=title%>">
186    <input type="hidden" name="warnIfOpen" value="1">
187    <input type="hidden" name="plugindefinition_id" value="">
188    <input type="hidden" name="pluginconfiguration_id" value="">
189
190    <h3 class="docked"><%=title%> <base:help helpid="import.selectplugin" /></h3>
191    <div class="boxed" style="height: <%=(int)(scale*420)%>px; overflow: auto;">
192      <div class="helpmessage">
193      <%
194      if (message != null)
195      {
196        %>
197        <%=message%>
198        <%
199      }
200      else
201      {
202        %>
203        Please select a plugin and file format to use.
204        <%
205      }
206      %>
207      </div>
208   
209      <table class="form" width="100%">
210      <tr valign="top">
211        <td class="prompt">Plugin + file format</td>
212        <td>
213          <select name="plugins" class="required" onchange="pluginOnChange()">
214          </select>
215          <%
216          if (!noAutodetect)
217          {
218            %>
219            × = Supports auto-detection
220            <%
221          }
222          %>
223        </td>
224      </tr>
225      <%
226      if (messages != null && messages.size() > 0)
227      {
228        %>
229        <tr>
230          <td class="prompt">&nbsp;</td>
231          <td>
232            <base:icon image="bullet.gif" />
233            <a href="javascript:Main.showHide('pluginMessages')" 
234              title="Show/hide the messages from the plugins that couldn't be used">
235            Some plugins couldn't be used
236            </a>
237            <div id="pluginMessages" style="display: none;">
238            <ul>
239            <li><%=Values.getString(messages, "<li>", true)%>
240            </ul>
241            </div>
242          </td>
243        </tr>
244        <%
245      }
246      %>
247      </table>
248      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
249      <div id="descriptions" class="helpmessage" 
250        style="height: <%=(int)(scale*270)%>px; overflow: auto;">
251      <%=descriptions.toString()%>
252      </div>
253    </div>
254    </form>
255 
256    <%
257    if (anotherIsOpen)
258    {
259      %>
260      <div class="error">
261        Another plug-in configuration wizard is open, or it hasn't properly
262        clean up after itself.<br>
263        If you continue unsaved settings in the other wizard is lost.
264      </div>
265      <%
266    }
267    %>
268    <table align="center">
269    <tr>
270      <td width="50%"><base:button onclick="doNext();" title="Next" /></td>
271      <td width="50%"><base:button onclick="window.close();" title="Cancel" /></td>
272    </tr>
273    </table>
274  </base:body>
275  </base:page>
276  <%
277}
278finally
279{
280  if (dc != null) dc.close();
281}
282%>
283
Note: See TracBrowser for help on using the repository browser.