Changeset 7307


Ignore:
Timestamp:
Mar 7, 2017, 3:30:59 PM (5 years ago)
Author:
Nicklas Nordborg
Message:

Fixes #2060: The active project should be displayed in the job list and view dialog

It should also work when exporting.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/util/Enumeration.java

    r6870 r7307  
    5555  public static Enumeration<String, String> fromItems(Collection<? extends Nameable> items, String noneOption)
    5656  {
     57    return fromItems(items, noneOption, "");
     58  }
     59
     60  /**
     61    Create a new enumeration from a list of basic items.
     62    The key of the enumeration is the id of each item
     63    and the value is the name.
     64    @param items A collection with items
     65    @param noneOption If not null, this options will be inserted first in the
     66      enumeration with an empty string as the key
     67    @param noneValue Value for the 'none' option (empty string by default)
     68    @since 3.11
     69  */
     70  public static Enumeration<String, String> fromItems(Collection<? extends Nameable> items, String noneOption, String noneValue)
     71  {
    5772    Enumeration<String, String> e = new Enumeration<String, String>();
    5873    if (noneOption != null)
    5974    {
    60       e.add("", noneOption);
     75      e.add(noneValue == null ? "" : noneValue, noneOption);
    6176    }
    6277    for (Nameable item : items)
     
    6883  }
    6984
    70  
    7185  private final List<Entry<K, V>> entries;
    7286  private boolean locked;
  • trunk/www/views/jobs/index.jsp

    r6880 r7307  
    3030  import="net.sf.basedb.core.Include"
    3131  import="net.sf.basedb.core.Job"
     32  import="net.sf.basedb.core.Project"
    3233  import="net.sf.basedb.core.ItemQuery"
    3334  import="net.sf.basedb.core.ItemResultIterator"
     
    4647  import="net.sf.basedb.clients.web.WebException"
    4748  import="net.sf.basedb.util.Values"
     49  import="net.sf.basedb.util.formatter.NameableFormatter"
    4850  import="net.sf.basedb.clients.web.util.HTML"
    4951  import="net.sf.basedb.core.plugin.GuiContext"
    5052  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
     53  import="net.sf.basedb.clients.web.plugins.ExportedProperty"
     54  import="net.sf.basedb.clients.web.plugins.DataLoader"
    5155  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
    5256  import="net.sf.basedb.clients.web.extensions.JspContext"
     
    6367<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
    6468<%!
     69
     70  private static void registerExportUtils(ItemContext cc)
     71  {
     72    // Register formatters
     73    cc.setObject("export.formatter.activeProjectId", new NameableFormatter());
     74   
     75    // Register dataloaders
     76    cc.setObject("export.dataloader.activeProjectId",
     77      new DataLoader<Job>()
     78      {
     79        @Override
     80        public Object getData(DbControl dc, ExportedProperty exportedProperty, Job job)
     81        {
     82          Project p = null;
     83          if (job.getActiveProjectId() != 0)
     84          {
     85            try
     86            {
     87              p = Project.getById(dc, job.getActiveProjectId());
     88            }
     89            catch (Exception ex)
     90            {}
     91          }
     92          return p;
     93        }
     94      }
     95    );
     96  }
     97
    6598  private static final ItemContext defaultContext = Base.createDefaultContext("scheduled", "name,pluginType,scheduled,percentComplete,status,statusMessage,description");
    6699  {
     
    221254    dc = sc.newDbControl();
    222255    cc.configureQuery(dc, query, true);
     256    registerExportUtils(cc);
    223257    cc.setQuery(query);
    224258    JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
     
    232266    // Run an export plugin in single-item context
    233267    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     268    registerExportUtils(cc);
    234269    redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Export+job";
    235270  }
  • trunk/www/views/jobs/list_jobs.jsp

    r7290 r7307  
    3939  import="net.sf.basedb.core.Nameable"
    4040  import="net.sf.basedb.core.PluginDefinition"
     41  import="net.sf.basedb.core.Project"
    4142  import="net.sf.basedb.core.PermissionDeniedException"
    4243  import="net.sf.basedb.core.query.Hql"
     
    120121  typeQuery.order(Orders.asc(Hql.property("name")));
    121122  typeQuery.setCacheResult(true);
     123 
     124  // Load projects
     125  final ItemQuery<Project> projectQuery = Project.getQuery();
     126  projectQuery.setIncludes(cc.getInclude());
     127  projectQuery.order(Orders.asc(Hql.property("name")));
     128  projectQuery.setCacheResult(true);
    122129
    123130  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
     
    359366        title="Type"
    360367        enumeration="<%=pluginTypes%>"
     368        sortable="true"
     369        filterable="true"
     370        exportable="true"
     371      />
     372      <tbl:columndef
     373        id="activeProject"
     374        property="activeProjectId"
     375        datatype="int"
     376        title="Active project"
     377        enumeration="<%=Enumeration.fromItems(projectQuery.list(dc), "-none-", "0")%>"
    361378        sortable="true"
    362379        filterable="true"
     
    743760                  %>
    744761                </tbl:cell>
     762                <tbl:cell column="activeProject">
     763                  <%
     764                  if (item.getActiveProjectId() == 0)
     765                  {
     766                    %>
     767                    <i>- none -</i>
     768                    <%
     769                  }
     770                  else
     771                  {
     772                    try
     773                    {
     774                      Project p = Project.getById(dc, item.getActiveProjectId());
     775                      %>
     776                      <%=HTML.encodeTags(p.getName())%>
     777                      <%
     778                    }
     779                    catch (RuntimeException ex)
     780                    {
     781                      %>
     782                      <i>- denied -</i>
     783                      <%
     784                    }
     785                  }
     786                  %>
     787                </tbl:cell>
    745788                <tbl:cell column="experiment"
    746789                  ><base:propertyvalue
  • trunk/www/views/jobs/view_job.jsp

    r7267 r7307  
    3434  import="net.sf.basedb.core.Job"
    3535  import="net.sf.basedb.core.JobAgent"
    36   import="net.sf.basedb.core.BasicItem"
     36  import="net.sf.basedb.core.Project"
     37  import="net.sf.basedb.core.BasicItem"
    3738  import="net.sf.basedb.core.Nameable"
    3839  import="net.sf.basedb.core.File"
     
    143144    readAgent = false;
    144145  }
     146  boolean readActiveProject = true;
     147  Project activeProject = null;
     148  try
     149  {
     150    if (job.getActiveProjectId() != 0)
     151    {
     152      activeProject = Project.getById(dc, job.getActiveProjectId());
     153    }
     154  }
     155  catch (PermissionDeniedException ex)
     156  {
     157    readActiveProject = false;
     158  }
     159  catch (Exception ex)
     160  {
     161    // Some other problem (for example, no longer exists)
     162  }
    145163
    146164  int parameterVersion = job.getParameterVersion();
     
    280298        <td>
    281299          <base:propertyvalue item="<%=job%>" property="owner.name" />
     300        </td>
     301      </tr>
     302      <tr>
     303        <th>Active project</th>
     304        <td>
     305          <%=activeProject == null ? (readActiveProject ? "<i>- none -</i>" : "<i>- denied -</i>") : HTML.encodeTags(activeProject.getName()) %>
    282306        </td>
    283307      </tr>
Note: See TracChangeset for help on using the changeset viewer.