Package org.sylfra.idea.plugins.revu.utils

Source Code of org.sylfra.idea.plugins.revu.utils.RevuUtils

package org.sylfra.idea.plugins.revu.utils;

import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.util.ui.UIUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.sylfra.idea.plugins.revu.RevuBundle;
import org.sylfra.idea.plugins.revu.RevuIconProvider;
import org.sylfra.idea.plugins.revu.RevuPlugin;
import org.sylfra.idea.plugins.revu.business.ReviewManager;
import org.sylfra.idea.plugins.revu.model.*;
import org.sylfra.idea.plugins.revu.settings.app.RevuAppSettings;
import org.sylfra.idea.plugins.revu.settings.app.RevuAppSettingsComponent;
import org.sylfra.idea.plugins.revu.settings.project.RevuProjectSettings;
import org.sylfra.idea.plugins.revu.settings.project.RevuProjectSettingsComponent;
import org.sylfra.idea.plugins.revu.settings.project.workspace.RevuWorkspaceSettings;
import org.sylfra.idea.plugins.revu.settings.project.workspace.RevuWorkspaceSettingsComponent;
import org.sylfra.idea.plugins.revu.ui.forms.settings.RevuAppSettingsForm;
import org.sylfra.idea.plugins.revu.ui.forms.settings.RevuProjectSettingsForm;

import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
* @author <a href="mailto:syllant@gmail.com">Sylvain FRANCOIS</a>
* @version $Id: RevuUtils.java 7 2008-11-15 09:20:32Z syllant $
*/
public class RevuUtils
{
  @Nullable
  public static Project getProject()
  {
    return DataKeys.PROJECT.getData(DataManager.getInstance().getDataContext());
  }

  @Nullable
  public static PsiFile getPsiFile(@NotNull Project project, @NotNull Issue issue)
  {
    return (issue.getFile() == null) ? null : PsiManager.getInstance(project).findFile(issue.getFile());
  }

  @Nullable
  public static Document getDocument(@NotNull Project project, @NotNull Issue issue)
  {
    PsiFile psiFile = getPsiFile(project, issue);
    return (psiFile == null) ? null : PsiDocumentManager.getInstance(project).getDocument(psiFile);
  }

  @NotNull
  public static List<Editor> getEditors(@NotNull Issue issue)
  {
    List<Editor> result = new ArrayList<Editor>();

    if (issue.getFile() != null)
    {
      Editor[] editors = EditorFactory.getInstance().getAllEditors();
      for (Editor editor : editors)
      {
        VirtualFile vFile = FileDocumentManager.getInstance().getFile(editor.getDocument());
        if (issue.getFile().equals(vFile))
        {
          result.add(editor);
        }
      }
    }

    return result;
  }

  /**
   * Retrieve virtual file from data context, by checking also current editor (in diff dialog)
   */
  @Nullable
  public static VirtualFile getVirtualFile(AnActionEvent e)
  {
    VirtualFile result = e.getData(DataKeys.VIRTUAL_FILE);
    if (result == null)
    {
      Editor editor = e.getData(DataKeys.EDITOR);
      if (editor != null)
      {
        result = FileDocumentManager.getInstance().getFile(editor.getDocument());
      }
    }

    return result;
  }

  @NotNull
  public static String z(@Nullable String s1, @Nullable String s2)
  {
    if ((s1 == null) || ("".equals(s1)))
    {
      return "";
    }

    return DigestUtils.md5Hex(s1 + RevuPlugin.PLUGIN_NAME + ((s2 == null) ? "" : s2));
  }

  @Nullable
  public static String getCurrentUserLogin()
  {
    return ServiceManager.getService(RevuAppSettingsComponent.class).getState().getLogin();
  }

  @Nullable
  public static User getCurrentUser()
  {
    RevuAppSettings appSettings = ServiceManager.getService(RevuAppSettingsComponent.class).getState();
    if (appSettings.getLogin() == null)
    {
      return null;
    }

    User user = new User();
    user.setLogin(appSettings.getLogin());
    user.setPassword(appSettings.getPassword());
    user.setDisplayName(appSettings.getLogin());

    return user;
  }

  @Nullable
  public static User getCurrentUser(@Nullable Review review)
  {
    User user;
    if (review == null)
    {
      user = null;
    }
    else
    {
      String login = RevuUtils.getCurrentUserLogin();
      user = (login == null) ? null : review.getDataReferential().getUser(login, true);
    }

    return user;
  }

  public static boolean hasRole(@NotNull Review review, @NotNull User.Role role)
  {
    String login = RevuUtils.getCurrentUserLogin();
    if (login == null)
    {
      return false;
    }

    User user = review.getDataReferential().getUser(login, true);
    return (user != null) && user.hasRole(role);
  }

  @NotNull
  public static User getNonNullUser(@Nullable User user)
  {
    return (user == null) ? User.UNKNOWN : user;
  }

  @NotNull
  public static User getNonNullUser(@NotNull DataReferential dataReferential, @Nullable String login)
  {
    if (login == null)
    {
      return User.UNKNOWN;
    }

    if (User.DEFAULT.getLogin().equals(login))
    {
      return User.DEFAULT;
    }

    return getNonNullUser(dataReferential.getUser(login, true));
  }

  public static void configureTextAreaAsStandardField(@NotNull final JTextArea... textAreas)
  {
    for (JTextArea textArea : textAreas)
    {
      AbstractAction nextTabAction = new AbstractAction("NextTab")
      {
        public void actionPerformed(ActionEvent evt)
        {
          ((JTextArea) evt.getSource()).transferFocus();
        }
      };
      AbstractAction previousTabAction = new AbstractAction("PreviousTab")
      {
        public void actionPerformed(ActionEvent evt)
        {
          ((JTextArea) evt.getSource()).transferFocusBackward();
        }
      };

      textArea.getActionMap().put(nextTabAction.getValue(Action.NAME), nextTabAction);
      textArea.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, false),
        nextTabAction.getValue(Action.NAME));

      textArea.getActionMap().put(previousTabAction.getValue(Action.NAME), previousTabAction);
      textArea.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK, false),
        previousTabAction.getValue(Action.NAME));
    }
  }

  public static void setWriteAccess(boolean canWrite, @NotNull JComponent... components)
  {
    for (JComponent component : components)
    {
      if (component instanceof JTextComponent)
      {
        ((JTextComponent) component).setEditable(canWrite);
      }
      else
      {
        UIUtil.setEnabled(component, canWrite, true);
      }
    }
  }

  @NotNull
  public static String buildFileNameFromReviewName(@NotNull String name)
  {
    return FileUtil.sanitizeFileName(name) + ".xml";
  }

  @NotNull
  public static String buildIssueStatusLabel(@NotNull IssueStatus status)
  {
    return RevuBundle.message("general.issueStatus." + status.toString().toLowerCase() + ".text");
  }

  @NotNull
  public static String buildReviewStatusLabel(@NotNull ReviewStatus status, boolean lowerCase)
  {
    String label = RevuBundle.message("general.reviewStatus." + status.toString().toLowerCase() + ".text");
    return lowerCase ? label.toLowerCase() : label;
  }

  @NotNull
  public static History buildHistory(@NotNull Review review)
  {
    String login = getCurrentUserLogin();
    User user = (login == null) ? User.UNKNOWN : review.getDataReferential().getUser(login, true);

    Date now = new Date();

    History history = new History();
    history.setCreatedBy(user);
    history.setCreatedOn(now);
    history.setLastUpdatedBy(user);
    history.setLastUpdatedOn(now);

    return history;
  }

  public static boolean isActive(@NotNull Review review)
  {
    return ((review.getStatus() == ReviewStatus.FIXING) || (review.getStatus() == ReviewStatus.REVIEWING));
  }

  public static boolean isActiveForCurrentUser(@NotNull Review review)
  {
    return (((review.getStatus() == ReviewStatus.FIXING) || (review.getStatus() == ReviewStatus.REVIEWING))
      && (review.getDataReferential().getUser(getCurrentUserLogin(), true) != null));
  }

  @NotNull
  public static String getHex(@NotNull Color color)
  {
    return "#" + Integer.toHexString((color.getRGB() & 0xffffff) | 0x1000000).substring(1);
  }

  public static Color getIssueStatusColor(@NotNull IssueStatus status)
  {
    // @TODO manage Colors in cache (already done in IssueTable)
    RevuAppSettings appSettings = ApplicationManager.getApplication().getComponent(RevuAppSettingsComponent.class)
      .getState();
    return Color.decode(appSettings.getIssueStatusColors().get(status));
  }

  @Nullable
  public static Review getReviewingReview(@NotNull Project project)
  {
    String reviewName = getWorkspaceSettings(project).getReviewingReviewName();
    if (reviewName == null)
    {
      return null;
    }

    Review review = project.getComponent(ReviewManager.class).getReviewByName(reviewName);
    User user = RevuUtils.getCurrentUser(review);

    return ((user != null) && (user.hasRole(User.Role.REVIEWER))) ? review : null;
  }

  public static boolean hasRoleForReviewingReview(@NotNull Project project, @NotNull User.Role role)
  {
    Review review = RevuUtils.getReviewingReview(project);

    if (review != null)
    {
      User user = RevuUtils.getCurrentUser(review);
      if ((user != null) && (user.hasRole(role)))
      {
        return true;
      }
    }

    return false;
  }

  @NotNull
  public static Collection<Review> getActiveReviewsForCurrentUser(@NotNull Project project)
  {
    return project.getComponent(ReviewManager.class).getReviews(RevuUtils.getCurrentUserLogin(), true);
  }

  @NotNull
  public static RevuAppSettings getAppSettings()
  {
    return ApplicationManager.getApplication().getComponent(RevuAppSettingsComponent.class).getState();
  }

  @NotNull
  public static RevuWorkspaceSettings getWorkspaceSettings(@NotNull Project project)
  {
    return project.getComponent(RevuWorkspaceSettingsComponent.class).getState();
  }

  @NotNull
  public static RevuProjectSettings getProjectSettings(@NotNull Project project)
  {
    return project.getComponent(RevuProjectSettingsComponent.class).getState();
  }

  public static void editProjectSettings(@NotNull Project project, @Nullable final Review review)
  {
    final RevuProjectSettingsForm form = project.getComponent(RevuProjectSettingsForm.class);
    ShowSettingsUtil.getInstance().editConfigurable(project, form, new Runnable()
    {
      public void run()
      {
        if (review != null)
        {
          form.selectItem(review);
        }
      }
    });
  }

  public static void editAppSettings(@Nullable Project project)
  {
    ShowSettingsUtil.getInstance().editConfigurable(project,
      ApplicationManager.getApplication().getComponent(RevuAppSettingsForm.class));
  }

  @NotNull
  public static Icon findIcon(@NotNull Collection<Issue> issues, boolean fullySynchronized)
  {
    boolean allResolved = true;
    for (Issue issue : issues)
    {
      if ((!issue.getStatus().equals(IssueStatus.RESOLVED)) && (!issue.getStatus().equals(IssueStatus.CLOSED)))
      {
        allResolved = false;
      }
    }

    return RevuIconProvider.getIcon(fullySynchronized
      ? (allResolved ? RevuIconProvider.IconRef.GUTTER_ISSUES_RESOLVED
        : RevuIconProvider.IconRef.GUTTER_ISSUES)
      : (allResolved ? RevuIconProvider.IconRef.GUTTER_ISSUES_DESYNCHRONIZED
        : RevuIconProvider.IconRef.GUTTER_ISSUES_DESYNCHRONIZED_RESOLVED));
  }

  @NotNull
  public static Icon findIcon(@NotNull Issue issue, boolean fullySynchronized)
  {
    IssueStatus status = issue.getStatus();

    boolean resolved = (status.equals(IssueStatus.RESOLVED) || status.equals(IssueStatus.CLOSED));
    return RevuIconProvider.getIcon(fullySynchronized
      ? (resolved ? RevuIconProvider.IconRef.GUTTER_ISSUE_RESOLVED
        : RevuIconProvider.IconRef.GUTTER_ISSUE)
      : (resolved ? RevuIconProvider.IconRef.GUTTER_ISSUE_DESYNCHRONIZED
        : RevuIconProvider.IconRef.GUTTER_ISSUE_DESYNCHRONIZED_RESOLVED));
  }
}
TOP

Related Classes of org.sylfra.idea.plugins.revu.utils.RevuUtils

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.