Merge branch 'develop' of ssh://dev.e-taxonomy.eu/var/git/cdmlib into develop
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / LocationServiceImpl.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.api.service;
11
12 import java.util.ArrayList;
13 import java.util.Iterator;
14 import java.util.List;
15 import java.util.UUID;
16
17 import org.apache.log4j.Logger;
18 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.stereotype.Service;
20 import org.springframework.transaction.annotation.Transactional;
21
22 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
23 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
24 import eu.etaxonomy.cdm.model.location.NamedArea;
25 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
26 import eu.etaxonomy.cdm.model.location.NamedAreaType;
27 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
28 import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
29 import eu.etaxonomy.cdm.model.term.TermVocabulary;
30 import eu.etaxonomy.cdm.persistence.dao.term.IDefinedTermDao;
31 import eu.etaxonomy.cdm.persistence.dao.term.IOrderedTermVocabularyDao;
32 import eu.etaxonomy.cdm.persistence.dao.term.ITermVocabularyDao;
33
34 /**
35 * Quick and dirty implementation of a location service as needed by the editor.
36 *
37 * NOTE: Current implementation does not support the IService methods like {@link #save(DefinedTermBase)}
38 * as no base dao is loaded by autowiring.
39 *
40 * @author n.hoffman
41 * @since 08.04.2009
42 */
43 @Service
44 @Transactional(readOnly = true)
45 public class LocationServiceImpl extends ServiceBase<DefinedTermBase,IDefinedTermDao> implements ILocationService {
46
47 @SuppressWarnings("unused")
48 private static final Logger logger = Logger.getLogger(LocationServiceImpl.class);
49
50 @Autowired
51 protected ITermVocabularyDao vocabularyDao;
52
53 @Autowired
54 protected IDefinedTermDao definedTermDao;
55
56 @Autowired
57 protected IOrderedTermVocabularyDao orderedVocabularyDao;
58
59 /* (non-Javadoc)
60 * @see eu.etaxonomy.cdm.api.service.ServiceBase#setDao(eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao)
61 */
62 @Override
63 protected void setDao(IDefinedTermDao dao) {
64 this.dao = dao;
65 }
66
67
68 /**
69 * (non-Javadoc)
70 * @see eu.etaxonomy.cdm.api.service.ILocationService#getPresenceTermVocabulary()
71 * FIXME Candidate for harmonization
72 * is this method a duplicate of termService.getVocabulary(VocabularyEnum.PresenceTerm)
73 */
74 @Override
75 public OrderedTermVocabulary<PresenceAbsenceTerm> getPresenceAbsenceTermVocabulary() {
76 String uuidString = "adbbbe15-c4d3-47b7-80a8-c7d104e53a05";
77 UUID uuid = UUID.fromString(uuidString);
78 OrderedTermVocabulary<PresenceAbsenceTerm> presenceTermVocabulary =
79 (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);
80 return presenceTermVocabulary;
81 }
82
83 /* (non-Javadoc)
84 * @see eu.etaxonomy.cdm.api.service.ILocationService#getNamedAreaVocabularyTypes()
85 */
86 @Override
87 public List<NamedAreaVocabularyType> getNamedAreaVocabularyTypes() {
88 List<NamedAreaVocabularyType> result = new ArrayList<NamedAreaVocabularyType>(3);
89 result.add(NamedAreaVocabularyType.TDWG_AREA);
90 result.add(NamedAreaVocabularyType.COUNTRY);
91 result.add(NamedAreaVocabularyType.WATERBODY);
92 result.add(NamedAreaVocabularyType.CONTINENT);
93 return result;
94 }
95
96 /* (non-Javadoc)
97 * @see eu.etaxonomy.cdm.api.service.ILocationService#getNamedAreas(java.lang.Object)
98 */
99 @Override
100 public OrderedTermVocabulary<NamedArea> getNamedAreaVocabulary(NamedAreaVocabularyType vocabularyType) {
101
102 UUID namedAreaVocabularyUuid = null;
103
104 if(vocabularyType == NamedAreaVocabularyType.TDWG_AREA){
105 namedAreaVocabularyUuid = UUID.fromString("1fb40504-d1d7-44b0-9731-374fbe6cac77");
106 }
107 if(vocabularyType == NamedAreaVocabularyType.CONTINENT){
108 namedAreaVocabularyUuid = UUID.fromString("e72cbcb6-58f8-4201-9774-15d0c6abc128");
109 }
110 if(vocabularyType == NamedAreaVocabularyType.COUNTRY){
111 namedAreaVocabularyUuid = UUID.fromString("006b1870-7347-4624-990f-e5ed78484a1a");
112 }
113 if(vocabularyType == NamedAreaVocabularyType.WATERBODY){
114 namedAreaVocabularyUuid = UUID.fromString("35a62b25-f541-4f12-a7c7-17d90dec3e03");
115 }
116 return (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(namedAreaVocabularyUuid);
117 }
118
119 /* (non-Javadoc)
120 * @see eu.etaxonomy.cdm.api.service.ILocationService#getNamedAreaLevelVocabulary()
121 */
122 @Override
123 public OrderedTermVocabulary<NamedAreaLevel> getNamedAreaLevelVocabulary() {
124 // TODO return namedAreaLevel filtered by NamedAreaVocabularyType
125 String uuidString = "49034253-27c8-4219-97e8-f8d987d3d122";
126 UUID uuid = UUID.fromString(uuidString);
127 OrderedTermVocabulary<NamedAreaLevel> namedAreaLevelVocabulary =
128 (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);
129 return namedAreaLevelVocabulary;
130 }
131
132 /**
133 * (non-Javadoc)
134 * @see eu.etaxonomy.cdm.api.service.ILocationService#getNamedAreaTypeVocabulary()
135 * FIXME Candidate for harmonization
136 * is this method a duplicate of termService.getVocabulary(VocabularyEnum.NamedAreaType)
137 */
138 @Override
139 public TermVocabulary<NamedAreaType> getNamedAreaTypeVocabulary() {
140 String uuidString = "e51d52d6-965b-4f7d-900f-4ba9c6f5dd33";
141 UUID uuid = UUID.fromString(uuidString);
142 TermVocabulary<NamedAreaType> namedAreaTypeVocabulary =
143 (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);
144 return namedAreaTypeVocabulary;
145 }
146
147 @Override
148 public List<NamedArea> getTopLevelNamedAreasByVocabularyType(NamedAreaVocabularyType vocabularyType){
149
150 OrderedTermVocabulary<NamedArea> vocabulary = getNamedAreaVocabulary(vocabularyType);
151
152 List<NamedArea> topLevelTerms = new ArrayList<>();
153
154 // for(NamedArea area : vocabulary){
155 Iterator<NamedArea> it = vocabulary.getTerms().iterator();
156 while(it.hasNext()){
157
158 NamedArea area = HibernateProxyHelper.deproxy(it.next(), NamedArea.class);
159 if(area.getPartOfWorkaround() == null){
160 topLevelTerms.add(area);
161 }
162 }
163
164 return topLevelTerms;
165 }
166
167
168
169 }