Commit e0cbe52d authored by Gerson Sunyé's avatar Gerson Sunyé
Browse files

imported agenda code

parent 445f4c41
<component name="libraryTable">
<library name="Maven: javax.transaction:jta:1.0.1b">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/transaction/jta/1.0.1b/jta-1.0.1b.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/transaction/jta/1.0.1b/jta-1.0.1b-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/transaction/jta/1.0.1b/jta-1.0.1b-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.gerson</groupId>
<artifactId>Agenda</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Avalanche</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
</dependency>
<dependency>
<groupId>com.googlecode.javalanche</groupId>
<artifactId>javalanche-mutation</artifactId>
<version>0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
package univ.calendar;
import java.util.ArrayList;
import java.util.Collections;
import univ.google.GGLAction;
import univ.util.DateTime;
/**
* Classe représentant un calendrier complet. Ce calendrier correspond soit à
* l'ICS, soit aux évènements Google. Un calendrier contient la liste des
* semaines.
*
* @author Noémi Salaün, Joseph Lark
*/
public class Calendar {
/**
* Liste des semaines composant le calendrier
*/
private ArrayList<Week> weeksList;
/**
* Liste des actions à effectuer sur Google pour maintenant l'agenda à jour
*/
private ArrayList<GGLAction> gglAction;
/**
*
*/
public Calendar() {
weeksList = new ArrayList<>();
gglAction = new ArrayList<>();
}
/**
* Permet de récupérer la Week contenant la DateTime. La Week est créée si
* elle n'est pas trouvée
*
* @param date La date que doit contenir la Week à trouver
* @return La Week correspondante
*/
public Week findWeek(DateTime date) {
int dayOfWeek;
boolean finded = false;
Week week = null;
// On parcourt l'ensemble des Weeks du Calendar pour voir si elle existe déjà
for (int i = 0; i < getWeeksList().size(); i++) {
week = getWeeksList().get(i);
if (date.inWeek(week)) {
finded = true;
break;
}
}
// Si elle n'est pas trouvée, on la crée
if (!finded) {
dayOfWeek = Integer.parseInt(date.getDayOfWeek());
if (dayOfWeek != 1) {
// Si on est pas lundi, on soustrait la position du jour
date = date.addDay(-(dayOfWeek - 1));
}
week = new Week(date);
getWeeksList().add(week);
Collections.sort(getWeeksList());
}
return week;
}
/**
* Permet de mettre à jour un Calendar avec un nouveau Calendar. Le Calendar
* passé en paramètre est prioritaire sur le Calendar appelant la méthode
* pour la fusion des Events identique.
*
* @param otherCalendar Le Calendar de mise à jour
*/
public void update(Calendar otherCalendar) {
Week currentWeek;
Day currentDay;
Event currentEvent;
// On parcourt l'ensemble du calendrier à fusionner pour trouver les Event à créer ou à modifier
for (Week week : otherCalendar.getWeeksList()) {
for (Day day : week.getDaysList()) {
for (Event event : day.getEventsList()) {
event.checked = true;
DateTime date = event.getStartTime();
currentWeek = findWeek(date);
currentDay = currentWeek.findDay(date);
currentEvent = currentDay.findEvent(event); // On recherche si l'Event existe déjà
if (currentEvent == null) {
// Si il n'existe pas on l'ajoute
gglAction.add(new GGLAction(event, GGLAction.UPDATE));
currentDay.getEventsList().add(event);
Collections.sort(currentDay.getEventsList());
} else {
// Si l'Event existe déjà on vérifie si il doit être modifié
currentEvent.checked = true;
if (!currentEvent.equals(event)) {
gglAction.add(new GGLAction(event, GGLAction.UPDATE, currentEvent));
currentDay.getEventsList().remove(currentEvent);
currentDay.getEventsList().add(event);
Collections.sort(currentDay.getEventsList());
}
}
}
}
}
Event event;
// On partourt ensuite tout le Calendar initial pour déterminer les Event à supprimer
for (Week week : weeksList) {
for (Day day : week.getDaysList()) {
for (int i = 0; i < day.getEventsList().size(); i++) {
event = day.getEventsList().get(i);
if (!event.checked) {
day.getEventsList().remove(event);
gglAction.add(new GGLAction(event, GGLAction.DELETE));
i--; // On désincrémente le compteur pour prendre en compte la ligne qui vient d'etre supprimée
}
}
}
}
}
/**
* Permet de fusionner un Calendar avec le Calendar courant
*
* @param otherCalendar Le calendar à fusionner
*/
public void merge(Calendar otherCalendar) {
Week currentWeek;
Day currentDay;
for (Week week : otherCalendar.getWeeksList()) {
for (Day day : week.getDaysList()) {
for (Event event : day.getEventsList()) {
DateTime date = event.getStartTime();
currentWeek = findWeek(date);
currentDay = currentWeek.findDay(date);
currentDay.getEventsList().add(event);
Collections.sort(currentDay.getEventsList());
}
}
}
}
/**
*
* @return
*/
@Override
public String toString() {
String ret = "CALENDAR\n";
ret += getWeeksList().toString();
return ret;
}
/**
*
* @return
*/
public ArrayList<Week> getWeeksList() {
return weeksList;
}
/**
*
* @param weeksList
*/
public void setWeeksList(ArrayList<Week> weeksList) {
this.weeksList = weeksList;
}
/**
*
* @return
*/
public ArrayList<GGLAction> getGglAction() {
return gglAction;
}
}
package univ.calendar;
import java.util.ArrayList;
import univ.util.DateTime;
/**
* Classe représentant un jour de notre calendrier. Un jour contient la liste
* des évènements de la journée.
*
* @author Noémi Salaün, Joseph Lark
*/
public class Day implements Comparable {
/**
* La liste des évènements de la journée
*/
private ArrayList<Event> eventsList;
/**
* La date du jour
*/
private DateTime date;
/**
*
* @param d
*/
public Day(DateTime d) {
eventsList = new ArrayList<>();
date = d;
}
/**
* Permet de tester l'existance d'une Day dans une Week
*
* @param week La week dans laquelle on veut chercher la Day
* @return Vrai si la Week contient la Day, faux sinon
*/
public boolean inWeek(Week week) {
return (date.compareTo(week.getStartDate()) >= 1 && date.compareTo(week.getEndDate()) <= -1);
}
/**
* Recherche dans la Day si un event est déjà présent grâce à son UID
*
* @param event L'Event qui est recherché
* @return L'Event si il est trouvé, ou null sinon
*/
public Event findEvent(Event event) {
Event ret = null;
for (Event e : eventsList) {
if (e.getUid().equals(event.getUid())) {
ret = e;
break;
}
}
return ret;
}
/**
*
* @param t
* @return
*/
@Override
public int compareTo(Object t) {
Day otherDay = (Day) t;
return date.compareTo(otherDay.getDate());
}
/**
*
* @return
*/
@Override
public String toString() {
String ret = "\tDAY - Date : " + date.getDayOfWeek() + " " + date.toString() + "\n";
ret += eventsList.toString() + "\n";
return ret;
}
/**
*
* @return
*/
public String getDayOfWeek() {
return getDayOfWeek(false);
}
/**
*
* @param inText
* @return
*/
public String getDayOfWeek(boolean inText) {
return date.getDayOfWeek(inText);
}
/**
*
* @return
*/
public ArrayList<Event> getEventsList() {
return eventsList;
}
/**
*
* @param eventsList
*/
public void setEventsList(ArrayList<Event> eventsList) {
this.eventsList = eventsList;
}
/**
*
* @return
*/
public DateTime getDate() {
return date;
}
/**
*
* @param date
*/
public void setDate(DateTime date) {
this.date = date;
}
}
package univ.calendar;
import univ.util.DateTime;
/**
* Classe représentant un évènement. Il peut s'agir d'un évènement Google ou
* d'un cours de l'ICS.
*
* @author Noémi Salaün, Joseph Lark
*/
public class Event implements Comparable {
/**
*
*/
public static final String TYPE_UNIV_ICS = "univ-ics";
/**
*
*/
public static final String TYPE_UNIV_GGL = "univ-ggl";
/**
*
*/
public static final String TYPE_EVENT_GGL = "event-ggl";
/**
* Attribut public utilisé lors du parcourt des Calendar pour la fusion *
*/
public boolean checked;
/**
* Heure de début de l'évènement
*/
private DateTime startTime;
/**
* Heure de fin de l'évènement
*/
private DateTime endTime;
private String uid;
private String summary;
private String location;
private String description;
private String type;
/**
*
*/
public Event() {
checked = false;
uid = "";
summary = "";
location = "";
description = "";
type = TYPE_EVENT_GGL;
}
/**
* Vérifie si la date de l'Event correspond à la date de la Day
*
* @param day La Day à comparer avec la date de l'Event
* @return Vrai sir la date correspond, faux sinon
*/
public boolean inDay(Day day) {
return (startTime.compareTo(day.getDate()) == 0);
}
/**
*
* @param t
* @return
*/
@Override
public int compareTo(Object t) {
Event otherEvent = (Event) t;
return startTime.compareTo(otherEvent.getStartTime(), true);
}
/**
*
* @param event
* @return
*/
public boolean equals(Event event) {
return (event.getUid().trim().equals(uid.trim())
&& event.getDescription().trim().equals(description.trim())
&& (event.getEndTime().compareTo(endTime, true) == 0)
&& (event.getStartTime().compareTo(startTime, true) == 0)
&& event.getLocation().trim().equals(location.trim())
&& event.getSummary().trim().equals(summary.trim()));
}
/**
*
* @return
*/
@Override
public String toString() {
String ret = "\t\tEVENT - DateStart : " + startTime.toString(true) + " - DateEnd : " + endTime.toString(true) + "\n";
ret += "\t\t\t Type : " + type + "\n";
ret += "\t\t\t UID : " + uid + "\n";
ret += "\t\t\t Summary : " + summary + "\n";
ret += "\t\t\t Location : " + location + "\n";
ret += "\t\t\t Description : " + description + "\n";
return ret;
}
/**
*
* @return
*/
public DateTime getStartTime() {
return startTime;
}
/**
*
* @param startTime
*/
public void setStartTime(DateTime startTime) {
this.startTime = startTime;
}
/**
*
* @return
*/
public DateTime getEndTime() {
return endTime;
}
/**
*
* @param endTime
*/
public void setEndTime(DateTime endTime) {
this.endTime = endTime;
}
/**
*
* @return
*/
public String getUid() {
return uid;
}
/**
*
* @param uid
*/
public void setUid(String uid) {
if (uid == null) {
this.uid = "";
} else {
this.uid = uid;
}
}
/**
*
* @return
*/
public String getSummary() {
return summary;
}
/**
*
* @param summary
*/
public void setSummary(String summary) {
if (summary == null) {
this.summary = "";
} else {
this.summary = summary;
}
}
/**
*
* @return
*/
public String getLocation() {
return location;
}
/**
*
* @param location
*/
public void setLocation(String location) {
if (location == null) {
this.location = "";
} else {
this.location = location;
}
}
/**
*
* @return
*/
public String getDescription() {
return description;
}
/**
*
* @param description
*/
public void setDescription(String description) {
if (description == null) {
this.description = "";
} else {
this.description = description;
}
}
/**
*
* @return
*/
public String getType() {
return type;
}
/**
*
* @param type
*/
public void setType(String type) {
if (type == null) {
this.type = TYPE_EVENT_GGL;
} else {
if (!type.equals(TYPE_UNIV_GGL) && !type.equals(TYPE_UNIV_ICS)) {
this.type = TYPE_EVENT_GGL;
} else {
this.type = type;
}
}
}