Package org.guvnor.m2repo.client.editor

Source Code of org.guvnor.m2repo.client.editor.PagedJarTable$Binder

package org.guvnor.m2repo.client.editor;

import java.util.Date;
import java.util.Set;

import com.github.gwtbootstrap.client.ui.CellTable;
import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.DateCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.ProvidesKey;

import org.guvnor.m2repo.client.resources.i18n.Constants;
import org.guvnor.m2repo.model.JarListPageRow;
import org.guvnor.m2repo.service.M2RepoService;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.ioc.client.container.IOC;
import org.kie.workbench.common.services.security.AppRoles;
import org.uberfire.client.tables.AbstractPagedTable;
import org.uberfire.client.tables.ColumnPicker;
import org.uberfire.client.tables.SelectionColumn;
import org.uberfire.client.tables.SortableHeader;
import org.uberfire.client.tables.SortableHeaderGroup;
import org.uberfire.paging.PageRequest;
import org.uberfire.paging.PageResponse;
import org.uberfire.security.Identity;

public class PagedJarTable
        extends AbstractPagedTable<JarListPageRow> {

    interface Binder
            extends
            UiBinder<Widget, PagedJarTable> {

    }

    private static Binder uiBinder = GWT.create( Binder.class );

    private final Caller<M2RepoService> m2RepoService;
    private ColumnPicker<JarListPageRow> columnPicker = new ColumnPicker<JarListPageRow>( cellTable );

    private SelectionColumn<JarListPageRow> selectionColumn;
    private MultiSelectionModel<JarListPageRow> selectionModel;
    private static final int PAGE_SIZE = 10;

    @UiField()
    protected Button deleteSelectedJarButton;

    @UiField()
    protected Button refreshButton;
   
    private final Identity identity;
   
    public PagedJarTable( final Caller<M2RepoService> m2RepoService ) {
        this( m2RepoService, null );
    }

    public PagedJarTable( final Caller<M2RepoService> m2RepoService,
                          final String searchFilter ) {
        super( PAGE_SIZE );
        this.m2RepoService = m2RepoService;

        identity = IOC.getBeanManager().lookupBean( Identity.class ).getInstance();

        //If the current user is not an Administrator do not include the download button
    if (identity.hasRole(AppRoles.ADMIN)) {
      Column<JarListPageRow, String> downloadColumn = new Column<JarListPageRow, String>(
          new ButtonCell()) {
        public String getValue(JarListPageRow row) {
          return "Download";
        }
      };

      downloadColumn
          .setFieldUpdater(new FieldUpdater<JarListPageRow, String>() {
            public void update(int index, JarListPageRow row,
                String value) {
              Window.open(getFileDownloadURL(row.getPath()),
                  "downloading",
                  "resizable=no,scrollbars=yes,status=no");
            }
          });

      addColumn(downloadColumn, new TextHeader("Download"));
    }

   
        setDataProvider( new AsyncDataProvider<JarListPageRow>() {
            protected void onRangeChanged( HasData<JarListPageRow> display ) {
                PageRequest request = new PageRequest( pager.getPageStart(), pageSize );

                m2RepoService.call( new RemoteCallback<PageResponse<JarListPageRow>>() {
                    @Override
                    public void callback( final PageResponse<JarListPageRow> response ) {
                        updateRowCount( response.getTotalRowSize(),
                                        response.isTotalRowSizeExact() );
                        updateRowData( response.getStartRowIndex(),
                                       response.getPageRowList() );
                    }
                } ).listJars( request, searchFilter );
            }
        } );
    }

    @Override
    protected void doCellTable() {

        ProvidesKey<JarListPageRow> providesKey = new ProvidesKey<JarListPageRow>() {
            public Object getKey( JarListPageRow row ) {
                return row.getPath();
            }
        };

        cellTable = new CellTable<JarListPageRow>( providesKey );
        selectionModel = new MultiSelectionModel<JarListPageRow>( providesKey );
        cellTable.setSelectionModel( selectionModel );
        selectionColumn = SelectionColumn.createAndAddSelectionColumn( cellTable );

        columnPicker = new ColumnPicker<JarListPageRow>( cellTable );
        SortableHeaderGroup<JarListPageRow> sortableHeaderGroup = new SortableHeaderGroup<JarListPageRow>( cellTable );

        // Add any additional columns
        addAncillaryColumns( columnPicker,
                             sortableHeaderGroup );

        cellTable.setWidth( "100%" );
        columnPickerButton = columnPicker.createToggleButton();
    }

    public void hideSelectionColumn() {
        cellTable.removeColumn( selectionColumn );
    }

    public void hideColumnPicker() {
        columnPickerButton.setVisible( false );
    }

    public void refresh() {
        selectionModel.clear();
        cellTable.setVisibleRangeAndClearData( cellTable.getVisibleRange(),
                                               true );
    }
   
    public String[] getSelectedJars() {
        Set<JarListPageRow> selectedRows = selectionModel.getSelectedSet();
        // Compatibility with existing API
        if ( selectedRows.size() == 0 ) {
            return null;
        }

        // Create the array of paths
        String[] paths = new String[ selectedRows.size() ];
        int rowCount = 0;
        for ( JarListPageRow row : selectedRows ) {
            paths[ rowCount++ ] = row.getPath();
        }
        return paths;
    }
   
    @Override
    protected void addAncillaryColumns( ColumnPicker<JarListPageRow> columnPicker,
                                        SortableHeaderGroup<JarListPageRow> sortableHeaderGroup ) {

        TextColumn<JarListPageRow> nameColumn = new TextColumn<JarListPageRow>() {
            public String getValue( JarListPageRow row ) {
                return row.getName();
            }
        };
        columnPicker.addColumn( nameColumn,
                                new SortableHeader<JarListPageRow, String>(
                                        sortableHeaderGroup,
                                        "Name",
                                        nameColumn ),
                                true );

        TextColumn<JarListPageRow> pathColumn = new TextColumn<JarListPageRow>() {
            public String getValue( JarListPageRow row ) {
                return row.getPath();
            }
        };
        columnPicker.addColumn( pathColumn,
                                new SortableHeader<JarListPageRow, String>(
                                        sortableHeaderGroup,
                                        "Path",
                                        pathColumn ),
                                true );

        Column<JarListPageRow, Date> lastModifiedColumn = new Column<JarListPageRow, Date>( new DateCell( DateTimeFormat.getFormat( DateTimeFormat.PredefinedFormat.DATE_TIME_MEDIUM ) ) ) {
            public Date getValue( JarListPageRow row ) {
                return row.getLastModified();
            }
        };
        columnPicker.addColumn( lastModifiedColumn,
                                new SortableHeader<JarListPageRow, Date>( sortableHeaderGroup,
                                                                          "LastModified",
                                                                          lastModifiedColumn ),
                                true );

        // Add "View kjar detail" button column
        Column<JarListPageRow, String> openColumn = new Column<JarListPageRow, String>( new ButtonCell() ) {
            public String getValue( JarListPageRow row ) {
                return "Open";
            }
        };
        openColumn.setFieldUpdater( new FieldUpdater<JarListPageRow, String>() {
            public void update( int index,
                                JarListPageRow row,
                                String value ) {
                m2RepoService.call( new RemoteCallback<String>() {
                    @Override
                    public void callback( final String response ) {
                        JarDetailEditor editor = new JarDetailEditor( response );
                        editor.setSize( "800px", "600px" );
                        editor.show();
                    }
                } ).loadPOMStringFromJar( row.getPath() );
            }
        } );
        columnPicker.addColumn( openColumn,
                                new TextHeader( "View Artifact Detail" ),
                                true );
    }

    public void addColumn( Column<JarListPageRow, String> column,
                           TextHeader textHeader ) {
        columnPicker.addColumn( column,
                                textHeader,
                                true );
    }

    @Override
    protected Widget makeWidget() {
        return uiBinder.createAndBindUi( this );
    }
   
    @UiHandler("deleteSelectedJarButton")
    void deleteSelectedJar( ClickEvent e ) {
        if ( getSelectedJars() == null ) {
            Window.alert( "Please Select A Jar To Delete" );
            return;
        }
        if ( !Window.confirm( Constants.INSTANCE.AreYouSureYouWantToDeleteTheseItems() ) ) {
            return;
        }
        m2RepoService.call( new RemoteCallback<Void>() {
            @Override
            public void callback( Void v ) {
                Window.alert( "Deleted successfully" );
                refresh();
            }
        } ).deleteJar( getSelectedJars() );
    }

    @UiHandler("refreshButton")
    void refresh( ClickEvent e ) {
        refresh();
    }

/*    @UiHandler("auditButton")
    void viewAuditLog( ClickEvent e ) {
    }*/

    String getFileDownloadURL( String path ) {
        String url = getGuvnorM2RepoBaseURL() + path;
        return url;
    }

    public static String getGuvnorM2RepoBaseURL() {
        final String url = GWT.getModuleBaseURL();
        final String baseUrl = url.replace( GWT.getModuleName() + "/", "" );
        return baseUrl + "maven2/";
    }

}
TOP

Related Classes of org.guvnor.m2repo.client.editor.PagedJarTable$Binder

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.