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.property;
35
36 import java.io.ByteArrayOutputStream;
37 import java.io.IOException;
38 import java.io.OutputStreamWriter;
39 import java.net.URI;
40 import java.net.URISyntaxException;
41
42 import net.fortuna.ical4j.model.Parameter;
43 import net.fortuna.ical4j.model.ParameterList;
44 import net.fortuna.ical4j.model.Property;
45 import net.fortuna.ical4j.model.ValidationException;
46 import net.fortuna.ical4j.model.parameter.Encoding;
47 import net.fortuna.ical4j.model.parameter.Value;
48 import net.fortuna.ical4j.util.ParameterValidator;
49
50 /***
51 * Defines an ATTACH iCalendar component property.
52 *
53 * @author benf
54 */
55 public class Attach extends Property {
56
57 private URI uri;
58
59 private byte[] binary;
60
61 /***
62 * @param aList
63 * a list of parameters for this component
64 * @param aValue
65 * a value string for this component
66 * @throws IOException
67 * when there is an error reading the binary stream
68 * @throws URISyntaxException
69 * where the specified string is not a valid uri
70 */
71 public Attach(final ParameterList aList, final String aValue)
72 throws IOException, URISyntaxException {
73 super(ATTACH, aList);
74
75
76
77 Parameter encodingParam = getParameters().getParameter(
78 Parameter.ENCODING);
79 Parameter valueParam = getParameters().getParameter(Parameter.VALUE);
80
81 if (encodingParam != null
82 && Encoding.BASE64.equals(encodingParam.getValue())
83 && valueParam != null
84 && Value.BINARY.equals(valueParam.getValue())) {
85
86 ByteArrayOutputStream bout = new ByteArrayOutputStream(aValue
87 .length());
88
89 OutputStreamWriter writer = new OutputStreamWriter(bout);
90 writer.write(aValue);
91
92 binary = bout.toByteArray();
93 }
94
95 else {
96
97 uri = new URI(aValue);
98 }
99 }
100
101 /***
102 * @param aList
103 * a list of parameters for this component
104 * @param data
105 * binary data
106 */
107 public Attach(final ParameterList aList, final byte[] data) {
108 super(ATTACH, aList);
109
110 this.binary = data;
111 }
112
113 /***
114 * @param aList
115 * a list of parameters for this component
116 * @param aUri
117 * a URI
118 */
119 public Attach(final ParameterList aList, final URI aUri) {
120 super(ATTACH, aList);
121
122 this.uri = aUri;
123 }
124
125 /***
126 * @see net.fortuna.ical4j.model.Property#validate()
127 */
128 public final void validate() throws ValidationException {
129
130
131
132
133
134
135 ParameterValidator.getInstance().validateOneOrLess(Parameter.FMTTYPE,
136 getParameters());
137
138
139
140
141
142
143 }
144
145 /***
146 * @return Returns the binary.
147 */
148 public final byte[] getBinary() {
149 return binary;
150 }
151
152 /***
153 * @return Returns the uri.
154 */
155 public final URI getUri() {
156 return uri;
157 }
158
159
160
161
162
163
164 public String getValue() {
165
166 if (getUri() != null) {
167 return getUri().toString();
168 }
169 else if (getBinary() != null) { return String.valueOf(getBinary()); }
170
171 return null;
172 }
173 }