Package org.intellij.sonar.configuration.partials

Source Code of org.intellij.sonar.configuration.partials.SonarResourcesTableView

package org.intellij.sonar.configuration.partials;

import com.google.common.collect.Lists;
import com.intellij.openapi.project.Project;
import com.intellij.ui.AnActionButton;
import com.intellij.ui.AnActionButtonRunnable;
import com.intellij.ui.TableUtil;
import com.intellij.ui.ToolbarDecorator;
import com.intellij.ui.table.TableView;
import com.intellij.util.ui.ColumnInfo;
import com.intellij.util.ui.ListTableModel;
import org.intellij.sonar.configuration.ResourcesSelectionConfigurable;
import org.jetbrains.annotations.Nullable;
import org.sonar.wsclient.services.Resource;

import javax.swing.*;
import java.awt.*;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import static org.intellij.sonar.persistence.SonarServers.NO_SONAR;

public class SonarResourcesTableView {

  private final TableView<Resource> mySonarResourcesTable;
  private final JComponent myJComponent;
  private final SonarServersView mySonarServersView;
  private final Project myProject;


  public SonarResourcesTableView(Project project, SonarServersView sonarServersView) {
    this.mySonarServersView = sonarServersView;
    this.mySonarResourcesTable = new TableView<Resource>();
    this.myJComponent = createJComponent();
    this.myProject = project;
  }

  private static final ColumnInfo<Resource, String> TYPE_COLUMN = new ColumnInfo<Resource, String>("Type") {
    @Nullable
    @Override
    public String valueOf(Resource sonarResource) {
      if (Resource.QUALIFIER_PROJECT.equals(sonarResource.getQualifier())) {
        return "Project";
      } else if (Resource.QUALIFIER_MODULE.equals(sonarResource.getQualifier())) {
        return "Module";
      } else {
        return sonarResource.getQualifier();
      }
    }

  };

  private static final ColumnInfo<Resource, String> NAME_COLUMN = new ColumnInfo<Resource, String>("Name") {
    @Nullable
    @Override
    public String valueOf(Resource sonarResource) {
      return sonarResource.getName();
    }
  };

  private static final ColumnInfo<Resource, String> KEY_COLUMN = new ColumnInfo<Resource, String>("Key") {

    @Nullable
    @Override
    public String valueOf(Resource sonarResource) {
      return sonarResource.getKey();
    }

  };

  private JComponent createJComponent() {
    JPanel panelForTable = ToolbarDecorator.createDecorator(mySonarResourcesTable, null).
        setAddAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton anActionButton) {
            final String selectedSonarServerName = mySonarServersView.getSelectedItem();
            if (!NO_SONAR.equals(selectedSonarServerName)) {
              ResourcesSelectionConfigurable dlg = new ResourcesSelectionConfigurable(myProject, selectedSonarServerName);
              dlg.show();
              if (dlg.isOK()) {
                final java.util.List<Resource> selectedSonarResources = dlg.getSelectedSonarResources();
                final java.util.List<Resource> currentSonarResources = mySonarResourcesTable.getItems();

                Set<Resource> mergedSonarResourcesAsSet = new TreeSet<Resource>(new Comparator<Resource>() {
                  @Override
                  public int compare(Resource resource, Resource resource2) {
                    return resource.getKey().compareTo(resource2.getKey());
                  }
                });
                mergedSonarResourcesAsSet.addAll(currentSonarResources);
                mergedSonarResourcesAsSet.addAll(selectedSonarResources);

                setModel(Lists.newArrayList(mergedSonarResourcesAsSet));
              }
            }
          }
        }).
        setRemoveAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton anActionButton) {
            TableUtil.removeSelectedItems(mySonarResourcesTable);
          }
        })
        .disableUpDownActions().
            createPanel();
    panelForTable.setPreferredSize(new Dimension(-1, 100));
    return panelForTable;
  }

  public void setModel(List<Resource> sonarResources) {
    mySonarResourcesTable.setModelAndUpdateColumns(new ListTableModel<Resource>(new ColumnInfo[]{NAME_COLUMN, KEY_COLUMN, TYPE_COLUMN}, sonarResources, 0));
  }

  public TableView<Resource> getTable() {
    return mySonarResourcesTable;
  }

  public JComponent getComponent() {
    return myJComponent;
  }
}
TOP

Related Classes of org.intellij.sonar.configuration.partials.SonarResourcesTableView

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.