Package org.eclim.plugin.core.command.project

Source Code of org.eclim.plugin.core.command.project.ProjectsCommand

/**
* Copyright (C) 2005 - 2014  Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.plugin.core.command.project;

import java.io.File;

import java.util.ArrayList;
import java.util.HashMap;

import org.eclim.annotation.Command;

import org.eclim.command.CommandLine;

import org.eclim.plugin.core.command.AbstractCommand;

import org.eclim.plugin.core.project.ProjectNatureFactory;

import org.eclim.plugin.core.util.ProjectUtils;

import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;

import org.eclipse.core.internal.resources.LinkDescription;
import org.eclipse.core.internal.resources.Project;
import org.eclipse.core.internal.resources.ProjectDescription;
import org.eclipse.core.internal.resources.ProjectInfo;
import org.eclipse.core.internal.resources.ResourceInfo;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;

import org.eclipse.core.runtime.IPath;

/**
* Command which obtains a list of projects and project paths for use by clients
* to determine which project a file belongs to.
*
* @author Eric Van Dewoestine
*/
@Command(name = "projects")
public class ProjectsCommand
  extends AbstractCommand
{
  @Override
  public Object execute(CommandLine commandLine)
    throws Exception
  {
    ArrayList<HashMap<String,Object>> results =
      new ArrayList<HashMap<String,Object>>();
    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IProject[] projects = workspace.getRoot().getProjects();
    for (IProject project : projects){
      HashMap<String,Object> info = new HashMap<String,Object>();
      info.put("name", project.getName());

      if (project.isOpen()){
        String[] aliases = ProjectNatureFactory.getProjectNatureAliases(project);
        if (aliases.length == 0){
          aliases = new String[]{"none"};
        }
        info.put("natures", aliases);
      }else{
        info.put("natures", new String[0]);
      }

      String projectPath = ProjectUtils.getPath(project);
      String canonicalPath = new File(projectPath)
        .getCanonicalPath().replace('\\', '/');
      if (!canonicalPath.equals(projectPath)){
        info.put("path", canonicalPath);
        info.put("link", projectPath);
      }else{
        info.put("path", projectPath);
      }

      if (project.isOpen()){
        HashMap<String,String> links = new HashMap<String,String>();
        if (new File(projectPath).exists()){
          // don't open/close projects due to the impact on performance
          /*boolean close = false;
          if (!project.isOpen()){
            project.open(IResource.NONE, null);
            close = true;
          }*/

          ResourceInfo pinfo = ((Project)project).getResourceInfo(false, false);
          ProjectDescription desc = ((ProjectInfo)pinfo).getDescription();
          if (desc != null){
            HashMap<IPath, LinkDescription> linfo =
              (HashMap<IPath, LinkDescription>)desc.getLinks();
            if (linfo != null){
              for (IPath path : linfo.keySet()){
                LinkDescription link = linfo.get(path);
                IResource member = project.findMember(link.getProjectRelativePath());
                IFileStore store = EFS.getStore(member.getLocationURI());
                String resolvedPath = store != null ?
                  store.toString() : link.getLocationURI().getPath();
                links.put(path.toString(), resolvedPath.replace("\\", "/"));
              }
            }
          }

          /*if (close){
            project.close(null);
          }*/
        }
        info.put("links", links);
      }

      results.add(info);
    }

    return results;
  }
}
TOP

Related Classes of org.eclim.plugin.core.command.project.ProjectsCommand

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.