1   /*
2    * Copyright 2003 - 2013 The eFaps Team
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   * Revision:        $Rev$
17   * Last Changed:    $Date$
18   * Last Changed By: $Author$
19   */
20  
21  package org.efaps.admin.datamodel.ui;
22  
23  import java.text.Collator;
24  import java.util.List;
25  
26  import org.apache.commons.lang3.StringEscapeUtils;
27  import org.efaps.admin.dbproperty.DBProperties;
28  import org.efaps.admin.ui.AbstractUserInterfaceObject.TargetMode;
29  import org.efaps.admin.ui.field.Field;
30  import org.efaps.db.Context;
31  import org.efaps.util.EFapsException;
32  import org.efaps.util.cache.CacheReloadException;
33  
34  /**
35   * Class to represent a String for the user interface.
36   *
37   * @author The eFaps Team
38   * @version $Id$
39   *
40   */
41  public class StringUI
42      extends AbstractUI
43  {
44  
45      /**
46       * Needed for serialization.
47       */
48      private static final long serialVersionUID = 1L;
49  
50      /**
51       * {@inheritDoc}
52       */
53      @Override
54      public String getReadOnlyHtml(final FieldValue _fieldValue)
55      {
56          final StringBuilder ret = new StringBuilder();
57          final Field field = _fieldValue.getField();
58          final Object value = _fieldValue.getValue();
59  
60          if (value instanceof List<?>) {
61              final List<?> values = (List<?>) value;
62              boolean first = true;
63              for (final Object obj : values) {
64                  final String tmp = obj.toString();
65                  if (tmp != null) {
66                      if (first) {
67                          first = false;
68                      } else {
69                          ret.append("<br/>");
70                      }
71                      ret.append(StringEscapeUtils.escapeHtml4(tmp).replaceAll("\\n", "<br/>"));
72                  }
73              }
74          } else {
75              final String tmp = value != null ? value.toString() : "";
76              if (tmp != null) {
77                  ret.append("<span name=\"").append(field.getName()).append("\" ").append(UIInterface.EFAPSTMPTAG)
78                      .append(">").append(StringEscapeUtils.escapeHtml4(tmp).replaceAll("\\n", "<br/>"))
79                      .append("</span>");
80              }
81          }
82          return ret.toString();
83      }
84  
85      /**
86       * {@inheritDoc}
87       */
88      @Override
89      public String getHiddenHtml(final FieldValue _fieldValue)
90          throws EFapsException
91      {
92          final StringBuilder ret = new StringBuilder();
93          final Field field = _fieldValue.getField();
94          final Object value = _fieldValue.getValue();
95          final String tmp = value != null ? value.toString() : "";
96  
97          ret.append("<input type=\"hidden\" ").append(" name=\"").append(field.getName())
98              .append("\" value=\"").append(StringEscapeUtils.escapeHtml4(tmp)).append("\"")
99              .append(UIInterface.EFAPSTMPTAG).append("/>");
100 
101         return ret.toString();
102     }
103 
104     /**
105      * {@inheritDoc}
106      */
107     @Override
108     public String getEditHtml(final FieldValue _fieldValue)
109     {
110         final StringBuilder ret = new StringBuilder();
111         final Field field = _fieldValue.getField();
112         final Object value = _fieldValue.getValue();
113         if (_fieldValue.getTargetMode().equals(TargetMode.SEARCH)) {
114             final String tmp = value != null ? value.toString() : "*";
115             ret.append("<input type=\"text\"")
116                 .append(" size=\"").append(field.getCols())
117                 .append("\" name=\"").append(field.getName())
118                 .append("\" value=\"").append(StringEscapeUtils.escapeHtml4(tmp)).append("\" />");
119         } else {
120             final String tmp = value != null ? value.toString() : "";
121             if (field.getRows() > 1) {
122                 ret.append("<textarea type=\"text\"")
123                                 .append(" cols=\"").append(field.getCols())
124                                 .append("\" rows=\"").append(field.getRows())
125                                 .append("\" name=\"").append(field.getName()).append("\"")
126                                 .append(UIInterface.EFAPSTMPTAG).append("/>");
127                 if (value != null) {
128                     ret.append(StringEscapeUtils.escapeHtml4(tmp));
129                 }
130                 ret.append("</textarea>");
131             } else {
132                 ret.append("<input type=\"text\" size=\"").append(field.getCols())
133                     .append("\" name=\"").append(field.getName())
134                     .append("\" value=\"").append(StringEscapeUtils.escapeHtml4(tmp))
135                     .append("\"").append(UIInterface.EFAPSTMPTAG).append("/>");
136             }
137         }
138         return ret.toString();
139     }
140 
141     /**
142      * {@inheritDoc}
143      */
144     @Override
145     public String getStringValue(final FieldValue _fieldValue)
146         throws EFapsException
147     {
148         return _fieldValue.getValue() == null ? "" : _fieldValue.getValue().toString();
149     }
150 
151     /**
152      * {@inheritDoc}
153      */
154     @Override
155     public int compare(final FieldValue _fieldValue,
156                        final FieldValue _fieldValue2)
157     {
158         final String value = _fieldValue.getValue().toString();
159         final String value2 = _fieldValue2.getValue().toString();
160         Collator collator;
161         try {
162             collator = Collator.getInstance(Context.getThreadContext().getLocale());
163         } catch (final EFapsException e) {
164             // on an error the default locale is used
165             collator =  Collator.getInstance();
166         }
167         collator.setStrength(Collator.PRIMARY);
168         return collator.compare(value, value2);
169     }
170 
171     /**
172      * {@inheritDoc}
173      */
174     @Override
175     public String validateValue(final UIValue _value)
176         throws CacheReloadException
177     {
178         String ret = null;
179         if (_value.getAttribute() != null && _value.getDbValue() != null) {
180             if (_value.getAttribute().getSize() > 0
181                             && String.valueOf(_value.getDbValue()).length() > _value.getAttribute().getSize()) {
182                 ret = DBProperties.getProperty(StringUI.class.getName() + ".InvalidValue") + " "
183                                 + _value.getAttribute().getSize();
184             }
185         }
186         return ret;
187     }
188 
189     /**
190      * {@inheritDoc}
191      */
192     @Override
193     public Object getObject4Compare(final FieldValue _fieldValue)
194         throws EFapsException
195     {
196         return _fieldValue.getValue();
197     }
198 }