extensions/net.sf.basedb.meludi/trunk/src/net/sf/basedb/meludi/dao/ClientApp.java

Code
Comments
Other
Rev Date Author Line
4706 19 Mar 18 olle 1 package net.sf.basedb.meludi.dao;
4706 19 Mar 18 olle 2
4706 19 Mar 18 olle 3 import java.lang.reflect.Field;
4706 19 Mar 18 olle 4 import java.util.List;
4706 19 Mar 18 olle 5
4706 19 Mar 18 olle 6 import net.sf.basedb.core.Client;
4706 19 Mar 18 olle 7 import net.sf.basedb.core.DbControl;
4706 19 Mar 18 olle 8 import net.sf.basedb.core.Include;
4706 19 Mar 18 olle 9 import net.sf.basedb.core.InvalidDataException;
4706 19 Mar 18 olle 10 import net.sf.basedb.core.ItemNotFoundException;
4706 19 Mar 18 olle 11 import net.sf.basedb.core.ItemQuery;
4706 19 Mar 18 olle 12 import net.sf.basedb.core.Type;
4706 19 Mar 18 olle 13 import net.sf.basedb.core.query.Expressions;
4706 19 Mar 18 olle 14 import net.sf.basedb.core.query.Hql;
4706 19 Mar 18 olle 15 import net.sf.basedb.core.query.Restrictions;
4706 19 Mar 18 olle 16
4706 19 Mar 18 olle 17
4706 19 Mar 18 olle 18
4706 19 Mar 18 olle 19 /**
4706 19 Mar 18 olle 20   Used to define Client applications.
4706 19 Mar 18 olle 21   
4706 19 Mar 18 olle 22   @author nicklas
4706 19 Mar 18 olle 23   @since 1.6.0
4706 19 Mar 18 olle 24 */
4706 19 Mar 18 olle 25 public class ClientApp
4706 19 Mar 18 olle 26 {
4706 19 Mar 18 olle 27
4706 19 Mar 18 olle 28   /**
4706 19 Mar 18 olle 29     The "Meludi" client.
4706 19 Mar 18 olle 30   */
4706 19 Mar 18 olle 31   public static final ClientApp MELUDI = new ClientApp("Meludi", "net.sf.basedb.meludi");
4706 19 Mar 18 olle 32
4706 19 Mar 18 olle 33   /**
4706 19 Mar 18 olle 34     The "SCAN-B Delivery" client.
4706 19 Mar 18 olle 35   */
4706 19 Mar 18 olle 36   //public static final ClientApp SCANB_DELIVERY = new ClientApp("SCAN-B Delivery", "net.sf.basedb.reggie.delivery");
4706 19 Mar 18 olle 37
4706 19 Mar 18 olle 38   /**
4706 19 Mar 18 olle 39     The regular web client.
4706 19 Mar 18 olle 40    */
4706 19 Mar 18 olle 41   //public static final ClientApp WEB_CLIENT = new ClientApp("Web client", "net.sf.basedb.clients.web");
4706 19 Mar 18 olle 42
4706 19 Mar 18 olle 43
4706 19 Mar 18 olle 44   /**
4706 19 Mar 18 olle 45     Get the ClientApp by name of the static constant defined in this class.
4706 19 Mar 18 olle 46     
4706 19 Mar 18 olle 47     @param cName The name of the static constant
4706 19 Mar 18 olle 48     @return A Client object or null if not found
4706 19 Mar 18 olle 49   */
4706 19 Mar 18 olle 50   public static ClientApp getByCName(String cName)
4706 19 Mar 18 olle 51   {
4706 19 Mar 18 olle 52     if (cName == null) return null;
4706 19 Mar 18 olle 53     ClientApp ca = null;
4706 19 Mar 18 olle 54     try
4706 19 Mar 18 olle 55     {
4706 19 Mar 18 olle 56       Field f = ClientApp.class.getDeclaredField(cName);
4706 19 Mar 18 olle 57       ca = (ClientApp)f.get(null);
4706 19 Mar 18 olle 58     }
4706 19 Mar 18 olle 59     catch (NoSuchFieldException ex)
4706 19 Mar 18 olle 60     {}
4706 19 Mar 18 olle 61     catch (IllegalAccessException ex)
4706 19 Mar 18 olle 62     {}
4706 19 Mar 18 olle 63     catch (ClassCastException ex)
4706 19 Mar 18 olle 64     {}
4706 19 Mar 18 olle 65     return ca;
4706 19 Mar 18 olle 66   }
4706 19 Mar 18 olle 67
4706 19 Mar 18 olle 68   
4706 19 Mar 18 olle 69   private final String name;
4706 19 Mar 18 olle 70   private final String externalId;
4706 19 Mar 18 olle 71   private int id;
4706 19 Mar 18 olle 72
4706 19 Mar 18 olle 73   /**
4706 19 Mar 18 olle 74     Create a new definition.
4706 19 Mar 18 olle 75   */
4706 19 Mar 18 olle 76   private ClientApp(String name, String externalId)
4706 19 Mar 18 olle 77   {
4706 19 Mar 18 olle 78     this.name = name;
4706 19 Mar 18 olle 79     this.externalId = externalId;
4706 19 Mar 18 olle 80   }
4706 19 Mar 18 olle 81
4706 19 Mar 18 olle 82   /**
4706 19 Mar 18 olle 83     Get the name of the client.
4706 19 Mar 18 olle 84    */
4706 19 Mar 18 olle 85   public String getName()
4706 19 Mar 18 olle 86   {
4706 19 Mar 18 olle 87     return name;
4706 19 Mar 18 olle 88   }
4706 19 Mar 18 olle 89   
4706 19 Mar 18 olle 90   /**
4706 19 Mar 18 olle 91     Get the external ID of the client.
4706 19 Mar 18 olle 92   */
4706 19 Mar 18 olle 93   public String getExternalId()
4706 19 Mar 18 olle 94   {
4706 19 Mar 18 olle 95     return externalId;
4706 19 Mar 18 olle 96   }
4706 19 Mar 18 olle 97
4706 19 Mar 18 olle 98   /**
4706 19 Mar 18 olle 99     Load the client as a BASE item.
4706 19 Mar 18 olle 100     @param dc The DbControl to use for database access
4706 19 Mar 18 olle 101     @return A Client object
4706 19 Mar 18 olle 102   */
4706 19 Mar 18 olle 103   public Client load(DbControl dc)
4706 19 Mar 18 olle 104   {
4706 19 Mar 18 olle 105     Client client = null;
4706 19 Mar 18 olle 106     if (id == 0)
4706 19 Mar 18 olle 107     {
4706 19 Mar 18 olle 108       List<Client> result = list(dc);
4706 19 Mar 18 olle 109   
4706 19 Mar 18 olle 110       if (result.size() == 0)
4706 19 Mar 18 olle 111       {
4706 19 Mar 18 olle 112         throw new ItemNotFoundException("Client["+getExternalId()+"]");
4706 19 Mar 18 olle 113       }
4706 19 Mar 18 olle 114       else if (result.size() > 1)
4706 19 Mar 18 olle 115       {
4706 19 Mar 18 olle 116         throw new InvalidDataException("Found > 1 Client["+getExternalId()+"]");
4706 19 Mar 18 olle 117       }
4706 19 Mar 18 olle 118       else
4706 19 Mar 18 olle 119       {
4706 19 Mar 18 olle 120         client = result.get(0);
4706 19 Mar 18 olle 121         id = client.getId();
4706 19 Mar 18 olle 122       }
4706 19 Mar 18 olle 123     }
4706 19 Mar 18 olle 124     else
4706 19 Mar 18 olle 125     {
4706 19 Mar 18 olle 126       client = Client.getById(dc, id);
4706 19 Mar 18 olle 127     }
4706 19 Mar 18 olle 128     return client;
4706 19 Mar 18 olle 129   }
4706 19 Mar 18 olle 130
4706 19 Mar 18 olle 131   /**
4706 19 Mar 18 olle 132     List all Clients database that matches this definition.
4706 19 Mar 18 olle 133   */
4706 19 Mar 18 olle 134   public List<Client> list(DbControl dc)
4706 19 Mar 18 olle 135   {
4706 19 Mar 18 olle 136     ItemQuery<Client> query = Client.getQuery();
4706 19 Mar 18 olle 137     query.restrict(
4706 19 Mar 18 olle 138       Restrictions.eq(
4706 19 Mar 18 olle 139         Hql.property("externalId"), 
4706 19 Mar 18 olle 140         Expressions.parameter("externalId", getExternalId(), Type.STRING)
4706 19 Mar 18 olle 141       ));
4706 19 Mar 18 olle 142     query.include(Include.ALL);
4706 19 Mar 18 olle 143     return query.list(dc);
4706 19 Mar 18 olle 144   }
4706 19 Mar 18 olle 145
4706 19 Mar 18 olle 146 }