/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.kie.workbench.common.screens.projecteditor.client.forms.repositories; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; 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.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.ListDataProvider; import org.guvnor.common.services.project.client.resources.ProjectResources; import org.guvnor.common.services.project.model.MavenRepositoryMetadata; import org.guvnor.common.services.project.model.ProjectRepositories; import org.gwtbootstrap3.client.ui.gwt.CellTable; import org.kie.workbench.common.screens.projecteditor.client.resources.ProjectEditorResources; public class RepositoriesWidgetViewImpl extends Composite implements RepositoriesWidgetView { interface Binder extends UiBinder<Widget, RepositoriesWidgetViewImpl> { } private static Binder uiBinder = GWT.create( Binder.class ); @UiField(provided = true) CellTable<ProjectRepositories.ProjectRepository> table = new CellTable<ProjectRepositories.ProjectRepository>(); private List<ProjectRepositories.ProjectRepository> repositories = new ArrayList<ProjectRepositories.ProjectRepository>(); private ListDataProvider<ProjectRepositories.ProjectRepository> dataProvider = new ListDataProvider<ProjectRepositories.ProjectRepository>(); Column<ProjectRepositories.ProjectRepository, Boolean> repositoryIncludeColumn; TextColumn<ProjectRepositories.ProjectRepository> repositoryIdColumn; TextColumn<ProjectRepositories.ProjectRepository> repositoryUrlColumn; TextColumn<ProjectRepositories.ProjectRepository> repositorySourceColumn; public RepositoriesWidgetViewImpl() { setup(); initWidget( uiBinder.createAndBindUi( this ) ); } private void setup() { //Setup table table.setStriped( true ); table.setCondensed( true ); table.setBordered( true ); //Columns final CheckboxCell cbCell = new CheckboxCell(); repositoryIncludeColumn = new Column<ProjectRepositories.ProjectRepository, Boolean>( cbCell ) { @Override public Boolean getValue( final ProjectRepositories.ProjectRepository repository ) { return repository.isIncluded(); } }; repositoryIdColumn = new TextColumn<ProjectRepositories.ProjectRepository>() { @Override public String getValue( final ProjectRepositories.ProjectRepository repository ) { return repository.getMetadata().getId(); } }; repositoryUrlColumn = new TextColumn<ProjectRepositories.ProjectRepository>() { @Override public String getValue( final ProjectRepositories.ProjectRepository repository ) { return repository.getMetadata().getUrl(); } }; repositorySourceColumn = new TextColumn<ProjectRepositories.ProjectRepository>() { @Override public String getValue( final ProjectRepositories.ProjectRepository repository ) { switch ( repository.getMetadata().getSource() ) { case LOCAL: return ProjectResources.CONSTANTS.RepositorySourceLocal(); case PROJECT: return ProjectResources.CONSTANTS.RepositorySourceProject(); case SETTINGS: return ProjectResources.CONSTANTS.RepositorySourceSettings(); case DISTRIBUTION_MANAGEMENT: return ProjectResources.CONSTANTS.RepositorySourceDistributionManagement(); } return ProjectResources.CONSTANTS.RepositorySourceUnknown(); } }; table.addColumn( repositoryIncludeColumn, new TextHeader( ProjectEditorResources.CONSTANTS.RepositoryInclude() ) ); table.addColumn( repositoryIdColumn, new TextHeader( ProjectResources.CONSTANTS.RepositoryId() ) ); table.addColumn( repositoryUrlColumn, new TextHeader( ProjectResources.CONSTANTS.RepositoryUrl() ) ); table.addColumn( repositorySourceColumn, new TextHeader( ProjectResources.CONSTANTS.RepositorySource() ) ); //Link data dataProvider.addDataDisplay( table ); dataProvider.setList( repositories ); } @Override public void init( final Presenter presenter ) { repositoryIncludeColumn.setFieldUpdater( new FieldUpdater<ProjectRepositories.ProjectRepository, Boolean>() { @Override public void update( final int index, final ProjectRepositories.ProjectRepository repository, final Boolean value ) { presenter.setIncludeRepository( repository, Boolean.TRUE.equals( value ) ); } } ); } @Override public void setContent( final Set<ProjectRepositories.ProjectRepository> repositories, final boolean isReadOnly ) { this.repositories = sortRepositories( repositories ); this.dataProvider.setList( this.repositories ); ( (CheckboxCell) this.repositoryIncludeColumn.getCell() ).setEnabled( !isReadOnly ); } private List<ProjectRepositories.ProjectRepository> sortRepositories( final Set<ProjectRepositories.ProjectRepository> repositories ) { final List<ProjectRepositories.ProjectRepository> sortedRepositories = new ArrayList<ProjectRepositories.ProjectRepository>(); sortedRepositories.addAll( repositories ); Collections.sort( sortedRepositories, new Comparator<ProjectRepositories.ProjectRepository>() { @Override public int compare( final ProjectRepositories.ProjectRepository pr1, final ProjectRepositories.ProjectRepository pr2 ) { final MavenRepositoryMetadata md1 = pr1.getMetadata(); final MavenRepositoryMetadata md2 = pr2.getMetadata(); if ( md1.getSource().equals( md2.getSource() ) ) { return md1.getId().compareToIgnoreCase( md2.getId() ); } return md1.getSource().ordinal() - md2.getSource().ordinal(); } } ); return sortedRepositories; } }