| /* |
| * Copyright 2000-2013 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.openapi.externalSystem.service.task.ui; |
| |
| import com.intellij.openapi.externalSystem.model.ProjectSystemId; |
| import com.intellij.openapi.externalSystem.model.execution.ExternalTaskExecutionInfo; |
| import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; |
| import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.util.containers.ContainerUtilRt; |
| import org.jetbrains.annotations.NotNull; |
| |
| import javax.swing.*; |
| import java.util.List; |
| |
| /** |
| * @author Denis Zhdanov |
| * @since 6/7/13 3:28 PM |
| */ |
| public class ExternalSystemRecentTaskListModel extends DefaultListModel { |
| |
| @NotNull private final ProjectSystemId myExternalSystemId; |
| @NotNull private final Project myProject; |
| |
| public ExternalSystemRecentTaskListModel(@NotNull ProjectSystemId externalSystemId, @NotNull Project project) { |
| myExternalSystemId = externalSystemId; |
| myProject = project; |
| ensureSize(ExternalSystemConstants.RECENT_TASKS_NUMBER); |
| } |
| |
| @SuppressWarnings("unchecked") |
| public void setTasks(@NotNull List<ExternalTaskExecutionInfo> tasks) { |
| clear(); |
| List<ExternalTaskExecutionInfo> tasksToUse = ContainerUtilRt.newArrayList(tasks); |
| for (ExternalTaskExecutionInfo task : tasksToUse) { |
| addElement(task); |
| } |
| } |
| |
| @SuppressWarnings("unchecked") |
| public void setFirst(@NotNull ExternalTaskExecutionInfo task) { |
| insertElementAt(task, 0); |
| for (int i = 1; i < size(); i++) { |
| if (task.equals(getElementAt(i))) { |
| remove(i); |
| break; |
| } |
| } |
| ensureSize(ExternalSystemConstants.RECENT_TASKS_NUMBER); |
| } |
| |
| @NotNull |
| public List<ExternalTaskExecutionInfo> getTasks() { |
| List<ExternalTaskExecutionInfo> result = ContainerUtilRt.newArrayList(); |
| for (int i = 0; i < size(); i++) { |
| Object e = getElementAt(i); |
| if (e instanceof ExternalTaskExecutionInfo) { |
| result.add((ExternalTaskExecutionInfo)e); |
| } |
| } |
| return result; |
| } |
| |
| @SuppressWarnings("unchecked") |
| public void ensureSize(int elementsNumber) { |
| int toAdd = elementsNumber - size(); |
| if (toAdd == 0) { |
| return; |
| } |
| if(toAdd < 0) { |
| removeRange(elementsNumber, size() - 1); |
| } |
| while (--toAdd >= 0) { |
| addElement(new MyEmptyDescriptor()); |
| } |
| } |
| |
| /** |
| * Asks current model to remove all 'recent task info' entries which point to tasks from external project with the given path. |
| * |
| * @param externalProjectPath target external project's path |
| */ |
| public void forgetTasksFrom(@NotNull String externalProjectPath) { |
| for (int i = size() - 1; i >= 0; i--) { |
| Object e = getElementAt(i); |
| if (e instanceof ExternalTaskExecutionInfo) { |
| String path = ((ExternalTaskExecutionInfo)e).getSettings().getExternalProjectPath(); |
| if (externalProjectPath.equals(path) |
| || externalProjectPath.equals(ExternalSystemApiUtil.getRootProjectPath(path, myExternalSystemId, myProject))) |
| { |
| removeElementAt(i); |
| } |
| } |
| } |
| ensureSize(ExternalSystemConstants.RECENT_TASKS_NUMBER); |
| } |
| |
| static class MyEmptyDescriptor { |
| } |
| } |