View Javadoc

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 }