2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.reference
;
11 import java
.util
.HashMap
;
12 import java
.util
.List
;
16 import org
.apache
.logging
.log4j
.LogManager
;
17 import org
.apache
.logging
.log4j
.Logger
;
18 import org
.hibernate
.Criteria
;
19 import org
.hibernate
.Session
;
20 import org
.hibernate
.criterion
.Order
;
21 import org
.hibernate
.criterion
.Projections
;
22 import org
.hibernate
.criterion
.Restrictions
;
23 import org
.hibernate
.query
.Query
;
24 import org
.springframework
.stereotype
.Repository
;
26 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
27 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableEntity
;
28 import eu
.etaxonomy
.cdm
.model
.common
.SingleSourcedEntityBase
;
29 import eu
.etaxonomy
.cdm
.model
.reference
.ISourceable
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.NamedSourceBase
;
31 import eu
.etaxonomy
.cdm
.model
.reference
.OriginalSourceBase
;
32 import eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.common
.CdmEntityDaoBase
;
33 import eu
.etaxonomy
.cdm
.persistence
.dao
.reference
.IOriginalSourceDao
;
34 import eu
.etaxonomy
.cdm
.persistence
.query
.OrderHint
;
41 public class OriginalSourceDaoImpl
42 extends CdmEntityDaoBase
<OriginalSourceBase
>
43 implements IOriginalSourceDao
{
45 @SuppressWarnings("unused")
46 private static final Logger logger
= LogManager
.getLogger();
48 public OriginalSourceDaoImpl() {
49 super(OriginalSourceBase
.class);
53 public <S
extends SingleSourcedEntityBase
> S
findSingleSourceBySourceId(Class
<S
> clazz
, int sourceId
){
55 clazz
= (Class
)SingleSourcedEntityBase
.class;
57 Query
<S
> q
= getSession().createQuery(
59 "FROM " + clazz
.getName() + " AS c " +
60 "INNER JOIN c.source AS source " +
61 "WHERE source.id= :sourceId ", clazz
63 q
.setParameter("sourceId", sourceId
);
65 S result
= q
.uniqueResult();
70 public <S
extends IdentifiableEntity
> S
findIdentifiableBySourceId(Class
<S
> clazz
, int sourceId
){
72 clazz
= (Class
)IdentifiableEntity
.class;
74 Query
<S
> q
= getSession().createQuery(
76 "FROM " + clazz
.getName() + " AS c " +
77 "INNER JOIN c.sources AS source " +
78 "WHERE source.id= :sourceId ", clazz
80 q
.setParameter("sourceId", sourceId
);
82 S result
= q
.uniqueResult();
87 public <S
extends ISourceable
> Map
<String
, S
> findOriginalSourcesByIdInSource(Class
<S
> clazz
, Set
<String
> idInSourceSet
, String idNamespace
) {
89 Session session
= getSession();
90 String idInSourceString
= "";
91 for (String idInSource
: idInSourceSet
){
92 idInSourceString
= CdmUtils
.concat("','", idInSourceString
, idInSource
);
94 idInSourceString
= "'"+ idInSourceString
+ "'";
96 Query
<Object
[]> q
= session
.createQuery(
97 "SELECT source.idInSource, c " +
98 "FROM " + clazz
.getName() + " AS c " +
99 "INNER JOIN c.sources AS source " +
100 "WHERE source.idInSource IN ( " + idInSourceString
+ " )" +
101 " AND source.idNamespace = :idNamespace",
104 q
.setParameter("idNamespace", idNamespace
);
105 //TODO integrate reference in where
107 Map
<String
, S
> result
= new HashMap
<>();
109 List
<Object
[]> list
= q
.list();
110 for (Object
[] pair
: list
){
111 result
.put((String
)pair
[0], (S
)pair
[1]);
118 public <S
extends ISourceable
> List
<S
> findOriginalSourceByIdInSource(Class
<S
> clazz
, String idInSource
, String idNamespace
) {
119 Session session
= getSession();
120 Query
<S
> q
= session
.createQuery(
121 "SELECT c FROM " + clazz
.getSimpleName() + " as c " +
122 " INNER JOIN c.sources as source " +
123 "WHERE source.idInSource = :idInSource " +
124 " AND source.idNamespace = :idNamespace",
127 q
.setParameter("idInSource", idInSource
);
128 q
.setParameter("idNamespace", idNamespace
);
129 //TODO integrate reference in where
131 List
<S
> results
= q
.list();
137 public List
<OriginalSourceBase
> findOriginalSourceByIdInSource(String idInSource
, String idNamespace
) {
138 Session session
= getSession();
139 Criteria crit
= session
.createCriteria(type
);
140 crit
.add(Restrictions
.eq("idInSource", idInSource
));
141 if (idNamespace
== null){
142 crit
.add(Restrictions
.isNull("idNamespace"));
144 crit
.add(Restrictions
.eq("idNamespace", idNamespace
));
146 crit
.addOrder(Order
.desc("created"));
147 @SuppressWarnings({ "unchecked"})
148 List
<OriginalSourceBase
> results
= crit
.list();
154 public <T
extends NamedSourceBase
> Long
countWithNameUsedInSource(Class
<T
> clazz
){
156 clazz
= clazz
!= null? clazz
: (Class
<T
>)NamedSourceBase
.class;
157 Criteria crit
= getSession().createCriteria(clazz
);
159 crit
.setProjection(Projections
.rowCount());
160 long result
= (Long
)crit
.uniqueResult();
167 public <T
extends NamedSourceBase
> List
<T
> listWithNameUsedInSource(Class
<T
> clazz
,
168 Integer pageSize
, Integer pageNumber
,List
<OrderHint
> orderHints
, List
<String
> propertyPaths
){
170 clazz
= clazz
!= null? clazz
: (Class
<T
>) NamedSourceBase
.class;
171 Criteria crit
= getSession().createCriteria(clazz
);
172 crit
.add(Restrictions
.isNotNull("nameUsedInSource"));
174 crit
.addOrder(Order
.desc("created"));
175 @SuppressWarnings({ "unchecked" })
176 List
<T
> results
= crit
.list();