001package 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 023import java.util.List; 024 025import org.gwtbootstrap3.client.ui.base.helper.StyleHelper; 026import org.gwtbootstrap3.client.ui.base.mixin.BlankValidatorMixin; 027import org.gwtbootstrap3.client.ui.base.mixin.ErrorHandlerMixin; 028import org.gwtbootstrap3.client.ui.base.mixin.IdMixin; 029import org.gwtbootstrap3.client.ui.constants.DeviceSize; 030import org.gwtbootstrap3.client.ui.constants.InputSize; 031import org.gwtbootstrap3.client.ui.form.error.ErrorHandler; 032import org.gwtbootstrap3.client.ui.form.error.ErrorHandlerType; 033import org.gwtbootstrap3.client.ui.form.error.HasErrorHandler; 034import org.gwtbootstrap3.client.ui.form.validator.HasBlankValidator; 035import org.gwtbootstrap3.client.ui.form.validator.HasValidators; 036import org.gwtbootstrap3.client.ui.form.validator.ValidationChangedEvent.ValidationChangedHandler; 037import org.gwtbootstrap3.client.ui.form.validator.Validator; 038 039import com.google.gwt.dom.client.Element; 040import com.google.gwt.editor.client.EditorError; 041import com.google.gwt.editor.client.HasEditorErrors; 042import com.google.gwt.text.shared.Parser; 043import com.google.gwt.text.shared.Renderer; 044import com.google.web.bindery.event.shared.HandlerRegistration; 045 046public class ValueBoxBase<T> extends com.google.gwt.user.client.ui.ValueBoxBase<T> implements HasId, HasReadOnly, 047 HasResponsiveness, HasPlaceholder, HasAutoComplete, HasSize<InputSize>, HasEditorErrors<T>, 048 HasErrorHandler, HasValidators<T>, HasBlankValidator<T> { 049 050 private static final String MAX_LENGTH = "maxlength"; 051 052 private final IdMixin<ValueBoxBase<T>> idMixin = new IdMixin<ValueBoxBase<T>>(this); 053 054 private final ErrorHandlerMixin<T> errorHandlerMixin = new ErrorHandlerMixin<T>(this); 055 056 private final BlankValidatorMixin<ValueBoxBase<T>, T> validatorMixin = new BlankValidatorMixin<ValueBoxBase<T>, T>(this, 057 errorHandlerMixin.getErrorHandler()); 058 059 /** 060 * Creates a value box that wraps the given browser element handle. This is only used by subclasses. 061 * 062 * @param elem the browser element to wrap 063 */ 064 protected ValueBoxBase(final Element elem, final Renderer<T> renderer, final Parser<T> parser) { 065 super(elem, renderer, parser); 066 } 067 068 public void setMaxLength(final int maxLength) { 069 getElement().setAttribute(MAX_LENGTH, Integer.toString(maxLength)); 070 } 071 072 @Override 073 public void setPlaceholder(final String placeHolder) { 074 getElement().setAttribute(PLACEHOLDER, placeHolder != null ? placeHolder : ""); 075 } 076 077 @Override 078 public String getPlaceholder() { 079 return getElement().getAttribute(PLACEHOLDER); 080 } 081 082 @Override 083 public void setAutoComplete(final boolean autoComplete) { 084 getElement().setAttribute(AUTO_COMPLETE, autoComplete ? ON : OFF); 085 } 086 087 @Override 088 public String getAutoComplete() { 089 return getElement().getAttribute(AUTO_COMPLETE); 090 } 091 092 @Override 093 public void setId(final String id) { 094 idMixin.setId(id); 095 } 096 097 @Override 098 public String getId() { 099 return idMixin.getId(); 100 } 101 102 @Override 103 public void setVisibleOn(final DeviceSize deviceSize) { 104 StyleHelper.setVisibleOn(this, deviceSize); 105 } 106 107 @Override 108 public void setHiddenOn(final DeviceSize deviceSize) { 109 StyleHelper.setHiddenOn(this, deviceSize); 110 } 111 112 @Override 113 public void setSize(InputSize size) { 114 StyleHelper.addUniqueEnumStyleName(this, InputSize.class, size); 115 } 116 117 @Override 118 public InputSize getSize() { 119 return InputSize.fromStyleName(getStyleName()); 120 } 121 122 /** {@inheritDoc} */ 123 @Override 124 public void setValue(T value, boolean fireEvents) { 125 errorHandlerMixin.clearErrors(); 126 super.setValue(value, fireEvents); 127 } 128 129 /** {@inheritDoc} */ 130 @Override 131 public void showErrors(List<EditorError> errors) { 132 errorHandlerMixin.showErrors(errors); 133 } 134 135 /** {@inheritDoc} */ 136 @Override 137 public ErrorHandler getErrorHandler() { 138 return errorHandlerMixin.getErrorHandler(); 139 } 140 141 /** {@inheritDoc} */ 142 @Override 143 public void setErrorHandler(ErrorHandler handler) { 144 errorHandlerMixin.setErrorHandler(handler); 145 validatorMixin.setErrorHandler(handler); 146 } 147 148 /** {@inheritDoc} */ 149 @Override 150 public ErrorHandlerType getErrorHandlerType() { 151 return errorHandlerMixin.getErrorHandlerType(); 152 } 153 154 /** {@inheritDoc} */ 155 @Override 156 public void setErrorHandlerType(ErrorHandlerType type) { 157 errorHandlerMixin.setErrorHandlerType(type); 158 } 159 160 @Override 161 public void setAllowBlank(boolean allowBlank) { 162 validatorMixin.setAllowBlank(allowBlank); 163 } 164 165 @Override 166 public boolean getAllowBlank() { 167 return validatorMixin.getAllowBlank(); 168 } 169 170 @Override 171 public void addValidator(Validator<T> validator) { 172 validatorMixin.addValidator(validator); 173 } 174 175 /** {@inheritDoc} */ 176 @Override 177 public boolean removeValidator(Validator<T> validator) { 178 return validatorMixin.removeValidator(validator); 179 } 180 181 @Override 182 public boolean getValidateOnBlur() { 183 return validatorMixin.getValidateOnBlur(); 184 } 185 186 @Override 187 public void setValidateOnBlur(boolean validateOnBlur) { 188 validatorMixin.setValidateOnBlur(validateOnBlur); 189 } 190 191 @Override 192 public void setValidators(@SuppressWarnings("unchecked") Validator<T>... validators) { 193 validatorMixin.setValidators(validators); 194 } 195 196 @Override 197 public boolean validate() { 198 return validatorMixin.validate(); 199 } 200 201 @Override 202 public boolean validate(boolean show) { 203 return validatorMixin.validate(show); 204 } 205 206 @Override 207 public void reset() { 208 setValue(null); 209 validatorMixin.reset(); 210 } 211 212 @Override 213 public HandlerRegistration addValidationChangedHandler(ValidationChangedHandler handler) { 214 return validatorMixin.addValidationChangedHandler(handler); 215 } 216 217}