/* * OneCMDB, an open source configuration management project. * Copyright 2007, Lokomo Systems AB, and individual contributors * as indicated by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.onecmdb.ui.gwt.toolkit.client.view.input; import java.util.Iterator; import java.util.List; import org.gwtiger.client.widget.field.BaseFieldLabelWidget; import org.onecmdb.ui.gwt.toolkit.client.control.OneCMDBUtils; import org.onecmdb.ui.gwt.toolkit.client.control.input.AbstractAttributeValue; import org.onecmdb.ui.gwt.toolkit.client.control.input.AttributeValue; import org.onecmdb.ui.gwt.toolkit.client.control.input.MultipleAttributeValue; import org.onecmdb.ui.gwt.toolkit.client.control.input.ReferenceAttributeValue; import org.onecmdb.ui.gwt.toolkit.client.control.input.TextAttributeControl; import org.onecmdb.ui.gwt.toolkit.client.control.listener.ISelectListener; import org.onecmdb.ui.gwt.toolkit.client.control.select.SelectMultipleDataSourceControl; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.GWT_AttributeBean; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.GWT_ValueBean; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIDisplayNameWidget; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIIconWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewCheckboxFiledWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewDateFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewDateTimeFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewIntegerFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewLabelFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewPasswordFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewSuggestTestField; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewTextAreaFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewTextFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewTextListFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.basefield.NewURIFieldWidget; import org.onecmdb.ui.gwt.toolkit.client.view.popup.SelectCIPopup; import org.onecmdb.ui.gwt.toolkit.client.view.popup.TooltipPopup; import org.onecmdb.ui.gwt.toolkit.client.view.table.ColumnHeaderWidget; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public class AttributeRender implements IAttributeRender { public static final int MAX_TABLE_COLUMN_CHARS = 30; private boolean isNew; public Widget getColumnWidget(Object column) { if (column instanceof MultipleAttributeValue) { MultipleAttributeValue mValue = (MultipleAttributeValue)column; return(new MultiValueTableWidget(mValue)); } if (column instanceof ReferenceAttributeValue) { return(new ReferenceValueWidget((ReferenceAttributeValue)column)); } if (column instanceof AttributeValue) { // Create Header widget. AttributeValue attr = (AttributeValue)column; if (attr.isComplex()) { return(new CIDisplayNameWidget(attr.getStringValue())); } else { if (attr.getType().equals("xs:password")) { attr.getCtrl().setReadonly(true); NewPasswordFieldWidget textArea = new NewPasswordFieldWidget(attr); textArea.getBaseField().setWidth("5em"); return(textArea); } if (attr.getType().equals("xs:boolean")) { if ("true".equals(attr.getStringValue())) { Image image = new Image("images/true.gif"); image.setTitle("true"); return(image); } Label l = new Label(" "); l.setTitle("false"); return(l); } String value = attr.getStringValue(); String concatValue = value; if (!attr.isNullValue()) { if (value.length() > MAX_TABLE_COLUMN_CHARS) { concatValue = value.substring(0, (MAX_TABLE_COLUMN_CHARS-3)); concatValue += "..."; } } Label label = new Label(concatValue, false); label.setTitle(value); return(label); } } return(new Label("<unknown>")); } public Widget getColumnHeaderWidget(Object header) { if (header instanceof AbstractAttributeValue) { // Create Header widget. AbstractAttributeValue attr = (AbstractAttributeValue)header; if (true) { return(new ColumnHeaderWidget(attr)); } if (true) { Label name = new Label(attr.getDisplayName()); return(name); } VerticalPanel panel = new VerticalPanel(); if (attr.isComplex()) { // Icon CIIconWidget icon = new CIIconWidget(attr.getType()); icon.update(); panel.add(icon); panel.setCellHorizontalAlignment(icon, HorizontalPanel.ALIGN_LEFT); } // DisplayName. Label name = new Label(attr.getDisplayName()); panel.add(name); panel.setCellHorizontalAlignment(name, HorizontalPanel.ALIGN_LEFT); return(panel); } return(new Label("<unknown>")); } public Widget getWidget(Object object) { Widget widget = null; if (object instanceof MultipleAttributeValue) { final MultipleAttributeValue mValue = (MultipleAttributeValue)object; final CIMultiValueWidget multi = new CIMultiValueWidget(mValue); multi.setAddListener(new ClickListener() { public void onClick(Widget sender) { if (!mValue.isComplex()) { // Add a new value. AttributeValue newValue = mValue.newAttributeValue(""); mValue.addAttributeValue(newValue); multi.addValue(getSingleValueInput(newValue)); return; } SelectMultipleDataSourceControl ctrl = new SelectMultipleDataSourceControl(mValue); final SelectCIPopup popup = new SelectCIPopup("Select Multiple Instances", ctrl); ctrl.setSelectListener(new ISelectListener() { public void onSelect(Object selected) { if (selected instanceof List) { mValue.setAttributeValues((List)selected); multi.clearValues(); for (Iterator iter = mValue.getAttributeValues().iterator(); iter.hasNext(); ) { AttributeValue aValue = (AttributeValue) iter.next(); multi.addValue(getSingleValueInput(aValue)); } popup.hide(); } } }); int top = multi.getBaseField().getAbsoluteTop() + multi.getBaseField().getOffsetHeight() + 2; int left = multi.getBaseField().getAbsoluteLeft() + 8; popup.setPopupPosition(left, top); popup.show(); } }); for (Iterator iter = mValue.getAttributeValues().iterator(); iter.hasNext(); ) { AttributeValue aValue = (AttributeValue) iter.next(); if (isNew()) { if (!aValue.isNullValue()) { multi.addValue(getSingleValueInput(aValue)); } } else { multi.addValue(getSingleValueInput(aValue)); } } widget = multi; } else if (object instanceof AttributeValue) { widget = getSingleValueInput((AttributeValue)object); } if (object instanceof AbstractAttributeValue) { Image image = new Image("images/eclipse/widget_closed.gif"); ValidateHorizontalPanel hPanel = new ValidateHorizontalPanel(widget); hPanel.add(image); hPanel.add(widget); hPanel.setCellVerticalAlignment(image, VerticalPanel.ALIGN_MIDDLE); /* widget.setWidth("100%"); hPanel.setCellWidth(widget, "100%"); hPanel.setCellHorizontalAlignment(widget, HorizontalPanel.ALIGN_LEFT); */ new TooltipPopup(image, getAttributeTitle((AbstractAttributeValue)object)); ((AbstractAttributeValue)object).setWidget(hPanel); return(hPanel); } return(widget); } private String getAttributeTitle(AbstractAttributeValue value) { StringBuffer b = new StringBuffer(); b.append("<b>Alias</b><br/>"); b.append(value.getAlias()); b.append("<br/>"); b.append("<br/>"); b.append("<b>Description</b><br>"); b.append(value.getDescription()); return(b.toString()); } public BaseFieldLabelWidget getSingleValueInput(AttributeValue value) { if (value.isComplex()) { return(new CISingleValueWidget(value)); } /* if (value.getCtrl().isReadonly()) { if (value.getCtrl() instanceof TextAttributeControl) { TextAttributeControl txtCtrl = (TextAttributeControl)value.getCtrl(); if (TextAttributeControl.TEXT_AREA_TYPE.equals(txtCtrl.getTextType())) { NewTextAreaFieldWidget textArea = new NewTextAreaFieldWidget(value); return(textArea); } if (TextAttributeControl.TEXT_BOX_TYPE.equals(txtCtrl.getTextType())) { NewTextFieldWidget textArea = new NewTextFieldWidget(value); return(textArea); } if (TextAttributeControl.TEXT_PASSWORD_TYPE.equals(txtCtrl.getTextType())) { NewPasswordFieldWidget textArea = new NewPasswordFieldWidget(value); return(textArea); } } if ("xs:password".equals(value.getType())) { NewPasswordFieldWidget textArea = new NewPasswordFieldWidget(value); return(textArea); } NewLabelFieldWidget labelField = new NewLabelFieldWidget(value); return(labelField); } */ if (OneCMDBUtils.STRING_TYPE.equals(value.getType())) { // Check for special text. if (value.getCtrl() instanceof TextAttributeControl) { TextAttributeControl txtCtrl = (TextAttributeControl)value.getCtrl(); if (TextAttributeControl.TEXT_AREA_TYPE.equals(txtCtrl.getTextType())) { NewTextAreaFieldWidget textArea = new NewTextAreaFieldWidget(value); return(textArea); } if (TextAttributeControl.TEXT_BOX_TYPE.equals(txtCtrl.getTextType())) { NewTextFieldWidget textArea = new NewTextFieldWidget(value); return(textArea); } if (TextAttributeControl.TEXT_PASSWORD_TYPE.equals(txtCtrl.getTextType())) { NewPasswordFieldWidget textArea = new NewPasswordFieldWidget(value); return(textArea); } if (TextAttributeControl.TEXT_ENUM_TYPE.equals(txtCtrl.getTextType())) { NewTextListFieldWidget textArea = new NewTextListFieldWidget(value); return(textArea); } if (TextAttributeControl.TEXT_SUGGEST_TYPE.equals(txtCtrl.getTextType())) { NewSuggestTestField textArea = new NewSuggestTestField(value); return(textArea); } } NewTextFieldWidget textField = new NewTextFieldWidget(value); return(textField); } if (OneCMDBUtils.BOOLEAN_TYPE.equals(value.getType())) { NewCheckboxFiledWidget checkBox = new NewCheckboxFiledWidget(value); return(checkBox); } if (OneCMDBUtils.PASSWORD_TYPE.equals(value.getType())) { NewPasswordFieldWidget textArea = new NewPasswordFieldWidget(value); return(textArea); } if (OneCMDBUtils.ANYURI_TYPE.equals(value.getType())) { NewURIFieldWidget textArea = new NewURIFieldWidget(value); return(textArea); } if (OneCMDBUtils.INTEGER_TYPE.equals(value.getType())) { NewIntegerFieldWidget textArea = new NewIntegerFieldWidget(value); return(textArea); } if (OneCMDBUtils.DATE_TYPE.equals(value.getType())) { NewDateFieldWidget textArea = new NewDateFieldWidget(value); return(textArea); } if (OneCMDBUtils.DATETIME_TYPE.equals(value.getType())) { NewDateTimeFieldWidget textArea = new NewDateTimeFieldWidget(value); return(textArea); } /* case "xs:string": case "xs:password": case "xs:boolean": case "xs:integer": case "xs:date": */ NewLabelFieldWidget labelField = new NewLabelFieldWidget(value); return(labelField); } /** * Convert input widgets to GWT_ValueBean(s) as a long list. * * @return */ /* public List getValues() { List list = new ArrayList(); for (Iterator iter = widgetToObject.keySet().iterator(); iter.hasNext();) { Object o = iter.next(); if (o instanceof IBaseField) { IBaseField baseField = (IBaseField)o; MultipleAttributeValue aValue = (MultipleAttributeValue)widgetToObject.get(baseField); Object value = baseField.getValue(); convertValue(list, aValue.getAttributeBean(), value); } } return(list); } */ private void convertValue(List result, GWT_AttributeBean aBean, Object value) { if (value instanceof String) { result.add(allocValue(aBean, (String)value)); } if (value instanceof List) { for (Iterator iter = ((List)value).iterator(); iter.hasNext();) { convertValue(result, aBean, iter.next()); } } } private GWT_ValueBean allocValue(GWT_AttributeBean aBean, String value) { System.out.println("ALLOCATE VALUE: " + aBean.getAlias() + "=" + value); GWT_ValueBean vBean = new GWT_ValueBean(); vBean.setAlias(aBean.getAlias()); vBean.setComplexValue(aBean.isComplexType()); vBean.setValue(value); return(vBean); } public void setIsNew(boolean value) { this.isNew = value; } public boolean isNew() { return(this.isNew); } /* public Widget getTabelCellWidget(Object colObject, boolean b) { if (colObject instanceof MultipleAttributeValue) { MultipleAttributeValue aValue = (MultipleAttributeValue)colObject; String value = aValue.getSingleValue(); if (value != null) { if (aValue.isComplex()) { return(new CIDisplayNameWidget(value)); } else { return(new Label(aValue.getSingleValue())); } } return(new Label("<empty>")); } return(new Label("Unkown Object")); } */ }