/*********************************************************************************
* TotalCross Software Development Kit *
* Copyright (C) 2003 Gilbert Fridgen *
* Copyright (C) 2003-2012 SuperWaba Ltda. *
* All Rights Reserved *
* *
* This library and virtual machine is distributed in the hope that it will *
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
* This file is covered by the GNU LESSER GENERAL PUBLIC LICENSE VERSION 3.0 *
* A copy of this license is located in file license.txt at the root of this *
* SDK or can be downloaded here: *
* http://www.gnu.org/licenses/lgpl-3.0.txt *
* *
*********************************************************************************/
package totalcross.pim.palm.builtin.pimal;
import totalcross.pim.palm.builtin.*;
import totalcross.pim.todobook.*;
import totalcross.sys.*;
import totalcross.util.Vector;
/**
* An implementation of interface ToDoRecord for PalmOS.
* Currently supports the following fields:
* SUMMARY, STATUS, DUE, PRIORITY, DESCRIPTION
* @author Gilbert Fridgen
*/
public class PalmToDoRecord implements ToDoRecord
{
private int index;
private ToDoNotSupportedHandler nsh;
/**
* Creates a PalmToDoRecord from the given index
* @param index the index, for which this Record should be created
*/
protected PalmToDoRecord(int index)
{
this.index = index;
}
/*
* (non-Javadoc)
* @see pimal.todobook.ToDoRecord#getToDoFields()
*/
public Vector getFields()
{
ToDo physicalRecord = ToDo.getToDo(index);
Vector todoFields = new Vector();
ToDoField tdf;
// SUMMARY
String[] summ_value =
{
physicalRecord.description
};
String[] summ_options = {};
tdf = new ToDoField(ToDoField.SUMMARY, summ_options, summ_value);
todoFields.addElement(tdf);
// DESCRIPTION
String[] desc_value =
{
physicalRecord.note
};
String[] desc_options = {};
tdf = new ToDoField(ToDoField.DESCRIPTION, desc_options, desc_value);
todoFields.addElement(tdf);
// STATUS
String stat = "NEEDS ACTION";
if (physicalRecord.completed)
stat = "COMPLETED";
String[] stat_value =
{
stat
};
String[] stat_options = {};
tdf = new ToDoField(ToDoField.STATUS, stat_options, stat_value);
todoFields.addElement(tdf);
// DUE
String date = ToDoField.toISO8601(physicalRecord.dueDate);
if (date != null)
{
String[] due_value =
{
ToDoField.toISO8601(physicalRecord.dueDate)
};
String[] due_options = {};
tdf = new ToDoField(ToDoField.DUE, due_options, due_value);
todoFields.addElement(tdf);
}
// PRIORITY
String[] prio_value =
{
"" + physicalRecord.priority
};
String[] prio_options = {};
tdf = new ToDoField(ToDoField.PRIORITY, prio_options, prio_value);
todoFields.addElement(tdf);
if (nsh != null)
return nsh.complete(this, todoFields);
else
return todoFields;
}
/*
* (non-Javadoc)
* @see pimal.todobook.ToDoRecord#setToDoFields(totalcross.util.Vector)
*/
public void setFields(Vector fields)
{
ToDo physicalRecord = ToDo.getToDo(index);
Vector notSupported = new Vector();
int summCount = 0, descCount = 0, prioCount = 0, dueCount = 0, statusCount = 0;
int n = fields.size();
for (int i = 0; i < n; i++)
{
ToDoField tdf = (ToDoField)fields.items[i];
String[] values = tdf.getValues();
switch(tdf.getKey())
{
case ToDoField.SUMMARY:
if (summCount < 1)
{
if (values.length >= 1)
{
// check if array is long enough
physicalRecord.description = values[0];
}
else
break; // if array is malformed (too short) then ignore address field
}
else
notSupported.addElement(tdf);
summCount++;
break;
case ToDoField.DESCRIPTION:
if (descCount < 1)
{
if (values.length >= 1)
{
// check if array is long enough
physicalRecord.note = values[0];
}
else
break; // if array is malformed (too short) then ignore address field
}
else
notSupported.addElement(tdf);
descCount++;
break;
case ToDoField.STATUS:
if (statusCount < 1)
{
if (values.length >= 1)
{
// check if array is long enough
physicalRecord.completed = values[0].toUpperCase().equals("COMPLETED");
}
else
break; // if array is malformed (too short) then ignore address field
}
else
notSupported.addElement(tdf);
statusCount++;
break;
case ToDoField.PRIORITY:
if (prioCount < 1)
{
if (values.length >= 1)
{
// check if array is long enough
int prio = 1;
try {prio = totalcross.sys.Convert.toInt(values[0]);} catch (InvalidNumberException ine) {}
physicalRecord.priority = (prio < 1) ? 1 : (prio > 5) ? 5 : prio;
}
else
break; // if array is malformed (too short) then ignore address field
}
else
notSupported.addElement(tdf);
prioCount++;
break;
case ToDoField.DUE:
if (dueCount < 1)
{
if (values.length >= 1)
{
// check if array is long enough
physicalRecord.dueDate = ToDoField.parseISO8601(values[0]);
}
else
break; // if array is malformed (too short) then ignore address field
}
else
notSupported.addElement(tdf);
dueCount++;
break;
default:
notSupported.addElement(tdf);
break;
}
}
ToDo.changeToDo(index, physicalRecord);
if (nsh != null)
nsh.write(notSupported, this);
}
/**
* Getter for index
* @return index
*/
protected int getIndex()
{
return index;
}
/*
* (non-Javadoc)
* @see pimal.todobook.ToDoRecord#rawReadNote()
*/
public String rawReadNote()
{
ToDo physicalRecord = ToDo.getToDo(index);
return physicalRecord.note;
}
/*
* (non-Javadoc)
* @see pimal.todobook.ToDoRecord#rawWriteNote(java.lang.String)
*/
public void rawWriteNote(String note)
{
ToDo physicalRecord = ToDo.getToDo(index);
physicalRecord.note = note;
ToDo.changeToDo(index, physicalRecord);
}
/*
* (non-Javadoc)
* @see pimal.todobook.ToDoRecord#registerNotSupportedhandler(pimal.notsupportedhandler.ToDoNotSupportedHandler)
*/
public void registerNotSupportedhandler(ToDoNotSupportedHandler nsh)
{
this.nsh = nsh;
}
}