blob: 1dd245695e81b917861e82c6bf533b4ed42c2809 [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.sample.mobilewebapp.client.ui;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.EditorError;
import com.google.gwt.editor.client.HasEditorErrors;
import com.google.gwt.editor.client.IsEditor;
import java.util.List;
/**
* A simple editor that connects an {@link Editor} with an element to display
* editor errors.
*
* @param <T> the type of data being edited
*/
public class EditorDecorator<T> implements HasEditorErrors<T>, IsEditor<Editor<T>> {
/**
* Create a new {@link EditorDecorator} using the specified editor and error
* label.
*
* @param editor the editor to decorate
* @param errorLabel the label that displays errors
*/
public static <T> EditorDecorator<T> create(Editor<T> editor, Element errorLabel) {
return new EditorDecorator<T>(editor, errorLabel);
}
private final Editor<T> editor;
private final Element errorLabel;
/**
* Construct a new {@link EditorDecorator}.
*
* @param editor the editor to decorate
* @param errorLabel the label that displays errors
*/
public EditorDecorator(Editor<T> editor, Element errorLabel) {
this.editor = editor;
this.errorLabel = errorLabel;
}
public Editor<T> asEditor() {
return editor;
}
public void showErrors(List<EditorError> errors) {
StringBuilder sb = new StringBuilder();
for (EditorError error : errors) {
Editor<?> errorEditor = error.getEditor();
if (this.equals(errorEditor) || editor.equals(errorEditor)) {
sb.append("\n").append(error.getMessage());
}
}
if (sb.length() == 0) {
errorLabel.setInnerText("");
errorLabel.getStyle().setDisplay(Display.NONE);
return;
}
errorLabel.setInnerText(sb.substring(1));
errorLabel.getStyle().setDisplay(Display.INLINE_BLOCK);
}
}