001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.hayabusa.servlet.multipart;
017
018 import org.opengion.fukurou.util.Closer ;
019
020 import java.io.ByteArrayOutputStream;
021 import java.io.IOException;
022 import java.io.UnsupportedEncodingException;
023 import javax.servlet.ServletInputStream;
024
025 /**
026 * ファイルア??ロード時のマルチパート???パラメータパ?ト部品です?
027 *
028 * パラメータ??を取り扱?す?
029 *
030 * @og.group そ?他機?
031 *
032 * @version 4.0
033 * @author Kazuhiko Hasegawa
034 * @since JDK5.0,
035 */
036 public class ParamPart extends Part {
037 private byte[] value;
038 private final String encoding;
039
040 /**
041 * パラメータパ?ト部?オブジェクトを構築する?コンストラクター
042 *
043 * @param name パラメータの名前
044 * @param in ServletInputStreamオブジェク?
045 * @param boundary ???
046 * @param encoding エンコー?
047 * @throws IOException 入出力エラーが発生したと?
048 */
049 ParamPart( final String name, final ServletInputStream in,
050 final String boundary, final String encoding) throws IOException {
051 super(name);
052 this.encoding = encoding;
053
054 // Copy the part's contents into a byte array
055
056 PartInputStream pis = null;
057 ByteArrayOutputStream baos = null;
058 try {
059 pis = new PartInputStream(in, boundary);
060 baos = new ByteArrayOutputStream(512);
061 byte[] buf = new byte[128];
062 int read;
063 while ((read = pis.read(buf)) != -1) {
064 baos.write(buf, 0, read);
065 }
066 value = baos.toByteArray();
067 }
068 finally {
069 Closer.ioClose( pis ); // 4.0.0 (2006/01/31) close 処?の IOException を無?
070 Closer.ioClose( baos ); // 4.0.0 (2006/01/31) close 処?の IOException を無?
071 }
072 }
073
074 /**
075 * 値をバイト?列で返します?
076 *
077 * @return 値のバイト??
078 */
079 public byte[] getValue() {
080 if( value != null ) {
081 return value.clone();
082 }
083 else {
084 return new byte[0]; // 3.6.0.0 (2004/09/22)
085 }
086 }
087
088 /**
089 * 値を文字?で返します?
090 *
091 * @return こ?クラスの初期エンコードに対応した文字?
092 * @throws UnsupportedEncodingException コンストラクタで?し?エンコー?がサポ?トされて???合?
093 */
094 public String getStringValue() throws UnsupportedEncodingException {
095 return getStringValue(encoding);
096 }
097
098 /**
099 * エンコードを与えて、?を文字?に変換して返します?
100 *
101 * @param encoding エンコー?
102 *
103 * @return エンコードに対応した文字?
104 * @throws UnsupportedEncodingException 引数のエンコー?がサポ?トされて???合?
105 */
106 public String getStringValue( final String encoding ) throws UnsupportedEncodingException {
107 return new String(value, encoding);
108 }
109
110 /**
111 * パラメーターかど?
112 *
113 * @return (常に true)
114 */
115 @Override
116 public boolean isParam() {
117 return true;
118 }
119 }