/* * 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.guvnor.common.services.project.client.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.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.cellview.client.TextHeader; 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.GAV; import org.guvnor.common.services.project.model.MavenRepositoryMetadata; import org.gwtbootstrap3.client.ui.Heading; import org.gwtbootstrap3.client.ui.constants.ButtonType; import org.gwtbootstrap3.client.ui.constants.IconType; import org.gwtbootstrap3.client.ui.gwt.CellTable; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.footers.GenericModalFooter; import org.uberfire.ext.widgets.common.client.resources.i18n.CommonConstants; import org.uberfire.mvp.Command; public class ConflictingRepositoriesPopupViewImpl extends BaseModal implements ConflictingRepositoriesPopupView { interface Binder extends UiBinder<Widget, ConflictingRepositoriesPopupViewImpl> { } private static Binder uiBinder = GWT.create( Binder.class ); @UiField Heading header; @UiField(provided = true) CellTable<MavenRepositoryMetadata> table = new CellTable<MavenRepositoryMetadata>(); private final GenericModalFooter footer = new GenericModalFooter(); private Presenter presenter; private List<MavenRepositoryMetadata> repositories = new ArrayList<MavenRepositoryMetadata>(); private ListDataProvider<MavenRepositoryMetadata> dataProvider = new ListDataProvider<MavenRepositoryMetadata>(); TextColumn<MavenRepositoryMetadata> repositoryIdColumn; TextColumn<MavenRepositoryMetadata> repositoryUrlColumn; TextColumn<MavenRepositoryMetadata> repositorySourceColumn; public ConflictingRepositoriesPopupViewImpl() { setTitle( ProjectResources.CONSTANTS.ConflictingRepositoriesTitle() ); setBody( uiBinder.createAndBindUi( this ) ); add( footer ); setup(); } private void setup() { //Setup table table.setStriped( true ); table.setCondensed( true ); table.setBordered( true ); //Columns repositoryIdColumn = new TextColumn<MavenRepositoryMetadata>() { @Override public String getValue( final MavenRepositoryMetadata metadata ) { return metadata.getId(); } }; repositoryUrlColumn = new TextColumn<MavenRepositoryMetadata>() { @Override public String getValue( final MavenRepositoryMetadata metadata ) { return metadata.getUrl(); } }; repositorySourceColumn = new TextColumn<MavenRepositoryMetadata>() { @Override public String getValue( final MavenRepositoryMetadata metadata ) { switch ( metadata.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( 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 ) { this.presenter = presenter; } @Override public void clear() { footer.clear(); } @Override public void setContent( final GAV gav, final Set<MavenRepositoryMetadata> repositories ) { this.repositories = sortRepositories( repositories ); this.dataProvider.setList( this.repositories ); this.header.setText( ProjectResources.CONSTANTS.ConflictingRepositoriesGAVDescription( gav.getGroupId(), gav.getArtifactId(), gav.getVersion() ) ); } private List<MavenRepositoryMetadata> sortRepositories( final Set<MavenRepositoryMetadata> repositories ) { final List<MavenRepositoryMetadata> sortedRepositories = new ArrayList<MavenRepositoryMetadata>(); sortedRepositories.addAll( repositories ); Collections.sort( sortedRepositories, new Comparator<MavenRepositoryMetadata>() { @Override public int compare( final MavenRepositoryMetadata md1, final MavenRepositoryMetadata md2 ) { if ( md1.getSource().equals( md2.getSource() ) ) { return md1.getId().compareToIgnoreCase( md2.getId() ); } return md1.getSource().ordinal() - md2.getSource().ordinal(); } } ); return sortedRepositories; } @Override public void addOKButton() { footer.addButton( CommonConstants.INSTANCE.OK(), new Command() { @Override public void execute() { presenter.hide(); } }, IconType.PLUS, ButtonType.PRIMARY ); } @Override public void addOverrideButton( final Command command ) { footer.addButton( ProjectResources.CONSTANTS.ConflictingRepositoriesOverride(), command, ButtonType.DEFAULT ); } }