/*
* 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;
import edu.harvard.iq.dataverse.ingest.metadataextraction.spi.*;
import java.io.*;
import java.util.Map;
import java.util.Set;
/**
*
* @author leonidandreev
*/
public abstract class FileMetadataExtractor {
public static String INGESTER_VERSION = "4.0";
protected FileMetadataExtractorSpi originatingProvider;
protected FileMetadataExtractor(FileMetadataExtractorSpi originatingProvider){
this.originatingProvider = originatingProvider;
}
public FileMetadataExtractorSpi getOriginatingProvider() {
return originatingProvider;
}
public String getFormatName() throws IOException {
return originatingProvider.getFormatNames()[0];
}
public void dispose() {
}
//public abstract Map<String, Set<String>> ingest(BufferedInputStream stream)
public abstract FileMetadataIngest ingest(BufferedInputStream stream)
throws IOException;
// should this be an abstract method as well?
public boolean isValid(File ddiFile) throws IOException {
return false;
}
// Utility methods
public void printHexDump(byte[] buff, String hdr) {
int counter = 0;
if (hdr != null) {
System.out.println(hdr);
}
for (int i = 0; i < buff.length; i++) {
counter = i + 1;
System.out.print(String.format("%02X ", buff[i]));
if (counter % 16 == 0) {
System.out.println();
} else {
if (counter % 8 == 0) {
System.out.print(" ");
}
}
}
System.out.println();
}
/**
* Returns a new null-character-free <code>String</code> object
* from an original <code>String</code> one that may contains
* null characters.
*
* @param rawString a<code>String</code> object
* @return a new, null-character-free <code>String</code> object
*/
protected String getNullStrippedString(String rawString){
String nullRemovedString = null;
int null_position = rawString.indexOf(0);
if (null_position >= 0){
// string is terminated by the null
nullRemovedString = rawString.substring(0, null_position);
} else {
// not null-termiated (sometimes space-paddded, instead)
nullRemovedString = rawString;
}
return nullRemovedString;
}
}