/* * Created on 29-Oct-2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.jical; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import java.util.StringTokenizer; /** * @author sfg * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class Text2ICal { public static void main(String[] args) { SimpleDateFormat touchformatter = new SimpleDateFormat("yyyyMMddHHmm.ss"); // Parameters // 1 - input file - ie archlog // 2 - output cal file. // 3 - field=row/startcol/endcol/parseString,field=row/startcol/endcol/parseString,...etc // 4 - rows per event System.out.println("Input File is :"+args[0]); String inputFile = args[0]; System.out.println("Output (Calendar) File is :"+args[1]); String outputFile = args[1]; System.out.println("Field Details are :"+args[2]); String fieldDetails= args[2]; System.out.println("Rows per event is :"+args[3]); Integer rowsPerEvent= new Integer(args[3]); ICalendar iCal = new ICalendar(); iCal.icalEventCollection = new LinkedList(); iCal.setProdId("JICAL-Text2ICal"); iCal.setVersion("2.0"); int iCtr = 0; // First get the fields and locations. int row[] = new int[100]; int col[] = new int[100]; int endCol[] = new int[100]; String iCalField[] = new String[100]; String parseString[] = new String[100]; int iFieldCtr = 0; StringTokenizer st = new StringTokenizer(args[2],","); while(st.hasMoreTokens()) { String fieldDetail = (String)st.nextToken(); StringTokenizer fdtok = new StringTokenizer(fieldDetail,"="); iCalField[iFieldCtr] = (String)fdtok.nextToken(); String rowColStr = (String)fdtok.nextToken(); StringTokenizer rowColTok = new StringTokenizer(rowColStr,"/"); row[iFieldCtr] = new Integer(rowColTok.nextToken()).intValue(); col[iFieldCtr] = new Integer(rowColTok.nextToken()).intValue(); endCol[iFieldCtr] = new Integer(rowColTok.nextToken()).intValue(); if (rowColTok.hasMoreTokens()) parseString[iFieldCtr] = (String)rowColTok.nextToken(); iFieldCtr++; } System.out.println("Found "+iFieldCtr+ " fields"); System.out.println("Import: "+args[0]); try { FileInputStream fin = new FileInputStream(args[0]); BufferedReader myInput = null; myInput = new BufferedReader(new InputStreamReader(fin)); String thisLine = ""; int iRowCtr = 0; // There had better be a parm 4!! if (rowsPerEvent.intValue() == 0) { System.err.println("You forgot parm 4 - rows per event"); return; } String storeRow[] = new String[rowsPerEvent.intValue()+1]; /* Two loops, first joins lines together, second processes lines.. */ while((thisLine = myInput.readLine()) != null) { iRowCtr++; //System.out.println("ROW:"+thisLine); storeRow[iRowCtr] = thisLine; if (iRowCtr == rowsPerEvent.intValue()) { // Here we are, create an event.. ICalendarVEvent vevent = new ICalendarVEvent(); //SimpleDateFormat syslogformatter = new SimpleDateFormat("yyyy MMM dd HH:mm:ss"); for (int fieldIdx = 0; fieldIdx < iFieldCtr; fieldIdx++) { Date workDate = new Date(); // Extract required row for this field. String fieldValue =storeRow[row[fieldIdx]]; //System.out.println("Row is:"+fieldValue); if (fieldValue.length() < col[fieldIdx]-1) System.err.println("Ick, line too short:" +fieldValue.length()+" col starts:"+col[fieldIdx]+ " for field val: "+fieldValue); else if (endCol[fieldIdx]-1 > fieldValue.length()) { //System.out.println("option1:"+col[fieldIdx]); fieldValue = fieldValue.substring(col[fieldIdx]-1); } else { //System.out.println("option2:"+col[fieldIdx]); fieldValue = fieldValue.substring(col[fieldIdx]-1,endCol[fieldIdx]-1); } //System.out.println("Field is :"+ iCalField[fieldIdx]+ " value is: "+fieldValue); // Process a field into the event. if (iCalField[fieldIdx].equalsIgnoreCase("startdate")) { // This should be done once only! //System.out.println("Parse this:"+fieldValue+ " with this" +parseString[fieldIdx]); SimpleDateFormat startDateFormatter = new SimpleDateFormat(parseString[fieldIdx]); //System.out.println("Parse this:"+fieldValue+ " with this" +parseString[fieldIdx]+" Parsed Results: "+startDateFormatter.parse(fieldValue)); vevent.setDateStart(startDateFormatter.parse(fieldValue)); } else if (iCalField[fieldIdx].equalsIgnoreCase("enddate")) { SimpleDateFormat endDateFormatter = new SimpleDateFormat(parseString[fieldIdx]); //System.out.println("Parse this:"+fieldValue+ " with this" +parseString[fieldIdx]+" Parsed Results: "+endDateFormatter.parse(fieldValue)); vevent.setDateEnd(endDateFormatter.parse(fieldValue)); } else if (iCalField[fieldIdx].equalsIgnoreCase("summary")) { vevent.setSummary(fieldValue); } else if (iCalField[fieldIdx].equalsIgnoreCase("description")) { vevent.setDescription(fieldValue); } else { System.err.println("Invalid field: "+iCalField[fieldIdx]); } if (vevent.getDateStart()!=null && vevent.getDateEnd() !=null) { vevent.setSequence(0); vevent.setEventClass("PUBLIC"); vevent.setTransparency("OPAQUE"); vevent.setDateStamp(workDate); vevent.setCreated(workDate); vevent.setLastModified(workDate); //vevent.setAttach(photoFile.toURL().toString()); vevent.setOrganizer("MAILTO:sfg@eurekait.com"); iCtr++; System.out.println(iCtr); vevent.setUid("jical-"+touchformatter.format(workDate)+"-"+iCtr); vevent.setPriority(3); //System.out.println(vevent.toVEvent()); iCal.icalEventCollection.add(vevent); } } iRowCtr = 0; } } } catch(Exception e) { e.printStackTrace(); System.err.println("SomethingBad Happened:"+e); } try{ // Now write to string and view as file. //System.out.println(iCal.getVCalendar()); BufferedWriter out = new BufferedWriter(new FileWriter(args[1])); out.write(iCal.getVCalendar()); out.close(); } catch (Exception e) { e.printStackTrace(); System.err.println("SomethingBad Happened:"+e); } System.out.println("Rendered new TEXT2ICAL calendar file: "+args[1]); } }