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

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