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 package net.fortuna.ical4j.model;
35
36 import net.fortuna.ical4j.model.component.Daylight;
37 import net.fortuna.ical4j.model.component.Standard;
38 import net.fortuna.ical4j.model.component.Time;
39 import net.fortuna.ical4j.model.component.VAlarm;
40 import net.fortuna.ical4j.model.component.VEvent;
41 import net.fortuna.ical4j.model.component.VFreeBusy;
42 import net.fortuna.ical4j.model.component.VJournal;
43 import net.fortuna.ical4j.model.component.VTimeZone;
44 import net.fortuna.ical4j.model.component.VToDo;
45
46 /***
47 * A factory for creating iCalendar components.
48 *
49 * @author benfortuna
50 */
51 public final class ComponentFactory {
52
53 private static ComponentFactory instance = new ComponentFactory();
54
55 /***
56 * Constructor made private to prevent instantiation.
57 */
58 private ComponentFactory() {
59 }
60
61 /***
62 * @return Returns the instance.
63 */
64 public static ComponentFactory getInstance() {
65 return instance;
66 }
67
68 /***
69 * Creates a component.
70 *
71 * @param name
72 * name of the component
73 * @param properties
74 * a list of component properties
75 * @return a component
76 */
77 public Component createComponent(final String name,
78 final PropertyList properties) {
79
80 if (Component.VALARM.equals(name)) {
81
82 return new VAlarm(properties);
83 }
84 else if (Component.VEVENT.equals(name)) {
85
86 return new VEvent(properties);
87 }
88 else if (Component.VFREEBUSY.equals(name)) {
89
90 return new VFreeBusy(properties);
91 }
92 else if (Component.VJOURNAL.equals(name)) {
93
94 return new VJournal(properties);
95 }
96 else if (Component.VTODO.equals(name)) {
97
98 return new VToDo(properties);
99 }
100 else if (Time.STANDARD.equals(name)) {
101
102 return new Standard(properties);
103 }
104 else if (Time.DAYLIGHT.equals(name)) {
105
106 return new Daylight(properties);
107 }
108 else {
109
110 throw new IllegalArgumentException("Unkown component [" + name
111 + "]");
112 }
113 }
114
115 /***
116 * Creates a component which contains sub-components. Currently the only
117 * such component is VTIMEZONE.
118 *
119 * @param name
120 * name of the component
121 * @param properties
122 * a list of component properties
123 * @param components
124 * a list of sub-components (namely standard/daylight timezones)
125 * @return a component
126 */
127 public Component createComponent(final String name,
128 final PropertyList properties, final ComponentList components) {
129
130 if (components != null) {
131
132 if (Component.VTIMEZONE.equals(name)) {
133
134 return new VTimeZone(properties, components);
135 }
136 else if (Component.VEVENT.equals(name)) {
137
138 return new VEvent(properties, components);
139 }
140 else {
141
142 throw new IllegalArgumentException("Unkown component [" + name
143 + "]");
144 }
145 }
146
147 return createComponent(name, properties);
148 }
149 }