Project

General

Profile

Download (4.64 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.remote.service;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import java.util.Random;
6
import java.util.Set;
7
import java.util.UUID;
8

    
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.stereotype.Component;
11
import org.springframework.transaction.annotation.Transactional;
12

    
13
import eu.etaxonomy.cdm.model.taxon.Synonym;
14
import eu.etaxonomy.cdm.model.taxon.Taxon;
15
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
16
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;
17
import eu.etaxonomy.cdm.remote.dto.NameSTO;
18
import eu.etaxonomy.cdm.remote.dto.NameTO;
19
import eu.etaxonomy.cdm.remote.dto.ReferenceSTO;
20
import eu.etaxonomy.cdm.remote.dto.ReferenceTO;
21
import eu.etaxonomy.cdm.remote.dto.ReferencedEntityBaseSTO;
22
import eu.etaxonomy.cdm.remote.dto.ResultSetPageSTO;
23
import eu.etaxonomy.cdm.remote.dto.TagEnum;
24
import eu.etaxonomy.cdm.remote.dto.TaggedText;
25
import eu.etaxonomy.cdm.remote.dto.TaxonSTO;
26
import eu.etaxonomy.cdm.remote.dto.TaxonTO;
27
import eu.etaxonomy.cdm.remote.dto.TreeNode;
28
import eu.etaxonomy.cdm.remote.dto.assembler.NameAssembler;
29
import eu.etaxonomy.cdm.remote.dto.assembler.TaxonAssembler;
30

    
31
@Component
32
@Transactional(readOnly = true)
33
public class CdmServiceImpl implements ICdmService {
34

    
35
	@Autowired
36
	private NameAssembler nameAssembler;	
37
	@Autowired
38
	private TaxonAssembler taxonAssembler;
39
	@Autowired
40
	private ITaxonDao taxonDAO;
41

    
42
	
43
	/**
44
	 * find matching taxonbase instance and take care of errorhandling for springmvc
45
	 * @param uuid
46
	 * @return
47
	 * @throws CdmObjectNonExisting 
48
	 */
49
	private TaxonBase getCdmTaxonBase(UUID uuid) throws CdmObjectNonExisting{
50
		TaxonBase tb = taxonDAO.findByUuid(uuid);
51
		if (tb==null){
52
			throw new CdmObjectNonExisting(uuid, TaxonBase.class);
53
		}
54
		return tb;
55
	}
56
	private Taxon getCdmTaxon(UUID uuid) throws CdmObjectNonExisting{
57
		Taxon t = null;
58
		try {
59
			t = (Taxon) getCdmTaxonBase(uuid);
60
		} catch (ClassCastException e) {
61
			throw new CdmObjectNonExisting(uuid, Taxon.class);
62
		}
63
		return t;
64
	}
65
	
66
	public NameTO getName(UUID uuid) throws CdmObjectNonExisting{
67
		// FIXME: use real name DAO not taxon DAO!
68
		NameTO n = nameAssembler.getTO(getCdmTaxonBase(uuid).getName());
69
		return n;
70
	}
71
	
72
	public TaxonTO getTaxon(UUID uuid) throws CdmObjectNonExisting{
73
		TaxonTO t = taxonAssembler.getTO(getCdmTaxonBase(uuid));
74
		return t;
75
	}
76
	
77
	public Class whatis(UUID uuid) throws CdmObjectNonExisting{
78
		return this.getClass();
79
	}
80

    
81
	public ResultSetPageSTO<TaxonSTO> findTaxa(String q, UUID sec,Set<UUID> higherTaxa, boolean matchAnywhere, boolean onlyAccepted, int page, int pagesize) {
82
		Random random = new Random();
83
		ResultSetPageSTO<TaxonSTO> rs = new ResultSetPageSTO<TaxonSTO>();
84
		rs.setPageSize(pagesize);
85
		rs.setPageNumber(page);
86
		// random results
87
		int x = random.nextInt(30);
88
		rs.setTotalResultsCount(x);
89
		for (int i=0; i<rs.getResultsOnPage(); i++){
90
			TaxonSTO tx = taxonAssembler.getRandom();
91
			rs.getResults().add(tx);
92
		}
93
		// result set metadata
94
		return rs;
95
	}
96

    
97
	public ResultSetPageSTO<TaxonSTO> getAcceptedTaxon(UUID uuid) throws CdmObjectNonExisting {
98
		TaxonBase tb = getCdmTaxonBase(uuid);
99
		ResultSetPageSTO<TaxonSTO> rs = new ResultSetPageSTO<TaxonSTO>();
100
		rs.setPageNumber(1);
101
		rs.setPageSize(25);
102
		if (tb.getClass().equals(Taxon.class)){
103
			TaxonSTO t = taxonAssembler.getSTO(tb);
104
			rs.addResultToFirstPage(t);
105
		}else{
106
			Synonym s = (Synonym)tb;
107
			Set<Taxon> taxa = s.getAcceptedTaxa();
108
			for (Taxon tx: taxa){
109
				TaxonSTO t = taxonAssembler.getSTO(tx);
110
				rs.addResultToFirstPage(t);
111
			}
112
		}
113
		return rs;
114
	}
115

    
116
	public Set<ReferenceSTO> getAllSecReferences() {
117
		// TODO Auto-generated method stub
118
		return null;
119
	}
120

    
121
	public List<TreeNode> getChildrenTaxa(UUID uuid) throws CdmObjectNonExisting {
122
		ArrayList<TreeNode> result = new ArrayList<TreeNode>();
123
		Taxon tx = getCdmTaxon(uuid);
124
		for (Taxon t : tx.getTaxonomicChildren()){
125
			result.add(taxonAssembler.getTreeNode(t));
126
		}
127
		return result;
128
	}
129

    
130
	public List<TreeNode> getParentTaxa(UUID uuid) throws CdmObjectNonExisting {
131
		ArrayList<TreeNode> result = new ArrayList<TreeNode>();
132
		Taxon tx = getCdmTaxon(uuid);
133
		result.add(taxonAssembler.getTreeNode(tx));
134
		while(tx.getTaxonomicParent() != null){
135
			Taxon parent = tx.getTaxonomicParent();
136
			result.add(taxonAssembler.getTreeNode(parent));
137
			tx=parent;
138
		}
139
		return result;
140
	}
141

    
142
	public ReferenceTO getReference(UUID uuid) {
143
		// TODO Auto-generated method stub
144
		return null;
145
	}
146

    
147
	public List<TreeNode> getRootTaxa(UUID uuid) {
148
		List<Taxon> taxa = taxonDAO.getRootTaxa(null);
149
		return taxonAssembler.getTreeNodeList(taxa.toArray(new Taxon[0]));
150
	}
151

    
152
	public Set<ReferencedEntityBaseSTO> getTypes(UUID uuid) {
153
		// TODO Auto-generated method stub
154
		return null;
155
	}
156

    
157

    
158

    
159
}
(2-2/5)