Project

General

Profile

« Previous | Next » 

Revision e133b83b

Added by Andreas Müller over 15 years ago

model change for references (publishers) and taxon status

View differences:

cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelReferenceImport.java
25 25
import static eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES.NOMENCLATURAL;
26 26
import static eu.etaxonomy.cdm.io.common.ImportHelper.OBLIGATORY;
27 27
import static eu.etaxonomy.cdm.io.common.ImportHelper.OVERWRITE;
28
import static eu.etaxonomy.cdm.io.common.ImportHelper.NO_OVERWRITE;
28 29

  
30
import java.lang.reflect.Constructor;
31
import java.lang.reflect.InvocationTargetException;
29 32
import java.sql.ResultSet;
30 33
import java.sql.SQLException;
31 34
import java.util.ArrayList;
......
42 45
import org.springframework.stereotype.Component;
43 46

  
44 47
import eu.etaxonomy.cdm.common.CdmUtils;
45
import eu.etaxonomy.cdm.io.common.CdmIoMapperBase;
48
import eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase;
49
import eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase;
46 50
import eu.etaxonomy.cdm.io.common.CdmIoMapping;
47 51
import eu.etaxonomy.cdm.io.common.ICdmIO;
48 52
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
......
63 67
import eu.etaxonomy.cdm.model.reference.Journal;
64 68
import eu.etaxonomy.cdm.model.reference.PrintSeries;
65 69
import eu.etaxonomy.cdm.model.reference.Proceedings;
70
import eu.etaxonomy.cdm.model.reference.PublicationBase;
71
import eu.etaxonomy.cdm.model.reference.Publisher;
66 72
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
67 73
import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
68 74
import eu.etaxonomy.cdm.model.reference.WebPage;
......
83 89
	}
84 90
	
85 91
	
86
	protected static CdmIoMapperBase[] classMappers = new CdmIoMapperBase[]{
92
	protected static CdmAttributeMapperBase[] classMappers = new CdmAttributeMapperBase[]{
87 93
		new CdmStringMapper("edition", "edition"),
88 94
		new CdmStringMapper("volume", "volume"),
89
		new CdmStringMapper("publicationTown", "placePublished"),
90
		new CdmStringMapper("publisher", "publisher"),
95
		new CdmOneToManyMapper<PublicationBase, Publisher>(
96
				PublicationBase.class, 
97
				Publisher.class,
98
				"publisher",
99
				new CdmSingleAttributeMapperBase[]{
100
					new CdmStringMapper("publisher", "publisher"),
101
					new CdmStringMapper("publicationTown", "placePublished")
102
				}),
91 103
		new CdmStringMapper("isbn", "isbn"),
92 104
		new CdmStringMapper("pageString", "pages"),
93 105
		new CdmStringMapper("series", "series"),
......
157 169
		result.addAll(Arrays.asList(createdAndNotesAttributes));
158 170
		result.addAll(Arrays.asList(operationalAttributes));
159 171
		CdmIoMapping mapping = new CdmIoMapping();
160
		for (CdmIoMapperBase mapper : classMappers){
172
		for (CdmAttributeMapperBase mapper : classMappers){
161 173
			mapping.addMapper(mapper);
162 174
		}
163 175
		result.addAll(mapping.getSourceAttributes());
......
749 761
	}
750 762

  
751 763
	
752
	private boolean makeStandardMapper(Map<String, Object> valueMap, StrictReferenceBase ref, Set<String> omitAttributes){
764
	private boolean makeStandardMapper(Map<String, Object> valueMap, CdmBase cdmBase, Set<String> omitAttributes){
765
		boolean result = true;	
766
		for (CdmAttributeMapperBase mapper : classMappers){
767
			if (mapper instanceof CdmSingleAttributeMapperBase){
768
				result &= makeStandardSingleMapper(valueMap, cdmBase, (CdmSingleAttributeMapperBase)mapper, omitAttributes);
769
			}else if (mapper instanceof CdmOneToManyMapper){
770
				result &= makeMultipleValueAddMapper(valueMap, cdmBase, (CdmOneToManyMapper)mapper, omitAttributes);
771
			}else{
772
				logger.error("Unknown mapper type");
773
				result = false;
774
			}
775
		}
776
		return result;
777
	}
778
	
779
	private boolean makeStandardSingleMapper(Map<String, Object> valueMap, CdmBase cdmBase, CdmSingleAttributeMapperBase mapper, Set<String> omitAttributes){
753 780
		if (omitAttributes == null){
754 781
			omitAttributes = new HashSet<String>();
755 782
		}
756
		boolean result = true;	
757
		for (CdmIoMapperBase mapper : classMappers){
758
			String sourceAttribute = mapper.getSourceAttribute().toLowerCase();
759
			Object value = valueMap.get(sourceAttribute);
760
			if (value != null){
761
				String destinationAttribute = mapper.getDestinationAttribute();
762
				if (! omitAttributes.contains(destinationAttribute)){
763
					result &= ImportHelper.addValue(value, ref, destinationAttribute, mapper.getTypeClass(), OVERWRITE, OBLIGATORY);
764
				}
783
		boolean result = true;
784
		String sourceAttribute = mapper.getSourceAttribute().toLowerCase();
785
		Object value = valueMap.get(sourceAttribute);
786
		if (value != null){
787
			String destinationAttribute = mapper.getDestinationAttribute();
788
			if (! omitAttributes.contains(destinationAttribute)){
789
				result &= ImportHelper.addValue(value, cdmBase, destinationAttribute, mapper.getTypeClass(), OVERWRITE, OBLIGATORY);
765 790
			}
766 791
		}
767
		return true;
792
		return result;
768 793
	}
794

  
795
	
796
	private boolean makeMultipleValueAddMapper(Map<String, Object> valueMap, CdmBase cdmBase, CdmOneToManyMapper<CdmBase, CdmBase> mapper, Set<String> omitAttributes){
797
		if (omitAttributes == null){
798
			omitAttributes = new HashSet<String>();
799
		}
800
		boolean result = true;
801
		String destinationAttribute = mapper.getSingleAttributeName();
802
		List<Object> sourceValues = new ArrayList<Object>();
803
		List<Class> classes = new ArrayList<Class>();
804
		for (CdmSingleAttributeMapperBase singleMapper : mapper.getSingleMappers()){
805
			String sourceAttribute = singleMapper.getSourceAttribute();
806
			Object value = valueMap.get(sourceAttribute);
807
			sourceValues.add(value);
808
			Class clazz = singleMapper.getTypeClass();
809
			classes.add(clazz);
810
		}
811
		
812
		result &= ImportHelper.addMultipleValues(sourceValues, cdmBase, destinationAttribute, classes, NO_OVERWRITE, OBLIGATORY);
813
		if (cdmBase instanceof PublicationBase){
814
			PublicationBase pub = ((PublicationBase)cdmBase);
815
			pub.addPublisher("A new publisher for " + pub.getTitleCache(), "A nice place");
816
		}
817
		return result;
818
	}
819

  
769 820
	
770 821
	private static TeamOrPersonBase getAuthorTeam(String authorString, TeamOrPersonBase nomAuthor, boolean preferNomeclaturalAuthor){
771 822
		TeamOrPersonBase result;

Also available in: Unified diff