extensions/net.sf.basedb.relax/trunk/src/net/sf/basedb/relax/dao/Fileserver.java

Code
Comments
Other
Rev Date Author Line
4406 20 Mar 17 nicklas 1 package net.sf.basedb.relax.dao;
4406 20 Mar 17 nicklas 2
4406 20 Mar 17 nicklas 3 import java.lang.reflect.Field;
4406 20 Mar 17 nicklas 4 import java.util.List;
4406 20 Mar 17 nicklas 5
4406 20 Mar 17 nicklas 6 import org.json.simple.JSONObject;
4406 20 Mar 17 nicklas 7
4406 20 Mar 17 nicklas 8 import net.sf.basedb.core.DbControl;
4406 20 Mar 17 nicklas 9 import net.sf.basedb.core.FileServer;
4406 20 Mar 17 nicklas 10 import net.sf.basedb.core.Include;
4406 20 Mar 17 nicklas 11 import net.sf.basedb.core.InvalidDataException;
4406 20 Mar 17 nicklas 12 import net.sf.basedb.core.ItemNotFoundException;
4406 20 Mar 17 nicklas 13 import net.sf.basedb.core.ItemQuery;
4406 20 Mar 17 nicklas 14 import net.sf.basedb.core.Type;
4406 20 Mar 17 nicklas 15 import net.sf.basedb.core.query.Expressions;
4406 20 Mar 17 nicklas 16 import net.sf.basedb.core.query.Hql;
4406 20 Mar 17 nicklas 17 import net.sf.basedb.core.query.Restrictions;
4406 20 Mar 17 nicklas 18
4406 20 Mar 17 nicklas 19 /**
4406 20 Mar 17 nicklas 20   Used to define file servers for access to external files.
4406 20 Mar 17 nicklas 21   
4406 20 Mar 17 nicklas 22   @author nicklas
4406 20 Mar 17 nicklas 23   @since 1.0
4406 20 Mar 17 nicklas 24 */
4406 20 Mar 17 nicklas 25 public class Fileserver 
4406 20 Mar 17 nicklas 26 {
4406 20 Mar 17 nicklas 27
4406 20 Mar 17 nicklas 28   /**
4406 20 Mar 17 nicklas 29     The file server containing released data files.
4406 20 Mar 17 nicklas 30   */
4406 20 Mar 17 nicklas 31   public static final Fileserver RELEASE_ARCHIVE = 
4406 20 Mar 17 nicklas 32     new Fileserver("ReleaseArchive", "net.sf.basedb.xfiles.sftp-connection-manager", 
4406 20 Mar 17 nicklas 33       "File server containing released data files.");
4406 20 Mar 17 nicklas 34   /**
4578 19 Sep 17 nicklas 35     The file server containing level-3 data files.
4578 19 Sep 17 nicklas 36   */
4578 19 Sep 17 nicklas 37   public static final Fileserver LEVEL3_ARCHIVE = 
4578 19 Sep 17 nicklas 38     new Fileserver("Level3Archive", "net.sf.basedb.xfiles.sftp-connection-manager", 
4578 19 Sep 17 nicklas 39       "File server for exporting to the level-3 server.");
4578 19 Sep 17 nicklas 40
4578 19 Sep 17 nicklas 41   /**
4406 20 Mar 17 nicklas 42     Get the file server by name of the static constant defined in this class.
4406 20 Mar 17 nicklas 43     
4406 20 Mar 17 nicklas 44     @param cName The name of the static constant
4406 20 Mar 17 nicklas 45     @return A bioplate type object or null if not found
4406 20 Mar 17 nicklas 46    */
4406 20 Mar 17 nicklas 47   public static Fileserver getByCName(String cName)
4406 20 Mar 17 nicklas 48   {
4406 20 Mar 17 nicklas 49     if (cName == null) return null;
4406 20 Mar 17 nicklas 50     Fileserver fs = null;
4406 20 Mar 17 nicklas 51     try
4406 20 Mar 17 nicklas 52     {
4406 20 Mar 17 nicklas 53       Field f = Fileserver.class.getDeclaredField(cName);
4406 20 Mar 17 nicklas 54       fs = (Fileserver)f.get(null);
4406 20 Mar 17 nicklas 55     }
4406 20 Mar 17 nicklas 56     catch (NoSuchFieldException ex)
4406 20 Mar 17 nicklas 57     {}
4406 20 Mar 17 nicklas 58     catch (IllegalAccessException ex)
4406 20 Mar 17 nicklas 59     {}
4406 20 Mar 17 nicklas 60     catch (ClassCastException ex)
4406 20 Mar 17 nicklas 61     {}
4406 20 Mar 17 nicklas 62     return fs;
4406 20 Mar 17 nicklas 63   }
4406 20 Mar 17 nicklas 64   
4406 20 Mar 17 nicklas 65   private final String name;
4406 20 Mar 17 nicklas 66   private final String connectionManagerId;
4406 20 Mar 17 nicklas 67   private final String description;
4406 20 Mar 17 nicklas 68   private int id;
4406 20 Mar 17 nicklas 69   private JSONObject json;
4406 20 Mar 17 nicklas 70   
4406 20 Mar 17 nicklas 71   /**
4406 20 Mar 17 nicklas 72     Create a new definition
4406 20 Mar 17 nicklas 73     @param name The name of the subtype
4406 20 Mar 17 nicklas 74     @param connectionManagerId The connection manager to use 
4406 20 Mar 17 nicklas 75   */
4406 20 Mar 17 nicklas 76   private Fileserver(String name, String connectionManagerId, String description)
4406 20 Mar 17 nicklas 77   {
4406 20 Mar 17 nicklas 78     this.name = name;
4406 20 Mar 17 nicklas 79     this.connectionManagerId = connectionManagerId;
4406 20 Mar 17 nicklas 80     this.description = description;
4406 20 Mar 17 nicklas 81   }
4406 20 Mar 17 nicklas 82     
4406 20 Mar 17 nicklas 83   /**
4406 20 Mar 17 nicklas 84     Get the name of the biomaterial list.
4406 20 Mar 17 nicklas 85   */
4406 20 Mar 17 nicklas 86   public String getName()
4406 20 Mar 17 nicklas 87   {
4406 20 Mar 17 nicklas 88     return name;
4406 20 Mar 17 nicklas 89   }
4406 20 Mar 17 nicklas 90   
4406 20 Mar 17 nicklas 91   /**
4406 20 Mar 17 nicklas 92     Get the list description.
4406 20 Mar 17 nicklas 93   */
4406 20 Mar 17 nicklas 94   public String getDescription()
4406 20 Mar 17 nicklas 95   {
4406 20 Mar 17 nicklas 96     return description;
4406 20 Mar 17 nicklas 97   }
4406 20 Mar 17 nicklas 98   
4406 20 Mar 17 nicklas 99   /**
4406 20 Mar 17 nicklas 100     Get the id of the connection manager to use.
4406 20 Mar 17 nicklas 101   */
4406 20 Mar 17 nicklas 102   public String getConnectionManagerId()
4406 20 Mar 17 nicklas 103   {
4406 20 Mar 17 nicklas 104     return connectionManagerId;
4406 20 Mar 17 nicklas 105   }
4406 20 Mar 17 nicklas 106   
4406 20 Mar 17 nicklas 107   /**
4406 20 Mar 17 nicklas 108     Load the file server as a BASE item
4406 20 Mar 17 nicklas 109     @param dc The DbControl to use for database access
4406 20 Mar 17 nicklas 110     @return An FileServer object
4406 20 Mar 17 nicklas 111   */
4406 20 Mar 17 nicklas 112   public FileServer load(DbControl dc)
4406 20 Mar 17 nicklas 113   {
4406 20 Mar 17 nicklas 114     FileServer list = null;
4406 20 Mar 17 nicklas 115     if (id == 0)
4406 20 Mar 17 nicklas 116     {
4406 20 Mar 17 nicklas 117       List<FileServer> result = list(dc);
4406 20 Mar 17 nicklas 118       if (result.size() == 0)
4406 20 Mar 17 nicklas 119       {
4406 20 Mar 17 nicklas 120         throw new ItemNotFoundException("FileServer["+getName()+"]");
4406 20 Mar 17 nicklas 121       }
4406 20 Mar 17 nicklas 122       else if (result.size() > 1)
4406 20 Mar 17 nicklas 123       {
4406 20 Mar 17 nicklas 124         throw new InvalidDataException("Found > 1 FileServer["+getName()+"]");
4406 20 Mar 17 nicklas 125       }
4406 20 Mar 17 nicklas 126       list = result.get(0);
4406 20 Mar 17 nicklas 127       id = list.getId();
4406 20 Mar 17 nicklas 128     }
4406 20 Mar 17 nicklas 129     else
4406 20 Mar 17 nicklas 130     {
4406 20 Mar 17 nicklas 131       list = FileServer.getById(dc, id);
4406 20 Mar 17 nicklas 132     }
4406 20 Mar 17 nicklas 133     return list;
4406 20 Mar 17 nicklas 134   }
4406 20 Mar 17 nicklas 135   
4406 20 Mar 17 nicklas 136   /**
4406 20 Mar 17 nicklas 137     List all file server registered in BASE with an name matching this 
4406 20 Mar 17 nicklas 138     definition. Normally, only a single file server should be returned.
4406 20 Mar 17 nicklas 139   */
4406 20 Mar 17 nicklas 140   public List<FileServer> list(DbControl dc)
4406 20 Mar 17 nicklas 141   {
4406 20 Mar 17 nicklas 142     ItemQuery<FileServer> query = FileServer.getQuery();
4406 20 Mar 17 nicklas 143     query.restrict(
4406 20 Mar 17 nicklas 144       Restrictions.eq(
4406 20 Mar 17 nicklas 145         Hql.property("name"), 
4406 20 Mar 17 nicklas 146         Expressions.parameter("name", getName(), Type.STRING)
4406 20 Mar 17 nicklas 147       ));
4406 20 Mar 17 nicklas 148     query.include(Include.ALL);
4406 20 Mar 17 nicklas 149     return query.list(dc);
4406 20 Mar 17 nicklas 150   }
4406 20 Mar 17 nicklas 151   
4406 20 Mar 17 nicklas 152   /**
4406 20 Mar 17 nicklas 153     Get the subtype information as a JSON object ready to be sent as an AJAX response.
4406 20 Mar 17 nicklas 154     @since 4.3
4406 20 Mar 17 nicklas 155   */
4406 20 Mar 17 nicklas 156   public JSONObject asJSONObject(DbControl dc)
4406 20 Mar 17 nicklas 157   {
4406 20 Mar 17 nicklas 158     if (json == null)
4406 20 Mar 17 nicklas 159     {
4406 20 Mar 17 nicklas 160       FileServer fs = load(dc);
4406 20 Mar 17 nicklas 161       json = new JSONObject();
4406 20 Mar 17 nicklas 162       json.put("id", id);
4406 20 Mar 17 nicklas 163       json.put("name", getName());
4406 20 Mar 17 nicklas 164       json.put("host", fs.getHost());
4406 20 Mar 17 nicklas 165     }
4406 20 Mar 17 nicklas 166     return json;
4406 20 Mar 17 nicklas 167   }
4406 20 Mar 17 nicklas 168   
4406 20 Mar 17 nicklas 169 }