-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAgenda.java
More file actions
213 lines (184 loc) · 7.47 KB
/
Agenda.java
File metadata and controls
213 lines (184 loc) · 7.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
//Singleton
import java.io.File;
import java.util.*;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class Agenda extends Observable{
private static Agenda agenda = null;
private EventCreator creator = null;
private List<Event> list;
private static final String xmlFilePath = "Agenda.xml";
private Agenda(){
creator = Creator.getInstance();
list = new LinkedList<Event>();
this.upload();
}
public static Agenda getInstance(){
if(agenda == null) agenda = new Agenda();
return agenda;
}
private int checkEvent(Event e){
for(int i=0;i<list.size();i++){
int aux = list.get(i).compareEvent(e);
if(aux == 1) return i;// L'evento è compatibile con l'i-esimo e viene prima di esso
else if(aux == 0){
System.out.println("L'evento è in conflitto con un altro precedente e non è stato inserito.");
return -1;//L'evento è incompatibile con l'i-esimo
}
// Se l'evento è compatibile ma viene dopo l'i-esimo (aux == 2) lo confronto con l'i+1-esimo.
}
return list.size();//Se l'evento è compatibile con tutti ma successivo ad ognuno è posto al termine della lista
}
public EventCreator getCreator(){
return creator;
}
/*public Event addEvent(int type,PDate start,PDate end,String name,String place,boolean notify){
return addEvent(creator.getEvent(start,end,name,place,type,notify));
}
public Event addEvent(PDate start,PDate end,String name,String place,boolean notify,int d,int m,int y){
return addEvent(creator.getEvent(start,end,name,place,notify,d,m,y));
}*/
public Event addEvent(Event e){
int pos = 0;
if(e != null && (pos = checkEvent(e)) != -1){
list.add(pos,e);
this.setChanged();
this.notifyObservers(e);
}
return e;
}
public Event getEvent(int i){
return list.get(i);
}
public int getNumEvent(){
return list.size();
}
public void delEvent(Event e){
list.remove(e);
}
public void printEvent(){
if(this.getNumEvent() == 0) System.out.println("Non ci sono eventi in agenda.");
for(Event event : list) event.print();
}
public void notifyEvent(){
for(Event event : list) event.notifyEvent();
}
public void search(String text,int i){
int j = 0;
for(Event event : list){
if((i == 0 && event.getName().equals(text)) || (i == 1 && event.getPlace().equals(text))){
j++;
event.print();
}
}
if(j == 0) System.out.println("Non sono stati trovati eventi con la seguente parola chiave: "+text+" come "+((i==0) ? "nome" : "luogo")+".");
else System.out.println(((j > 1) ? "Sono stati trovati " : "È stato trovato ")+j+" event"+((j > 1) ? "i" : "o")+" con la seguente parola chiave: "+text+" come "+((i==0) ? "nome" : "luogo")+".");
}
public ArrayList<Event> getEvent(String text){
ArrayList<Event> arrei = new ArrayList<Event>();
for(Event event : list){
if( (event.getName().equals(text)) || (event.getPlace().equals(text)) ){
arrei.add(event);
}
}
int j = arrei.size();
if(j == 0) System.out.println("Non sono stati trovati eventi con la seguente parola chiave: "+text+" nel nome o nel luogo di svolgimento");
else System.out.println(((j > 1) ? "Sono stati trovati " : "È stato trovato ")+j+" event"+((j > 1) ? "i" : "o"));
return arrei;
}
public void search(int d,int m,int y){
int j = 0;
for(Event event : list){
if(event.getStart().getDay() == d && event.getStart().getMonth() == m && event.getStart().getYear() == y){
j++;
event.print();
}
}
if(j == 0) System.out.println("Non sono stati trovati eventi per la seguente data: "+d+"/"+m+"/"+y);
else System.out.println(((j > 1) ? "Sono stati trovati " : "È stato trovato ")+j+" event"+((j > 1) ? "i" : "o")+" per la seguente data: "+d+"/"+m+"/"+y);
}
public ArrayList<Event> getEvent(int d,int m,int y){
ArrayList<Event> arrei = new ArrayList<Event>();
for(Event event : list){
if(event.getStart().getDay() == d && event.getStart().getMonth() == m && event.getStart().getYear() == y){
arrei.add(event);
}
}
int j = arrei.size();
if(j == 0) System.out.println("Non sono stati trovati eventi per la seguente data: "+d+"/"+m+"/"+y);
else System.out.println(((j > 1) ? "Sono stati trovati " : "È stato trovato ")+j+" event"+((j > 1) ? "i" : "o")+" per la seguente data: "+d+"/"+m+"/"+y);
return arrei;
}
public void delete(){
PDate aDay = new PDate(1,0,0,0,0);
for(Event event : list){
if(PDate.getNow().compareTo(event.getEnd().add(aDay)) == 1){
if((event.getImportant() != true || event instanceof NormalEvent))
list.remove(event);
else ((RecurringEvent)event).modifice();
}else return;
}
}
public void save(){
this.delete();
this.setChanged();
this.notifyObservers();
}
public void upload(){
File f = new File(Agenda.getXmlFilePath());
if(!f.exists() || f.isDirectory()) return;
try{
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File(getXmlFilePath()));
Element root = document.getRootElement();
List<Element> children = root.getChildren();
Iterator<Element> iterator = children.iterator();
while(iterator.hasNext()){
Element item = (Element)iterator.next();
Element start = item.getChild("Start");
Element end = item.getChild("End");
Element period = item.getChild("Period");
PDate dataStart = new PDate(Integer.parseInt(start.getChild("Day").getText()),Integer.parseInt(start.getChild("Month").getText()),Integer.parseInt(start.getChild("Year").getText()),Integer.parseInt(start.getChild("Hour").getText()),Integer.parseInt(start.getChild("Minute").getText()));
PDate dataEnd = new PDate(Integer.parseInt(end.getChild("Day").getText()),Integer.parseInt(end.getChild("Month").getText()),Integer.parseInt(end.getChild("Year").getText()),Integer.parseInt(end.getChild("Hour").getText()),Integer.parseInt(end.getChild("Minute").getText()));
Event e;
if(item.getAttributeValue("type").equals("0") || item.getAttributeValue("type").equals("1"))
e = this.addEvent(Integer.parseInt(item.getAttributeValue("type")),dataStart,dataEnd,item.getChild("Name").getText(),item.getChild("Place").getText(),Boolean.parseBoolean(item.getChild("Notify").getText()));
else
e = this.addEvent(dataStart,dataEnd,item.getChild("Name").getText(),item.getChild("Place").getText(),Boolean.parseBoolean(item.getChild("Notify").getText()),Integer.parseInt(period.getChild("Day").getText()),Integer.parseInt(period.getChild("Month").getText()),Integer.parseInt(period.getChild("Year").getText()));
if(item.getChild("Composite") != null){
try{
e.setComponent(compone(item.getChild("Composite")));
}catch(Exception exc){
System.out.println(exc);
}
}
}
}catch(Exception e){
System.err.println("Errore durante la lettura dal file "+getXmlFilePath()+".");
e.printStackTrace();
}
}
private Composite compone(Element e){
Composite composite = new Composite();
List<Element> children = e.getChildren();
Iterator<Element> iterator = children.iterator();
while(iterator.hasNext()){
Element item = (Element)iterator.next();
if(item.getName().equals("Composite"))
composite.add(composite(item),false);
else if(item.getName().equals("Text"))
composite.add(new Text(),false);
else if(item.getName().equals("Picture"))
composite.add(new Picture(),false);
else if(item.getName().equals("Sound"))
composite.add(new Sound(),false);
else if(item.getName().equals("Movie"))
composite.add(new Movie(),false);
}
return composite;
}
public static String getXmlFilePath(){
return xmlFilePath;
}
}