/* * Copyright 2000-2016 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.action; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.externalSystem.ExternalSystemManager; import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys; import com.intellij.openapi.externalSystem.model.ProjectSystemId; import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType; import com.intellij.openapi.externalSystem.service.internal.ExternalSystemProcessingManager; import com.intellij.openapi.externalSystem.util.ExternalSystemBundle; import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import java.util.List; /** * Forces the ide to retrieve the most up-to-date info about the linked external projects and updates project state if necessary * (e.g. imports missing libraries). * * @author Denis Zhdanov * @since 1/23/12 3:48 PM */ public class RefreshAllExternalProjectsAction extends AnAction implements AnAction.TransparentUpdate { public RefreshAllExternalProjectsAction() { getTemplatePresentation().setText(ExternalSystemBundle.message("action.refresh.all.projects.text", "external")); getTemplatePresentation().setDescription(ExternalSystemBundle.message("action.refresh.all.projects.description", "external")); } @Override public void update(AnActionEvent e) { final Project project = e.getProject(); if (project == null) { e.getPresentation().setEnabled(false); return; } final List<ProjectSystemId> systemIds = getSystemIds(e); if (systemIds.isEmpty()) { e.getPresentation().setEnabled(false); return; } final String name = StringUtil.join(systemIds, projectSystemId -> projectSystemId.getReadableName(), ","); e.getPresentation().setText(ExternalSystemBundle.message("action.refresh.all.projects.text", name)); e.getPresentation().setDescription(ExternalSystemBundle.message("action.refresh.all.projects.description", name)); ExternalSystemProcessingManager processingManager = ServiceManager.getService(ExternalSystemProcessingManager.class); e.getPresentation().setEnabled(!processingManager.hasTaskOfTypeInProgress(ExternalSystemTaskType.RESOLVE_PROJECT, project)); } @Override public void actionPerformed(AnActionEvent e) { final Project project = e.getProject(); if (project == null) { e.getPresentation().setEnabled(false); return; } final List<ProjectSystemId> systemIds = getSystemIds(e); if (systemIds.isEmpty()) { e.getPresentation().setEnabled(false); return; } // We save all documents because there is a possible case that there is an external system config file changed inside the ide. FileDocumentManager.getInstance().saveAllDocuments(); for (ProjectSystemId externalSystemId : systemIds) { ExternalSystemUtil.refreshProjects(project, externalSystemId, true); } } private static List<ProjectSystemId> getSystemIds(AnActionEvent e) { final List<ProjectSystemId> systemIds = ContainerUtil.newArrayList(); final ProjectSystemId externalSystemId = ExternalSystemDataKeys.EXTERNAL_SYSTEM_ID.getData(e.getDataContext()); if (externalSystemId != null) { systemIds.add(externalSystemId); } else { for (ExternalSystemManager manager : ExternalSystemManager.EP_NAME.getExtensions()) { systemIds.add(manager.getSystemId()); } } return systemIds; } }