org.onecmdb.ui.gwt.toolkit.client.view.input.CISingleValueWidget.java Source code

Java tutorial

Introduction

Here is the source code for org.onecmdb.ui.gwt.toolkit.client.view.input.CISingleValueWidget.java

Source

/*
 * 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) {
    }
}