/* * ImportVariables.java * * $Log$ * Revision 1.10 2005/01/31 12:59:04 heto * Making stronger separation of the import modules. * * Revision 1.9 2004/12/14 08:37:34 heto * Added capabilities * * Revision 1.8 2004/04/13 09:00:26 wali * Bugfix * * Revision 1.7 2004/04/06 14:37:32 wali * Added warning text * * Revision 1.6 2004/04/05 13:11:40 wali * Extracted common classes. Inherits abstractImportVariable. * * Revision 1.5 2004/03/26 15:00:12 heto * Fixed log messages * * Revision 1.4 2004/03/18 10:36:46 heto * Changed status message * * Revision 1.3 2004/03/09 14:21:23 heto * Fixed alot of bugs in else if clauses then checking syntax for values * * Revision 1.2 2004/03/08 12:08:16 heto * Changed connection to conn_viss for all queries that should be vissible outside the import process transaction. This is important for error handling, can rollback the database * * Revision 1.1 2004/02/25 13:54:35 heto * Added import of variable data file * * * Created on February 25, 2004, 10:53 AM */ package se.arexis.agdb.util.FileImport; import se.arexis.agdb.db.*; import se.arexis.agdb.util.*; import java.util.*; import java.io.*; /** * * @author heto */ public class ImportVariables extends AbstractImportVariable { /** * Return the format name */ public String getFormat() { return "VARIABLE"; } private ArrayList errorList; /** Creates a new instance of ImportVariables */ public ImportVariables() { CREATE=true; SUID=true; try { headers = new ArrayList<FileHeader>(); headers.add(new FileHeader("VARIABLE","LIST",1,'\t')); } catch (Exception e) { e.printStackTrace(); } } public boolean check() { Errors.logDebug("CheckVariables started"); boolean res = false; DbImportFile dbInFile = new DbImportFile(); String fullFileName = ""; String checkFileName = ""; String errMessage = null; try { // Create the variable DbVariable dbVariable = new DbVariable(); dbInFile.setStatus(conn_viss,ifid,"0%"); // 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(); FileParser fileParser = new FileParser(fullFileName); fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.VARIABLE, 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"); String errorMsg = ""; errorMsg = checkList(fileParser,fileOut,delimiter); fileOut.close(); /* * Save the file to database */ 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 sampling unit "+DbSamplingUnit.getSUName(conn_viss,Integer.toString(sampleUnitId)) +". <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 sampling unit "+DbSamplingUnit.getSUName(conn_viss,Integer.toString(sampleUnitId)) + ".<br>"+errorMsg); } /* if (errorMsg.length()>0) { res = false; dbInFile.setStatus(conn_viss,ifid,"ERROR"); // Add a message to the log dbInFile.addErrMsg(conn_viss,ifid,"File failed the check for sampling unit "+DbSamplingUnit.getSUName(conn_viss,Integer.toString(sampleUnitId)) +"<br>"+errorMsg); } else { res = true; dbInFile.setStatus(conn_viss,ifid,"CHECKED"); // Add a message to the log dbInFile.addErrMsg(conn_viss,ifid,"File checked for sampling unit "+DbSamplingUnit.getSUName(conn_viss,Integer.toString(sampleUnitId)) +"<br>"+errorMsg); }*/ } catch (Exception e) { dbInFile.setStatus(conn_viss,ifid,"ERROR"); // 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.logDebug("CheckVariables completed"); return res; } public boolean imp() { boolean res = false; DbVariable dbVariable = null; String fullFileName = ""; String errMessage = null; DbImportFile dbInFile = new DbImportFile(); try { dbVariable = new DbVariable(); // Store the file on server filesystem fullFileName = dbInFile.storeImportFileBLOB(conn_viss, ifid); FileParser fileParser = new FileParser(fullFileName); fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.VARIABLE, FileTypeDefinition.LIST)); dbVariable.CreateVariables(fileParser, connection, sampleUnitId, Integer.parseInt(userId)); errMessage = dbVariable.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 sampling unit "+DbSamplingUnit.getSUName(conn_viss,Integer.toString(sampleUnitId)) +"Note: Markers is always imported in Create mode."); res = true; } catch (Exception e) { Errors.logError("ImportVariables.imp(...)" + e.getMessage()); 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(fullFileName); tmp.delete(); } catch (Exception ignore) { } } return res; } }