Package org.rhq.coregui.client.components.table

Source Code of org.rhq.coregui.client.components.table.PropertyGrid

/*
* RHQ Management Platform
* Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.coregui.client.components.table;

import java.util.Map;

import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.events.EditorEnterEvent;
import com.smartgwt.client.widgets.grid.events.EditorEnterHandler;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;


/**
* A PropertyGrid based on a {@link ListGrid} that automatically creates two
* fields (one for name column and other for values column) and can display a
* custom editor for every row
*
* @author Dan Mihai Ile
*/
public class PropertyGrid extends ListGrid {
    /**
     * Map to hold the editors
     */
    private Map<String, FormItem> editorsMap;

    /**
     * Hold the name of the attribute on a {@link Record} which contains the
     * editorsMap key
     */
    private String valueFieldAttribute;

    /**
     * Create a new {@link PropertyGrid} with two column fields (first for
     * names, second for values)
     */
    public PropertyGrid() {

        // Create the 2 fields - one for names, other for values.
        ListGridField nameField = new ListGridField();
        nameField.setCanEdit(false);
        ListGridField valueField = new ListGridField();
        valueField.setCanEdit(true);

        setFields(nameField, valueField);

        // listeners to intercept when the user starts to edit data
        addEditorEnterHandler(new EditorEnterHandler() {
            public void onEditorEnter(EditorEnterEvent event) {
                Record record = event.getRecord();
                enableSpecificEditor(record);
            }
        });
        addRecordClickHandler(new RecordClickHandler() {
            public void onRecordClick(RecordClickEvent event) {
                Record record = event.getRecord();
                enableSpecificEditor(record);
            }
        });

    }

    /**
     * The name column field
     *
     * @return
     */
    public ListGridField getNameField() {
        return getField(0);
    }

    /**
     * The values column field
     *
     * @return
     */
    public ListGridField getValuesField() {
        return getField(1);
    }

    /**
     * Set the name of the attribute from where the row will get the editor name
     * to be used on the {@link Map} from where the rows will get its editors
     * <p/>
     * When an edit starts the {@link PropertyGrid} will retrieve the key of the
     * editor form the row's attributes and use that key on the map to get the
     * editor to be used
     *
     * @param attribute the name of the attribute on the rows that contains the key of
     *                  the editor
     * @param map       a map that contains the key of the editor and the editor
     */
    public void setEditorsMap(String attribute, Map<String, FormItem> map) {
        this.valueFieldAttribute = attribute;
        this.editorsMap = map;
    }

    /**
     * Enable the specific editor for the given record
     *
     * @param record the record
     */
    public void enableSpecificEditor(Record record) {
        boolean readOnly = record.getAttributeAsBoolean("readOnly");
        if (editorsMap != null && !readOnly) {
            String attribute = record.getAttribute(valueFieldAttribute);
            if (editorsMap.containsKey(attribute)) {
                FormItem formItem = editorsMap.get(attribute);
        getField(1).setEditorType(formItem);
      }
    }
  }
}
TOP

Related Classes of org.rhq.coregui.client.components.table.PropertyGrid

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.