| package com.intellij.openapi.externalSystem.model.task; |
| |
| import com.intellij.openapi.externalSystem.model.ProjectSystemId; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.project.ProjectManager; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.io.Serializable; |
| import java.util.concurrent.atomic.AtomicLong; |
| |
| /** |
| * Represents id of the task enqueued to external API for execution. |
| * |
| * @author Denis Zhdanov |
| * @since 11/10/11 9:09 AM |
| */ |
| public class ExternalSystemTaskId implements Serializable { |
| |
| @NotNull private static final AtomicLong COUNTER = new AtomicLong(); |
| private static final long serialVersionUID = 1L; |
| |
| @NotNull private final ExternalSystemTaskType myType; |
| @NotNull private final String myProjectId; |
| @NotNull private final ProjectSystemId myProjectSystemId; |
| |
| private final long myId; |
| |
| private ExternalSystemTaskId(@NotNull ProjectSystemId projectSystemId, @NotNull ExternalSystemTaskType type, @NotNull String projectId, long taskId) { |
| myType = type; |
| myProjectId = projectId; |
| myProjectSystemId = projectSystemId; |
| myId = taskId; |
| } |
| |
| @NotNull |
| public String getIdeProjectId() { |
| return myProjectId; |
| } |
| |
| @NotNull |
| public ProjectSystemId getProjectSystemId() { |
| return myProjectSystemId; |
| } |
| |
| /** |
| * Allows to retrieve distinct task id object of the given type. |
| * |
| * @param type target task type |
| * @param project target ide project |
| * @return distinct task id object of the given type |
| */ |
| @NotNull |
| public static ExternalSystemTaskId create(@NotNull ProjectSystemId projectSystemId, @NotNull ExternalSystemTaskType type, @NotNull Project project) { |
| return create(projectSystemId, type, getProjectId(project)); |
| } |
| |
| @NotNull |
| public static ExternalSystemTaskId create(@NotNull ProjectSystemId projectSystemId, @NotNull ExternalSystemTaskType type, @NotNull String ideProjectId) { |
| return new ExternalSystemTaskId(projectSystemId, type, ideProjectId, COUNTER.getAndIncrement()); |
| } |
| |
| @NotNull |
| public static String getProjectId(@NotNull Project project) { |
| return project.isDisposed() ? project.getName() : project.getName() + ":" + project.getLocationHash(); |
| } |
| |
| @Nullable |
| public Project findProject() { |
| final ProjectManager projectManager = ProjectManager.getInstance(); |
| for (Project project : projectManager.getOpenProjects()) { |
| if (myProjectId.equals(getProjectId(project))) return project; |
| } |
| return null; |
| } |
| |
| @NotNull |
| public ExternalSystemTaskType getType() { |
| return myType; |
| } |
| |
| @Override |
| public int hashCode() { |
| return 31 * myType.hashCode() + (int)(myId ^ (myId >>> 32)); |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| if (this == o) return true; |
| if (o == null || getClass() != o.getClass()) return false; |
| |
| ExternalSystemTaskId that = (ExternalSystemTaskId)o; |
| return myId == that.myId && myType == that.myType; |
| } |
| |
| @Override |
| public String toString() { |
| return myType + ":" + myId; |
| } |
| } |