/*
* ImportUMarker.java
*
* Created on April 5, 2004, 1:13 PM
*
* $Log$
* Revision 1.8 2005/01/31 12:59:04 heto
* Making stronger separation of the import modules.
*
* Revision 1.7 2004/12/14 08:40:29 heto
* Added capabilities
*
* Revision 1.6 2004/12/08 09:26:59 heto
* Javadoc added
*
*
*/
package se.arexis.agdb.util.FileImport;
import se.arexis.agdb.db.*;
import se.arexis.agdb.util.*;
import java.util.*;
import java.io.*;
/**
* The class to handle imports of UMarkers
* @author heto
*/
public class ImportUMarkers extends AbstractImportMarker
{
/**
* Return the format name
*/
public String getFormat()
{
return "UMARKER";
}
/** Creates a new instance of ImportUMarker */
public ImportUMarkers()
{
CREATE = true;
SPECIESID = true;
try
{
headers = new ArrayList<FileHeader>();
headers.add(new FileHeader("UMARKER","LIST",1,'\t'));
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* Checks for syntax and semantics errors
* @return True is all is ok, otherwise false
*/
public boolean check()
{
Errors.logInfo("CheckUMarkers started");
boolean res = false;
//boolean isOk = true;
String errMessage = null;
//String sampleUnitIdAsStr = null;
DbImportFile dbInFile = new DbImportFile();
String fullFileName = "";
String checkFileName = "";
try
{
dbInFile.setStatus(conn_viss,ifid,"0%");
DbUMarker dbMarker = new DbUMarker();
// Store the file on server filesystem
fullFileName = dbInFile.storeImportFileBLOB(conn_viss, ifid);
checkFileName = fullFileName + "_checked";
FileHeader header = FileParser.scanFileHeader(fullFileName);
String type = header.formatTypeName().toUpperCase();
char delimiter = header.delimiter().charValue();
// Create the individual
//DbIndividual dbIndividual = new DbIndividual();
//FileParser fileParser = new FileParser(upPath + "/" + systemFileName);
FileParser fileParser = new FileParser(fullFileName);
fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.UMARKER,
FileTypeDefinition.LIST));
// Write out the result to a new file
FileWriter fileOut = new FileWriter(checkFileName);
fileOut.write(header.objectTypeName()
+"/"+header.formatTypeName()
+"/"+header.version()
+"/"+header.delimiter()+"\n");
String titles[] = fileParser.columnTitles();
for (int j=0;j<titles.length;j++)
{
fileOut.write(titles[j] + delimiter);
}
fileOut.write("\n");
/**
* Run the checks for all rows
*/
String errorMsg = "";
errorMsg = checkList(fileParser,fileOut,delimiter);
fileOut.close();
dbInFile.saveCheckedFile(conn_viss, ifid, checkFileName);
if (errorMsg.startsWith("ERROR:"))
{
res = false;
dbInFile.setStatus(conn_viss,ifid,"ERROR");
// Add a message to the log
dbInFile.addErrMsg(conn_viss,ifid,"File checked failed for species "+DbSpecies.getSpeciesName(conn_viss,Integer.toString(speciesId)) +". <br>"+errorMsg );
Errors.logDebug("ErrorMsg="+errorMsg);
}
else if (errorMsg.startsWith("WARNING:"))
{
dbInFile.setStatus(conn_viss,ifid,"WARNING");
res = true;
// Add a message to the log
dbInFile.addErrMsg(conn_viss,ifid,"Warnings exists: "+errorMsg );
}
else
{
dbInFile.setStatus(conn_viss,ifid,"CHECKED");
res = true;
// Add a message to the log
dbInFile.addErrMsg(conn_viss,ifid,"File checked for Species "+DbSpecies.getSpeciesName(conn_viss,Integer.toString(speciesId)) + ".<br>"+errorMsg);
}
}
catch (Exception e)
{
// Flag for error and set the errMessage if it has not been set
//isOk = false;
dbInFile.setStatus(conn_viss,ifid,"ERROR");
//dbInFile.UpdateImportFile(connection,null,null,e.getMessage(),Integer.parseInt(ifid),Integer.parseInt(userId));
// Add a message to the log
dbInFile.addErrMsg(conn_viss,ifid,e.getMessage());
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
finally
{
try
{
/*
* Delete files uploaded
*/
File tmp = new File(checkFileName);
tmp.delete();
tmp = new File(fullFileName);
tmp.delete();
}
catch (Exception ignore)
{
}
}
Errors.logInfo("CheckUMarkers completed");
return res;
}
/**
* Import data to the database
* @return True if ok, otherwise false
*/
public boolean imp()
{
Errors.logInfo("ImportUMarkers.imp() started");
boolean res = false;
//Errors.log("SUID="+sampleUnitId+", CONN="+connection);
String errMessage = null;
DbImportFile dbInFile = new DbImportFile();
try
{
String fullFileName = dbInFile.storeImportFileBLOB(conn_viss, ifid);
dbInFile.setStatus(conn_viss,ifid,"0%");
DbUMarker dbUMarker = new DbUMarker();
FileParser fileParser = new FileParser(fullFileName);
fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.UMARKER,
FileTypeDefinition.LIST));
/*
* Note! Changed the mode to default to create instead of checking it!
*/
/*
if (mode == null || mode.equals("CREATE"))
{
*/
dbUMarker.CreateUMarkers(fileParser, connection, Integer.valueOf(pid).intValue(), speciesId, Integer.parseInt(userId));
errMessage = dbUMarker.getErrorMessage();
Assertion.assertMsg(errMessage == null ||
errMessage.trim().equals(""), errMessage);
dbInFile.setStatus(conn_viss,ifid,"IMPORTED");
//dbInFile.UpdateImportFile(connection,null,null,"Done",Integer.parseInt(ifid),Integer.parseInt(userId));
// Add a message to the log
dbInFile.addErrMsg(conn_viss,ifid,"File imported to Species "+DbSpecies.getSpeciesName(conn_viss,Integer.toString(speciesId)) +"\nNote: UMarkers are always imported in Create mode.");
res = true;
/*
}
else if (mode.equals("UPDATE"))
{
dbInFile.setStatus(connection,ifid,"DONE");
dbInFile.addErrMsg(connection,ifid,"File NOT imported to sampling unit "+DbSamplingUnit.getSUName(connection,Integer.toString(sampleUnitId))+". Marker file only support CREATE.");
}
else if (mode.equals("CREATE_OR_UPDATE"))
{
dbInFile.setStatus(connection,ifid,"DONE");
dbInFile.addErrMsg(connection,ifid,"File NOT imported to sampling unit "+DbSamplingUnit.getSUName(connection,Integer.toString(sampleUnitId))+". Marker file only support CREATE.");
}
*/
}
catch (Exception e)
{
dbInFile.setStatus(conn_viss,ifid,"ERROR");
//dbInFile.UpdateImportFile(connection,null,null,e.getMessage(),Integer.parseInt(ifid),Integer.parseInt(userId));
// Add a message to the log
dbInFile.addErrMsg(conn_viss,ifid,e.getMessage());
e.printStackTrace(System.err);
if (errMessage == null)
{
errMessage = e.getMessage();
}
}
Errors.logInfo("ImportUMarkers.imp() ended");
return res;
}
}