View Javadoc

1   package org.lsst.ccs.config;
2   
3   import java.util.Collection;
4   import java.util.List;
5   
6   /**
7    * abstract class used to help build DAO that uses HQL but are in a different package
8    * @author bamade
9    */
10  // Date: 12/03/13
11  
12  public abstract class HqlDAO  implements DBInterface{
13      /**
14       * delegate to Hibernate Query type
15       */
16      //todo : enrich if necessary
17      public interface AbstractQuery {
18          List list() ;
19      }
20  
21      /**
22       * delegate to Hibernate Session type
23       */
24      //todo enrich if necessary
25      public interface AbstractSession {
26          AbstractQuery createQuery(String queryString) ;
27          void saveOrUpdate(Object arg) ;
28          void save(Object arg) ;
29          void delete(Object arg) ;
30          void flush() ;
31      }
32  
33      protected AbstractSession session ;
34      protected boolean exceptionFired ;
35  
36      public AbstractSession getSession() {
37          return session;
38      }
39  
40      public void setSession(AbstractSession session) {
41          this.session = session;
42      }
43  
44      /////////////////////// DB Interface contract
45  
46      @Override
47      public void saveSubsystemDescription(ASubsystemDescription newDescription) {
48          newDescription.setStartTimestamp(System.currentTimeMillis());
49          // paremeter description comments my be modified
50          session.saveOrUpdate(newDescription); ;
51      }
52  
53      @Override
54      public void saveGhostDescriptions(GhostSubsystemDescription ghosts) {
55          session.save(ghosts) ;
56      }
57  
58      @Override
59      public ASubsystemDescription getActiveSubsystemDescription(String name, String tag) {
60          String request = "from ASubsystemDescription where subsystemName = '"+name+"' and tag = '"+tag +"'" ;
61          AbstractQuery query = session.createQuery(request) ;
62          List listRes = query.list();
63          if(listRes.size() == 1) {
64              return (ASubsystemDescription)listRes.get(0) ;
65          }
66          return null ;
67      }
68  
69      @Override
70      public ASubsystemDescription getActiveSubsystemDescription(long id) {
71          String request = "from ASubsystemDescription where id = " +id  ;
72          AbstractQuery query = session.createQuery(request) ;
73          List listRes = query.list();
74          if(listRes.size() == 1) {
75              return (ASubsystemDescription)listRes.get(0) ;
76          }
77          return null ;
78      }
79  
80      @Override
81      public GhostSubsystemDescription getGhostDescription(long id) {
82          String request = "from GhostSubsystemDescription where id = '"+id+"'" ;
83          AbstractQuery query = session.createQuery(request) ;
84          List listRes = query.list();
85          if(listRes.size() == 1) {
86              return (GhostSubsystemDescription)listRes.get(0) ;
87          }
88          return null ;
89      }
90  
91      @Override
92      public void deleteActiveSubsystemDescription(ASubsystemDescription oldDescription) {
93          session.delete(oldDescription);
94          // flush ?
95          session.flush() ;
96      }
97  
98      @Override
99      public void saveConfigProfile(AConfigProfile newProfile) {
100         newProfile.setStartTimestamp(System.currentTimeMillis());
101         //TODO: what of referenced subsystem? dave? different cascade ?
102         // remarks can be modified
103         session.saveOrUpdate(newProfile);
104     }
105 
106     @Override
107     public void savePastProfile(PastConfigProfile deprecatedProfile) {
108         session.save(deprecatedProfile) ;
109     }
110 
111     @Override
112     public AConfigProfile getActiveConfigProfile(String name, String tag) {
113         String request = "from AConfigProfile where name = '"+name+"' and tag = '"+tag +"'" ;
114         AbstractQuery query = session.createQuery(request) ;
115         List listRes = query.list();
116         if(listRes.size() == 1) {
117             return (AConfigProfile) listRes.get(0) ;
118         }
119         return null ;
120     }
121 
122     @Override
123     public void deleteActiveConfigProfile(AConfigProfile oldProfile) {
124         session.delete(oldProfile);
125         //flush ? YES otherwise does not work!
126         session.flush() ;
127     }
128 
129     @Override
130     public void modifyParmConfig(AParameterConfiguration config) {
131         session.saveOrUpdate(config);
132     }
133 
134     @Override
135     public Collection<AConfigProfile> getActiveProfilesForSubsystem(ASubsystemDescription description) {
136         //TODO: check if simpler join is not more coherent
137         String request = "from AConfigProfile where subsystemId = '"+description.getId()+"'" ;
138         AbstractQuery query = session.createQuery(request) ;
139         List listRes = query.list();
140         return (Collection<AConfigProfile>)listRes ;
141     }
142 
143     @Override
144     public Collection<PastConfigProfile> getProfilesForSubsystem(GhostSubsystemDescription description) {
145         //TODO: check if simpler  using id
146         //TODO: RECHECK THIS! LOOKS FAULTY
147         //String request = "from PastConfigProfile where subsystemDesc = "+description+"" ;
148         String request = "from PastConfigProfile where subsystemDesc.id = "+description.getId()+"" ;
149         AbstractQuery query = session.createQuery(request) ;
150         List listRes = query.list();
151         return (Collection<PastConfigProfile>)listRes ;
152     }
153 
154     @Override
155     public void saveRun(RunHistory runHistory) {
156         session.save(runHistory) ;
157     }
158 
159     @Override
160     public void savePreparedConfiguration(PreparedConfiguration preparedConfiguration) {
161         session.save(preparedConfiguration);
162     }
163 
164     @Override
165     public PreparedConfiguration getPreparedConfiguration(String subsystemName, String configName, String tag) {
166         String request = "from PreparedConfiguration where subsystemName = '" +subsystemName +"'" ;
167         if(configName != null && !"".equals(configName)) {
168             request += " and configName = '" + configName +"'" ;
169         }
170         if(tag != null && !"".equals(tag)) {
171             request += " and tag = '" + tag +"'" ;
172         }
173         AbstractQuery query = session.createQuery(request) ;
174         List listRes = query.list();
175         if(listRes.size() == 1) {
176             return (PreparedConfiguration)listRes.get(0) ;
177         }
178         return null;
179     }
180 
181     @Override
182     public void saveMachineConfiguration(MachineConfiguration machineConfiguration) {
183         session.save(machineConfiguration) ;
184     }
185 
186     @Override
187     public MachineConfiguration getMachineConfiguration(String macAddress) {
188         String request = "from MachineConfiguration where macAddress = '" + macAddress + "'" ;
189         AbstractQuery query = session.createQuery(request) ;
190         List listRes = query.list();
191         if(listRes.size() == 1) {
192             return (MachineConfiguration)listRes.get(0) ;
193         }
194         return null;  //To change body of implemented methods use File | Settings | File Templates.
195     }
196 
197     @Override
198     public List<?> simpleHQLRequest(String hqlString) {
199         AbstractQuery query = session.createQuery(hqlString) ;
200         return query.list() ;
201     }
202 
203 }