Changeset 3800


Ignore:
Timestamp:
Sep 28, 2007, 1:47:54 PM (16 years ago)
Author:
Nicklas Nordborg
Message:

References #721: It is now possible to edit platforms and data file types throguh the web
interface. Added proper permissions to all items.

Location:
branches/filedb
Files:
1 added
15 edited

Legend:

Unmodified
Added
Removed
  • branches/filedb/src/clients/web/net/sf/basedb/clients/web/PermissionUtil.java

    r3679 r3800  
    145145    Item.BIOASSAYSET, Item.BIOASSAY, Item.TRANSFORMATION, Item.EXTRAVALUE,
    146146    Item.VIRTUALDB, Item.DATACUBE, Item.DATACUBELAYER, Item.DATACUBECOLUMN, Item.DATACUBEFILTER,
    147     Item.DATACUBEEXTRAVALUE
     147    Item.DATACUBEEXTRAVALUE,
     148    Item.FILESET, Item.FILESETMEMBER,
     149    Item.PLATFORMVARIANT, Item.PLATFORMFILETYPE
    148150  );
    149151 
     
    169171            Item.PROTOCOL, Item.PROTOCOLTYPE, Item.HARDWARE, Item.HARDWARETYPE, Item.SOFTWARE, Item.SOFTWARETYPE,
    170172            Item.ANNOTATIONTYPE, Item.ANNOTATIONTYPECATEGORY, Item.FILETYPE, Item.MIMETYPE, Item.REPORTER,
    171             Item.REPORTERLIST, Item.REPORTERTYPE, Item.EXTRAVALUETYPE
     173            Item.REPORTERLIST, Item.REPORTERTYPE, Item.EXTRAVALUETYPE,
     174            Item.PLATFORM, Item.DATAFILETYPE
    172175          })
    173176        );
  • branches/filedb/src/core/net/sf/basedb/core/FileSetMember.java

    r3793 r3800  
    2525
    2626import net.sf.basedb.core.data.FileSetMemberData;
     27import net.sf.basedb.core.query.EntityQuery;
    2728import net.sf.basedb.core.query.Hql;
    2829import net.sf.basedb.core.query.Restrictions;
     
    4546  */
    4647  public static final Item TYPE = Item.FILESETMEMBER;
     48
     49  /**
     50    This filter gives everybody read permission to file set members.
     51  */
     52  private static final QueryRuntimeFilter RUNTIME_FILTER = new QueryRuntimeFilterImpl();
    4753
    4854 
     
    9197  {
    9298    if (fileSet == null) throw new InvalidUseOfNullException("fileSet");
    93     ItemQuery<FileSetMember> query = new ItemQuery<FileSetMember>(FileSetMember.class);
     99    ItemQuery<FileSetMember> query = new ItemQuery<FileSetMember>(FileSetMember.class, RUNTIME_FILTER);
    94100    query.restrictPermanent(
    95101        Restrictions.eq(
     
    163169  }
    164170
     171  private static class QueryRuntimeFilterImpl
     172    implements QueryRuntimeFilter
     173  {
     174    public void enableFilters(QueryRuntimeFilterManager manager, EntityQuery query, DbControl dc)
     175    {
     176      // Do not add any filters.
     177    }
     178  }
    165179}
  • branches/filedb/src/core/net/sf/basedb/core/Install.java

    r3797 r3800  
    329329      // Platforms, platform variants, platform file types
    330330      createRoleKey(Item.PLATFORM, "Platforms", "Gives access to platforms", guests_use_administrators_all);
    331       createRoleKey(Item.PLATFORMVARIANT, "Platform variants", "Gives access to platform variants", guests_use_administrators_all);
    332331      createRoleKey(Item.DATAFILETYPE, "Data file types", "Gives access to data file types", guests_use_administrators_all);
    333332
  • branches/filedb/src/core/net/sf/basedb/core/Item.java

    r3793 r3800  
    501501    The item is a {@link Platform}
    502502  */
    503   PLATFORM(350, "Platform", "plf", Platform.class, PlatformData.class, null,
     503  PLATFORM(350, "Platform", "plf", Platform.class, PlatformData.class, DefinedPermissions.basic,
    504504    970),
    505505   
     
    531531    The item is a {@link DataFileType}
    532532  */
    533   DATAFILETYPE(355, "Data file type", "dft", DataFileType.class, DataFileTypeData.class, null,
     533  DATAFILETYPE(355, "Data file type", "dft", DataFileType.class, DataFileTypeData.class, DefinedPermissions.basic,
    534534    980)
    535535   
  • branches/filedb/src/core/net/sf/basedb/core/Platform.java

    r3797 r3800  
    426426  /**
    427427    Add a file type to this platform/variant. If the file type has
    428     already been registered this method does nothing.
     428    already been registered this method can be used to change the
     429    <code>required</code> flag.
     430   
    429431    @param type The file type
    430432    @param required If a file of this type is required or not
     
    445447      getData().getFileTypes().put(index, platformFileType.getData());
    446448      getDbControl().saveItemIf(this, platformFileType, false);
     449    }
     450    else
     451    {
     452      PlatformFileTypeData pfData = getData().getFileTypes().get(index);
     453      pfData.setRequired(required);
    447454    }
    448455  }
     
    468475    if (getData().getFileTypes().containsKey(index))
    469476    {
    470       PlatformFileTypeData pfData = getData().getFileTypes().remove(type.getData());
     477      PlatformFileTypeData pfData = getData().getFileTypes().remove(index);
    471478      if (pfData != null)
    472479      {
  • branches/filedb/src/core/net/sf/basedb/core/PlatformFileType.java

    r3793 r3800  
    3838*/
    3939public class PlatformFileType
    40   extends BasicItem<PlatformFileTypeData>
     40  extends BasicChildItem<PlatformFileTypeData>
    4141{
    4242 
     
    4848  public static final Item TYPE = Item.PLATFORMFILETYPE;
    4949
    50  
     50  /**
     51    This filter will only return items if the logged in user has
     52    generic read permission to platforms.
     53  */
     54  private static final QueryRuntimeFilter RUNTIME_FILTER =
     55    new QueryRuntimeFilterFactory.ChildFilter(TYPE, Item.PLATFORM);
     56
    5157  static PlatformFileType getNew(DbControl dc, Platform platform, PlatformVariant variant,
    5258    DataFileType fileType, boolean required)
     
    95101    PlatformVariant variant, boolean restrict)
    96102  {
    97     ItemQuery<PlatformFileType> query = new ItemQuery<PlatformFileType>(PlatformFileType.class);
     103    ItemQuery<PlatformFileType> query =
     104      new ItemQuery<PlatformFileType>(PlatformFileType.class, RUNTIME_FILTER);
    98105    if (platform == null && variant != null) platform = variant.getPlatform();
    99106    if (platform != null)
     
    156163  // -------------------------------------------
    157164
     165  /*
     166    From the BasicChildItem class
     167    -------------------------------------------
     168  */
     169  @Override
     170  Item getParentType()
     171  {
     172    return Item.PLATFORM;
     173  }
     174  // -------------------------------------------
     175
     176 
     177 
    158178  /**
    159179    Get the platform.
  • branches/filedb/src/core/net/sf/basedb/core/PlatformVariant.java

    r3799 r3800  
    3636*/
    3737public class PlatformVariant
    38   extends BasicItem<PlatformVariantData>
     38  extends BasicChildItem<PlatformVariantData>
    3939  implements Nameable, Removable
    4040{
     
    4646  */
    4747  public static final Item TYPE = Item.PLATFORMVARIANT;
     48 
     49  /**
     50    This filter will only return items if the logged in user has
     51    generic read permission to platforms.
     52  */
     53  private static final QueryRuntimeFilter RUNTIME_FILTER =
     54    new QueryRuntimeFilterFactory.ChildFilter(TYPE, Item.PLATFORM);
     55 
    4856 
    4957  /**
     
    162170 
    163171  /**
    164     Get a query configured to retrieve <code>Platform</code> items.
     172    Get a query configured to retrieve <code>PlatformVariant</code> items.
    165173    @return An {@link ItemQuery} object
    166174  */
     
    168176    throws BaseException
    169177  {
    170     return new ItemQuery<PlatformVariant>(PlatformVariant.class);
     178    return new ItemQuery<PlatformVariant>(PlatformVariant.class, RUNTIME_FILTER);
    171179  }
    172180
     
    231239  // -------------------------------------------
    232240  /*
    233   From the BasicItem class
    234   -------------------------------------------
     241    From the BasicItem class
     242    -------------------------------------------
    235243  */
    236244  /**
     
    301309  }
    302310  // -------------------------------------------
     311  /*
     312    From the BasicChildItem class
     313    -------------------------------------------
     314  */
     315  @Override
     316  Item getParentType()
     317  {
     318    return Item.PLATFORM;
     319  }
     320  // -------------------------------------------
    303321 
    304322  /**
  • branches/filedb/www/admin/datafiletypes/edit_filetype.jsp

    r3798 r3800  
    170170        %>
    171171        <tr>
    172           <td class="prompt">System ID</td>
     172          <td class="prompt">External ID</td>
    173173          <td><input <%=unchangeableClazz%> type="text" name="externalId"
    174174            value="<%=HTML.encodeTags(cc.getPropertyValue("externalId"))%>"
  • branches/filedb/www/admin/datafiletypes/view_filetype.jsp

    r3798 r3800  
    263263            <tbl:row>
    264264              <tbl:cell column="platform"><%=Base.getLinkedName(ID, p, false, true)%></tbl:cell>
    265               <tbl:cell column="variant"><%=Base.getLinkedName(ID, v, false, true)%></tbl:cell>
     265              <tbl:cell column="variant"><%=v == null ? "<i>- all -</i>" : Base.getLinkedName(ID, v, false, true)%></tbl:cell>
    266266              <tbl:cell column="required"><%=item.isRequired() ? "yes" : "no"%></tbl:cell>
    267267            </tbl:row>
  • branches/filedb/www/admin/platforms/edit_platform.jsp

    r3799 r3800  
    3434  import="net.sf.basedb.core.Permission"
    3535  import="net.sf.basedb.core.Platform"
     36  import="net.sf.basedb.core.PlatformFileType"
     37  import="net.sf.basedb.core.DataFileType"
    3638  import="net.sf.basedb.core.RawDataType"
    3739  import="net.sf.basedb.core.RawDataTypes"
     40  import="net.sf.basedb.core.ItemQuery"
     41  import="net.sf.basedb.core.ItemResultList"
     42  import="net.sf.basedb.core.query.Orders"
     43  import="net.sf.basedb.core.query.Hql"
    3844  import="net.sf.basedb.core.PermissionDeniedException"
    3945  import="net.sf.basedb.clients.web.Base"
     
    5662  Platform platform = null;
    5763  boolean isFileOnly = false;
    58 
     64  ItemQuery<PlatformFileType> fileTypeQuery = null;
    5965  if (itemId == 0)
    6066  {
     
    6975    cc.setObject("item", platform);
    7076    title = "Edit platform -- " + HTML.encodeTags(platform.getName());
     77    platform.checkPermission(Permission.WRITE);
     78    fileTypeQuery = platform.getFileTypes(null, true);
     79    fileTypeQuery.order(Orders.asc(Hql.property("dataFileType.name")));
    7180  }
    72   if (platform != null)
    73   {
    74     platform.checkPermission(Permission.WRITE);
    75   }
    76  
     81
    7782  final String clazz = "class=\"text\"";
    7883  final String requiredClazz = "class=\"text required\"";
     
    8186
    8287  <base:page type="popup" title="<%=title%>">
    83   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     88  <base:head scripts="tabcontrol.js,linkitems.js" styles="tabcontrol.css">
    8489    <script language="JavaScript">
    8590    // Validate the "Platform" tab
     
    127132      if (TabControl.validateActiveTab('settings'))
    128133      {
     134        frm.modifiedFileTypes.value = Link.exportModified(frm, 'F', true).join(',');
     135        frm.removedFileTypes.value = Link.getActionIds(-1, 'F').join(',');
    129136        frm.submit();
    130137      }
     
    140147        frm.name.focus();
    141148        frm.name.select();
     149        fileOnlyOnClick();
    142150        <%
    143151      }
    144152      %>
    145       fileOnlyOnClick();
     153      initFileTypes();
    146154    }
    147155    function fileOnlyOnClick()
     
    153161      Main.addOrRemoveClass(frm.rawdatatype, 'required', !frm.rawdatatype.disabled);
    154162      Main.addOrRemoveClass(frm.channels, 'required', !frm.channels.disabled);
     163    }
     164    function initFileTypes()
     165    {
     166      var fileTypes = document.forms['platform'].fileTypes;
     167      <%
     168      if (fileTypeQuery != null)
     169      {
     170        ItemResultList<PlatformFileType> fileTypes = fileTypeQuery.list(dc);
     171        for (PlatformFileType ft : fileTypes)
     172        {
     173          DataFileType dft = ft.getDataFileType();
     174          boolean required = ft.isRequired();
     175          %>
     176          Link.addNewItem(fileTypes, new Item('F', <%=dft.getId()%>, '<%=HTML.javaScriptEncode(dft.getName())%> <%=required ? "[×]" : "[-]"%>', '<%=required ? "1" : "0"%>'));
     177          <%
     178        }
     179      }
     180      %>
     181    }
     182    function addFileTypesOnClick()
     183    {
     184      var frm = document.forms['platform'];
     185      Main.openPopup('../datafiletypes/index.jsp?ID=<%=ID%>&mode=selectmultiple&callback=addFileTypeCallback', 'AddFileTypes', 1000, 700);
     186    }
     187    function addFileTypeCallback(fileTypeId, name)
     188    {
     189      var item = Link.getItem('F', fileTypeId);
     190      var frm = document.forms['platform'];
     191      var required = frm.required.checked;
     192      if (!item) item = new Item('F', fileTypeId, name+(required ? '[×]' : '[-]'), required ? '1' : '0', '');
     193      Link.addItem(frm.fileTypes, item);
     194    }
     195    function removeOnClick()
     196    {
     197      Link.removeSelected(document.forms['platform'].fileTypes);
     198    }
     199    function fileTypesOnChange()
     200    {
     201      var frm = document.forms['platform'];
     202      var item = frm.fileTypes[frm.fileTypes.selectedIndex].item;
     203      if (item && item.id)
     204      {
     205        frm.required.checked = item.value != '0';
     206      }
     207      else
     208      {
     209        frm.required.checked = false;
     210      }
     211    }
     212    function requiredOnClick()
     213    {
     214      var frm = document.forms['platform'];
     215      var required = frm.required.checked;
     216      for (var i = 0; i < frm.fileTypes.length; i++)  // >
     217      {
     218        var option = frm.fileTypes[i];
     219        if (option.selected && option.item.id)
     220        {
     221          option.item.value = required ? '1' : '0';
     222          var text = option.text.replace(/\[.*\]/, '['+(required ? '×' : '-') +']');
     223          option.text = text;
     224        }
     225      }
    155226    }
    156227    </script>
     
    244315        </div>
    245316    </t:tab>
     317   
     318    <t:tab id="fileTypes" title="Data file types"
     319      tooltip="Associate this platform with date file types"
     320      helpid="platform.edit.filetypes"
     321      >
     322      <table >
     323      <tr valign="top">
     324      <td>
     325        <b>Data file types</b><br>
     326        <select name="fileTypes" size="10" multiple style="width: 20em;"
     327          onchange="fileTypesOnChange()">
     328        </select>&nbsp;<br>
     329        × = Required
     330        <input type="checkbox" name="required" value="1" onchange="requiredOnClick()">
     331        <input type="hidden" name="modifiedFileTypes" value="">
     332        <input type="hidden" name="removedFileTypes" value="">
     333      </td>
     334      <td>
     335        <br>
     336        <table width="150">
     337        <tr><td width="150"><base:button
     338          onclick="addFileTypesOnClick()"
     339          title="Add&nbsp;data file types&hellip;"
     340          tooltip="Add more data file types to this platform"
     341          /></td></tr>
     342        <tr><td width="150"><base:button
     343          onclick="removeOnClick()"
     344          title="Remove"
     345          tooltip="Remove the selected data file types"
     346        /></td></tr>
     347        </table>
     348      </td>
     349      </tr>     
     350      </table>
     351    </t:tab>
     352   
    246353    </t:tabcontrol>
    247354
  • branches/filedb/www/admin/platforms/index.jsp

    r3798 r3800  
     1<%@page import="net.sf.basedb.core.PlatformFileType"%>
    12<%-- $Id$
    23  ------------------------------------------------------------------
     
    3132  import="net.sf.basedb.core.Include"
    3233  import="net.sf.basedb.core.Platform"
     34  import="net.sf.basedb.core.DataFileType"
    3335  import="net.sf.basedb.core.RawDataType"
    3436  import="net.sf.basedb.core.RawDataTypes"
     
    152154    platform.setName(Values.getStringOrNull(request.getParameter("name")));
    153155    platform.setDescription(Values.getStringOrNull(request.getParameter("description")));
     156   
     157    // Data file types
     158    String[] modifiedFileTypes = Values.getString(request.getParameter("modifiedFileTypes")).split(",");
     159    for (int i = 0; i < modifiedFileTypes.length; ++i)
     160    {
     161      int ftId = Values.getInt(modifiedFileTypes[i], -1);
     162      if (ftId != -1)
     163      {
     164        DataFileType dft = DataFileType.getById(dc, ftId);
     165        boolean required = Values.getBoolean(request.getParameter("F"+ftId));
     166        platform.addFileType(dft, required, null);
     167      }
     168    }
     169    String[] removedFileTypes = Values.getString(request.getParameter("removedFileTypes")).split(",");
     170    for (int i = 0; i < removedFileTypes.length; ++i)
     171    {
     172      int ftId = Values.getInt(removedFileTypes[i], -1);
     173      if (ftId != -1)
     174      {
     175        DataFileType dft = DataFileType.getById(dc, ftId);
     176        platform.removeFileType(dft, null);
     177      }
     178    }
     179
    154180    dc.commit();
    155181    cc.removeObject("item");
  • branches/filedb/www/admin/platforms/variants/edit_variant.jsp

    r3799 r3800  
    3535  import="net.sf.basedb.core.Platform"
    3636  import="net.sf.basedb.core.PlatformVariant"
     37  import="net.sf.basedb.core.PlatformFileType"
     38  import="net.sf.basedb.core.DataFileType"
    3739  import="net.sf.basedb.core.RawDataType"
    3840  import="net.sf.basedb.core.RawDataTypes"
    3941  import="net.sf.basedb.core.PermissionDeniedException"
     42  import="net.sf.basedb.core.ItemQuery"
     43  import="net.sf.basedb.core.ItemResultList"
     44  import="net.sf.basedb.core.query.Orders"
     45  import="net.sf.basedb.core.query.Hql"
    4046  import="net.sf.basedb.clients.web.Base"
    4147  import="net.sf.basedb.clients.web.util.HTML"
     
    5965  PlatformVariant variant = null;
    6066  boolean isFileOnly = false;
    61 
     67  ItemQuery<PlatformFileType> fileTypeQuery = null;
     68 
    6269  if (itemId == 0)
    6370  {
     
    7683    title = "Edit platform variant -- " + HTML.encodeTags(variant.getName());
    7784    variant.checkPermission(Permission.WRITE);
     85    fileTypeQuery = platform.getFileTypes(variant, true);
     86    fileTypeQuery.order(Orders.asc(Hql.property("dataFileType.name")));
    7887  }
    7988 
     
    8493
    8594  <base:page type="popup" title="<%=title%>">
    86   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     95  <base:head scripts="tabcontrol.js,linkitems.js" styles="tabcontrol.css">
    8796    <script language="JavaScript">
    8897    // Validate the "Variant" tab
     
    130139      if (TabControl.validateActiveTab('settings'))
    131140      {
     141        frm.modifiedFileTypes.value = Link.exportModified(frm, 'F', true).join(',');
     142        frm.removedFileTypes.value = Link.getActionIds(-1, 'F').join(',');
    132143        frm.submit();
    133144      }
     
    143154        frm.name.focus();
    144155        frm.name.select();
     156        fileOnlyOnClick();
    145157        <%
    146158      }
    147159      %>
    148       fileOnlyOnClick();
     160      initFileTypes();
    149161    }
    150162    function fileOnlyOnClick()
     
    156168      Main.addOrRemoveClass(frm.rawdatatype, 'required', !frm.rawdatatype.disabled);
    157169      Main.addOrRemoveClass(frm.channels, 'required', !frm.channels.disabled);
     170    }
     171    function initFileTypes()
     172    {
     173      var fileTypes = document.forms['variant'].fileTypes;
     174      <%
     175      if (fileTypeQuery != null)
     176      {
     177        ItemResultList<PlatformFileType> fileTypes = fileTypeQuery.list(dc);
     178        for (PlatformFileType ft : fileTypes)
     179        {
     180          DataFileType dft = ft.getDataFileType();
     181          boolean required = ft.isRequired();
     182          %>
     183          Link.addNewItem(fileTypes, new Item('F', <%=dft.getId()%>, '<%=HTML.javaScriptEncode(dft.getName())%> <%=required ? "[×]" : "[-]"%>', '<%=required ? "1" : "0"%>'));
     184          <%
     185        }
     186      }
     187      %>
     188    }
     189    function addFileTypesOnClick()
     190    {
     191      var frm = document.forms['variant'];
     192      Main.openPopup('../../datafiletypes/index.jsp?ID=<%=ID%>&mode=selectmultiple&callback=addFileTypeCallback', 'AddFileTypes', 1000, 700);
     193    }
     194    function addFileTypeCallback(fileTypeId, name)
     195    {
     196      var item = Link.getItem('F', fileTypeId);
     197      var frm = document.forms['variant'];
     198      var required = frm.required.checked;
     199      if (!item) item = new Item('F', fileTypeId, name+(required ? '[×]' : '[-]'), required ? '1' : '0', '');
     200      Link.addItem(frm.fileTypes, item);
     201    }
     202    function removeOnClick()
     203    {
     204      Link.removeSelected(document.forms['variant'].fileTypes);
     205    }
     206    function fileTypesOnChange()
     207    {
     208      var frm = document.forms['variant'];
     209      var item = frm.fileTypes[frm.fileTypes.selectedIndex].item;
     210      if (item && item.id)
     211      {
     212        frm.required.checked = item.value != '0';
     213      }
     214      else
     215      {
     216        frm.required.checked = false;
     217      }
     218    }
     219    function requiredOnClick()
     220    {
     221      var frm = document.forms['variant'];
     222      var required = frm.required.checked;
     223      for (var i = 0; i < frm.fileTypes.length; i++)  // >
     224      {
     225        var option = frm.fileTypes[i];
     226        if (option.selected && option.item.id)
     227        {
     228          option.item.value = required ? '1' : '0';
     229          var text = option.text.replace(/\[.*\]/, '['+(required ? '×' : '-') +']');
     230          option.text = text;
     231        }
     232      }
    158233    }
    159234    </script>
     
    249324        </div>
    250325    </t:tab>
     326    <t:tab id="fileTypes" title="Data file types"
     327      tooltip="Associate this platform variant with date file types"
     328      helpid="platformvariant.edit.filetypes"
     329      >
     330      <table >
     331      <tr valign="top">
     332      <td>
     333        <b>Data file types</b><br>
     334        <select name="fileTypes" size="10" multiple style="width: 20em;"
     335          onchange="fileTypesOnChange()">
     336        </select>&nbsp;<br>
     337        × = Required
     338        <input type="checkbox" name="required" value="1" onchange="requiredOnClick()">
     339        <input type="hidden" name="modifiedFileTypes" value="">
     340        <input type="hidden" name="removedFileTypes" value="">
     341      </td>
     342      <td>
     343        <br>
     344        <table width="150">
     345        <tr><td width="150"><base:button
     346          onclick="addFileTypesOnClick()"
     347          title="Add&nbsp;data file types&hellip;"
     348          tooltip="Add more data file types to this platform variant"
     349          /></td></tr>
     350        <tr><td width="150"><base:button
     351          onclick="removeOnClick()"
     352          title="Remove"
     353          tooltip="Remove the selected data file types"
     354        /></td></tr>
     355        </table>
     356      </td>
     357      </tr>     
     358      </table>
     359    </t:tab>   
    251360    </t:tabcontrol>
    252361
  • branches/filedb/www/admin/platforms/variants/index.jsp

    r3799 r3800  
    3232  import="net.sf.basedb.core.Platform"
    3333  import="net.sf.basedb.core.PlatformVariant"
     34  import="net.sf.basedb.core.DataFileType"
    3435  import="net.sf.basedb.core.RawDataType"
    3536  import="net.sf.basedb.core.RawDataTypes"
     
    119120  {
    120121    // Display the edit page for a new item (should be opened in a popup)
    121     if (!sc.hasPermission(Permission.CREATE, itemType))
    122     {
    123       throw new PermissionDeniedException(Permission.CREATE, itemType.toString());
    124     }
    125122    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
    126123    cc.setId(0);
     
    133130    dc = sc.newDbControl();
    134131    PlatformVariant variant = (PlatformVariant)cc.getObject("item");
     132    Platform platform = null;
    135133    if (variant == null)
    136134    {
    137       Platform platform = Platform.getById(dc, platformId);
     135      platform = Platform.getById(dc, platformId);
    138136      boolean fileOnly = Values.getBoolean(request.getParameter("fileOnly"));
    139137      String externalId = Values.getStringOrNull(request.getParameter("externalId"));
     
    153151    {
    154152      dc.reattachItem(variant);
     153      platform = Platform.getById(dc, variant.getPlatform().getId());
    155154      message = "Platform variant updated";
    156155    }
    157156    variant.setName(Values.getStringOrNull(request.getParameter("name")));
    158157    variant.setDescription(Values.getStringOrNull(request.getParameter("description")));
     158   
     159    // Data file types
     160    String[] modifiedFileTypes = Values.getString(request.getParameter("modifiedFileTypes")).split(",");
     161    for (int i = 0; i < modifiedFileTypes.length; ++i)
     162    {
     163      int ftId = Values.getInt(modifiedFileTypes[i], -1);
     164      if (ftId != -1)
     165      {
     166        DataFileType dft = DataFileType.getById(dc, ftId);
     167        boolean required = Values.getBoolean(request.getParameter("F"+ftId));
     168        platform.addFileType(dft, required, variant);
     169      }
     170    }
     171    String[] removedFileTypes = Values.getString(request.getParameter("removedFileTypes")).split(",");
     172    for (int i = 0; i < removedFileTypes.length; ++i)
     173    {
     174      int ftId = Values.getInt(removedFileTypes[i], -1);
     175      if (ftId != -1)
     176      {
     177        DataFileType dft = DataFileType.getById(dc, ftId);
     178        platform.removeFileType(dft, variant);
     179      }
     180    }
     181   
    159182    dc.commit();
    160183    cc.removeObject("item");
  • branches/filedb/www/admin/platforms/variants/view_variant.jsp

    r3799 r3800  
    3434  import="net.sf.basedb.core.Platform"
    3535  import="net.sf.basedb.core.PlatformVariant"
     36  import="net.sf.basedb.core.PlatformFileType"
     37  import="net.sf.basedb.core.DataFileType"
    3638  import="net.sf.basedb.core.RawDataType"
    3739  import="net.sf.basedb.core.PermissionDeniedException"
    3840  import="net.sf.basedb.core.PluginDefinition"
     41  import="net.sf.basedb.core.ItemQuery"
     42  import="net.sf.basedb.core.ItemResultList"
     43  import="net.sf.basedb.core.query.Orders"
     44  import="net.sf.basedb.core.query.Hql"
    3945  import="net.sf.basedb.core.plugin.GuiContext"
    4046  import="net.sf.basedb.core.plugin.Plugin"
     
    218224      </t:tabcontrol>
    219225
     226      <%
     227      ItemQuery<PlatformFileType> fileTypeQuery = platform.getFileTypes(variant, false);
     228      fileTypeQuery.join(Hql.leftJoin("variant", "var"));
     229      fileTypeQuery.order(Orders.asc(Hql.property("var", "name")));
     230      fileTypeQuery.order(Orders.asc(Hql.property("dataFileType.name")));
     231      ItemResultList<PlatformFileType> fileTypes = fileTypeQuery.list(dc);
     232     
     233      if (fileTypes.size() == 0)
     234      {
     235        %>
     236        <h4>Data file types</h4>
     237        This platform variant has no associated data file types (or, you don't have permission to view them).
     238        <%
     239      }
     240      else
     241      {
     242        %>
     243        <h4 class="docked">Data file types</h4>
     244        <tbl:table
     245          id="fileTypes"
     246          clazz="itemlist"
     247          columns="all"
     248          >
     249        <tbl:columndef
     250          id="variant"
     251          title="Variant"
     252        />
     253        <tbl:columndef
     254          id="name"
     255          title="Name"
     256        />
     257        <tbl:columndef
     258          id="required"
     259          title="Required"
     260        />
     261        <tbl:columndef
     262          id="genericType"
     263          title="Generic type"
     264        />
     265        <tbl:columndef
     266          id="description"
     267          title="Description"
     268        />
     269        <tbl:data>
     270          <tbl:columns>
     271          </tbl:columns>
     272          <tbl:rows>
     273          <%
     274          for (PlatformFileType fileType : fileTypes)
     275          {
     276            DataFileType dft = fileType.getDataFileType();
     277            PlatformVariant thisVariant = fileType.getVariant();
     278            %>
     279            <tbl:row>
     280              <tbl:cell column="variant"><%=thisVariant == null ? "<i>- all -</i>" : Base.getLinkedName(ID, thisVariant, false, true)%></tbl:cell>
     281              <tbl:cell column="name"><%=Base.getLinkedName(ID, dft, false, true)%></tbl:cell>
     282              <tbl:cell column="required"><%=fileType.isRequired() ? "yes" : "no"%></tbl:cell>
     283              <tbl:cell column="genericType"><base:propertyvalue item="<%=dft%>" property="genericType" /></tbl:cell>
     284              <tbl:cell column="description"><%=HTML.niceFormat(dft.getDescription())%></tbl:cell>
     285            </tbl:row>
     286            <%
     287          }
     288          %>
     289          </tbl:rows>
     290        </tbl:data>
     291        </tbl:table>
     292        <%
     293      }
     294      %>
     295
    220296  </base:body>
    221297  </base:page>
  • branches/filedb/www/admin/platforms/view_platform.jsp

    r3799 r3800  
    3434  import="net.sf.basedb.core.Platform"
    3535  import="net.sf.basedb.core.PlatformVariant"
     36  import="net.sf.basedb.core.DataFileType"
    3637  import="net.sf.basedb.core.RawDataType"
    3738  import="net.sf.basedb.core.ItemQuery"
     
    7879  %>
    7980
    80   <base:page title="<%=title%>">
    81   <base:head scripts="tabcontrol.js" styles="toolbar.css,headertabcontrol.css,path.css">
     81  <%@page import="net.sf.basedb.core.PlatformFileType"%>
     82<base:page title="<%=title%>">
     83  <base:head scripts="tabcontrol.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
    8284    <script language="JavaScript">
    8385    function editItem()
     
    158160        title="New variant&hellip;"
    159161        tooltip="Create a new variant of this platform"
    160         visible="<%=sc.hasPermission(Permission.CREATE, Item.PLATFORMVARIANT)%>"
     162        visible="<%=writePermission%>"
    161163      />
    162164      <tbl:button
     
    247249      </t:tabcontrol>
    248250     
     251      <%
     252      ItemQuery<PlatformFileType> fileTypeQuery = platform.getFileTypes(null, false);
     253      fileTypeQuery.join(Hql.leftJoin("variant", "var"));
     254      fileTypeQuery.order(Orders.asc(Hql.property("var", "name")));
     255      fileTypeQuery.order(Orders.asc(Hql.property("dataFileType.name")));
     256      ItemResultList<PlatformFileType> fileTypes = fileTypeQuery.list(dc);
     257     
     258      if (fileTypes.size() == 0)
     259      {
     260        %>
     261        <h4>Data file types</h4>
     262        This platform has no associated data file types (or, you don't have permission to view them).
     263        <%
     264      }
     265      else
     266      {
     267        %>
     268        <h4 class="docked">Data file types</h4>
     269        <tbl:table
     270          id="fileTypes"
     271          clazz="itemlist"
     272          columns="all"
     273          >
     274        <tbl:columndef
     275          id="variant"
     276          title="Variant"
     277        />
     278        <tbl:columndef
     279          id="name"
     280          title="Name"
     281        />
     282        <tbl:columndef
     283          id="required"
     284          title="Required"
     285        />
     286        <tbl:columndef
     287          id="genericType"
     288          title="Generic type"
     289        />
     290        <tbl:columndef
     291          id="description"
     292          title="Description"
     293        />
     294        <tbl:data>
     295          <tbl:columns>
     296          </tbl:columns>
     297          <tbl:rows>
     298          <%
     299          for (PlatformFileType fileType : fileTypes)
     300          {
     301            DataFileType dft = fileType.getDataFileType();
     302            PlatformVariant variant = fileType.getVariant();
     303            %>
     304            <tbl:row>
     305              <tbl:cell column="variant"><%=variant == null ? "<i>- all -</i>" : Base.getLinkedName(ID, variant, false, true)%></tbl:cell>
     306              <tbl:cell column="name"><%=Base.getLinkedName(ID, dft, false, true)%></tbl:cell>
     307              <tbl:cell column="required"><%=fileType.isRequired() ? "yes" : "no"%></tbl:cell>
     308              <tbl:cell column="genericType"><base:propertyvalue item="<%=dft%>" property="genericType" /></tbl:cell>
     309              <tbl:cell column="description"><%=HTML.niceFormat(dft.getDescription())%></tbl:cell>
     310            </tbl:row>
     311            <%
     312          }
     313          %>
     314          </tbl:rows>
     315        </tbl:data>
     316        </tbl:table>
     317        <%
     318      }
     319      %>
    249320
    250321  </base:body>
Note: See TracChangeset for help on using the changeset viewer.