Package org.drools.guvnor.client.ruleeditor

Source Code of org.drools.guvnor.client.ruleeditor.PropertiesWidget

/*
* Copyright 2005 JBoss Inc
*
* 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 org.drools.guvnor.client.ruleeditor;

import java.util.ArrayList;
import java.util.List;

import org.drools.guvnor.client.packages.AssetAttachmentFileWidget;
import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.client.messages.Constants;

import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.EditorGridPanel;
import com.gwtext.client.widgets.grid.GridEditor;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ImageResource;

/**
* Properties (key/value pairs) editor with a file attachment.
*
* @author Anton Arhipov
*/
public class PropertiesWidget extends AssetAttachmentFileWidget
    implements
    SaveEventListener {

    PropertiesHolder  properties;
    Store             store;
    private Constants constants = ((Constants) GWT.create( Constants.class ));

    public PropertiesWidget(final RuleAsset asset,
                            final RuleViewer viewer) {
        super( asset,
               viewer );

        if ( asset.content == null ) {
            properties = new PropertiesHolder();
        } else {
            properties = (PropertiesHolder) asset.content;
        }

        Panel panel = new Panel();
        panel.setBorder( false );
        panel.setPaddings( 15 );

        final RecordDef recordDef = new RecordDef( new FieldDef[]{new StringFieldDef( "key" ), new StringFieldDef( "value" )} //NON-NLS
        );

        String[][] data = new String[properties.list.size()][];
        int dataIndex = 0;
        for ( PropertyHolder holder : properties.list ) {
            data[dataIndex++] = new String[]{holder.name, holder.value};
        }

        MemoryProxy proxy = new MemoryProxy( data );
        store = new Store( proxy,
                           new ArrayReader( recordDef ) );
        store.load();

        ColumnConfig keyCol = new ColumnConfig( "Key?",
                                                "key",
                                                100,
                                                true,
                                                null,
                                                "key" ); //NON-NLS
        keyCol.setEditor( new GridEditor( new TextField() ) );
        keyCol.setFixed( false );

        ColumnConfig valueCol = new ColumnConfig( "Value?",
                                                  "value",
                                                  100,
                                                  true,
                                                  null,
                                                  "value" ); //NON-NLS
        valueCol.setEditor( new GridEditor( new TextField() ) );
        valueCol.setFixed( false );

        ColumnConfig[] columnConfigs = {keyCol, valueCol};

        ColumnModel columnModel = new ColumnModel( columnConfigs );
        columnModel.setDefaultSortable( true );

        final EditorGridPanel grid = new EditorGridPanel();

        Toolbar toolbar = new Toolbar();
        ToolbarButton add = new ToolbarButton( constants.Add(),
                                               new ButtonListenerAdapter() {
                                                   public void onClick(Button button,
                                                                       EventObject e) {
                                                       addNewField( recordDef,
                                                                    grid );
                                                   }
                                               } );

        toolbar.addButton( add );

        ToolbarButton clear = new ToolbarButton( constants.Clear(),
                                                 new ButtonListenerAdapter() {
                                                     public void onClick(Button button,
                                                                         EventObject e) {
                                                         store.removeAll();
                                                         addNewField( recordDef,
                                                                      grid );
                                                     }
                                                 } );

        toolbar.addButton( clear );

        grid.setStore( store );
        grid.setColumnModel( columnModel );
        grid.setWidth( 215 );
        grid.setHeight( 300 );
        grid.setTitle( constants.Properties() );
        grid.setFrame( true );
        grid.setClicksToEdit( 2 );
        grid.setTopToolbar( toolbar );

        panel.add( grid );

        layout.addRow( grid );
    }

    private void addNewField(RecordDef recordDef,
                             EditorGridPanel grid) {
        Record pair = recordDef.createRecord( new Object[]{"", ""} );
        grid.stopEditing();
        store.insert( 0,
                      pair );
        grid.startEditing( 0,
                           0 );
    }

    public ImageResource getIcon() {
        return null; //TODO: set correct icon
    }

    public String getOverallStyleName() {
        return ""; //TODO: set correct style
    }

    public void onSave() {
        final List<PropertyHolder> result = new ArrayList<PropertyHolder>();

        Record[] records = store.getRecords();
        for ( Record record : records ) {
            String key = record.getAsString( "key" ); //NON-NLS
            if ( key != null && !"".equals( key ) ) {
                result.add( new PropertyHolder( key,
                                                record.getAsString( "value" ) ) );
            }
        }

        properties.list = result;
        asset.content = properties;
    }

    public void onAfterSave() {

    }

}
TOP

Related Classes of org.drools.guvnor.client.ruleeditor.PropertiesWidget

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.