001 package org.gwtbootstrap3.client.ui.base;
002
003 /*
004 * #%L
005 * GwtBootstrap3
006 * %%
007 * Copyright (C) 2013 GwtBootstrap3
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 *
013 * http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023 import java.util.List;
024
025 import org.gwtbootstrap3.client.ui.base.helper.StyleHelper;
026 import org.gwtbootstrap3.client.ui.base.mixin.BlankValidatorMixin;
027 import org.gwtbootstrap3.client.ui.base.mixin.ErrorHandlerMixin;
028 import org.gwtbootstrap3.client.ui.base.mixin.IdMixin;
029 import org.gwtbootstrap3.client.ui.constants.DeviceSize;
030 import org.gwtbootstrap3.client.ui.constants.InputSize;
031 import org.gwtbootstrap3.client.ui.form.error.ErrorHandler;
032 import org.gwtbootstrap3.client.ui.form.error.ErrorHandlerType;
033 import org.gwtbootstrap3.client.ui.form.error.HasErrorHandler;
034 import org.gwtbootstrap3.client.ui.form.validator.HasBlankValidator;
035 import org.gwtbootstrap3.client.ui.form.validator.HasValidators;
036 import org.gwtbootstrap3.client.ui.form.validator.Validator;
037
038 import com.google.gwt.dom.client.Element;
039 import com.google.gwt.editor.client.EditorError;
040 import com.google.gwt.editor.client.HasEditorErrors;
041 import com.google.gwt.text.shared.Parser;
042 import com.google.gwt.text.shared.Renderer;
043
044 public class ValueBoxBase<T> extends com.google.gwt.user.client.ui.ValueBoxBase<T> implements HasId, HasResponsiveness,
045 HasPlaceholder, HasAutoComplete, HasSize<InputSize>, HasEditorErrors<T>, HasErrorHandler, HasValidators<T>,
046 HasBlankValidator<T> {
047
048 private static final String MAX_LENGTH = "maxlength";
049
050 private final IdMixin<ValueBoxBase<T>> idMixin = new IdMixin<ValueBoxBase<T>>(this);
051
052 private final ErrorHandlerMixin<T> errorHandlerMixin = new ErrorHandlerMixin<T>(this);
053
054 private final BlankValidatorMixin<ValueBoxBase<T>, T> validatorMixin = new BlankValidatorMixin<ValueBoxBase<T>, T>(this,
055 errorHandlerMixin.getErrorHandler());
056
057 /**
058 * Creates a value box that wraps the given browser element handle. This is only used by subclasses.
059 *
060 * @param elem the browser element to wrap
061 */
062 protected ValueBoxBase(final Element elem, final Renderer<T> renderer, final Parser<T> parser) {
063 super(elem, renderer, parser);
064 }
065
066 public void setMaxLength(final int maxLength) {
067 getElement().setAttribute(MAX_LENGTH, Integer.toString(maxLength));
068 }
069
070 @Override
071 public void setPlaceholder(final String placeHolder) {
072 getElement().setAttribute(PLACEHOLDER, placeHolder != null ? placeHolder : "");
073 }
074
075 @Override
076 public String getPlaceholder() {
077 return getElement().getAttribute(PLACEHOLDER);
078 }
079
080 @Override
081 public void setAutoComplete(final boolean autoComplete) {
082 getElement().setAttribute(AUTO_COMPLETE, autoComplete ? ON : OFF);
083 }
084
085 @Override
086 public String getAutoComplete() {
087 return getElement().getAttribute(AUTO_COMPLETE);
088 }
089
090 @Override
091 public void setId(final String id) {
092 idMixin.setId(id);
093 }
094
095 @Override
096 public String getId() {
097 return idMixin.getId();
098 }
099
100 @Override
101 public void setVisibleOn(final DeviceSize deviceSize) {
102 StyleHelper.setVisibleOn(this, deviceSize);
103 }
104
105 @Override
106 public void setHiddenOn(final DeviceSize deviceSize) {
107 StyleHelper.setHiddenOn(this, deviceSize);
108 }
109
110 @Override
111 public void setSize(InputSize size) {
112 StyleHelper.addUniqueEnumStyleName(this, InputSize.class, size);
113 }
114
115 @Override
116 public InputSize getSize() {
117 return InputSize.fromStyleName(getStyleName());
118 }
119
120 /** {@inheritDoc} */
121 @Override
122 public void setValue(T value, boolean fireEvents) {
123 errorHandlerMixin.clearErrors();
124 super.setValue(value, fireEvents);
125 }
126
127 /** {@inheritDoc} */
128 @Override
129 public void showErrors(List<EditorError> errors) {
130 errorHandlerMixin.showErrors(errors);
131 }
132
133 /** {@inheritDoc} */
134 @Override
135 public ErrorHandler getErrorHandler() {
136 return errorHandlerMixin.getErrorHandler();
137 }
138
139 /** {@inheritDoc} */
140 @Override
141 public void setErrorHandler(ErrorHandler handler) {
142 errorHandlerMixin.setErrorHandler(handler);
143 }
144
145 /** {@inheritDoc} */
146 @Override
147 public ErrorHandlerType getErrorHandlerType() {
148 return errorHandlerMixin.getErrorHandlerType();
149 }
150
151 /** {@inheritDoc} */
152 @Override
153 public void setErrorHandlerType(ErrorHandlerType type) {
154 errorHandlerMixin.setErrorHandlerType(type);
155 }
156
157 @Override
158 public void setAllowBlank(boolean allowBlank) {
159 validatorMixin.setAllowBlank(allowBlank);
160 }
161
162 @Override
163 public boolean getAllowBlank() {
164 return validatorMixin.getAllowBlank();
165 }
166
167 @Override
168 public void addValidator(Validator<T> validator) {
169 validatorMixin.addValidator(validator);
170 }
171
172 @Override
173 public boolean getValidateOnBlur() {
174 return validatorMixin.getValidateOnBlur();
175 }
176
177 @Override
178 public void setValidateOnBlur(boolean validateOnBlur) {
179 validatorMixin.setValidateOnBlur(validateOnBlur);
180 }
181
182 @Override
183 public void setValidators(Validator<T>... validators) {
184 validatorMixin.setValidators(validators);
185 }
186
187 @Override
188 public boolean validate() {
189 return validatorMixin.validate();
190 }
191
192 @Override
193 public boolean validate(boolean show) {
194 return validatorMixin.validate(show);
195 }
196
197 @Override
198 public void reset() {
199 setValue(null);
200 validatorMixin.reset();
201 }
202
203 }