Changeset 1570


Ignore:
Timestamp:
Mar 16, 2012, 1:55:05 PM (10 years ago)
Author:
Nicklas Nordborg
Message:

References #365 and #370. Added checks in the installation wizard that verify the installation of plug-ins and configurations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/servlet/InstallServlet.java

    r1566 r1570  
    2222import net.sf.basedb.core.DbControl;
    2323import net.sf.basedb.core.Group;
     24import net.sf.basedb.core.Include;
    2425import net.sf.basedb.core.Item;
    2526import net.sf.basedb.core.ItemKey;
     27import net.sf.basedb.core.ItemNotFoundException;
     28import net.sf.basedb.core.ItemQuery;
    2629import net.sf.basedb.core.ItemSubtype;
    2730import net.sf.basedb.core.MimeType;
    2831import net.sf.basedb.core.MultiPermissions;
    2932import net.sf.basedb.core.Permission;
     33import net.sf.basedb.core.PluginConfiguration;
     34import net.sf.basedb.core.PluginDefinition;
    3035import net.sf.basedb.core.Project;
    3136import net.sf.basedb.core.ProjectKey;
     
    3338import net.sf.basedb.core.SharedItem;
    3439import net.sf.basedb.core.Type;
     40import net.sf.basedb.core.plugin.Plugin;
     41import net.sf.basedb.core.query.Expressions;
     42import net.sf.basedb.core.query.Hql;
     43import net.sf.basedb.core.query.Restrictions;
    3544import net.sf.basedb.reggie.Reggie;
    3645import net.sf.basedb.reggie.dao.BioplateType;
    3746import net.sf.basedb.reggie.dao.Mimetype;
    3847import net.sf.basedb.reggie.dao.Subtype;
     48import net.sf.basedb.reggie.plugins.CaliperPlateImporter;
     49import net.sf.basedb.reggie.plugins.CaliperRunParametersExporter;
     50import net.sf.basedb.reggie.plugins.CaliperSampleNameExporter;
    3951import net.sf.basedb.util.EqualsHelper;
    4052import net.sf.basedb.util.error.ThrowableUtil;
     
    98110          sharedToActiveProject.set(Project.getById(dc, projectId), Permission.USE);
    99111        }
     112       
     113        PermissionOptions effectiveOptions = sharedToActiveProject == null ?
     114            sharedToPatientCurator : sharedToActiveProject;
    100115       
    101116        Map<String, Item> subtypeItems = new HashMap<String, Item>();
     
    122137        jsonChecks.add(checkMimeType(dc, Mimetype.GDX, createIfMissing));
    123138       
     139        // Plugin definitions and configurations
     140        jsonChecks.add(checkPlugin(dc, CaliperSampleNameExporter.class, effectiveOptions, createIfMissing));
     141        jsonChecks.add(checkPlugin(dc, CaliperRunParametersExporter.class, effectiveOptions, createIfMissing));
     142        jsonChecks.add(checkPluginConfiguration(dc, CaliperRunParametersExporter.class, "Standard sensitivity", effectiveOptions, createIfMissing));
     143        jsonChecks.add(checkPluginConfiguration(dc, CaliperRunParametersExporter.class, "High sensitivity", effectiveOptions, createIfMissing));
     144       
    124145        // Annotation type checks
    125146        // -- the first batch need to be shared to the PatientCurator group
     
    132153       
    133154        // -- the second batch need only be shared to the active project or to the PatientCurator group
    134         PermissionOptions effectiveOptions = sharedToActiveProject == null ?
    135             sharedToPatientCurator : sharedToActiveProject;
    136155
    137156        jsonChecks.add(checkAnnotationType(dc, Reggie.ANNOTATION_DATE_OF_BIRTH, Item.BIOSOURCE, Type.DATE, 1,
     
    229248       
    230249        json.put("checks", jsonChecks);
     250       
     251        if (createIfMissing) dc.commit();
    231252      }
    232253    }
     
    367388      if (permissions != null && !permissions.checkPermissions(at))
    368389      {
    369         json.put("status", "warning");
    370         jsonMessages.add(permissions.getMessage());
     390        if (createIfMissing)
     391        {
     392          permissions.applyPermissions(at);
     393          if (jsonMessages.size() == 0) jsonMessages.add("Fixed");
     394        }
     395        else
     396        {
     397          json.put("status", "incomplete");
     398          jsonMessages.add(permissions.getMessage());
     399        }
    371400      }
    372401      for (Item it : itemTypes)
     
    965994  }
    966995
    967 
     996  @SuppressWarnings("unchecked")
     997  public JSONObject checkPlugin(DbControl dc, Class<? extends Plugin> clazz,
     998    PermissionOptions permissions, boolean createIfMissing)
     999  {
     1000    JSONObject json = new JSONObject();
     1001    JSONArray jsonMessages = new JSONArray();
     1002    json.put("itemType", Item.PLUGINDEFINITION.name());
     1003    json.put("name", clazz.getSimpleName());
     1004   
     1005    try
     1006    {
     1007      PluginDefinition plugin = PluginDefinition.getByClassName(dc, clazz.getName());
     1008     
     1009      json.put("id", plugin.getId());
     1010      json.put("name", plugin.getName());
     1011      json.put("status", "ok"); // For now -- more checks below
     1012     
     1013      if (permissions != null && !permissions.checkPermissions(plugin))
     1014      {
     1015        if (createIfMissing)
     1016        {
     1017          permissions.applyPermissions(plugin);
     1018          if (jsonMessages.size() == 0) jsonMessages.add("Fixed");
     1019        }
     1020        else
     1021        {
     1022          json.put("status", "incomplete");
     1023          jsonMessages.add(permissions.getMessage());
     1024        }
     1025      }
     1026    }
     1027    catch (ItemNotFoundException ex)
     1028    {
     1029      jsonMessages.add("Not installed");
     1030      json.put("status", "error");
     1031    }
     1032   
     1033    if (jsonMessages.size() == 0) jsonMessages.add("Ok");
     1034    json.put("messages", jsonMessages);
     1035    return json;
     1036  }
     1037
     1038  @SuppressWarnings("unchecked")
     1039  public JSONObject checkPluginConfiguration(DbControl dc, Class<? extends Plugin> clazz, String configName,
     1040    PermissionOptions permissions, boolean createIfMissing)
     1041  {
     1042    JSONObject json = new JSONObject();
     1043    JSONArray jsonMessages = new JSONArray();
     1044    json.put("itemType", Item.PLUGINCONFIGURATION.name());
     1045    json.put("name", configName);
     1046   
     1047    try
     1048    {
     1049      PluginDefinition plugin = PluginDefinition.getByClassName(dc, clazz.getName());
     1050     
     1051      ItemQuery<PluginConfiguration> query = plugin.getPluginConfigurations();
     1052      query.include(Include.ALL);
     1053      query.restrict(Restrictions.eq(Hql.property("name"), Expressions.string(configName)));
     1054     
     1055      List<PluginConfiguration> result = query.list(dc);
     1056     
     1057      if (result.size() == 0)
     1058      {
     1059        json.put("status", "error");
     1060        jsonMessages.add("Not installed");
     1061      }
     1062      else if (result.size() > 1)
     1063      {
     1064        json.put("status", "error");
     1065        jsonMessages.add("Found > 1 configuration");
     1066      }
     1067      else
     1068      {
     1069        PluginConfiguration config = result.get(0);
     1070        json.put("id", config.getId());
     1071        json.put("status", "ok"); // For now -- more checks below
     1072       
     1073        if (permissions != null && !permissions.checkPermissions(config))
     1074        {
     1075          if (createIfMissing)
     1076          {
     1077            permissions.applyPermissions(config);
     1078            if (jsonMessages.size() == 0) jsonMessages.add("Fixed");
     1079          }
     1080          else
     1081          {
     1082            json.put("status", "incomplete");
     1083            jsonMessages.add(permissions.getMessage());
     1084          }
     1085        }
     1086      }
     1087    }
     1088    catch (ItemNotFoundException ex)
     1089    {
     1090      jsonMessages.add("Not installed");
     1091      json.put("status", "error");
     1092    }
     1093   
     1094    if (jsonMessages.size() == 0) jsonMessages.add("Ok");
     1095    json.put("messages", jsonMessages);
     1096    return json;
     1097  }
     1098
     1099 
    9681100  /**
    9691101    Store options for enumerated annotation types.
Note: See TracChangeset for help on using the changeset viewer.