/*
* Copyright (c) 2012 Diamond Light Source Ltd.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package uk.ac.diamond.scisoft.analysis.io;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import org.apache.commons.lang.SerializationUtils;
import org.eclipse.dawnsci.analysis.api.io.IDataHolder;
import org.eclipse.dawnsci.analysis.api.metadata.IDiffractionMetadata;
import org.eclipse.january.dataset.Dataset;
import org.eclipse.january.metadata.IExtendedMetadata;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import uk.ac.diamond.scisoft.analysis.IOTestUtils;
/**
* Tests the ADSC image loader with file in TestFiles
*/
public class ADSCImageTest {
static String TestFileFolder;
@BeforeClass
static public void setUpClass() {
TestFileFolder = IOTestUtils.getGDALargeTestFilesLocation();
}
static String testfile1 = null;
@BeforeClass
public static void setUpBeforeClass() {
testfile1 = "ADSCImageTest/F6_1_001.img";
}
/**
* Test Loading
*
* @throws Exception if the loading fails
*/
@Test
public void testLoadFile() throws Exception {
new ADSCImageLoader(TestFileFolder + testfile1).loadFile();
}
/**
* Test Loading
*
* @throws Exception if the loading fails
*/
@Test
public void testLoaderFactory() throws Exception {
final IDataHolder dh = LoaderFactory.getData(TestFileFolder + testfile1, null);
if (!dh.getNames()[0].equals("ADSC Image")) throw new Exception();
}
@Test
public void testMetaDataDate() throws Exception{
DataHolder loader = new ADSCImageLoader(TestFileFolder + testfile1).loadFile();
Dataset data = loader.getDataset(0);
IExtendedMetadata metadata = (IExtendedMetadata) data.getMetadata();
Date date = metadata.getCreation();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
try {
Assert.assertTrue(sdf.parse((String)metadata.getMetaValue("DATE")).equals(date));
} catch (Exception e) {
throw new Exception("Could not parse the date from the header", e);
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
String[] parsedTime = gc.getTime().toString().split(" ");
String[] rawTime = ((String)metadata.getMetaValue("DATE")).split(" ");
Assert.assertTrue(parsedTime[0].equalsIgnoreCase(rawTime[0]));
Assert.assertTrue(parsedTime[1].equalsIgnoreCase(rawTime[1]));
Assert.assertTrue(parsedTime[2].equalsIgnoreCase(rawTime[2]));
Assert.assertTrue(parsedTime[3].equalsIgnoreCase(rawTime[3]));
Assert.assertTrue(parsedTime[5].equalsIgnoreCase(rawTime[4])); // This is because the date in GregorianCalendar contains GMT and the ADSC doesn't
}
@Test
public void testFileParsedMetaData() throws Exception{
DataHolder loader = new ADSCImageLoader(TestFileFolder + testfile1).loadFile();
Dataset data = loader.getDataset(0);
IExtendedMetadata metadata = (IExtendedMetadata) data.getMetadata();
System.out.println("File path is "+metadata.getFullPath());
System.out.println("File size is "+metadata.getFileSize()+ " in bytes");
System.out.println("File last modified "+metadata.getLastModified().toString());
System.out.println("File owner is "+metadata.getFileOwner());
}
@Test
public void testSerializability() throws Exception {
DataHolder loader = new ADSCImageLoader(TestFileFolder + testfile1).loadFile();
Dataset data;
IDiffractionMetadata md, cmd;
data = loader.getDataset(0);
md = (IDiffractionMetadata) data.getMetadata();
// test cloning
cmd = md.clone();
Assert.assertEquals("Metadata", md.getDiffractionCrystalEnvironment(), cmd.getDiffractionCrystalEnvironment());
Assert.assertEquals("Metadata", md.getDetector2DProperties(), cmd.getDetector2DProperties());
// test cloning serialization
cmd = (IDiffractionMetadata) SerializationUtils.clone(md);
Assert.assertEquals("Metadata", md.getDiffractionCrystalEnvironment(), cmd.getDiffractionCrystalEnvironment());
Assert.assertEquals("Metadata", md.getDetector2DProperties(), cmd.getDetector2DProperties());
}
@Test
public void testLoadWithMissingMetadata() throws Exception {
DataHolder loader = new ADSCImageLoader(TestFileFolder + File.separator + "ADSCImageTest"+File.separator+"F6-invalidmd.img").loadFile();
Assert.assertEquals("Metadata", null, loader.getMetadata());
Dataset data = loader.getDataset(0);
Assert.assertEquals("Data", 3072, data.getShapeRef()[0]);
Assert.assertEquals("Data", 3072, data.getShapeRef()[1]);
}
}