/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.harvard.iq.dataverse.ingest.metadataextraction.impl.plugins.fits;
import edu.harvard.iq.dataverse.ingest.metadataextraction.*;
import edu.harvard.iq.dataverse.ingest.metadataextraction.spi.*;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.logging.*;
import java.util.Locale;
import static java.lang.System.*;
import org.apache.commons.codec.binary.Hex;
/**
*
* @author Leonid Andreev
*/
public class FITSFileMetadataExtractorSpi extends FileMetadataExtractorSpi{
private static Logger dbgLog = Logger.getLogger(FITSFileMetadataExtractorSpi.class.getPackage().getName());
private static int FITS_HEADER_SIZE = 10;
private static String FITS_FILE_SIGNATURE = "SIMPLE = ";
private static String[] formatNames = {"fits", "fits"};
private static String[] extensions = {"fits"};
private static String[] mimeType = {"application/fits", "image/fits"};
/**
*
*/
public FITSFileMetadataExtractorSpi() {
super(
"HU-IQSS-DVN-project",
"0.1",
formatNames, extensions, mimeType, FITSFileMetadataExtractorSpi.class.getName());
dbgLog.fine(FITSFileMetadataExtractorSpi.class.getName()+" is called");
}
public String getDescription(Locale locale) {
return "HU-IQSS-DVN-project FITS File Ingester";
}
// (of the canDecodeInput methods below, the BufferedInputStream-based
// one should be used);
@Override
public boolean canDecodeInput(Object source) throws IOException {
out.println("this method is actually called: object");
if (!(source instanceof BufferedInputStream)) {
return false;
} else if (source instanceof File){
out.println("source is a File object");
} else {
out.println("not File object");
}
if (source == null){
throw new IllegalArgumentException("source == null!");
}
BufferedInputStream stream = (BufferedInputStream)source;
//
return true;
}
@Override
public boolean canDecodeInput(BufferedInputStream stream) throws IOException {
if (stream ==null){
throw new IllegalArgumentException("stream == null!");
}
byte[] b = new byte[FITS_HEADER_SIZE];
if (stream.markSupported()){
stream.mark(0);
}
int nbytes = stream.read(b, 0, FITS_HEADER_SIZE);
if (nbytes == 0){
throw new IOException();
}
//printHexDump(b, "hex dump of the byte-array");
dbgLog.info("hex dump of the 1st "+FITS_HEADER_SIZE+" bytes:"+
(new String (Hex.encodeHex(b))).toUpperCase());
if (stream.markSupported()){
stream.reset();
}
boolean DEBUG = false;
String hdr4fits = new String(b);
if (hdr4fits.equals(FITS_FILE_SIGNATURE)) {
dbgLog.fine("this is a fits file");
return true;
} else {
dbgLog.fine("this is NOT a fits file");
return false;
}
}
@Override
public boolean canDecodeInput(File file) throws IOException {
if (file ==null){
throw new IllegalArgumentException("file == null!");
}
if (!file.canRead()){
throw new IOException("cannot read the input file");
}
return true;
}
@Override
public FileMetadataExtractor createIngesterInstance(Object ext) throws
IOException {
return new FITSFileMetadataExtractor(this);
}
}