/* * 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 org.gwtiger.client.widget.field.BaseFieldLabelWidget; import org.onecmdb.ui.gwt.toolkit.client.control.input.AttributeValue; import org.onecmdb.ui.gwt.toolkit.client.control.input.IAttributeLoader; import org.onecmdb.ui.gwt.toolkit.client.control.input.IBaseField; import org.onecmdb.ui.gwt.toolkit.client.control.listener.ISelectListener; import org.onecmdb.ui.gwt.toolkit.client.control.listener.LoadListener; import org.onecmdb.ui.gwt.toolkit.client.control.select.SelectInheritanceDataSourceControl; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.GWT_CiBean; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.NullCIBean; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIDisplayNameWidget; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIIconDisplayNameWidget; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIIconWidget; import org.onecmdb.ui.gwt.toolkit.client.view.popup.SelectCIPopup; import com.google.gwt.user.client.rpc.AsyncCallback; 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.KeyboardListener; import com.google.gwt.user.client.ui.Widget; public class CISingleValueWidget extends BaseFieldLabelWidget implements IBaseField { private AttributeValue value; public CISingleValueWidget(final AttributeValue value) { super(value.getLabel()); this.value = value; this.value.setWidget(this); HorizontalPanel hPanel = new HorizontalPanel(); hPanel.setWidth("100%"); /* CIIconWidget icon = new CIIconWidget(value.getType()); panel.add(icon); */ super.setRequired(value.getCtrl().isRequiered()); hPanel.add(new CIIconWidget(value.getType())); final CIDisplayNameWidget valueWidget = new CIDisplayNameWidget(); valueWidget.setAlias(value.getStringValue()); if (value.getCtrl().getClickListener() != null) { valueWidget.setListener(value.getCtrl().getClickListener()); } valueWidget.setLoadListener(new LoadListener() { public void onLoadComplete(Object sender) { if (sender instanceof GWT_CiBean) { value.setValueAsCI((GWT_CiBean)sender); } } public void onLoadFailure(Object sender, Throwable caught) { // TODO Auto-generated method stub } public void onLoadStart(Object sender) { // TODO Auto-generated method stub } }); valueWidget.update(); hPanel.add(valueWidget); hPanel.setCellWidth(valueWidget, "100%"); hPanel.setCellHorizontalAlignment(valueWidget, HorizontalPanel.ALIGN_LEFT); if (value.getCtrl() instanceof IAttributeLoader) { IAttributeLoader aLoader = (IAttributeLoader)value.getCtrl(); aLoader.load(new AsyncCallback() { public void onFailure(Throwable caught) { // TODO Auto-generated method stub } public void onSuccess(Object result) { if (result instanceof GWT_CiBean) { valueWidget.load((GWT_CiBean)result); CISingleValueWidget.this.value.setValueAsCI(((GWT_CiBean)result)); CISingleValueWidget.this.validate(); } } }); } if (!value.getCtrl().isReadonly()) { /* final Image delete = new Image("images/delete-value.gif"); delete.setTitle("Reset this value"); delete.addClickListener(new ClickListener() { public void onClick(Widget sender) { valueWidget.load(null); CISingleValueWidget.this.value.setValueAsCI(null); CISingleValueWidget.this.validate(); } }); */ final Image change = new Image("images/eclipse/view_menu.gif"); change.addClickListener(new ClickListener() { public void onClick(Widget sender) { SelectInheritanceDataSourceControl ctrl = new SelectInheritanceDataSourceControl(CISingleValueWidget.this.value.getType()); ctrl.setFilterInstances(new Boolean(CISingleValueWidget.this.value.getCtrl().isSelectTemplate())); ctrl.setSelectInstances(CISingleValueWidget.this.value.getCtrl().isSelectTemplate()); ctrl.setRequiered(CISingleValueWidget.this.value.getCtrl().isRequiered()); ctrl.setShowSearch(true); String title = "Select a Instance"; if (CISingleValueWidget.this.value.getCtrl().isSelectTemplate()) { title = "Select a Template"; } final SelectCIPopup popup = new SelectCIPopup(title, ctrl); ctrl.setSelectListener(new ISelectListener() { public void onSelect(Object selected) { if (selected instanceof GWT_CiBean) { if (selected instanceof NullCIBean) { valueWidget.load(null); CISingleValueWidget.this.value.setValueAsCI(null); } else { valueWidget.load((GWT_CiBean)selected); CISingleValueWidget.this.value.setValueAsCI((GWT_CiBean)selected); } CISingleValueWidget.this.validate(); popup.hide(); } } }); int top = getBaseField().getAbsoluteTop() + getBaseField().getOffsetHeight() + 2; int left = getBaseField().getAbsoluteLeft() + 8; popup.setPopupPosition(left, top); popup.show(); } }); hPanel.add(change); hPanel.setCellHorizontalAlignment(change, HorizontalPanel.ALIGN_RIGHT); } // Create another panel to be able to set with to 100% HorizontalPanel panel = new HorizontalPanel(); panel.add(hPanel); addField(panel); if (value.getCtrl().isReadonly()) { panel.setStyleName("mdv-form-input-readonly"); } } public Widget getBaseField() { return(this.baseField); } public void clear() { } public boolean validate() { setRequired(value.getCtrl().isRequiered()); if (isRequired()) { // Need to have entered a value. if (value.getStringValue() == null) { showError("'" + getLabel() + "' is required", true); return(false); } } showError(false); return(true); } public void addKeyboardListener(KeyboardListener listener) { } }