001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.component.printer;
018
019 import java.net.URI;
020 import java.net.URISyntaxException;
021 import java.util.Map;
022
023 import javax.print.DocFlavor;
024 import javax.print.attribute.standard.MediaSizeName;
025 import javax.print.attribute.standard.Sides;
026
027 import org.apache.camel.util.URISupport;
028 import org.apache.commons.logging.Log;
029 import org.apache.commons.logging.LogFactory;
030
031 public class PrinterConfiguration {
032 private static final transient Log LOG = LogFactory.getLog(PrinterConfiguration.class);
033 private URI uri;
034 private String hostname;
035 private int port;
036 private String printername;
037 private int copies = 1;
038 private String flavor;
039 private DocFlavor docFlavor;
040 private String mimeType;
041 private String mediaSize;
042 private MediaSizeName mediaSizeName;
043 private String sides;
044 private Sides internalSides;
045 private boolean sendToPrinter = true;
046 private Map printSettings;
047
048 public PrinterConfiguration() {
049 }
050
051 public PrinterConfiguration(URI uri) throws URISyntaxException {
052 this.uri = uri;
053 }
054
055 public void parseURI(URI uri) throws Exception {
056 String protocol = uri.getScheme();
057
058 if (!protocol.equalsIgnoreCase("lpr")) {
059 throw new IllegalArgumentException("Unrecognized Print protocol: " + protocol + " for uri: " + uri);
060 }
061 setUri(uri);
062 setHostname(uri.getHost());
063 setPort(uri.getPort());
064 LOG.info("URI Path = " + uri.getPath());
065 setPrintername(uri.getPath());
066
067 printSettings = URISupport.parseParameters(uri);
068 setFlavor((String)printSettings.get("flavor"));
069 setMimeType((String)printSettings.get("mimeType"));
070 setDocFlavor(assignDocFlavor(flavor, mimeType));
071
072 if (printSettings.containsKey("copies")) {
073 setCopies(Integer.valueOf((String) printSettings.get("copies")));
074 }
075 setMediaSize((String)printSettings.get("mediaSize"));
076 setSides((String)printSettings.get("sides"));
077 setMediaSizeName(assignMediaSize(mediaSize));
078 setInternalSides(assignSides(sides));
079 if (printSettings.containsKey("sendToPrinter")) {
080 if (!(Boolean.valueOf((String) printSettings.get("sendToPrinter")))) {
081 setSendToPrinter(false);
082 }
083 }
084 }
085
086
087 private DocFlavor assignDocFlavor(String flavor, String mimeType)
088 throws Exception {
089 DocFlavor d = DocFlavor.BYTE_ARRAY.AUTOSENSE;
090
091 if (mimeType == null) {
092 mimeType = "AUTOSENSE";
093 }
094
095 if (flavor == null) {
096 flavor = "DocFlavor.BYTE_ARRAY";
097 }
098
099 DocFlavorAssigner docFlavorAssigner = new DocFlavorAssigner();
100 if (mimeType.equalsIgnoreCase("AUTOSENSE")) {
101 d = docFlavorAssigner.forMimeTypeAUTOSENSE(flavor);
102 } else if (mimeType.equalsIgnoreCase("GIF")) {
103 d = docFlavorAssigner.forMimeTypeGIF(flavor);
104 } else if (mimeType.equalsIgnoreCase("JPEG")) {
105 d = docFlavorAssigner.forMimeTypeJPEG(flavor);
106 } else if (mimeType.equalsIgnoreCase("PDF")) {
107 d = docFlavorAssigner.forMimeTypePDF(flavor);
108 } else if (mimeType.equalsIgnoreCase("PCL")) {
109 d = docFlavorAssigner.forMimeTypePCL(flavor);
110 } else if (mimeType.equalsIgnoreCase("POSTSCRIPT")) {
111 d = docFlavorAssigner.forMimeTypePOSTSCRIPT(flavor);
112 } else if (mimeType.equalsIgnoreCase("TEXT_HTML_HOST")) {
113 d = docFlavorAssigner.forMimeTypeHOST(flavor, mimeType);
114 } else if (mimeType.equalsIgnoreCase("TEXT_HTML_US_ASCII")) {
115 d = docFlavorAssigner.forMimeTypeUSASCII(flavor, mimeType);
116 } else if (mimeType.equalsIgnoreCase("TEXT_HTML_UTF_16")) {
117 d = docFlavorAssigner.forMimeTypeUTF16(flavor, mimeType);
118 } else if (mimeType.equalsIgnoreCase("TEXT_HTML_UTF_16LE")) {
119 d = docFlavorAssigner.forMimeTypeUTF16LE(flavor, mimeType);
120 } else if (mimeType.equalsIgnoreCase("TEXT_HTML_UTF_16BE")) {
121 d = docFlavorAssigner.forMimeTypeUTF16BE(flavor, mimeType);
122 } else if (mimeType.equalsIgnoreCase("TEXT_HTML_UTF_8")) {
123 d = docFlavorAssigner.forMimeTypeUTF8(flavor, mimeType);
124 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN_HOST")) {
125 d = docFlavorAssigner.forMimeTypeHOST(flavor, mimeType);
126 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN_US_ASCII")) {
127 d = docFlavorAssigner.forMimeTypeUSASCII(flavor, mimeType);
128 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN_UTF_16")) {
129 d = docFlavorAssigner.forMimeTypeUTF16(flavor, mimeType);
130 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN_UTF_16LE")) {
131 d = docFlavorAssigner.forMimeTypeUTF16LE(flavor, mimeType);
132 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN_UTF_16BE")) {
133 d = docFlavorAssigner.forMimeTypeUTF16BE(flavor, mimeType);
134 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN_UTF_8")) {
135 d = docFlavorAssigner.forMimeTypeUTF8(flavor, mimeType);
136 } else if (mimeType.equalsIgnoreCase("TEXT_HTML")) {
137 d = docFlavorAssigner.forMimeTypeBasic(flavor, mimeType);
138 } else if (mimeType.equalsIgnoreCase("TEXT_PLAIN")) {
139 d = docFlavorAssigner.forMimeTypeBasic(flavor, mimeType);
140 } else if (mimeType.equalsIgnoreCase("PAGEABLE")) {
141 d = docFlavorAssigner.forMimeTypePAGEABLE(flavor);
142 } else if (mimeType.equalsIgnoreCase("PRINTABLE")) {
143 d = docFlavorAssigner.forMimeTypePRINTABLE(flavor);
144 } else if (mimeType.equalsIgnoreCase("RENDERABLE_IMAGE")) {
145 d = docFlavorAssigner.forMimeTypeRENDERABLEIMAGE(flavor);
146 }
147
148 return d;
149 }
150
151 private MediaSizeName assignMediaSize(String size) {
152 MediaSizeName mediaSizeName = null;
153
154 MediaSizeAssigner mediaSizeAssigner = new MediaSizeAssigner();
155 if (size.startsWith("iso")) {
156 mediaSizeName = mediaSizeAssigner.selectMediaSizeNameISO(size);
157 } else if (size.startsWith("jis")) {
158 mediaSizeName = mediaSizeAssigner.selectMediaSizeNameJIS(size);
159 } else if (size.startsWith("na")) {
160 mediaSizeName = mediaSizeAssigner.selectMediaSizeNameNA(size);
161 } else {
162 mediaSizeName = mediaSizeAssigner.selectMediaSizeNameOther(size);
163 }
164
165 return mediaSizeName;
166 }
167
168 public Sides assignSides(String sidesString) {
169 Sides ret = null;
170
171 if (sidesString.equalsIgnoreCase("one-sided")) {
172 ret = Sides.ONE_SIDED;
173 } else if (sidesString.equalsIgnoreCase("duplex")) {
174 ret = Sides.DUPLEX;
175 } else if (sidesString.equalsIgnoreCase("tumble")) {
176 ret = Sides.TUMBLE;
177 } else if (sidesString.equalsIgnoreCase("two-sided-short-edge")) {
178 ret = Sides.TWO_SIDED_SHORT_EDGE;
179 } else if (sidesString.equalsIgnoreCase("two-sided-long-edge")) {
180 ret = Sides.TWO_SIDED_LONG_EDGE;
181 } else {
182 ret = Sides.ONE_SIDED;
183 }
184
185 return ret;
186 }
187
188 public URI getUri() {
189 return uri;
190 }
191
192 public void setUri(URI uri) {
193 this.uri = uri;
194 }
195
196 public String getHostname() {
197 return hostname;
198 }
199
200 public void setHostname(String hostname) {
201 this.hostname = hostname;
202 }
203
204 public int getPort() {
205 return port;
206 }
207
208 public void setPort(int port) {
209 this.port = port;
210 }
211
212 public String getPrintername() {
213 return printername;
214 }
215
216 public void setPrintername(String printername) {
217 this.printername = printername;
218 }
219
220 public int getCopies() {
221 return copies;
222 }
223
224 public void setCopies(int copies) {
225 this.copies = copies;
226 }
227
228 public String getFlavor() {
229 return flavor;
230 }
231
232 public void setFlavor(String flavor) {
233 this.flavor = flavor;
234 }
235
236 public DocFlavor getDocFlavor() {
237 return docFlavor;
238 }
239
240 public void setDocFlavor(DocFlavor docFlavor) {
241 this.docFlavor = docFlavor;
242 }
243
244 public String getMediaSize() {
245 return mediaSize;
246 }
247
248 public void setMediaSize(String mediaSize) {
249 this.mediaSize = mediaSize;
250 }
251
252 public String getSides() {
253 return sides;
254 }
255
256 public void setSides(String sides) {
257 this.sides = sides;
258 }
259
260 public MediaSizeName getMediaSizeName() {
261 return mediaSizeName;
262 }
263
264 public void setMediaSizeName(MediaSizeName mediaSizeName) {
265 this.mediaSizeName = mediaSizeName;
266 }
267
268 public Sides getInternalSides() {
269 return internalSides;
270 }
271
272 public void setInternalSides(Sides internalSides) {
273 this.internalSides = internalSides;
274 }
275
276 public String getMimeType() {
277 return mimeType;
278 }
279
280 public void setMimeType(String mimeType) {
281 this.mimeType = mimeType;
282 }
283
284 public boolean isSendToPrinter() {
285 return sendToPrinter;
286 }
287
288 public void setSendToPrinter(boolean sendToPrinter) {
289 this.sendToPrinter = sendToPrinter;
290 }
291
292 }