/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* 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.qualogy.qafe.gwt.client.ui.renderer;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.qualogy.qafe.gwt.client.component.LabeledTextAreaFieldWidget;
import com.qualogy.qafe.gwt.client.component.LabeledTextFieldWidget;
import com.qualogy.qafe.gwt.client.component.QTextArea;
import com.qualogy.qafe.gwt.client.context.ClientApplicationContext;
import com.qualogy.qafe.gwt.client.ui.widget.RichTextToolbar;
import com.qualogy.qafe.gwt.client.vo.ui.ComponentGVO;
import com.qualogy.qafe.gwt.client.vo.ui.TextAreaGVO;
public class TextAreaRenderer extends AbstractComponentRenderer {
// CHECKSTYLE.OFF: CyclomaticComplexity
public UIObject render(ComponentGVO component, String uuid, String parent, String context) {
Widget uiObject = null;
if (component != null) {
if (component instanceof TextAreaGVO) {
final ComponentGVO finalComponentGVO = component;
final String finalUuid = uuid;
final String finalParent = parent;
TextAreaGVO gvo = (TextAreaGVO) component;
if (gvo.getDisplayname() != null && gvo.getDisplayname().length() > 0) {
if (gvo.getMenu() != null) {
uiObject = new LabeledTextAreaFieldWidget(gvo.getDisplayname(), gvo.getOrientation(), gvo, uuid, parent) {
@Override
public void onBrowserEvent(Event event) {
if (event.getTypeInt() == Event.ONCONTEXTMENU) {
DOM.eventPreventDefault(event);
applyContextMenu(event, finalComponentGVO, finalUuid, finalParent);
}
super.onBrowserEvent(event);
}
@Override
protected void setElement(Element elem) {
super.setElement(elem);
sinkEvents(Event.ONCONTEXTMENU);
}
};
} else {
uiObject = new LabeledTextAreaFieldWidget(gvo.getDisplayname(), gvo.getOrientation(), gvo, uuid, parent);
}
} else {
if (gvo.getRich() != null) {
if (gvo.getRich().booleanValue()) {
// This sample is taken from the KitchenSick demo
RichTextArea area = new RichTextArea();
RichTextToolbar tb = new RichTextToolbar(area);
VerticalPanel p = null;
if (gvo.getMenu() != null) {
p = new VerticalPanel() {
@Override
public void onBrowserEvent(Event event) {
if (event.getTypeInt() == Event.ONCONTEXTMENU) {
DOM.eventPreventDefault(event);
applyContextMenu(event, finalComponentGVO, finalUuid, finalParent);
}
super.onBrowserEvent(event);
}
@Override
protected void setElement(Element elem) {
super.setElement(elem);
sinkEvents(Event.ONCONTEXTMENU);
}
};
} else {
p = new VerticalPanel();
}
p.add(tb);
p.add(area);
area.setHeight("14em");
area.setWidth("100%");
tb.setWidth("100%");
p.setWidth("100%");
//p.setStyleName("qafe_rich_textarea");
DOM.setStyleAttribute(p.getElement(), "marginRight", "4px");
RendererHelper.fillIn(component, area, uuid, parent, context);
RendererHelper.fillIn(component, p, uuid, parent, context);
area.setText(gvo.getValue());
area.setEnabled(gvo.getEditable().booleanValue());
uiObject = p;
if (gvo.getRequired() != null && gvo.getRequired().booleanValue()) {
DOM.setElementProperty(uiObject.getElement(), "required", "true");
RendererHelper.setStyleForElement(uiObject.getElement(), "background", "red");
}
} else {
if (gvo.getMenu() != null) {
uiObject = new QTextArea() {
@Override
public void onBrowserEvent(Event event) {
if (event.getTypeInt() == Event.ONCONTEXTMENU) {
DOM.eventPreventDefault(event);
applyContextMenu(event, finalComponentGVO, finalUuid, finalParent);
}
super.onBrowserEvent(event);
}
@Override
protected void setElement(Element elem) {
super.setElement(elem);
sinkEvents(Event.ONCONTEXTMENU);
}
};
} else {
uiObject = new QTextArea();
}
QTextArea ta = (QTextArea)uiObject;
RendererHelper.fillIn(component, uiObject, uuid, parent, context);
if (gvo.getCols() > 0) {
ta.setCharacterWidth(gvo.getCols());
} else {
ta.setCharacterWidth(80);
}
if (gvo.getMaxLength() != null) {
if (gvo.getMaxLength().intValue() > 0) {
DOM.setElementAttribute(uiObject.getElement(), "maxlength", gvo.getMaxLength().toString());
}
}
ta.setVisibleLines(gvo.getRows());
ta.setText(gvo.getValue());
ta.setEditable(gvo.getEditable().booleanValue());
if (gvo.getRequired() != null && gvo.getRequired().booleanValue()) {
DOM.setElementProperty(uiObject.getElement(), "required", "true");
RendererHelper.setStyleForElement(uiObject.getElement(), "background", "red");
((QTextArea)uiObject).addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
if (event.getSource() instanceof QTextArea) {
UIObject ui = (UIObject) event.getSource();
String value = ((QTextArea) ui).getText();
if (value != null && value.length() > 0) {
ui.removeStyleName("qafe_invalid_field");
} else {
ui.addStyleName("qafe_invalid_field");
}
}
}
});
}
}
}
}
//uiObject.setStylePrimaryName(gvo.getStyleClassName());
handleMaxLengthAttribute(gvo, uiObject);
handleMinLengthAttribute(gvo, uiObject);
}
}
return uiObject;
}
// CHECKSTYLE.ON: CyclomaticComplexity
private void handleMinLengthAttribute(final TextAreaGVO gvo, UIObject uiObject) {
if (gvo.getMinLength() != null) {
final int minLength = gvo.getMinLength().intValue();
if (uiObject instanceof QTextArea) {
((QTextArea) uiObject).addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getCharCode() == KeyCodes.KEY_TAB || event.getCharCode() == KeyCodes.KEY_ENTER) {
if (event.getSource() instanceof QTextArea) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() < minLength)) {
ClientApplicationContext.getInstance().log("Textarea minimum length check", "The length of this field [" + gvo.getId() + "] must be larger than " + minLength, true);
}
}
}
}
});
((QTextArea) uiObject).addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
if (event.getSource() instanceof QTextArea) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() < minLength)) {
ClientApplicationContext.getInstance().log("Textarea minimum length check", "The length of this field [" + gvo.getId() + "] must be larger than " + minLength, true);
}
}
}
});
} else if (uiObject instanceof LabeledTextFieldWidget) {
final String prompt = ((LabeledTextFieldWidget) uiObject).getLabel().getText();
((LabeledTextFieldWidget) uiObject).addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getCharCode() == KeyCodes.KEY_TAB || event.getCharCode() == KeyCodes.KEY_ENTER) {
if (event.getSource() instanceof QTextArea) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() < minLength)) {
ClientApplicationContext.getInstance().log("Textarea minimum length check", "The length of this field [" + prompt + "] must be larger than " + minLength, true);
}
}
}
}
});
((LabeledTextFieldWidget) uiObject).addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
if (event.getSource() instanceof LabeledTextFieldWidget) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() < minLength)) {
ClientApplicationContext.getInstance().log("Textarea minimum length check", "The length of this field [" + prompt + "] must be larger than " + minLength, true);
}
}
}
});
}
}
}
private void handleMaxLengthAttribute(final TextAreaGVO gvo, UIObject uiObject) {
if (gvo.getMaxLength() != null) {
final int maxLength = gvo.getMaxLength().intValue();
if (uiObject instanceof QTextArea) {
((QTextArea) uiObject).setMaxlength(gvo.getMaxLength().intValue());
((QTextArea) uiObject).addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getCharCode() == KeyCodes.KEY_TAB || event.getCharCode() == KeyCodes.KEY_ENTER) {
if (event.getSource() instanceof QTextArea) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() > maxLength)) {
ClientApplicationContext.getInstance().log("Textarea maximum length check", "The length of this field [" + gvo.getId() + "] must be smaller than " + maxLength, true);
}
}
}
}
});
((QTextArea) uiObject).addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
if (event.getSource() instanceof QTextArea) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() > maxLength)) {
ClientApplicationContext.getInstance().log("Textarea maximum length check", "The length of this field [" + gvo.getId() + "] must be smaller than " + maxLength, true);
}
}
}
});
} else if (uiObject instanceof LabeledTextFieldWidget) {
((LabeledTextFieldWidget) uiObject).setMaxLength(gvo.getMaxLength().intValue());
final String prompt = ((LabeledTextFieldWidget) uiObject).getLabel().getText();
((LabeledTextFieldWidget) uiObject).addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getCharCode() == KeyCodes.KEY_TAB || event.getCharCode() == KeyCodes.KEY_ENTER) {
if (event.getSource() instanceof QTextArea) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() > maxLength)) {
ClientApplicationContext.getInstance().log("Textarea maximum length check", "The length of this field [" + prompt + "] must be smaller than " + maxLength, true);
}
}
}
}
});
((LabeledTextFieldWidget) uiObject).addBlurHandler(new BlurHandler() {
public void onBlur(BlurEvent event) {
if (event.getSource() instanceof LabeledTextFieldWidget) {
QTextArea textArea = (QTextArea) event.getSource();
if ((textArea.getText() != null && textArea.getText().length() > maxLength)) {
ClientApplicationContext.getInstance().log("Textarea maximum length check", "The length of this field [" + prompt + "] must be smaller than " + maxLength, true);
}
}
}
});
}
}
}
}