Project

General

Profile

Download (6.64 KB) Statistics
| Branch: | Revision:
1
/**
2
* Copyright (C) 2017 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
package eu.etaxonomy.cdm.io.greece;
10

    
11
import java.io.File;
12
import java.io.IOException;
13
import java.net.URI;
14
import java.util.ArrayList;
15

    
16
import org.apache.http.HttpException;
17
import org.apache.log4j.Logger;
18
import org.apache.sanselan.ImageReadException;
19
import org.apache.sanselan.Sanselan;
20
import org.apache.sanselan.common.IImageMetadata;
21
import org.apache.sanselan.common.ImageMetadata.Item;
22
import org.joda.time.DateTime;
23
import org.joda.time.DateTimeZone;
24
import org.joda.time.format.DateTimeFormat;
25
import org.joda.time.format.DateTimeFormatter;
26

    
27
import eu.etaxonomy.cdm.common.media.ImageInfo;
28
import eu.etaxonomy.cdm.io.common.utils.ImportDeduplicationHelper;
29
import eu.etaxonomy.cdm.model.agent.AgentBase;
30
import eu.etaxonomy.cdm.model.common.TimePeriod;
31
import eu.etaxonomy.cdm.model.description.TaxonDescription;
32
import eu.etaxonomy.cdm.model.description.TextData;
33
import eu.etaxonomy.cdm.model.media.ImageFile;
34
import eu.etaxonomy.cdm.model.media.Media;
35
import eu.etaxonomy.cdm.model.taxon.Taxon;
36

    
37
/**
38
 * @author a.mueller
39
 * @since 13.05.2017
40
 *
41
 */
42
public class ImageImportTest {
43

    
44
    @SuppressWarnings("unused")
45
    private static final Logger logger = Logger.getLogger(FloraHellenicaImageImport.class);
46

    
47
    private static final String BASE_URL = "https://media.e-taxonomy.eu/flora-greece/";
48
    private static final String IMAGE_FOLDER = "////BGBM-PESIHPC/Greece/thumbs/";
49
    private ImportDeduplicationHelper deduplicationHelper = null;
50

    
51
    protected void doInvoke() {
52
        for (int plate = 1; plate < 22 ; plate++){
53
            System.out.println("Plate: " + plate);
54
            String fill = plate < 10 ? "0" : "";
55
            String plateStr = "Plate_" + fill + plate + "/";
56
            String fullFolderUrl = BASE_URL + plateStr;
57
            String fullThumbUrl = BASE_URL + "thumbs/" + plateStr;
58
            String folderStr = IMAGE_FOLDER + plateStr;
59
            File file = new File(folderStr);
60
            String[] list = file.list();
61
            System.out.println(DateTimeZone.getAvailableIDs());
62
            for (String fileStr : list){
63
                String[] taxonNameAndArtist = getTaxonName(fileStr);
64
                String taxonNameStr = taxonNameAndArtist[0];
65
                String artistStr = taxonNameAndArtist[1];
66

    
67

    
68
                if(false){
69
                    continue;
70
                }
71
                Taxon taxon = getAcceptedTaxon(taxonNameStr);
72
                TaxonDescription imageGallery = taxon.getImageGallery(true);
73
                TextData textData = TextData.NewInstance();
74

    
75
                URI uri = URI.create(fullFolderUrl + fileStr);
76

    
77
                //image metadata
78
                File imageFile = new File("");
79
                IImageMetadata metadata;
80
                try {
81
                    metadata = Sanselan.getMetadata(uri.toURL().openStream(), null);
82
                    ArrayList<?> items = metadata.getItems();
83
                    for (Object object : items){
84
                        Item item = (Item) object;
85
                        System.out.println(item.getKeyword() +  ":    " + item.getText());
86
                        String value = removeQuots(item.getText());
87
                        if("Image Description".equalsIgnoreCase(item.getKeyword())){
88
//                          media.putDescription(Language.DEFAULT(), item.getText());
89
                        }else if ("date time original".equalsIgnoreCase(item.getKeyword())){
90
                            DateTimeFormatter f = DateTimeFormat.forPattern("yyyy:MM:dd HH:mm:ss");
91
                            DateTime created = f.withZone(DateTimeZone.forID("Europe/Athens")).parseDateTime(value);
92
                            System.out.println(created);
93

    
94
                        }
95
                    }
96
                } catch (ImageReadException | IOException e1) {
97
                    // TODO Auto-generated catch block
98
                    e1.printStackTrace();
99
                }
100

    
101

    
102

    
103

    
104
                ImageInfo imageMetaData;
105
                try {
106
                    imageMetaData = ImageInfo.NewInstance(uri, 0);
107

    
108
                    String mimeType = imageMetaData.getMimeType();
109
                    String suffix = null;
110
                    int height = imageMetaData.getHeight();
111
                    int width = imageMetaData.getWidth();
112
                    Integer size = null;
113
                    TimePeriod mediaCreated = null;
114
                    AgentBase<?> artist = null;
115
                    Media media = ImageFile.NewMediaInstance(mediaCreated, artist, uri, mimeType, suffix, size, height, width);
116

    
117
                    textData.addMedia(media);
118
                    imageGallery.addElement(textData);
119
                } catch (IOException | HttpException e) {
120
                    // TODO Auto-generated catch block
121
                    e.printStackTrace();
122
                }
123
            }
124

    
125
        }
126
    }
127

    
128
    /**
129
     * @param text
130
     * @return
131
     */
132
    private String removeQuots(String text) {
133
        if (text.startsWith("'") && text.endsWith("'")){
134
            return text.substring(1, text.length() -1);
135
        }else{
136
            return text;
137
        }
138
    }
139

    
140
    /**
141
     * @param taxonNameStr
142
     * @return
143
     */
144
    private Taxon getAcceptedTaxon(String taxonNameStr) {
145
        return Taxon.NewInstance(null, null);
146
    }
147

    
148
    /**
149
     * @param fileStr
150
     * @return
151
     */
152
    private String[] getTaxonName(String fileStr) {
153
        String[] result = new String[2];
154
        fileStr = fileStr.split("\\.")[0];
155
        fileStr = fileStr.replaceAll("[0-9]", "");
156
        String[] x = fileStr.split("_");
157
        if (x.length == 2){
158
            result[1] = x[1];
159
        }
160

    
161
        fileStr = splitCamelCase(x[0]);
162
        String[] split = fileStr.split(" ");
163
        String name = split[0] + " " + split[1].toLowerCase() +
164
                (split.length > 2 ? " subsp. " + split[2].toLowerCase() : "");
165
        result[0] = name;
166
        System.out.println(result[0] + (result[1] != null ?  "   Artist: " + result[1]: ""));
167
        return result;
168
    }
169

    
170
    //from http://stackoverflow.com/questions/2559759/how-do-i-convert-camelcase-into-human-readable-names-in-java
171
    static String splitCamelCase(String s) {
172
        return s.replaceAll(
173
           String.format("%s",
174
//              "(?<=[A-Z])(?=[A-Z][a-z])",
175
              "(?<=[^A-Z])(?=[A-Z])"
176
//              "(?<=[A-Za-z])(?=[^A-Za-z])"
177
           ),
178
           " "
179
        );
180
     }
181

    
182
    public static void main(String[] str){
183
        ImageImportTest test = new ImageImportTest();
184
        test.doInvoke();
185
    }
186
}
(14-14/14)