Project

General

Profile

Download (4.89 KB) Statistics
| Branch: | Revision:
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.io.algaterra;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14

    
15
import org.apache.log4j.Logger;
16

    
17
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase;
18
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
19
import eu.etaxonomy.cdm.model.common.CdmBase;
20
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
21
import eu.etaxonomy.cdm.model.common.Language;
22
import eu.etaxonomy.cdm.model.description.DescriptionBase;
23
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
24
import eu.etaxonomy.cdm.model.description.Feature;
25
import eu.etaxonomy.cdm.model.description.TextData;
26
import eu.etaxonomy.cdm.model.media.Media;
27
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
28
import eu.etaxonomy.cdm.model.reference.Reference;
29
import eu.etaxonomy.cdm.model.taxon.Taxon;
30

    
31
/**
32
 * @author a.mueller
33
 * @created 12.09.2012
34
 */
35
public abstract class AlgaTerraImageImportBase extends BerlinModelImportBase{
36
	public AlgaTerraImageImportBase(String tableName, String pluralString) {
37
		super(tableName, pluralString);
38
	}
39

    
40

    
41

    
42

    
43
	private static final Logger logger = Logger.getLogger(AlgaTerraImageImportBase.class);
44

    
45
	public static final String TERMS_NAMESPACE = "ALGA_TERRA_TERMS";
46

    
47
	private static final String ALGAE_URL_BASE = "http://mediastorage.bgbm.org/fsi/server?type=image&profile=jpeg&quality=100&source=Algaterra%2FAlgae%2F";
48
	private static final String SITE_URL_BASE =  "http://mediastorage.bgbm.org/fsi/server?type=image&profile=jpeg&quality=100&source=Algaterra%2FSites%2F";
49
	private static final String VOUCHER_URL_BASE =  "http://mediastorage.bgbm.org/fsi/server?type=image&profile=jpeg&quality=100&source=Algaterra%2FVoucher%2F";
50

    
51
	
52
	protected enum PathType {
53
		Image (ALGAE_URL_BASE),
54
		Site (SITE_URL_BASE),
55
		Voucher (VOUCHER_URL_BASE)
56
		;
57
		
58
		String urlBase;
59
		private PathType(String urlBase){
60
			this.urlBase = urlBase;
61
		}
62
	}
63
	
64
	
65
	/**
66
	 * Creates a media object and 
67
	 * @param rs
68
	 * @param derivedUnit
69
	 * @param state
70
	 * @param partitioner
71
	 * @return
72
	 * @throws SQLException
73
	 */
74
	protected Media handleSingleImage(ResultSet rs, IdentifiableEntity<?> identifiableEntity, AlgaTerraImportState state, ResultSetPartitioner partitioner, PathType pathType) throws SQLException {
75
		
76
		try {
77
			String figurePhrase = rs.getString("FigurePhrase");
78
//			String filePath = rs.getString("filePath");
79
			String fileName = rs.getString("fileName");
80
			//TODO  publishFlag
81
			Boolean publishFlag = rs.getBoolean("RestrictedFlag");
82
			
83
			
84
			if (isBlank(fileName)){
85
				throw new RuntimeException("FileName is missing");
86
			}
87
//			if (isBlank(filePath)){
88
//				filePath = state.getAlgaTerraConfigurator().getImageBaseUrl();
89
//			}
90
			
91
			
92
			//handle thumbnail
93
			String filePath = pathType.urlBase;
94
			String fullPath = filePath + fileName;
95
			
96
			//
97
			Media media = getImageMedia(fullPath, READ_MEDIA_DATA);
98
			
99
			if (media == null){
100
				throw new RuntimeException ("Media not found for " +fullPath);
101
			}
102
			if (isNotBlank(figurePhrase)){
103
				media.putTitle(Language.DEFAULT(), figurePhrase);
104
			}
105
			
106
			//TODO ref
107
			Reference<?> ref = null;
108
			if (identifiableEntity != null){
109
				DescriptionBase<?> desc = getDescription(identifiableEntity, ref, IMAGE_GALLERY, CREATE);
110
				TextData textData = null;
111
				for (DescriptionElementBase descEl : desc.getElements()){
112
					if (descEl.isInstanceOf(TextData.class)){
113
						textData = CdmBase.deproxy(descEl, TextData.class);
114
					}
115
				}
116
				if (textData == null){
117
					textData = TextData.NewInstance(Feature.IMAGE());
118
				}
119
				desc.addElement(textData);
120
				textData.addMedia(media);
121
			}else{
122
				logger.warn("Identifiable Entity is null. Can't add media ");
123
			}
124
			
125
			//notes
126
			
127
			//TODO restrictedFlag
128
			
129
			//TODO id, created for 
130
			//    	this.doIdCreatedUpdatedNotes(state, descriptionElement, rs, id, namespace);
131
		
132
			return media;
133
		} catch (Exception e) {
134
			throw new RuntimeException(e);
135
		}
136
    	
137
	}
138

    
139

    
140

    
141

    
142
	private DescriptionBase<?> getDescription(IdentifiableEntity identifiableEntity, Reference<?> ref,
143
			boolean imageGallery, boolean create) {
144
		if (identifiableEntity.isInstanceOf(SpecimenOrObservationBase.class)){
145
			return getSpecimenDescription(CdmBase.deproxy(identifiableEntity, SpecimenOrObservationBase.class), ref, imageGallery, create);
146
		}else if (identifiableEntity.isInstanceOf(Taxon.class)){
147
			return getTaxonDescription(CdmBase.deproxy(identifiableEntity, Taxon.class), ref, imageGallery, create);
148
		}else{
149
			logger.warn("Unsupported IdentifiableEntity type: " +  identifiableEntity.getClass());
150
			return null;
151
		}
152
	}	
153
}
(5-5/15)