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.util.Iterator;
24  import java.util.Map;
25  import java.util.Map.Entry;
26  import java.util.TreeMap;
27  
28  import org.efaps.admin.datamodel.Attribute;
29  import org.efaps.admin.event.EventType;
30  import org.efaps.admin.event.Parameter.ParameterValues;
31  import org.efaps.admin.event.Return;
32  import org.efaps.admin.event.Return.ReturnValues;
33  import org.efaps.admin.ui.AbstractUserInterfaceObject.TargetMode;
34  import org.efaps.admin.ui.field.Field;
35  import org.efaps.util.EFapsException;
36  
37  /**
38   * This Class is the representation of
39   * {@link org.efaps.admin.datamodel.attributetype.LinkWithRanges} for the user
40   * interface.<br>
41   * Depending on the access mode (e.g. edit) the Value of a Field is presented in
42   * an editable or non editable mode.
43   *
44   * @author The eFaps Team
45   * @version $Id$
46   */
47  public class LinkWithRangesUI
48      extends AbstractUI
49  {
50  
51      /**
52       * Needed for serialization.
53       */
54      private static final long serialVersionUID = 1L;
55  
56      /**
57       * {@inheritDoc}
58       */
59      @Override
60      public String getReadOnlyHtml(final FieldValue _fieldValue) throws EFapsException
61      {
62          final StringBuilder ret = new StringBuilder();
63          final Attribute attribute = _fieldValue.getAttribute();
64          if (_fieldValue.getValue() != null) {
65              if (attribute.hasEvents(EventType.RANGE_VALUE)) {
66                  for (final Return values : attribute.executeEvents(EventType.RANGE_VALUE,
67                                                             ParameterValues.UIOBJECT, _fieldValue,
68                                                             ParameterValues.ACCESSMODE, _fieldValue.getTargetMode())) {
69                      final Map<?, ?> map = (Map<?, ?>) values.get(ReturnValues.VALUES);
70                      for (final Entry<?, ?> entry : map.entrySet()) {
71                          if (entry.getValue().equals(_fieldValue.getValue().toString())) {
72                              ret.append(entry.getKey().toString());
73                          }
74                      }
75                  }
76              }
77          }
78          return ret.toString();
79      }
80  
81      /**
82       * {@inheritDoc}
83       */
84      @Override
85      public String getEditHtml(final FieldValue _fieldValue)
86          throws EFapsException
87      {
88          final StringBuilder ret = new StringBuilder();
89          final Attribute attribute = _fieldValue.getAttribute();
90          if (_fieldValue.getTargetMode().equals(TargetMode.SEARCH)) {
91              final Field field = _fieldValue.getField();
92              ret.append("<input type=\"text\" ")
93                  .append("size=\"").append(field.getCols())
94                  .append("\" name=\"").append(field.getName())
95                  .append("\" value=\"*\"").append("/>").toString();
96          } else {
97              if (attribute.hasEvents(EventType.RANGE_VALUE)) {
98                  for (final Return values : attribute.executeEvents(EventType.RANGE_VALUE,
99                                                             ParameterValues.UIOBJECT, _fieldValue,
100                                                            ParameterValues.ACCESSMODE, _fieldValue.getTargetMode())) {
101                     ret.append("<select name=\"").append(_fieldValue.getField().getName()).append("\" ")
102                         .append(UIInterface.EFAPSTMPTAG).append(" size=\"1\">");
103                     final Iterator<?> iter = ((TreeMap<?, ?>) values.get(ReturnValues.VALUES)).entrySet().iterator();
104 
105                     while (iter.hasNext()) {
106                         final Entry<?, ?> entry = (Entry<?, ?>) iter.next();
107                         ret.append("<option value=\"").append(entry.getValue());
108                         if (_fieldValue.getValue() != null
109                                         && ((!_fieldValue.getTargetMode().equals(TargetMode.CREATE)
110                                                         && _fieldValue.getValue().toString().equals(entry.getValue()))
111                                         || (_fieldValue.getTargetMode().equals(TargetMode.CREATE)
112                                                         && _fieldValue.getValue().toString().equals(entry.getKey())))) {
113                             ret.append("\" selected=\"selected");
114                         }
115                         ret.append("\">").append(entry.getKey()).append("</option>");
116                     }
117                     ret.append("</select>");
118                 }
119             }
120         }
121         return ret.toString();
122     }
123 
124     /**
125      * {@inheritDoc}
126      */
127     @Override
128     public int compare(final FieldValue _fieldValue,
129                        final FieldValue _fieldValue2)
130         throws EFapsException
131     {
132         return _fieldValue.getValue().toString().compareTo(_fieldValue2.getValue().toString());
133     }
134 
135 
136     /**
137      * {@inheritDoc}
138      */
139     @SuppressWarnings("unchecked")
140     @Override
141     public Object getValue(final UIValue _uiValue)
142         throws EFapsException
143     {
144         final Map<Object, Object> ret = new TreeMap<Object, Object>();
145         final Attribute attribute = _uiValue.getAttribute();
146         if (attribute != null && attribute.hasEvents(EventType.RANGE_VALUE)) {
147             for (final Return values : attribute.executeEvents(EventType.RANGE_VALUE,
148                                                        ParameterValues.UIOBJECT, _uiValue,
149                                                        ParameterValues.ACCESSMODE, _uiValue.getTargetMode())) {
150                 ret.putAll((Map<Object, Object>) values.get(ReturnValues.VALUES));
151             }
152         }
153         return ret;
154     }
155 }