/* * ImportIndividual.java * * Created on December 16, 2002, 5:37 PM * * $Log$ * Revision 1.19 2005/01/31 12:59:04 heto * Making stronger separation of the import modules. * * Revision 1.18 2004/12/14 08:36:45 heto * Added capabilities * * Revision 1.17 2004/12/08 09:26:36 heto * Javadoc added * * Revision 1.16 2004/04/28 08:53:54 wali * Bug fix * * Revision 1.15 2004/04/05 11:30:04 heto * Added abstract class as a common ground * * Revision 1.14 2004/03/26 15:00:06 heto * Fixed log messages * * Revision 1.13 2004/03/26 07:26:42 heto * Fixing debug messages. * * Revision 1.12 2004/03/22 14:02:55 heto * Error in import file set status * * Revision 1.11 2004/03/18 10:36:46 heto * Changed status message * * Revision 1.10 2004/03/09 14:21:23 heto * Fixed alot of bugs in else if clauses then checking syntax for values * * Revision 1.9 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.8 2004/02/16 15:57:42 heto * Adding support for Blob instead of file operation. * Completed the function for checks in Create&Update mode * * Revision 1.7 2003/11/05 07:47:02 heto * Refined the import system * * Revision 1.6 2003/05/15 06:40:37 heto * Changed the return type from void to boolean for check and imp. * Added a detailed status report of the progress for check. * Working with getting messages to the user * * Revision 1.5 2003/05/09 14:49:48 heto * Check process is integrated to the importProcess * * Revision 1.4 2003/05/02 07:58:45 heto * Changed the package structure from se.prevas.arexis.XYZ to se.arexis.agdb.XYZ * Modified configuration and source files according to package change. * * Revision 1.3 2003/04/25 09:16:18 heto * Changed the message type of import files. * * Revision 1.2 2003/01/15 09:57:19 heto * Comments added * Check method added (not finished) * */ package se.arexis.agdb.util.FileImport; import se.arexis.agdb.db.*; import se.arexis.agdb.util.*; import java.util.*; import java.io.*; /** * Class for handling Import of Markers. * * @author heto */ public class ImportMarkers extends AbstractImportMarker { public ImportMarkers() { CREATE = true; UPDATE = true; CREATE_OR_UPDATE = true; SUID = true; try { headers = new ArrayList<FileHeader>(); headers.add(new FileHeader("MARKER","LIST",1,'\t')); } catch (Exception e) { e.printStackTrace(); } } /** * Return the format name */ public String getFormat() { return "MARKER"; } /** * Import the data * @return boolean value true if result is ok, otherwise false */ public boolean imp() { Errors.logInfo("ImportMarkers.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%"); DbMarker dbMarker = new DbMarker(); FileParser fileParser = new FileParser(fullFileName); fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.MARKER, FileTypeDefinition.LIST)); /* * Note! Changed the mode to default to create instead of checking it! */ /* if (mode == null || mode.equals("CREATE")) { */ dbMarker.CreateMarkers(fileParser, connection, sampleUnitId, Integer.parseInt(userId)); errMessage = dbMarker.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)) +"\nNote: Markers 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("ImportMarkers.imp() ended"); return res; } /** * Check the data for syntax and symantics * @return boolean value true if all ok, otherwise false */ public boolean check() { Errors.logInfo("CheckMarkers started"); Errors.logInfo("CheckMarkers started.....[]"); boolean res = false; String errMessage = null; //String sampleUnitIdAsStr = null; DbImportFile dbInFile = new DbImportFile(); String fullFileName = ""; String checkFileName = ""; try { 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(); // Create the individual //DbIndividual dbIndividual = new DbIndividual(); //FileParser fileParser = new FileParser(upPath + "/" + systemFileName); FileParser fileParser = new FileParser(fullFileName); fileParser.Parse(FileTypeDefinitionList.matchingDefinitions(FileTypeDefinition.MARKER, 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 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); } } catch (Exception e) { e.printStackTrace(); // Flag for error and set the errMessage if it has not been set 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("CheckMarkers completed"); return res; } }