/* * Class FlashFile * * This software is developed for Choral devices with Java. * Copyright Choral srl. All Rights reserved. */ package general; import java.util.*; import java.io.*; import javax.microedition.io.Connector; import com.cinterion.io.file.FileConnection; /** * File management, to store on file system settings. * To add a setting to file, just add it inside the constructor. * * @version 1.00 <BR> <i>Last update</i>: 21-09-2007 * @author alessioza * */ public class FlashFile implements GlobCost { /* * local variables */ /** Number of settings in the file */ private int numValues; private Vector settings; private Vector values; private String letturaFile, scritturaFile; /** Can be read max 1024 bytes */ private byte b[] = new byte [1024]; /** Number of bytes read from file */ private int numBytesRead; /** Index for read setting values */ private int init; InfoStato infoS; /* * constructors */ public FlashFile() { //System.out.println("FlashFile: CREATED"); // vector instances settings = new Vector(); values = new Vector(); // file settings list settings.addElement(IDtraker); settings.addElement(PasswordCSD); settings.addElement(AppName); settings.addElement(CloseMode); settings.addElement(LastGPSValid); settings.addElement(TrackingInterv); settings.addElement(Operatore); settings.addElement(TrackingType); settings.addElement(TrackingProt); settings.addElement(Header); settings.addElement(Ackn); settings.addElement(GprsOnTime); settings.addElement(TrkState); settings.addElement(PublishTopic); settings.addElement(SlpState); settings.addElement(StillTime); settings.addElement(MovState); settings.addElement(IgnState); settings.addElement(UartSpeed); settings.addElement(UartGateway); settings.addElement(UartHeaderRS); settings.addElement(UartEndOfMessage); settings.addElement(UartAnswerTimeOut); settings.addElement(UartNumTent); settings.addElement(UartEndOfMessageIP); settings.addElement(UartIDdisp); settings.addElement(UartTXtimeOut); settings.addElement(OrePowerDownOK); settings.addElement(MinPowerDownOK); settings.addElement(OrePowerDownTOexpired); settings.addElement(MinPowerDownTOexpired); settings.addElement(DestHost); settings.addElement(DestPort); settings.addElement(ConnProfileGPRS); settings.addElement(apn); settings.addElement(GPRSProtocol); settings.addElement(TrkIN); settings.addElement(TrkOUT); settings.addElement(InsensibilitaGPS); // ecc... // calculate number of settings numValues = settings.size(); infoS = new InfoStato(); } /* * methods */ /** * RECOVER SYSTEM SETTINGS from file * * @return 'OK' if recover is ok, 'FileNotFound' if file not found */ public synchronized String loadSettings() { try { // Open connection to file FileConnection fconn = (FileConnection)Connector.open("file:///a:/file/" + fileName); /* * If configuration file not exists, load it to flash and * application ends */ if (!fconn.exists()) { //fconn.create(); // to create file //fconn.setReadable(true); // to set file readable System.out.println("FlashFile: Missing configuration file\r\nApplication will be closed"); return "FileNotFound"; } // Read file InputStream is = fconn.openInputStream(); numBytesRead = is.read(b, 0, 1024); // Convert string letturaFile = new String(b, 0, numBytesRead); //System.out.println("FlashFile: file content "+fileName+":\r\n"+ letturaFile); /* * Extract settings in a string array, pay attention to * '=' symbol management */ init = letturaFile.indexOf(settings.elementAt(0)+"="); letturaFile = letturaFile.substring(init); for (int i=0; i<numValues-1; i++) { init = letturaFile.indexOf(settings.elementAt(i)+"=") + (settings.elementAt(i)+"=").length(); values.addElement(letturaFile.substring(init, letturaFile.indexOf("\r\n"))); letturaFile = letturaFile.substring(init + ((String)values.elementAt(i)).length() + 2); //System.out.println("letturaFile: "+letturaFile); } // Last cycle init = letturaFile.indexOf(settings.elementAt(numValues-1)+"=") + (settings.elementAt(numValues-1)+"=").length(); values.addElement(letturaFile.substring(init, letturaFile.indexOf("\r\n###"))); // Print settings /*for (int i=0; i<numValues; i++) { System.out.println("FlashFile: Setting n. "+i+": " + values.elementAt(i)); } */ // Close connection to file is.close(); fconn.close(); } catch (IOException ioe) { //System.out.println("exception: " + ioe.getMessage()); //ioe.printStackTrace(); } //catch return "OK"; } /** * SAVE SYSTEM SETTINGS to FILE */ public synchronized String writeSettings() { try { // Open connection to file FileConnection fconn = (FileConnection)Connector.open("file:///a:/file/" + fileName); /* * configuration file must exists, otherwise application * not arrive at this point */ /* * Reconvert strings array into a unique string, * pay attention to '=' symbol management */ scritturaFile = "Greenwich settings\r\n###\r\n"; for (int i=0; i<numValues; i++) { scritturaFile = scritturaFile + settings.elementAt(i) + "=" + values.elementAt(i) + "\r\n"; } // Last cycle scritturaFile = scritturaFile + "###"; // Verify //System.out.println("FlashFile: I'm writing to file:\r\n" + scritturaFile); // Write to file DataOutputStream dos = fconn.openDataOutputStream(); dos.write(scritturaFile.getBytes()); // Close connection to file dos.flush(); dos.close(); fconn.close(); } catch (Exception ioe) { //System.out.println("exception: " + ioe.getMessage()); new LogError("File: " + ioe.getMessage()); //ioe.printStackTrace(); } //catch return "OK"; } /** * To set a system setting to read from FILE * * @param impost setting alias * @param val setting value */ public synchronized void setImpostazione(String impost, String val) { /* * Identify setting and set value */ for (int i=0; i<numValues; i++) { if (impost.equalsIgnoreCase((String)settings.elementAt(i))) { //System.out.println("size=" + values.size() +", i=" +i+", val=" + val); values.setElementAt(val,i); //System.out.println("FlashFile: setting " + settings.elementAt(i) + " modified at value " + val); } //if } //for } //setImpostazione /** * To get a system setting to write to FILE * * @param impost setting alias * @return value setting value */ public synchronized String getImpostazione(String impost) { /* * identify setting and return current value */ for (int i=0; i<numValues; i++) { if (impost.equalsIgnoreCase((String)settings.elementAt(i))) { //System.out.println("FlashFile: get setting " + settings.elementAt(i) + ", with value " + values.elementAt(i)); return (String)values.elementAt(i); } //if } //for return null; } //getImpostazione /** * Add reference to InfoStato data structure * * @param is InfoStato object * @return "OK,infoS" */ public synchronized String addInfoStato(InfoStato is) { infoS = is; return "OK,infoS"; } //addInfoStato } //FlashFile