package eu.europeana.creative.dataset.design; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Map; import org.junit.Before; import org.junit.Test; import eu.europeana.api.client.MyEuropeanaClient; import eu.europeana.api.client.dataset.DatasetDescriptor; import eu.europeana.api.client.myeuropeana.exception.MyEuropeanaApiException; import eu.europeana.api.client.myeuropeana.impl.MyEuropeanaClientImpl; import eu.europeana.api.client.myeuropeana.response.TagsApiResponse; import eu.europeana.api.client.myeuropeana.thumbnails.ThumbnailFromTagsResponseAccessor; import eu.europeana.api.client.thumbnails.ThumbnailAccessorUtils; import eu.europeana.api.client.thumbnails.download.ThumbnailDownloader; import eu.europeana.api.client.thumbnails.processing.LargeThumbnailsetProcessing; import eu.europeana.service.ir.image.IRConfiguration; import eu.europeana.service.ir.image.IRConfigurationImpl; public class DesignBuildDatasetTest extends ThumbnailAccessorUtils{ private boolean overwriteThumbnails = false; @Before public void init(){ String dataset = "design"; setDataset(dataset); } @Test public void buildDataset() throws MyEuropeanaApiException, IOException{ String jsonFile = "/myeuropeana/design/mydata_tag_v2.json"; TagsApiResponse apiResponse = readJsonFile(jsonFile); ThumbnailFromTagsResponseAccessor ta = new ThumbnailFromTagsResponseAccessor(); File datasetFile = getDataSetFile(false); if(datasetFile.exists()) datasetFile.delete(); Map<String, Map<String, String>> thumbnailsByTag = ta.getThumbnailsFromTagsApiResponse(apiResponse); DatasetDescriptor descriptor; int objectCount = 0; for (Map.Entry<String, Map<String, String>> entry : thumbnailsByTag.entrySet()) { descriptor = new DatasetDescriptor(getDataset(), entry.getKey()); descriptor.setClassifications(new String[]{entry.getKey()}); writeThumbnailsToCsvFile(descriptor, entry.getValue(), datasetFile, POLICY_APPEND_TO_FILE); objectCount += entry.getValue().size(); System.out.println("TAG: " + entry.getKey() + " - " + entry.getValue().size()); } assertEquals(apiResponse.getTotalResults(), objectCount); } @Test public void downloadThumbnails() throws FileNotFoundException, IOException { File datasetFile = getConfig().getDatasetFile(getDataset()); File downloadFolder = getConfig().getImageFolderAsFile(getDataset()); LargeThumbnailsetProcessing datasetDownloader = new LargeThumbnailsetProcessing(datasetFile); ThumbnailDownloader observer = new ThumbnailDownloader(downloadFolder); observer.setSkipExistingFiles(!overwriteThumbnails); datasetDownloader.addObserver(observer); datasetDownloader.processThumbnailset(0, -1, 1000); System.out.println("Skipped items: " + datasetDownloader.getSkippedItemsCount()); System.out.println("Failed downloads: " + datasetDownloader.getFailureCount()); System.out.println("Downloaded files: " + datasetDownloader.getItemsProcessed()); assertEquals(0, datasetDownloader.getFailureCount()); // for (String itemId : skippedItems) { // System.out.println(itemId); // } } private TagsApiResponse readJsonFile(String testResource) throws IOException, MyEuropeanaApiException { TagsApiResponse res = null; InputStream resourceAsStream = null; try { resourceAsStream = getClass().getResourceAsStream( testResource); MyEuropeanaClient client = new MyEuropeanaClientImpl(); res = client.parseTagsApiResponse(resourceAsStream); } finally { if(resourceAsStream!= null) resourceAsStream.close(); } return res; } protected IRConfiguration getConfig() { IRConfiguration config = new IRConfigurationImpl(); return config; } public File getDataSetFile(boolean urls) { IRConfiguration config = getConfig(); if (urls) return config.getDatasetUrlsFile(getDataset()); else return config.getDatasetFile(getDataset()); } public boolean isOverwriteThumbnails() { return overwriteThumbnails; } public void setOverwriteThumbnails(boolean overwriteThumbnails) { this.overwriteThumbnails = overwriteThumbnails; } }