source: trunk/www/admin/plugindefinitions/auto_install.jsp @ 3712

Last change on this file since 3712 was 3712, checked in by Martin Svensson, 14 years ago

References #364. Most of the plugin settings can be saved now, but still some things left to add

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 10.0 KB
Line 
1<%-- $Id: auto_install.jsp 3712 2007-09-06 12:56:57Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) 2007 Johan Enell, Nicklas Nordborg
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 2
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place - Suite 330,
21  Boston, MA  02111-1307, USA.
22  ------------------------------------------------------------------
23
24
25  @author Martin
26  @version 2.5
27--%>
28<%@ page session="false"
29
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.ItemNotFoundException"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.PluginDefinition"
36  import="net.sf.basedb.core.PluginConfiguration"
37  import="net.sf.basedb.core.SessionControl"
38  import="net.sf.basedb.core.query.Hql"
39  import="net.sf.basedb.core.query.Restrictions"
40  import="net.sf.basedb.core.query.Expressions"
41  import="net.sf.basedb.util.FileUtil"
42  import="net.sf.basedb.util.PluginInfo"
43  import="net.sf.basedb.util.PluginConfigInfo"
44  import="net.sf.basedb.util.Values"
45  import="net.sf.basedb.clients.web.util.HTML"
46  import="net.sf.basedb.clients.web.Base"
47 
48  import="java.util.Collections"
49  import="java.util.List"
50  import="java.util.ArrayList"
51  import="java.util.Iterator"
52%>
53<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
54<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
55<%
56final Item itemType = Item.PLUGINDEFINITION;
57final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
58final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
59//final int itemId = cc.getId();
60final String ID = sc.getId();
61final float scale = Base.getScale(sc);
62final DbControl dc = sc.newDbControl();
63
64try
65{
66  String title = "Plugin autoinstaller";
67  String tt = cc.getPropertyValue("trusted");
68  String up = cc.getPropertyValue("usePermissions");
69  String aie = cc.getPropertyValue("allowImmediateExection");
70  boolean isTrusted = tt == null ? true : Values.getBoolean(tt);
71  boolean usePermissions = up == null ? false : Values.getBoolean(up);
72  Boolean allowImmediateExecution = aie == null ? null : Values.getBoolean(aie);
73 
74  java.io.File pluginDir = new java.io.File(request.getParameter("plugin_path"));
75  List<PluginInfo> pluginInfos = new ArrayList<PluginInfo>();
76  List<java.io.File> jarFiles = FileUtil.findFiles(pluginDir, null, "jar", true);
77   
78  for (java.io.File file : jarFiles)
79  {
80    pluginInfos.addAll(PluginInfo.loadFromJar(file));
81  }
82  %>
83  <base:page type="popup" title="<%=title%>">
84  <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
85    <script language="JavaScript">
86   
87    // Submit the form
88    function saveSettings(install)
89    {
90      var frm = document.forms['autoinstall'];
91      frm.submit();
92    }
93    function toggle(grpId)
94    {
95      var grp = document.getElementById('grp.'+grpId);
96      var grpIcon = document.getElementById('grp.'+grpId+'.icon');
97      var cnfId = 1;
98      var cnf = document.getElementById('cnf.'+grpId+'.'+cnfId);
99      if (cnf && cnf.style.display == 'none')
100      {
101        grpIcon.src = getRoot()+'images/joust/minustop.gif';
102      }
103      else
104      {
105        grpIcon.src = getRoot()+'images/joust/plusonly.gif';
106      }
107      while (cnf)
108      {
109        Main.showHide(cnf.id);
110        cnfId++;
111        cnf = document.getElementById('cnf.'+grpId+'.'+cnfId);
112      }
113    }
114    function setConfigsOnChange(pluginId, selectList)
115    {
116      var installoption = selectList[selectList.selectedIndex].value;
117      if (installoption == 'plugin+confs')
118      {
119        var cnfId = 1;
120        var cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
121        while (cnf)
122        {
123          for (var i = 0; i < cnf.length; i++)
124          {
125           
126            if (cnf[i].value == 'import')
127            {
128              cnf.selectedIndex = i;
129              i = cnf.length;                         
130            }
131          }
132          cnfId++;
133          cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
134        }
135      }
136      else
137      {
138        var cnfId = 1;
139        var cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
140        while (cnf)
141        {
142          for (var i = 0; i < cnf.length; i++)
143          {
144           
145            if (cnf[i].value == 'none')
146            {
147              cnf.selectedIndex = i;
148              i = cnf.length;                         
149            }
150          }
151          cnfId++;
152          cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
153        }
154      }
155    }   
156    </script>
157  </base:head>
158  <base:body>
159    <form name="autoinstall" action="index.jsp" method="post" onsubmit="return false;">
160    <input type="hidden" name="ID" value="<%=ID%>">
161    <input type="hidden" name="cmd" value="LoadPlugins">
162    <input type="hidden" name="plugin_path" value="<%=pluginDir%>">
163   
164    <h3 class="docked"><%=title%> <base:help tabcontrol="plugins" /></h3>
165   
166    <t:tabcontrol id="plugins" contentstyle="<%="height: "+(int)(scale*260)+"px;"%>" 
167      position="bottom">
168      <t:tab id="plugins" title="Available plugins" validate="validatePlugins()" helpid="plugindefinition.autoinstaller.plugins">
169        <div align="left">
170          <table border="0" cellspacing="0" cellpadding="0">
171            <tr>
172              <td width="40%"><b>Plugins</b></td>             
173              <td><b>Install</b></td>
174              <td><b>Trusted</b></td>
175              <td><b>Allow immediate execution</b></td>
176            </tr>
177            <%
178            int plugin = 0;
179            for (PluginInfo info : pluginInfos)
180            {
181              String name = info.getAbout().getName();
182              List<PluginConfigInfo> cnfInfos = info.getConfigurations();
183              ++plugin;
184              int cnf = 0;
185              boolean hasConfigs = cnfInfos != null && !cnfInfos.isEmpty();
186              boolean classExists = true;
187              boolean jarExists = true;
188              PluginDefinition pd = null;
189              try
190              {
191                pd = PluginDefinition.getByClassName(dc, info.getClassName());
192                if (pd.getJarPath().equals(info.getJarPath()))
193                {
194                  jarExists = true;
195                }
196              }
197              catch(ItemNotFoundException ex)
198              {
199                classExists = false;
200                jarExists = false;
201              }
202              %>
203              <tr id="plugin.<%=plugin%>">
204                <td style="padding-top: 6px;">
205                  <%
206                  if (hasConfigs)
207                  {
208                  %>
209                    <a href="javascript:toggle(<%=plugin%>)" title="Expand/collaps to see/hide configurations">
210                    <base:icon id="<%="grp."+plugin+".icon"%>" image="joust/plusonly.gif" />                   
211                    <%
212                  }
213                  %>                 
214                  &nbsp;<%=HTML.encodeTags(name)%></a>&nbsp;&nbsp;
215                </td>
216                <td>
217                  <select id="setplugin.<%=plugin%>" name="<%=info.getJarPath()%>.<%=info.getClassName()%>"
218                   onchange="setConfigsOnChange(<%=plugin%>,this)" <%=classExists&&jarExists ? "disabled" : "" %>>
219                    <option value="" title="Plugin will not be installed">------
220                    <option value="plugin" title="Plugin will be installed">plugin
221                    <%
222                    if (hasConfigs)
223                    {
224                    %>
225                      <option value="plugin+confs" title="Plugin and configurations will be installed">with configs
226                    <%
227                    }
228                    %>
229                  </select>
230                  <input type="hidden" name="<%=info.getClassName()%>.classExists" value="<%=classExists%>">
231                  <input type="hidden" name="<%=info.getClassName()%>.jarExists" value="<%=jarExists%>">
232                  <base:icon image="<%=classExists&&!jarExists ? "itemexists.gif" : "" %>" />
233                  <base:icon image="<%=classExists&&jarExists ? "hasvalues.gif" : "" %>" />
234                </td>
235                <td>
236                  &nbsp;<select name="<%=info.getClassName()%>.trusted" <%=classExists&&jarExists ? "disabled" : ""%>>
237                    <option value="0">no
238                    <option value="1">yes
239                  </select>
240                  &nbsp;&nbsp;
241                </td>
242                <td>
243                  &nbsp;<select name="<%=info.getClassName()%>.allow_immediate_execution" <%=classExists&&jarExists ? "disabled" : ""%>>
244                    <option value="0">no
245                    <option value="1">yes
246                    <%
247                    if (allowImmediateExecution == null)
248                    {
249                      %>
250                      <option value="" selected>auto
251                      <%
252                    }
253                    %>
254                  </select>
255                </td>
256              </tr>
257              <%
258              if (hasConfigs)
259              {
260                Iterator<PluginConfigInfo> cnfi = cnfInfos.iterator();
261                while (cnfi.hasNext())
262                {
263                  PluginConfigInfo cnfInfo = cnfi.next();
264                  boolean isDublicate = false;
265                  if (classExists)
266                  {
267                    ItemQuery<PluginConfiguration> cnfQuery = pd.getPluginConfigurations();
268                    cnfQuery.restrict(Restrictions.eq(Hql.property("name"), Expressions.string(cnfInfo.getName())));
269                    Iterator<PluginConfiguration> it = cnfQuery.iterate(dc);
270                    isDublicate = it != null && it.hasNext();
271                  }
272                  ++cnf;
273                  boolean hasNext = cnfi.hasNext();
274                  %>
275                  <tr id="cnf.<%=plugin%>.<%=cnf%>" style="display: none;">
276                    <td>
277                      <base:icon 
278                        image="<%=hasNext ? "joust/big/join.gif" : "joust/big/joinbottom.gif"%>" 
279                      />                     
280                      <%=HTML.encodeTags(cnfInfo.getName())%>&nbsp;
281                    </td>
282                    <td>
283                      <select id="setconfig.<%=plugin%>.<%=cnf%>" name="<%=info.getClassName()%>.<%=cnfInfo.getName()%>">
284                        <option value="" title="Configuration will not be imported">------ 
285                        <option value="import" title="Configuration will be imported">Import
286                      </select>
287                      <base:icon image="<%=isDublicate ? "warning.gif" : ""%>" />
288                    </td>
289                  </tr>
290                  <%
291                }
292              }
293            }
294            %>
295          </table>
296        </div>
297       
298      </t:tab>
299   
300    </t:tabcontrol>
301   
302    <table align="center">
303    <tr>
304      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
305      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
306    </tr>
307    </table>
308  </base:body> 
309  </base:page>
310  <% 
311}
312finally
313{
314  if (dc != null) dc.close();
315}
316%>
Note: See TracBrowser for help on using the repository browser.