source: trunk/www/admin/reporterclonetemplates/view_template.jsp @ 5885

Last change on this file since 5885 was 5885, checked in by Nicklas Nordborg, 10 years ago

References #1616: Clone reporter information to per-experiment tables in the dynamic database

Updated Experiment explorer to use cloned information when possible. Renamed ClonedProperty to ClonableProperty.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 16.3 KB
Line 
1<%-- $Id $
2  ------------------------------------------------------------------
3  Copyright (C) 2011 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 3
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 BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21
22--%>
23<%@ page pageEncoding="UTF-8" session="false"
24  import="net.sf.basedb.core.SessionControl"
25  import="net.sf.basedb.core.DbControl"
26  import="net.sf.basedb.core.SystemItems"
27  import="net.sf.basedb.core.Group"
28  import="net.sf.basedb.core.Item"
29  import="net.sf.basedb.core.ItemContext"
30  import="net.sf.basedb.core.Permission"
31  import="net.sf.basedb.core.ReporterCloneTemplate"
32  import="net.sf.basedb.core.ClonableProperty"
33  import="net.sf.basedb.core.User"
34  import="net.sf.basedb.core.PermissionDeniedException"
35  import="net.sf.basedb.core.PluginDefinition"
36  import="net.sf.basedb.core.ItemQuery"
37  import="net.sf.basedb.core.ItemResultList"
38  import="net.sf.basedb.core.Include"
39  import="net.sf.basedb.core.MultiPermissions"
40  import="net.sf.basedb.core.plugin.GuiContext"
41  import="net.sf.basedb.core.plugin.Plugin"
42  import="net.sf.basedb.core.Project"
43  import="net.sf.basedb.core.query.Orders"
44  import="net.sf.basedb.core.query.Hql"
45  import="net.sf.basedb.clients.web.Base"
46  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
47  import="net.sf.basedb.clients.web.PermissionUtil"
48  import="net.sf.basedb.clients.web.util.HTML"
49  import="net.sf.basedb.util.formatter.Formatter"
50  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
51  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
52  import="net.sf.basedb.clients.web.extensions.JspContext"
53  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
54  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
55  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
56  import="java.util.Date"
57  import="net.sf.basedb.util.Values"
58  import="java.util.Collections"
59  import="java.util.Map"
60  import="java.util.Set"
61  import="java.util.List"
62%>
63<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
64<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
65<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
66<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
67<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
68<%!
69  private static final Item itemType = Item.REPORTERCLONETEMPLATE;
70  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
71%>
72<%
73final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
74final String ID = sc.getId();
75final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
76final int itemId = cc.getId();
77final String tab = Values.getString(request.getParameter("tab"), "properties");
78final float scale = Base.getScale(sc);
79final DbControl dc = sc.newDbControl();
80try
81{
82  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
83  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
84
85  String title = null;
86  ReporterCloneTemplate template = ReporterCloneTemplate.getById(dc, itemId);
87 
88  final boolean writePermission = template.hasPermission(Permission.WRITE);
89  final boolean deletePermission = template.hasPermission(Permission.DELETE);
90  final boolean sharePermission = template.hasPermission(Permission.SET_PERMISSION);
91  final boolean setOwnerPermission = template.hasPermission(Permission.SET_OWNER);
92  final boolean isRemoved = template.isRemoved();
93  final boolean isUsed = isRemoved && template.isUsed();
94  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
95  final boolean isOwner = template.isOwner();
96  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, template);
97  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
98  %>
99  <base:page title="<%=title%>">
100  <base:head scripts="tabcontrol.js,table.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
101    <ext:scripts context="<%=jspContext%>" />
102    <ext:stylesheets context="<%=jspContext%>" />
103    <script language="JavaScript">
104    function editItem()
105    {
106      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
107    }
108    function shareItem()
109    {
110      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareReporterCloneTemplate', 600, 400);
111    }
112    function deleteItem()
113    {
114      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
115    }
116    function restoreItem()
117    {
118      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
119    }
120    function deleteItemPermanently()
121    {
122      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
123    }
124    function itemDeleted()
125    {
126      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
127    }
128    function showUsingItems()
129    {
130      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
131    }
132    function setOwner()
133    {
134      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 150);
135    }
136    function runPlugin(cmd)
137    {
138      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
139    }
140    function switchTab(tabControlId, tabId)
141    {
142      if (TabControl.isActive(tabControlId, tabId)) return;
143      if (tabId == 'history' && tabId != '<%=tab%>')
144      {
145        location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=itemId%>&tab='+tabId;
146      }
147      else
148      {
149        TabControl.setActiveTab(tabControlId, tabId);
150      }
151    }
152    </script>
153  </base:head>
154  <base:body>
155    <p>
156    <p:path>
157      <p:pathelement title="Reporter clone templates" href="<%="index.jsp?ID="+ID%>" />
158      <p:pathelement title="<%=HTML.encodeTags(template.getName())%>" />
159    </p:path>
160   
161    <t:tabcontrol id="main" active="<%=tab%>" switch="switchTab" remember="false">
162    <t:tab id="properties" title="Properties">
163   
164    <tbl:toolbar
165      >
166      <tbl:button 
167        disabled="<%=writePermission ? false : true%>" 
168        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
169        onclick="editItem()" 
170        title="Edit&hellip;" 
171        tooltip="<%=writePermission ? "Edit this template" : "You do not have permission to edit this template"%>" 
172      />
173      <tbl:button 
174        disabled="<%=deletePermission ? false : true%>" 
175        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
176        onclick="deleteItem()" 
177        title="Delete"
178        visible="<%=!template.isRemoved()%>"
179        tooltip="<%=deletePermission ? "Delete this template" : "You do not have permission to delete this template"%>" 
180      />
181      <tbl:button 
182        disabled="<%=writePermission ? false : true%>" 
183        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
184        onclick="restoreItem()" 
185        title="Restore"
186        visible="<%=template.isRemoved()%>"
187        tooltip="<%=writePermission ? "Restore this template" : "You do not have permission to restore this template"%>" 
188      />
189      <tbl:button 
190        disabled="<%=sharePermission ? false : true%>"
191        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
192        onclick="shareItem()" 
193        title="Share&hellip;" 
194        tooltip="<%=sharePermission ? "Share this template to other user, groups and projects" : "You do not have permission to share this template"%>"
195      />
196      <tbl:button 
197        disabled="<%=setOwnerPermission ? false : true%>"
198        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
199        onclick="setOwner()" 
200        title="Set owner&hellip;"
201        tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
202      />
203      <tbl:button 
204        image="import.gif" 
205        onclick="runPlugin('ImportItem')" 
206        title="Import&hellip;" 
207        tooltip="Import data" 
208        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
209      />
210      <tbl:button 
211        image="export.gif" 
212        onclick="runPlugin('ExportItem')" 
213        title="Export&hellip;" 
214        tooltip="Export data" 
215        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
216      />
217      <tbl:button 
218        image="runplugin.gif" 
219        onclick="runPlugin('RunPlugin')" 
220        title="Run plugin&hellip;" 
221        tooltip="Run a plugin" 
222        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
223      />
224      <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
225        wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
226      <tbl:button
227        image="help.gif"
228        onclick="<%="Main.openHelp('" + ID +"', 'reporterclonetemplate.view.properties')"%>"
229        title="Help&hellip;"
230        tooltip="Get help about this page"
231      />
232      </tbl:toolbar>
233    <div class="boxedbottom">
234      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(template)%></i></div>
235      <%
236      if (template.isRemoved() || template.isShared())
237      {
238        %>
239        <div class="itemstatus">
240          <base:icon 
241            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
242            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
243            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
244            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
245          <base:icon image="used.gif" 
246            onclick="showUsingItems()"
247            tooltip="Show the items that are using this one"
248            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
249          <base:icon image="shared.gif" 
250            visible="<%=template.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
251        </div>
252        <%
253      }
254      %>
255      <table class="form" cellspacing="0">
256      <tr>
257        <td class="prompt">Name</td>
258        <td><%=HTML.encodeTags(template.getName())%></td>
259      </tr>
260      <tr>
261        <td class="prompt">Registered</td>
262        <td><%=dateFormatter.format(template.getEntryDate())%></td>
263      </tr>
264      <tr>
265        <td class="prompt">Locked</td>
266        <td><%=template.isLocked() ? "yes" : "no"%></td>
267      </tr>
268      <tr>
269        <td class="prompt">Owner</td>
270        <td><base:propertyvalue item="<%=template%>" property="owner" /></td>
271      </tr>
272      <tr>
273        <td class="prompt">Description</td>
274        <td><%=HTML.niceFormat(template.getDescription())%></td>
275      </tr>
276      </table>
277
278      <%
279      List<ClonableProperty> properties = template.getClonableProperties();
280      if (properties.size() == 0)
281      {
282        %>
283        <h4>Cloned properties</h4>
284        This template doesn't specify any properties to clone.
285        <%
286      }
287      else
288      {
289        boolean hasNonExistingProperty = false;
290        %>
291        <base:section
292          id="properties"
293          title="<%="Cloned properties (" + properties.size() + ")"%>"
294          context="<%=cc%>"
295          >       
296          <tbl:table
297            id="properties"
298            clazz="itemlist"
299            columns="all"
300            >
301            <tbl:columndef 
302              id="title"
303              title="Property"
304            />
305            <tbl:columndef
306              id="valueType"
307              title="Value type"
308            />
309            <tbl:columndef 
310              id="description"
311              title="Description"
312            />
313            <tbl:data>
314              <tbl:columns>
315              </tbl:columns>
316              <tbl:rows>
317              <%
318              for (ClonableProperty property : properties)
319              {
320                boolean exists = property.exists();
321                hasNonExistingProperty |= !exists;
322                %>
323                <tbl:row>
324                  <tbl:cell column="title">
325                    <base:icon image="warning.gif" visible="<%=!exists %>"/>
326                  <%=HTML.encodeTags(property.getTitle())%></tbl:cell>
327                  <tbl:cell column="description"><%=HTML.encodeTags(property.getDescription())%></tbl:cell>
328                  <tbl:cell column="valueType"><%=property.getType() %></tbl:cell>
329                </tbl:row>
330                <%
331              }
332              %>
333              </tbl:rows>
334            </tbl:data>
335          </tbl:table>
336          <%
337          if (hasNonExistingProperty)
338          {
339            %>
340            <base:icon image="warning.gif" /> = This property no longer exists in the main reporter table
341              and will be ignored when cloning
342            <%
343          }
344          %>
345        </base:section>
346        <%
347      }
348      %>
349      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
350        <jsp:param name="ID" value="<%=ID%>" />
351        <jsp:param name="item_type" value="<%=itemType.name()%>" />
352        <jsp:param name="item_id" value="<%=itemId%>" />
353        <jsp:param name="title" value="Other items related to this template" />
354      </jsp:include>
355      <%
356      // Tables with users/groups/projects that this item is shared to
357      MultiPermissions mp = new MultiPermissions(Collections.singleton(template));
358      ItemResultList<User> users = mp.getUsers().list(dc);
359      ItemResultList<Group> groups = mp.getGroups().list(dc);
360      ItemResultList<Project> projects = mp.getProjects().list(dc);
361      int totalShare = (users.size() + groups.size() + projects.size());
362      if (totalShare > 0)
363      {
364        %>
365        <base:section 
366          id="sharedTo" 
367          title="<%="Shared to (" + totalShare + ")"%>"
368          context="<%=cc%>"
369          >       
370          <tbl:table 
371            id="itemsSharedTo"
372            clazz="itemlist"
373            columns="all"
374          >
375            <tbl:columndef 
376              id="itemType"
377              title="Item type"
378            />
379            <tbl:columndef 
380              id="name"
381              title="Name"
382            />
383            <tbl:columndef 
384              id="permissions"
385              title="Permissions"
386            />
387            <tbl:data>
388              <tbl:columns>
389              </tbl:columns>
390              <tbl:rows>
391              <%
392              for (Project project : projects)
393              {
394                Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
395                %>     
396                <tbl:row>
397                  <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
398                  <tbl:cell column="name"><base:icon 
399                    image="deleted.gif" 
400                    tooltip="This item has been scheduled for deletion" 
401                    visible="<%=project.isRemoved()%>"
402                  /><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
403                  <tbl:cell column="permissions">
404                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
405                  </tbl:cell>
406                </tbl:row>
407                <%
408              }
409              for (Group group : groups)
410              {
411                Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
412                %>
413                <tbl:row>             
414                  <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
415                  <tbl:cell column="name"><base:icon 
416                    image="deleted.gif" 
417                    tooltip="This item has been scheduled for deletion" 
418                    visible="<%=group.isRemoved()%>"
419                  /><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
420                  <tbl:cell column="permissions">
421                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
422                  </tbl:cell>
423                </tbl:row>
424                <% 
425              }
426              for (User user : users)
427              {
428                Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
429                %>
430                <tbl:row>             
431                  <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
432                  <tbl:cell column="name"><base:icon 
433                    image="deleted.gif" 
434                    tooltip="This item has been scheduled for deletion" 
435                    visible="<%=user.isRemoved()%>"
436                  /><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
437                  <tbl:cell column="permissions">
438                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
439                  </tbl:cell>
440                </tbl:row>
441                <%
442              }
443              %>
444              </tbl:rows>
445            </tbl:data>
446          </tbl:table>
447        </base:section>
448        <%
449      }
450      else
451      {
452        %>
453        <h4>Shared to</h4>
454        This template is not shared
455        (or, you don't have permission to view the ones it is shared to).
456        <%
457      }
458      %> 
459    </div>
460    </t:tab>
461     
462    <t:tab id="history" title="Change history" 
463      tooltip="Displays a log of all modifications made to this item"
464      visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>">
465      <%
466      if ("history".equals(tab))
467      {
468        %>
469        <jsp:include page="../../common/history/frameset.jsp">
470          <jsp:param name="source_type" value="<%=itemType.name()%>" />
471          <jsp:param name="source_id" value="<%=itemId%>" />
472          <jsp:param name="ID" value="<%=ID%>" />
473        </jsp:include>
474        <%
475      }
476      %>
477    </t:tab>
478    </t:tabcontrol>
479
480  </base:body>
481  </base:page>
482  <%
483}
484finally
485{
486  if (dc != null) dc.close();
487}
488
489%>
Note: See TracBrowser for help on using the repository browser.