View Javadoc
1   /*
2    * This file is part of Waarp Project (named also Waarp or GG).
3    *
4    *  Copyright (c) 2019, Waarp SAS, and individual contributors by the @author
5    *  tags. See the COPYRIGHT.txt in the distribution for a full listing of
6    * individual contributors.
7    *
8    *  All Waarp Project is free software: you can redistribute it and/or
9    * modify it under the terms of the GNU General Public License as published by
10   * the Free Software Foundation, either version 3 of the License, or (at your
11   * option) any later version.
12   *
13   * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY
14   * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15   * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16   *
17   *  You should have received a copy of the GNU General Public License along with
18   * Waarp . If not, see <http://www.gnu.org/licenses/>.
19   */
20  package org.waarp.gateway.kernel;
21  
22  import io.netty.handler.codec.http.multipart.FileUpload;
23  import org.waarp.gateway.kernel.exception.HttpIncorrectRequestException;
24  
25  /**
26   *
27   */
28  public class DefaultHttpField extends AbstractHttpField {
29  
30    /**
31     * @param fieldname
32     * @param fieldtype
33     * @param fieldinfo
34     * @param fieldvalue
35     * @param fieldvisibility
36     * @param fieldmandatory
37     * @param fieldcookieset
38     * @param fieldtovalidate
39     * @param fieldposition
40     * @param fieldrank
41     */
42    public DefaultHttpField(final String fieldname, final FieldRole fieldtype,
43                            final String fieldinfo, final String fieldvalue,
44                            final boolean fieldvisibility,
45                            final boolean fieldmandatory,
46                            final boolean fieldcookieset,
47                            final boolean fieldtovalidate,
48                            final FieldPosition fieldposition,
49                            final int fieldrank) {
50      super(fieldname, fieldtype, fieldinfo, fieldvalue, fieldvisibility,
51            fieldmandatory, fieldcookieset, fieldtovalidate, fieldposition,
52            fieldrank);
53    }
54  
55    @Override
56    public final String getHtmlFormField(final HttpPage page)
57        throws HttpIncorrectRequestException {
58      final StringBuilder builder = new StringBuilder();
59      switch (getFieldtype()) {
60        case BUSINESS_INPUT_CHECKBOX:
61        case BUSINESS_INPUT_RADIO: {
62          builder.append(getFieldinfo());
63          final AbstractHttpField source = page.getFields().get(getFieldname());
64          final String[] values = source.fieldvalue.split(",");
65          final String[] finalValues = fieldvalue.split(",");
66          final String inputtype;
67          if (getFieldtype() == FieldRole.BUSINESS_INPUT_CHECKBOX) {
68            inputtype = ": <INPUT type=CHECKBOX name=";
69          } else {
70            inputtype = ": <INPUT type=RADIO name=";
71          }
72          for (final String string : values) {
73            builder.append(inputtype).append(getFieldname());
74            if (fieldvalue != null && fieldvalue.length() > 0) {
75              builder.append(" value=\"").append(string).append('"');
76              if (finalValues != null) {
77                for (final String value : finalValues) {
78                  if (value.equals(string)) {
79                    builder.append(" checked");
80                    break;
81                  }
82                }
83              }
84            }
85            builder.append('>').append(string).append("<BR>");
86          }
87          break;
88        }
89        case BUSINESS_INPUT_FILE:
90        case BUSINESS_INPUT_HIDDEN:
91        case BUSINESS_INPUT_PWD:
92        case BUSINESS_INPUT_TEXT:
93        case SUBMIT: {
94          builder.append(getFieldinfo());
95          switch (getFieldtype()) {
96            case BUSINESS_INPUT_FILE:
97              builder.append(": <INPUT type=FILE name=");
98              break;
99            case BUSINESS_INPUT_HIDDEN:
100             builder.append(": <INPUT type=HIDDEN name=");
101             break;
102           case BUSINESS_INPUT_PWD:
103             builder.append(": <INPUT type=PASSWORD name=");
104             break;
105           case BUSINESS_INPUT_TEXT:
106             builder.append(": <INPUT type=TEXT name=");
107             break;
108           case SUBMIT:
109             builder.append(": <INPUT type=SUBMIT name=");
110             break;
111           default:
112             throw new HttpIncorrectRequestException(
113                 "Incorrect type: " + getFieldtype());
114         }
115         builder.append(getFieldname());
116         if (fieldvalue != null && fieldvalue.length() > 0) {
117           builder.append(" value=\"").append(fieldvalue).append('"');
118         }
119         builder.append('>');
120         break;
121       }
122       case BUSINESS_INPUT_IMAGE: {
123         builder.append(getFieldinfo()).append(": <INPUT type=IMAGE name=")
124                .append(getFieldname());
125         if (fieldvalue != null && fieldvalue.length() > 0) {
126           builder.append(" src=\"").append(fieldvalue).append("\" ");
127         }
128         if (getFieldinfo() != null && getFieldinfo().length() > 0) {
129           builder.append(" alt=\"").append(getFieldinfo()).append("\" ");
130         }
131         builder.append('>');
132         break;
133       }
134       case BUSINESS_SELECT: {
135         builder.append(getFieldinfo()).append("<BR><SELECT name=")
136                .append(getFieldname()).append('>');
137         final AbstractHttpField source = page.getFields().get(getFieldname());
138         final String[] values = source.fieldvalue.split(",");
139         for (final String string : values) {
140           builder.append("<OPTION label=\"").append(string)
141                  .append("\" value=\"").append(string);
142           if (fieldvalue != null && fieldvalue.length() > 0 &&
143               fieldvalue.equals(string)) {
144             builder.append("\" selected>");
145           } else {
146             builder.append("\">");
147           }
148           builder.append(string).append("</OPTION>");
149         }
150         builder.append("</SELECT>");
151         break;
152       }
153       case BUSINESS_TEXTAREA: {
154         builder.append(getFieldinfo()).append("<BR><TEXTAREA name=")
155                .append(getFieldname()).append('>');
156         if (fieldvalue != null && fieldvalue.length() > 0) {
157           builder.append(fieldvalue);
158         }
159         builder.append("</TEXTAREA>");
160         break;
161       }
162       case BUSINESS_COOKIE:
163         // no since Cookie
164         break;
165       default:
166         throw new HttpIncorrectRequestException(
167             "Incorrect type: " + getFieldtype());
168     }
169     return builder.toString();
170   }
171 
172   @Override
173   public final String getHtmlTabField(final HttpPage page) {
174     final StringBuilder builder =
175         new StringBuilder().append(getFieldinfo()).append("</TD><TD>");
176     if (fieldvalue != null) {
177       builder.append(fieldvalue);
178     }
179     return builder.toString();
180   }
181 
182   @Override
183   public final DefaultHttpField clone() {
184     return new DefaultHttpField(getFieldname(), getFieldtype(), getFieldinfo(),
185                                 fieldvalue, isFieldvisibility(),
186                                 isFieldmandatory(), isFieldcookieset(),
187                                 isFieldtovalidate(), getFieldposition(),
188                                 getFieldrank());
189   }
190 
191   @Override
192   public final void setStringValue(final String value)
193       throws HttpIncorrectRequestException {
194     switch (getFieldtype()) {
195       case BUSINESS_INPUT_CHECKBOX:
196         if (fieldvalue != null) {
197           if (fieldvalue.length() > 0) {
198             fieldvalue += ',' + value;
199           } else {
200             fieldvalue = value;
201           }
202         } else {
203           fieldvalue = value;
204         }
205         setPresent(true);
206         break;
207       case BUSINESS_INPUT_FILE:
208       case BUSINESS_INPUT_HIDDEN:
209       case BUSINESS_INPUT_IMAGE:
210       case BUSINESS_INPUT_PWD:
211       case BUSINESS_INPUT_RADIO:
212       case BUSINESS_INPUT_TEXT:
213       case BUSINESS_SELECT:
214       case BUSINESS_TEXTAREA:
215       case BUSINESS_COOKIE:
216         if (isPresent()) {
217           // should not be
218           throw new HttpIncorrectRequestException(
219               "Field already filled: " + getFieldname());
220         }
221         fieldvalue = value;
222         setPresent(true);
223         break;
224       default:
225         break;
226     }
227   }
228 
229   @Override
230   public final void setFileUpload(final FileUpload fileUpload)
231       throws HttpIncorrectRequestException {
232     if (getFieldtype() == FieldRole.BUSINESS_INPUT_FILE) {
233       if (isPresent()) {
234         // should not be
235         throw new HttpIncorrectRequestException(
236             "Field already filled: " + getFieldname());
237       }
238       this.fileUpload = fileUpload;
239       fieldvalue = fileUpload.getFilename();
240       setPresent(true);
241     } else {
242       // should not be
243       throw new HttpIncorrectRequestException(
244           "Field with wrong type (should be File): " + getFieldname());
245     }
246   }
247 
248 }