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    }