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

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

References #364 Configuring the installation is allmost done.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 9.0 KB
Line 
1<%-- $Id: auto_install.jsp 3708 2007-09-05 15:48:53Z 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.clients.web.util.HTML"
45  import="net.sf.basedb.clients.web.Base"
46 
47  import="java.util.Collections"
48  import="java.util.List"
49  import="java.util.ArrayList"
50  import="java.util.Iterator"
51%>
52<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
53<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
54<%
55final Item itemType = Item.PLUGINDEFINITION;
56final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
57final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
58//final int itemId = cc.getId();
59final String ID = sc.getId();
60final float scale = Base.getScale(sc);
61final DbControl dc = sc.newDbControl();
62
63try
64{
65  String title = "Plugin autoinstaller";
66  java.io.File pluginDir = new java.io.File(request.getParameter("plugin_path"));
67  List<PluginInfo> pluginInfos = new ArrayList<PluginInfo>();
68  List<java.io.File> jarFiles = FileUtil.findFiles(pluginDir, null, "jar", true);
69 
70  StringBuilder newPlugins = new StringBuilder();
71   
72  for (java.io.File file : jarFiles)
73  {
74    pluginInfos.addAll(PluginInfo.loadFromJar(file));
75  }
76  %>
77  <base:page type="popup" title="<%=title%>">
78  <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
79    <script language="JavaScript">
80   
81    // Submit the form
82    function saveSettings(install)
83    {
84      var frm = document.forms['autoinstall'];
85      frm.submit();
86    }
87    function toggle(grpId)
88    {
89      var grp = document.getElementById('grp.'+grpId);
90      var grpIcon = document.getElementById('grp.'+grpId+'.icon');
91      var cnfId = 1;
92      var cnf = document.getElementById('cnf.'+grpId+'.'+cnfId);
93      if (cnf && cnf.style.display == 'none')
94      {
95        grpIcon.src = getRoot()+'images/joust/minustop.gif';
96      }
97      else
98      {
99        grpIcon.src = getRoot()+'images/joust/plusonly.gif';
100      }
101      while (cnf)
102      {
103        Main.showHide(cnf.id);
104        cnfId++;
105        cnf = document.getElementById('cnf.'+grpId+'.'+cnfId);
106      }
107    }
108    function setConfigsOnChange(pluginId, selectList)
109    {
110      var installoption = selectList[selectList.selectedIndex].value;
111      if (installoption == 'plugin+confs')
112      {
113        var cnfId = 1;
114        var cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
115        while (cnf)
116        {
117          for (var i = 0; i < cnf.length; i++)
118          {
119           
120            if (cnf[i].value == 'import')
121            {
122              cnf.selectedIndex = i;
123              i = cnf.length;                         
124            }
125          }
126          cnfId++;
127          cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
128        }
129      }
130      else
131      {
132        var cnfId = 1;
133        var cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
134        while (cnf)
135        {
136          for (var i = 0; i < cnf.length; i++)
137          {
138           
139            if (cnf[i].value == 'none')
140            {
141              cnf.selectedIndex = i;
142              i = cnf.length;                         
143            }
144          }
145          cnfId++;
146          cnf = document.getElementById('setconfig.'+pluginId+'.'+cnfId);
147        }
148      }
149    }   
150    </script>
151  </base:head>
152  <base:body>
153    <form name="autoinstall" action="index.jsp" method="post" onsubmit="return false;">
154    <input type="hidden" name="ID" value="<%=ID%>">
155    <input type="hidden" name="cmd" value="LoadPlugins">
156   
157    <h3 class="docked"><%=title%> <base:help tabcontrol="plugins" /></h3>
158   
159    <t:tabcontrol id="plugins" contentstyle="<%="height: "+(int)(scale*260)+"px;"%>" 
160      position="bottom">
161      <t:tab id="plugins" title="Available plugins" validate="validatePlugins()" helpid="plugindefinition.autoinstaller.plugins">
162        <div align="left">
163          <table border="0" cellspacing="0" cellpadding="0">
164            <tr>
165              <td><b>Plugins</b></td>             
166              <td><b>Install</b></td>
167            </tr>
168            <%
169            int plugin = 0;
170            for (PluginInfo info : pluginInfos)
171            {
172              String name = info.getAbout().getName();
173              List<PluginConfigInfo> cnfInfos = info.getConfigurations();
174              ++plugin;
175              int cnf = 0;
176              boolean hasConfigs = cnfInfos != null && !cnfInfos.isEmpty();
177              boolean classExists = true;
178              boolean jarExists = true;
179              PluginDefinition pd = null;
180              try
181              {
182                pd = PluginDefinition.getByClassName(dc, info.getClassName());
183                if (pd.getJarPath().equals(info.getJarPath()))
184                {
185                  jarExists = true;
186                }
187              }
188              catch(ItemNotFoundException ex)
189              {
190                classExists = false;
191                jarExists = false;
192              }
193              %>
194              <tr id="plugin.<%=plugin%>">
195                <td style="padding-top: 6px;">
196                  <%
197                  if (hasConfigs)
198                  {
199                  %>
200                    <a href="javascript:toggle(<%=plugin%>)" title="Expand/collaps to see/hide configurations">
201                    <base:icon id="<%="grp."+plugin+".icon"%>" image="joust/plusonly.gif" />                   
202                    <%
203                  }
204                  %>                 
205                  &nbsp;<%=HTML.encodeTags(name)%></a>&nbsp;&nbsp;
206                </td>
207                <td>
208                  <select name="setplugin.<%=plugin%>" 
209                   onchange="setConfigsOnChange(<%=plugin%>,this)" <%=classExists&&jarExists ? "disabled" : "" %>>
210                    <option value="none" title="Plugin will not be installed">--None--
211                    <option value="plugin" title="Plugin will be installed">Only plugin
212                    <%
213                    if (hasConfigs)
214                    {
215                    %>
216                      <option value="plugin+confs" title="Plugin and configurations will be installed">With configurations
217                    <%
218                    }
219                    %>
220                  </select>
221                  <base:icon image="<%=classExists&&!jarExists ? "itemexists.gif" : "" %>" />
222                  <base:icon image="<%=classExists&&jarExists ? "hasvalues.gif" : "" %>" />
223                </td>
224              </tr>
225              <%
226              if (hasConfigs)
227              {
228                Iterator<PluginConfigInfo> cnfi = cnfInfos.iterator();
229                while (cnfi.hasNext())
230                {
231                  PluginConfigInfo cnfInfo = cnfi.next();
232                  boolean isDublicate = false;
233                  if (classExists)
234                  {
235                    ItemQuery<PluginConfiguration> cnfQuery = pd.getPluginConfigurations();
236                    cnfQuery.restrict(Restrictions.eq(Hql.property("name"), Expressions.string(cnfInfo.getName())));
237                    Iterator<PluginConfiguration> it = cnfQuery.iterate(dc);
238                    isDublicate = it != null && it.hasNext();
239                  }
240                  ++cnf;
241                  boolean hasNext = cnfi.hasNext();
242                  %>
243                  <tr id="cnf.<%=plugin%>.<%=cnf%>" style="display: none;">
244                    <td>
245                      <base:icon 
246                        image="<%=hasNext ? "joust/big/join.gif" : "joust/big/joinbottom.gif"%>" 
247                      />                     
248                      <%=HTML.encodeTags(cnfInfo.getName())%>&nbsp;&nbsp;
249                    </td>
250                    <td>
251                      <select id="setconfig.<%=plugin%>.<%=cnf%>">
252                        <option value="none" title="Configuration will not be imported">--None-- 
253                        <option value="import" title="Configuration will be imported">Import
254                      </select>
255                      <base:icon image="<%=isDublicate ? "warning.gif" : ""%>" />
256                    </td>
257                  </tr>
258                  <%
259                }
260              }
261            }
262            %>
263          </table>
264        </div>
265        <div align=left style="padding-top:20px">         
266          &nbsp;<i><base:icon image="itemexists.gif" /> = Class with same name exists in another jar-file</i><br>
267          &nbsp;<i><base:icon image="warning.gif" /> = Configuration already exists</i><br>
268          &nbsp;<i><base:icon image="hasvalues.gif" /> = Plugin allready installed, <br>&nbsp;&nbsp;
269          &nbsp;&nbsp;class-name and jar-file are the same as an installed plugin</i>
270        </div>       
271      </t:tab>
272   
273    </t:tabcontrol>
274   
275    <table align="center">
276    <tr>
277      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
278      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
279    </tr>
280    </table>
281  </base:body> 
282  </base:page>
283  <% 
284}
285finally
286{
287  if (dc != null) dc.close();
288}
289%>
Note: See TracBrowser for help on using the repository browser.