Package net.sf.redmine_mylyn.internal.ui

Source Code of net.sf.redmine_mylyn.internal.ui.RedminePersonProposalProvider

package net.sf.redmine_mylyn.internal.ui;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import net.sf.redmine_mylyn.api.model.Configuration;
import net.sf.redmine_mylyn.api.model.User;
import net.sf.redmine_mylyn.core.RedmineRepositoryConnector;
import net.sf.redmine_mylyn.core.RedmineStatusException;
import net.sf.redmine_mylyn.core.RedmineUtil;
import net.sf.redmine_mylyn.ui.RedmineUiPlugin;

import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.ui.TasksUi;

public class RedminePersonProposalProvider implements IContentProposalProvider {

  private String currentUser;

  private Set<String> addressSet = null;

  private String repositoryUrl;

  private String connectorKind;

  private Map<String, String> proposals;
 
  private Configuration configuration;

  public RedminePersonProposalProvider(ITask task, TaskData taskData) {
    repositoryUrl = taskData.getRepositoryUrl();
    connectorKind = taskData.getConnectorKind();

    if (repositoryUrl != null && connectorKind != null) {

      TaskRepository repository = TasksUi.getRepositoryManager().getRepository(connectorKind, repositoryUrl);
      if (repository != null) {

        AbstractRepositoryConnector connector = TasksUi.getRepositoryConnector(connectorKind);
        if (connector!=null && connector instanceof RedmineRepositoryConnector) {
          try {
            configuration = ((RedmineRepositoryConnector)connector).getClientManager().getClient(repository).getConfiguration();
          } catch (RedmineStatusException e) {
            RedmineUiPlugin.getLogService(getClass()).error(e, "Can't fetch repository configuration"); //$NON-NLS-1$
          }
        }
       
        AuthenticationCredentials credentials = repository.getCredentials(AuthenticationType.REPOSITORY);
        if (credentials != null && credentials.getUserName().length() > 0) {
          currentUser = credentials.getUserName();
        }
      }
    }
  }

  public RedminePersonProposalProvider(ITask task, TaskData taskData, Map<String, String> proposals) {
    this(task, taskData);
    this.proposals = proposals;
   
  }
 
  public void setProposals( Map<String, String> proposals ) {
    this.proposals = proposals;
    this.addressSet = null;
  }
 
  public IContentProposal[] getProposals(String contents, int position) {
    if (contents == null) {
      throw new IllegalArgumentException();
    }


    String searchText = contents.toLowerCase();

    Set<String> addressSet = new HashSet<String>();
   
    for (String address : getAddressSet()) {
      if (address.toLowerCase().contains(searchText)) {
        addressSet.add(address);
      }
    }
   
    IContentProposal[] result = new IContentProposal[addressSet.size()];
    int i = 0;
    for (final String address : addressSet) {
      result[i++] new RedminePersonContentProposal(
          address,
          currentUser != null && address.contains(currentUser),
          address,
          address.length());
    }
   
    Arrays.sort(result);
    return result;
  }

  private Set<String> getAddressSet() {
    if (addressSet != null) {
      return addressSet;
    }

    addressSet = new HashSet<String>();
   
    if (proposals != null && !proposals.isEmpty()) {
      for (Entry<String, String> entry : proposals.entrySet()) {
       
        String name = entry.getValue();
        if (name!=null && !name.isEmpty()) {
          User user = null;
         
          if (configuration!=null && (user=configuration.getUsers().getById(RedmineUtil.parseIntegerId(entry.getKey())))!=null) {
            addressSet.add(RedmineUtil.formatUserPresentation(user.getLogin(), name));
          } else {
            addressSet.add(RedmineUtil.formatUserPresentation(entry.getKey(), name));
          }
        }
      }
    }

    return addressSet;
  }

}
TOP

Related Classes of net.sf.redmine_mylyn.internal.ui.RedminePersonProposalProvider

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.