reimplemented GenericDao.getAllClasses
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / CdmGenericDaoImpl.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.persistence.dao.hibernate.common;
11
12 import java.lang.reflect.Modifier;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Set;
16
17 import org.apache.log4j.Logger;
18 import org.hibernate.Criteria;
19 import org.hibernate.Query;
20 import org.hibernate.Session;
21 import org.hibernate.SessionFactory;
22 import org.hibernate.criterion.Restrictions;
23 import org.hibernate.impl.SessionFactoryImpl;
24 import org.springframework.stereotype.Repository;
25
26 import eu.etaxonomy.cdm.model.agent.Address;
27 import eu.etaxonomy.cdm.model.agent.AgentBase;
28 import eu.etaxonomy.cdm.model.agent.Contact;
29 import eu.etaxonomy.cdm.model.agent.Institution;
30 import eu.etaxonomy.cdm.model.agent.InstitutionType;
31 import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;
32 import eu.etaxonomy.cdm.model.agent.Person;
33 import eu.etaxonomy.cdm.model.agent.Team;
34 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
35 import eu.etaxonomy.cdm.model.common.Annotation;
36 import eu.etaxonomy.cdm.model.common.AnnotationType;
37 import eu.etaxonomy.cdm.model.common.CdmBase;
38 import eu.etaxonomy.cdm.model.common.Credit;
39 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
40 import eu.etaxonomy.cdm.model.common.Extension;
41 import eu.etaxonomy.cdm.model.common.ExtensionType;
42 import eu.etaxonomy.cdm.model.common.Figure;
43 import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
44 import eu.etaxonomy.cdm.model.common.Group;
45 import eu.etaxonomy.cdm.model.common.Keyword;
46 import eu.etaxonomy.cdm.model.common.LSID;
47 import eu.etaxonomy.cdm.model.common.LSIDAuthority;
48 import eu.etaxonomy.cdm.model.common.Language;
49 import eu.etaxonomy.cdm.model.common.LanguageString;
50 import eu.etaxonomy.cdm.model.common.Marker;
51 import eu.etaxonomy.cdm.model.common.MarkerType;
52 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
53 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
54 import eu.etaxonomy.cdm.model.common.OriginalSource;
55 import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
56 import eu.etaxonomy.cdm.model.common.Representation;
57 import eu.etaxonomy.cdm.model.common.TermVocabulary;
58 import eu.etaxonomy.cdm.model.common.User;
59 import eu.etaxonomy.cdm.model.description.AbsenceTerm;
60 import eu.etaxonomy.cdm.model.description.CategoricalData;
61 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
62 import eu.etaxonomy.cdm.model.description.DescriptionBase;
63 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
64 import eu.etaxonomy.cdm.model.description.Distribution;
65 import eu.etaxonomy.cdm.model.description.Feature;
66 import eu.etaxonomy.cdm.model.description.FeatureNode;
67 import eu.etaxonomy.cdm.model.description.FeatureTree;
68 import eu.etaxonomy.cdm.model.description.IdentificationKey;
69 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
70 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
71 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
72 import eu.etaxonomy.cdm.model.description.PresenceTerm;
73 import eu.etaxonomy.cdm.model.description.QuantitativeData;
74 import eu.etaxonomy.cdm.model.description.Scope;
75 import eu.etaxonomy.cdm.model.description.Sex;
76 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
77 import eu.etaxonomy.cdm.model.description.Stage;
78 import eu.etaxonomy.cdm.model.description.State;
79 import eu.etaxonomy.cdm.model.description.StateData;
80 import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
81 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
82 import eu.etaxonomy.cdm.model.description.TaxonDescription;
83 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
84 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
85 import eu.etaxonomy.cdm.model.description.TextData;
86 import eu.etaxonomy.cdm.model.description.TextFormat;
87 import eu.etaxonomy.cdm.model.location.Continent;
88 import eu.etaxonomy.cdm.model.location.NamedArea;
89 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
90 import eu.etaxonomy.cdm.model.location.NamedAreaType;
91 import eu.etaxonomy.cdm.model.location.Point;
92 import eu.etaxonomy.cdm.model.location.ReferenceSystem;
93 import eu.etaxonomy.cdm.model.location.TdwgArea;
94 import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
95 import eu.etaxonomy.cdm.model.media.AudioFile;
96 import eu.etaxonomy.cdm.model.media.ImageFile;
97 import eu.etaxonomy.cdm.model.media.Media;
98 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
99 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
100 import eu.etaxonomy.cdm.model.media.MovieFile;
101 import eu.etaxonomy.cdm.model.media.ReferencedMedia;
102 import eu.etaxonomy.cdm.model.media.Rights;
103 import eu.etaxonomy.cdm.model.media.RightsTerm;
104 import eu.etaxonomy.cdm.model.molecular.DnaSample;
105 import eu.etaxonomy.cdm.model.molecular.GenBankAccession;
106 import eu.etaxonomy.cdm.model.molecular.Locus;
107 import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;
108 import eu.etaxonomy.cdm.model.molecular.Sequence;
109 import eu.etaxonomy.cdm.model.name.BacterialName;
110 import eu.etaxonomy.cdm.model.name.BotanicalName;
111 import eu.etaxonomy.cdm.model.name.CultivarPlantName;
112 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
113 import eu.etaxonomy.cdm.model.name.HybridRelationship;
114 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
115 import eu.etaxonomy.cdm.model.name.NameRelationship;
116 import eu.etaxonomy.cdm.model.name.NameRelationshipType;
117 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
118 import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
119 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
120 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
121 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
122 import eu.etaxonomy.cdm.model.name.NonViralName;
123 import eu.etaxonomy.cdm.model.name.Rank;
124 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
125 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
126 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
127 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
128 import eu.etaxonomy.cdm.model.name.ViralName;
129 import eu.etaxonomy.cdm.model.name.ZoologicalName;
130 import eu.etaxonomy.cdm.model.occurrence.Collection;
131 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
132 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
133 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
134 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
135 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
136 import eu.etaxonomy.cdm.model.occurrence.DeterminationModifier;
137 import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
138 import eu.etaxonomy.cdm.model.occurrence.Fossil;
139 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
140 import eu.etaxonomy.cdm.model.occurrence.LivingBeing;
141 import eu.etaxonomy.cdm.model.occurrence.Observation;
142 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
143 import eu.etaxonomy.cdm.model.occurrence.Specimen;
144 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
145 import eu.etaxonomy.cdm.model.reference.Article;
146 import eu.etaxonomy.cdm.model.reference.BibtexEntryType;
147 import eu.etaxonomy.cdm.model.reference.BibtexReference;
148 import eu.etaxonomy.cdm.model.reference.Book;
149 import eu.etaxonomy.cdm.model.reference.BookSection;
150 import eu.etaxonomy.cdm.model.reference.CdDvd;
151 import eu.etaxonomy.cdm.model.reference.Database;
152 import eu.etaxonomy.cdm.model.reference.Generic;
153 import eu.etaxonomy.cdm.model.reference.InProceedings;
154 import eu.etaxonomy.cdm.model.reference.Journal;
155 import eu.etaxonomy.cdm.model.reference.Map;
156 import eu.etaxonomy.cdm.model.reference.Patent;
157 import eu.etaxonomy.cdm.model.reference.PersonalCommunication;
158 import eu.etaxonomy.cdm.model.reference.PrintSeries;
159 import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;
160 import eu.etaxonomy.cdm.model.reference.Proceedings;
161 import eu.etaxonomy.cdm.model.reference.Publisher;
162 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
163 import eu.etaxonomy.cdm.model.reference.Report;
164 import eu.etaxonomy.cdm.model.reference.SectionBase;
165 import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
166 import eu.etaxonomy.cdm.model.reference.Thesis;
167 import eu.etaxonomy.cdm.model.reference.WebPage;
168 import eu.etaxonomy.cdm.model.taxon.Synonym;
169 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
170 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
171 import eu.etaxonomy.cdm.model.taxon.Taxon;
172 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
173 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
174 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
175 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
176 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
177 import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;
178
179 @Repository
180 public class CdmGenericDaoImpl extends CdmEntityDaoBase<CdmBase> implements ICdmGenericDao{
181 private static final Logger logger = Logger.getLogger(CdmGenericDaoImpl.class);
182
183 public CdmGenericDaoImpl() {
184 super(CdmBase.class);
185 }
186
187 /* (non-Javadoc)
188 * @see eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao#getCdmBasesByFieldAndClass(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
189 */
190 public List<CdmBase> getCdmBasesByFieldAndClass(Class clazz, String propertyName, CdmBase referencedCdmBase){
191 Session session = super.getSession();
192 Criteria criteria = session.createCriteria(clazz);
193 criteria.add(Restrictions.eq(propertyName, referencedCdmBase));
194 return criteria.list();
195 }
196
197 /* (non-Javadoc)
198 * @see eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao#getCdmBasesByFieldAndClass(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
199 */
200 public List<CdmBase> getCdmBasesWithItemInCollection(Class itemClass, Class clazz, String propertyName, CdmBase item){
201 Session session = super.getSession();
202 String thisClassStr = itemClass.getSimpleName();
203 String otherClassStr = clazz.getSimpleName();
204 String queryStr = " SELECT other FROM "+ thisClassStr + " this, " + otherClassStr + " other " +
205 " WHERE this = :referencedObject AND this member of other."+propertyName ;
206 Query query = session.createQuery(queryStr).setEntity("referencedObject", item);
207 List result = query.list();
208 return result;
209 }
210
211 /* (non-Javadoc)
212 * @see eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao#getAllCdmClasses(boolean)
213 */
214 public Set<Class<? extends CdmBase>> getAllCdmClasses(boolean includeAbstractClasses){
215 Set<Class<? extends CdmBase>> result = new HashSet<Class<? extends CdmBase>>();
216
217 SessionFactory sessionFactory = getSession().getSessionFactory();
218 java.util.Map allClassMetadata = sessionFactory.getAllClassMetadata();
219 java.util.Collection keys = allClassMetadata.keySet();
220 for (Object oKey : keys){
221 if (oKey instanceof String){
222 String strKey = (String)oKey;
223 if (! strKey.endsWith("_AUD")){
224 try {
225 Class clazz = Class.forName(strKey);
226 boolean isAbstractClass = Modifier.isAbstract(clazz.getModifiers());
227 if (! isAbstractClass || includeAbstractClasses){
228 result.add(clazz);
229 }
230 } catch (ClassNotFoundException e) {
231 logger.warn("Class not found: " + strKey);
232 }
233 }
234 }else{
235 logger.warn("key is not of type String: " + oKey);
236 }
237 }
238 return result;
239 }
240
241
242
243
244 public List getHqlResult(String hqlQuery){
245 Query query = getSession().createQuery(hqlQuery);
246 List result = query.list();
247 return result;
248 }
249
250
251 }
252
253