1 /*******************************************************************************
2  * Copyright (c) 2016 Raymond Augé and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     Raymond Augé <raymond.auge@liferay.com> - Bug 497271
13  *******************************************************************************/
14 package org.eclipse.equinox.http.servlet.internal.multipart;
15 
16 import java.io.*;
17 import java.util.*;
18 import javax.servlet.http.Part;
19 import org.apache.commons.fileupload.FileItemHeaders;
20 import org.apache.commons.fileupload.disk.DiskFileItem;
21 
22 public class MultipartSupportPart implements Part {
23 
MultipartSupportPart(DiskFileItem item)24 	public MultipartSupportPart(DiskFileItem item) {
25 		this.item = item;
26 		this.headers = item.getHeaders();
27 	}
28 
29 	@Override
getInputStream()30 	public InputStream getInputStream() throws IOException {
31 		return item.getInputStream();
32 	}
33 
34 	@Override
getContentType()35 	public String getContentType() {
36 		return item.getContentType();
37 	}
38 
39 	@Override
getName()40 	public String getName() {
41 		return item.getFieldName();
42 	}
43 
44 	@Override
getSubmittedFileName()45 	public String getSubmittedFileName() {
46 		return item.getName();
47 	}
48 
49 	@Override
getSize()50 	public long getSize() {
51 		return item.getSize();
52 	}
53 
54 	@Override
write(String fileName)55 	public void write(String fileName) throws IOException {
56 		try {
57 			item.write(new File(item.getStoreLocation(), fileName));
58 		}
59 		catch (Exception e) {
60 			throw new IOException(e);
61 		}
62 	}
63 
64 	@Override
delete()65 	public void delete() {
66 		item.delete();
67 	}
68 
69 	@Override
getHeader(String name)70 	public String getHeader(String name) {
71 		if (headers == null) {
72 			return null;
73 		}
74 		return headers.getHeader(name);
75 	}
76 
77 	@Override
getHeaders(String name)78 	public Collection<String> getHeaders(String name) {
79 		if (headers == null) {
80 			return Collections.emptyList();
81 		}
82 		return new IteratorCollection(headers.getHeaders(name));
83 	}
84 
85 	@Override
getHeaderNames()86 	public Collection<String> getHeaderNames() {
87 		if (headers == null) {
88 			return Collections.emptyList();
89 		}
90 		return new IteratorCollection(headers.getHeaderNames());
91 	}
92 
93 	private final DiskFileItem item;
94 	private final FileItemHeaders headers;
95 
96 	private class IteratorCollection extends AbstractList<String> {
97 
IteratorCollection(Iterator<String> iterator)98 		public IteratorCollection(Iterator<String> iterator) {
99 			this.collection = new ArrayList<String>();
100 			while (iterator.hasNext()) {
101 				collection.add(iterator.next());
102 			}
103 		}
104 
105 		@Override
get(int index)106 		public String get(int index) {
107 			return collection.get(index);
108 		}
109 
110 		@Override
size()111 		public int size() {
112 			return collection.size();
113 		}
114 
115 		private List<String> collection;
116 
117 	}
118 
119 }
120