1 package org.cateproject.controller.flow.action;
2
3 import static org.junit.Assert.assertFalse;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertTrue;
6
7 import java.io.File;
8 import java.util.ArrayList;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.Set;
12
13 import org.cateproject.controller.editor.PartialPropertyEditor;
14 import org.cateproject.controller.flow.action.reference.UploadAction;
15 import org.cateproject.controller.flow.action.upload.AbstractMatrixHeader;
16 import org.cateproject.controller.flow.action.upload.HeaderPath;
17 import org.cateproject.controller.flow.action.upload.MatrixHeader;
18 import org.cateproject.controller.flow.action.upload.ParsedMatrix;
19 import org.easymock.EasyMock;
20 import org.junit.Before;
21 import org.junit.BeforeClass;
22 import org.junit.Test;
23 import org.springframework.beans.BeanWrapperImpl;
24 import org.springframework.beans.MutablePropertyValues;
25 import org.springframework.binding.convert.service.DefaultConversionService;
26 import org.springframework.binding.expression.beanwrapper.BeanWrapperExpression;
27 import org.springframework.binding.message.DefaultMessageContext;
28 import org.springframework.core.convert.converter.Converter;
29 import org.springframework.core.convert.support.GenericConversionService;
30 import org.springframework.validation.DataBinder;
31
32 import eu.etaxonomy.cdm.api.service.ITermService;
33 import eu.etaxonomy.cdm.model.agent.AgentBase;
34 import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;
35 import eu.etaxonomy.cdm.model.agent.Person;
36 import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
37 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
38 import eu.etaxonomy.cdm.model.common.Language;
39 import eu.etaxonomy.cdm.model.media.Media;
40 import eu.etaxonomy.cdm.model.media.Rights;
41 import eu.etaxonomy.cdm.model.media.RightsTerm;
42 import eu.etaxonomy.cdm.model.name.Rank;
43 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
44 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
45 import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;
46 import eu.etaxonomy.cdm.model.occurrence.Specimen;
47 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
48 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
49 import eu.etaxonomy.cdm.model.reference.Journal;
50 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
51
52 public class UploadActionTest {
53 private GenericConversionService conversionService;
54
55 @Before
56 public void setUp() {
57 conversionService = new GenericConversionService();
58 conversionService.addConverter(new PartialPropertyEditor());
59 conversionService.addConverter(new MockConverter<ReferenceBase>() {
60 public ReferenceBase convert(String text) {
61 Journal journal = Journal.NewInstance();
62 journal.setTitle("Rodriguésia");
63 journal.setTitleCache("Rodriguésia",true);
64 return journal;
65 }
66 });
67 conversionService.addConverter(new MockConverter<INomenclaturalReference>() {
68 public INomenclaturalReference convert(String text) {
69 Journal journal = Journal.NewInstance();
70 journal.setTitle("Rodriguésia");
71 journal.setTitleCache("Rodriguésia",true);
72 return journal;
73 }
74 });
75 conversionService.addConverter(new MockConverter<Rank>() {
76 public Rank convert(String text) {
77 return Rank.SPECIES();
78 }
79 });
80
81 conversionService.addConverter(new MockConverter<INomenclaturalAuthor>() {
82 public INomenclaturalAuthor convert(String text) {
83 Person person = Person.NewInstance();
84 person.setTitleCache("Tom Croat",true);
85 person.setNomenclaturalTitle("Croat");
86 return person;
87 }
88 });
89
90 conversionService.addConverter(new MockConverter<Journal>() {
91 public Journal convert(String text) {
92 Journal journal = Journal.NewInstance();
93 journal.setTitle("Rodriguésia");
94 journal.setTitleCache("Rodriguésia",true);
95 return journal;
96 }
97 });
98
99 conversionService.addConverter(new MockConverter<SpecimenOrObservationBase>() {
100 public SpecimenOrObservationBase convert(String text) {
101 Specimen specimen = Specimen.NewInstance();
102 specimen.setTitleCache("[MO] Betsy Fuerstein in Croat 84927, Ecuador",true);
103 return specimen;
104 }
105 });
106 conversionService.addConverter(new MockConverter<SpecimenTypeDesignationStatus>() {
107 public SpecimenTypeDesignationStatus convert(String text) {
108 SpecimenTypeDesignationStatus holotype = SpecimenTypeDesignationStatus.HOLOTYPE();
109 return holotype;
110 }
111 });
112 conversionService.addConverter(new MockConverter<RightsTerm>() {
113 public RightsTerm convert(String text) {
114 return RightsTerm.COPYRIGHT();
115 }
116 });
117 conversionService.addConverter(new MockConverter<Language>() {
118 public Language convert(String text) {
119 Language language = Language.ENGLISH();
120 return language;
121 }
122 });
123 conversionService.addConverter(new MockConverter<AgentBase>() {
124 public AgentBase convert(String text) {
125 Person person = Person.NewInstance();
126 person.setTitleCache("Tom Croat",true);
127 person.setNomenclaturalTitle("Croat");
128 return person;
129 }
130 });
131 }
132
133 @BeforeClass
134 public static void beforeClass() {
135 DefaultTermInitializer termInitializer = new DefaultTermInitializer();
136 termInitializer.initialize();
137 }
138
139 @Test
140 public void testBindMatrix() throws Exception {
141
142 UploadAction uploadAction = new UploadAction();
143 uploadAction.setConversionService(conversionService);
144
145 ParsedMatrix parsedMatrix = uploadAction.constructMatrixFromFile(new File("./src/test/resources/org/cateproject/controller/upload/references.xls"));
146
147 uploadAction.bindMatrix(parsedMatrix, new DefaultMessageContext());
148
149 uploadAction.updateTitleCache(parsedMatrix);
150 System.out.println(((ReferenceBase)parsedMatrix.getObjects().get(0)).getTitleCache() );
151
152 for(AbstractMatrixHeader header : (List<AbstractMatrixHeader>)parsedMatrix.getHeaders()) {
153 assertFalse(header.getPaths().length == 0);
154 for(HeaderPath path : header.getPaths()){
155 System.out.println(path.getClazz() + " " + path.getProperty());
156 }
157 }
158
159 }
160
161 @Test
162 public void testNameMatrix() throws Exception {
163
164 org.cateproject.controller.flow.action.name.UploadAction uploadAction = new org.cateproject.controller.flow.action.name.UploadAction();
165 uploadAction.setConversionService(conversionService);
166 ITermService termService = EasyMock.createMock(ITermService.class);
167 uploadAction.setTermService(termService);
168
169 EasyMock.expect(termService.list(EasyMock.eq(Rank.class), (Integer)EasyMock.isNull(), (Integer)EasyMock.isNull(), EasyMock.isA(List.class), (List)EasyMock.isNull())).andReturn(new ArrayList<DefinedTermBase>());
170 EasyMock.expect(termService.list(EasyMock.eq(TypeDesignationStatusBase.class), (Integer)EasyMock.isNull(), (Integer)EasyMock.isNull(), EasyMock.isA(List.class), (List)EasyMock.isNull())).andReturn(new ArrayList<DefinedTermBase>());
171 EasyMock.replay(termService);
172
173 ParsedMatrix parsedMatrix = uploadAction.constructMatrixFromFile(new File("./src/test/resources/org/cateproject/controller/upload/names-2.xls"));
174
175 assertTrue(uploadAction.bindMatrix(parsedMatrix, new DefaultMessageContext()));
176 assertTrue(uploadAction.updateTitleCache(parsedMatrix));
177
178 System.out.println(((TaxonNameBase)parsedMatrix.getObjects().get(0)).getTitleCache());
179
180 for(AbstractMatrixHeader header : (List<AbstractMatrixHeader>)parsedMatrix.getHeaders()) {
181 System.out.println(header.getPath(""));
182 assertNotNull(header);
183 assertFalse(header.getPaths().length == 0);
184 MatrixHeader matrixHeader = header.getHeaderForObject((TaxonNameBase)parsedMatrix.getObjects().get(0),conversionService);
185 if(matrixHeader != null) {
186 System.out.println(header.getType() + " " + matrixHeader.getType());
187 for(HeaderPath path : header.getPaths()){
188 System.out.println(path.getClazz() + " " + path.getProperty() + " " + path.getPropertyType());
189 }
190 }
191 }
192
193 }
194
195 @Test
196 public void testBindMatrixWithLocalRefs() throws Exception {
197
198 UploadAction uploadAction = new UploadAction();
199 uploadAction.setConversionService(conversionService);
200
201 ParsedMatrix parsedMatrix = uploadAction.constructMatrixFromFile(new File("./src/test/resources/org/cateproject/controller/upload/references-2.xls"));
202
203 uploadAction.bindMatrix(parsedMatrix, new DefaultMessageContext());
204
205 uploadAction.updateTitleCache(parsedMatrix);
206 for(Object o : parsedMatrix.getObjects()) {
207 System.out.println(((ReferenceBase)o).getTitleCache() );
208 }
209 }
210
211 @Test
212 public void testBindMatrixWithEmptyRows() throws Exception {
213 org.cateproject.controller.flow.action.media.UploadAction uploadAction = new org.cateproject.controller.flow.action.media.UploadAction();
214 uploadAction.setConversionService(conversionService);
215
216 ParsedMatrix parsedMatrix = uploadAction.constructMatrixFromFile(new File("./src/test/resources/org/cateproject/controller/upload/empty_rows.xls"));
217
218 uploadAction.bindMatrix(parsedMatrix, new DefaultMessageContext());
219
220 uploadAction.updateTitleCache(parsedMatrix);
221 for(Object o : parsedMatrix.getObjects()) {
222 System.out.println(((Media)o).getTitleCache() );
223 }
224 }
225
226 @Test
227 public void testBindMatrixWithMap() throws Exception {
228 org.cateproject.controller.flow.action.media.UploadAction uploadAction = new org.cateproject.controller.flow.action.media.UploadAction();
229 ITermService termService = EasyMock.createMock(ITermService.class);
230 EasyMock.expect(termService.list(EasyMock.eq(Language.class), (Integer)EasyMock.isNull(),(Integer)EasyMock.isNull(), EasyMock.isA(List.class),(List)EasyMock.isNull())).andReturn(new ArrayList<DefinedTermBase>());
231 EasyMock.expect(termService.list(EasyMock.eq(RightsTerm.class), (Integer)EasyMock.isNull(),(Integer)EasyMock.isNull(), EasyMock.isA(List.class),(List)EasyMock.isNull())).andReturn(new ArrayList<DefinedTermBase>());
232 EasyMock.replay(termService);
233 uploadAction.setConversionService(conversionService);
234 uploadAction.setTermService(termService);
235
236 ParsedMatrix parsedMatrix = uploadAction.constructMatrixFromFile(new File("./src/test/resources/org/cateproject/controller/upload/media.xls"));
237
238 uploadAction.bindMatrix(parsedMatrix, new DefaultMessageContext());
239
240 uploadAction.updateTitleCache(parsedMatrix);
241 for(Object o : parsedMatrix.getObjects()) {
242 System.out.println(((Media)o).getTitleCache() + " " + ((Media)o).getTitle().isEmpty());
243 for(Language language : ((Media)o).getTitle().keySet()) {
244 System.out.println(language + " " + ((Media)o).getTitle().get(language).getText()+ " " + ((Media)o).getTitle().get(language).getLanguage());
245 }
246 }
247 }
248
249 public class MockConverter<T> implements Converter<String,T> {
250 public T convert(String text) {
251 return null;
252 }
253 }
254 }