Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package projectresurrection; import java.io.*; import java.util.*; import java.nio.file.*; import java.nio.file.NoSuchFileException; import org.joda.time.*; import com.thoughtworks.xstream.*; /** * * @author Onryo */ public class Schedule implements Runnable { private final String THREAD_NAME = "scheduleThread"; private final String FILE_NAME = "schedule.xml"; private Thread t; private XStream xstream = new XStream(); private ArrayList<ArrayList<ArrayList>> container = new ArrayList<ArrayList<ArrayList>>(); public Schedule() { try { if (!new File(FILE_NAME).exists()) { throw new NoSuchFileException(""); } String xml = ""; String line = null; XStream xstream = new XStream(); FileReader fr = new FileReader(FILE_NAME); BufferedReader br = new BufferedReader(fr); while ((line = br.readLine()) != null) { xml += line; } br.close(); container = (ArrayList) xstream.fromXML(xml); } catch (Exception e) { container = new ArrayList<ArrayList<ArrayList>>(); container.add(new ArrayList<ArrayList>()); container.add(new ArrayList<ArrayList>()); container.add(new ArrayList<ArrayList>()); } save(); t = new Thread(this, THREAD_NAME); t.start(); } public void save() { try { if (new File(FILE_NAME).exists()) { Files.delete(Paths.get(FILE_NAME)); } String xml = xstream.toXML(container); FileWriter file = new FileWriter(FILE_NAME); file.write(xml); file.flush(); file.close(); } catch (IOException e) { e.printStackTrace(); } } public void announce(String desc) { Eve.voice.say(desc); } public void addSchedule(String desc, DateTime setDate, String command) { ArrayList list = new ArrayList(Arrays.asList(desc, setDate.toString(), command)); container.get(0).add(list); save(); } public void addReminder(String desc, DateTime setDate) { ArrayList list = new ArrayList(Arrays.asList(desc, setDate.toString())); container.get(1).add(list); save(); } public void addPersistant(String desc, DateTime setDate, String frequency) { ArrayList list = new ArrayList(Arrays.asList(desc, setDate.toString(), frequency)); container.get(2).add(list); save(); } public ArrayList getSchedules() { return container.get(0); } public List getReminders() { return container.get(1); } public List getPersistants() { return container.get(2); } public void removeSchedule(String desc) { for (int i = 0; i < container.get(0).size(); i++) { if (desc.equals(container.get(0).get(i).get(0).toString())) { container.get(0).remove(i); } } save(); } public void removeReminder(String desc) { for (int i = 0; i < container.get(1).size(); i++) { if (desc.equals(container.get(1).get(i).get(0).toString())) { container.get(1).remove(i); } } save(); } public void removePersistant(String desc) { for (int i = 0; i < container.get(2).size(); i++) { if (desc.equals(container.get(2).get(i).get(0).toString())) { container.get(2).remove(i); } } save(); } public void run() { while (true) { DateTime date = Eve.clock.getCurrent(); try { for (int i = 0; i < container.get(0).size(); i++) { DateTime setDate = new DateTime(container.get(0).get(i).get(1)); if (date.getMillis() > setDate.getMillis()) { Eve.addCommand(container.get(0).get(i).get(2).toString()); container.get(0).remove(i); save(); } } for (int i = 0; i < container.get(1).size(); i++) { DateTime setDate = new DateTime(container.get(1).get(i).get(1)); if (date.getMillis() > setDate.getMillis()) { announce(container.get(1).get(i).get(0).toString()); container.get(1).remove(i); save(); } } for (int i = 0; i < container.get(2).size(); i++) { DateTime setDate = new DateTime(container.get(2).get(i).get(1)); if (date.getMillis() > setDate.getMillis()) { announce(container.get(2).get(i).get(0).toString()); DateTime temp = new DateTime(container.get(2).get(i).get(1)); container.get(2).get(i).remove(1); switch (container.get(2).get(i).get(1).toString()) { case "Annual": container.get(2).get(i).add(1, new DateTime(temp.plusYears(1))); break; case "Bi-annaul": container.get(2).get(i).add(1, new DateTime(temp.plusMonths(6))); break; case "Monthly": container.get(2).get(i).add(1, new DateTime(temp.plusMonths(1))); break; case "Weekly": container.get(2).get(i).add(1, new DateTime(temp.plusWeeks(1))); break; case "Daily": container.get(2).get(i).add(1, new DateTime(temp.plusDays(1))); break; } save(); } } Thread.sleep(1000); } catch (Exception e) { Thread.currentThread().interrupt(); } } } }