blob: ea63c26c88ffe7da2fc2b8b95485b2763acbdcb3 [file] [log] [blame]
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;
}
}