Project

General

Profile

Download (7.1 KB) Statistics
| Branch: | Tag: | Revision:
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
package eu.etaxonomy.cdm.persistence.dao.hibernate.reference;
10

    
11
import java.util.ArrayList;
12
import java.util.List;
13
import java.util.UUID;
14

    
15
import org.apache.log4j.Logger;
16
import org.hibernate.Hibernate;
17
import org.hibernate.Query;
18
import org.hibernate.Session;
19
import org.hibernate.search.FullTextSession;
20
import org.hibernate.search.Search;
21
import org.springframework.beans.factory.annotation.Qualifier;
22
import org.springframework.stereotype.Repository;
23

    
24
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
25
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
26
import eu.etaxonomy.cdm.model.reference.Article;
27
import eu.etaxonomy.cdm.model.reference.Book;
28
import eu.etaxonomy.cdm.model.reference.BookSection;
29
import eu.etaxonomy.cdm.model.reference.CdDvd;
30
import eu.etaxonomy.cdm.model.reference.Database;
31
import eu.etaxonomy.cdm.model.reference.Generic;
32
import eu.etaxonomy.cdm.model.reference.IArticle;
33
import eu.etaxonomy.cdm.model.reference.IBookSection;
34
import eu.etaxonomy.cdm.model.reference.IInProceedings;
35
import eu.etaxonomy.cdm.model.reference.IPrintedUnitBase;
36
import eu.etaxonomy.cdm.model.reference.IReport;
37
import eu.etaxonomy.cdm.model.reference.IThesis;
38
import eu.etaxonomy.cdm.model.reference.InProceedings;
39
import eu.etaxonomy.cdm.model.reference.Journal;
40
import eu.etaxonomy.cdm.model.reference.Map;
41
import eu.etaxonomy.cdm.model.reference.Patent;
42
import eu.etaxonomy.cdm.model.reference.PersonalCommunication;
43
import eu.etaxonomy.cdm.model.reference.Proceedings;
44
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
45
import eu.etaxonomy.cdm.model.reference.ReferenceType;
46
import eu.etaxonomy.cdm.model.reference.Report;
47
import eu.etaxonomy.cdm.model.reference.Thesis;
48
import eu.etaxonomy.cdm.model.reference.WebPage;
49
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
50
import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;
51

    
52
/**
53
 * @author a.mueller
54
 *
55
 */
56
@Repository
57
@Qualifier("referenceDaoHibernateImpl")
58
public class ReferenceDaoHibernateImpl extends IdentifiableDaoBase<ReferenceBase> implements IReferenceDao {
59
		
60
	@SuppressWarnings("unused")
61
	private static final Logger logger = Logger.getLogger(ReferenceDaoHibernateImpl.class);
62

    
63
	public ReferenceDaoHibernateImpl() {
64
		super(ReferenceBase.class);
65
		indexedClasses = new Class[15];
66
		indexedClasses[0] = Article.class;
67
		indexedClasses[1] = Patent.class;
68
		indexedClasses[2] = PersonalCommunication.class;
69
		indexedClasses[3] = BookSection.class;
70
		indexedClasses[4] = InProceedings.class;
71
		indexedClasses[5] = CdDvd.class;
72
		indexedClasses[6] = Database.class;
73
		indexedClasses[7] = Generic.class;
74
		indexedClasses[8] = Journal.class;
75
		indexedClasses[9] = Map.class;
76
		indexedClasses[10] = WebPage.class;
77
		indexedClasses[11] = Book.class;
78
		indexedClasses[12] = Proceedings.class;
79
		indexedClasses[13] = Report.class;
80
		indexedClasses[14] = Thesis.class;
81
	}
82

    
83
	@Override
84
	public void rebuildIndex() {
85
        FullTextSession fullTextSession = Search.getFullTextSession(getSession());
86
		
87
		for(ReferenceBase reference : list(null,null)) { // re-index all agents
88
			Hibernate.initialize(reference.getAuthorTeam());
89
			
90
			if(reference.getType().equals(ReferenceType.Article)) {
91
				Hibernate.initialize(((IArticle)reference).getInJournal());
92
			} else if(reference.getType().equals(ReferenceType.BookSection)) {
93
				   Hibernate.initialize(((IBookSection)reference).getInBook());
94
			} else if(reference.getType().equals(ReferenceType.InProceedings)) {
95
					Hibernate.initialize(((IInProceedings)reference).getInProceedings());
96
			}else if(reference.getType().equals(ReferenceType.Thesis)) {
97
				Hibernate.initialize(((IThesis)reference).getSchool());
98
			} else if(reference.getType().equals(ReferenceType.Report)) {
99
				Hibernate.initialize(((IReport)reference).getInstitution());
100
			} else if(reference.getType().equals(ReferenceType.PrintedUnitBase)) {
101
				Hibernate.initialize(((IPrintedUnitBase)reference).getInSeries());
102
			}
103
			fullTextSession.index(reference);
104
		}
105
		fullTextSession.flushToIndexes();
106
	}
107

    
108
	public List<UuidAndTitleCache<ReferenceBase>> getUuidAndTitle(){
109
		List<UuidAndTitleCache<ReferenceBase>> list = new ArrayList<UuidAndTitleCache<ReferenceBase>>();
110
		Session session = getSession();
111
		
112
		Query query = session.createQuery("select uuid, titleCache from " + type.getSimpleName());
113
		
114
		List<Object[]> result = query.list();
115
		
116
		for(Object[] object : result){
117
			list.add(new UuidAndTitleCache<ReferenceBase>(type, (UUID) object[0], (String) object[1]));
118
		}
119
		
120
		return list;
121
	}
122
	
123
	@Override
124
	public List<UuidAndTitleCache<ReferenceBase>> getUuidAndTitleCache() {
125
		List<UuidAndTitleCache<ReferenceBase>> list = new ArrayList<UuidAndTitleCache<ReferenceBase>>();
126
		Session session = getSession();
127
		
128
		Query query = session.createQuery("select " +
129
				"r.uuid, r.titleCache, ab.titleCache from " + type.getSimpleName() + " as r left outer join r.authorTeam as ab ");//"select uuid, titleCache from " + type.getSimpleName());
130
		
131
		List<Object[]> result = query.list();
132
		
133
		for(Object[] object : result){
134
			UuidAndTitleCache<ReferenceBase> uuidAndTitleCache;
135
			String referenceTitle = (String) object[1];
136
			
137
			if(referenceTitle != null){							
138
				String teamTitle = (String) object[2];
139
				if(teamTitle != null){
140
					referenceTitle = referenceTitle.replace(teamTitle + ", ", "");
141
					referenceTitle += " - " + teamTitle;
142
				}
143
				list.add(new UuidAndTitleCache<ReferenceBase>(ReferenceBase.class, (UUID) object[0], referenceTitle));
144
			}else{
145
				logger.error("title cache of reference is null. UUID: " + object[0]);
146
			}
147
		}
148
		
149
		return list;
150
	}
151
	
152
	public List<ReferenceBase> getAllReferencesForPublishing(){
153
		List<ReferenceBase> references = getSession().createQuery("Select r from ReferenceBase r "+
154
				"where r.id IN "+
155
					"(Select m.markedObj.id from Marker m where "+
156
						"m.markerType.id = "+
157
							"(Select dtb.id from DefinedTermBase dtb, Representation r where r member of dtb.representations and r.text='publish'))").list();
158
		return references;
159
	}
160
	
161
	public List<ReferenceBase> getAllNotNomenclaturalReferencesForPublishing(){
162
		
163
		List<ReferenceBase> references = getSession().createQuery("select t.nomenclaturalReference from TaxonNameBase t").list();
164
		String queryString = "from ReferenceBase b where b not in (:referenceList) and b in (:publish)" ;
165
		Query referenceQuery = getSession().createQuery(queryString).setParameterList("referenceList", references);
166
		referenceQuery.setParameterList("publish", getAllReferencesForPublishing());
167
		List<ReferenceBase> resultRefernces =referenceQuery.list();
168
				
169
		return resultRefernces;
170
	}
171
public List<ReferenceBase> getAllNomenclaturalReferences(){
172
		
173
		List<ReferenceBase> references = getSession().createQuery("select t.nomenclaturalReference from TaxonNameBase t").list();
174
		return references;
175
	}
176
}
    (1-1/1)