| /******************************************************************************* |
| * Copyright (c) 2019 Ericsson AB. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Jacques Bouthillier - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.egerrit.extensionpoint.definition; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.core.databinding.observable.list.IObservableList; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.egerrit.internal.core.GerritClient; |
| import org.eclipse.egerrit.internal.model.FileInfo; |
| import org.eclipse.egerrit.internal.model.impl.StringToFileInfoImpl; |
| import org.eclipse.egerrit.internal.ui.compare.GerritDiffNode; |
| import org.eclipse.egerrit.ui.extension.IExternalCmd.ExternalInfo; |
| import org.eclipse.jface.viewers.ColumnViewer; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.TableViewer; |
| |
| /** |
| * This class implements the selection of the file in the Files table and open the workspace file. |
| * |
| * @since 1.0 |
| */ |
| public class HandleExternalFileSelection { |
| |
| private GerritClient fGerritClient; |
| |
| private ColumnViewer fViewer; |
| |
| public HandleExternalFileSelection(GerritClient gerritClient, ColumnViewer viewer) { |
| this.fGerritClient = gerritClient; |
| this.fViewer = viewer; |
| } |
| |
| /** |
| * Open the selected file in the Files table and open the workspace file |
| * |
| * @return boolean |
| * @throws Throwable |
| */ |
| public boolean showFileSelection() { |
| boolean ok = true; |
| ISelection selection = fViewer.getSelection(); |
| if (selection instanceof IStructuredSelection) { |
| |
| IStructuredSelection structuredSelection = (IStructuredSelection) selection; |
| Iterator<?> itr = structuredSelection.iterator(); |
| while (itr.hasNext()) { |
| getReviewInfo(itr); |
| notifyContributionHandler(); |
| } |
| } |
| |
| return ok; |
| |
| } |
| |
| private void notifyContributionHandler() { |
| EvaluateContributionsHandler eval = new EvaluateContributionsHandler(); |
| try { |
| eval.execute(new ExecutionEvent()); |
| } catch (ExecutionException e) { |
| System.out.println("------- exception on execute() ----------------"); //$NON-NLS-1$ |
| e.printStackTrace(); |
| } |
| |
| } |
| |
| /** |
| * @param itr |
| */ |
| private void getReviewInfo(Iterator<?> itr) { |
| Object element = itr.next(); |
| if (element == null) { |
| return; |
| } |
| FileInfo fileInfo; |
| if (fViewer instanceof TableViewer) { |
| fileInfo = ((StringToFileInfoImpl) element).getValue(); |
| } else { |
| fileInfo = ((GerritDiffNode) element).getFileInfo(); |
| } |
| |
| // Fill the Data structure to show |
| IResource workspaceFile = ResourcesPlugin.getWorkspace().getRoot(); |
| ExternalInfo.workspacePath = workspaceFile.getLocationURI().getRawPath(); |
| ExternalInfo.filePath = fileInfo.getPath(); |
| ExternalInfo.project = fileInfo.getRevision().getChangeInfo().getProject(); |
| ExternalInfo.serverName = this.fGerritClient.getRepository().getHostname(); |
| ExternalInfo.reviewCommit = fileInfo.getRevision().getId(); |
| ExternalInfo.patchSet = fileInfo.getRevision().getRef(); |
| ExternalInfo.serverPath = this.fGerritClient.getRepository().getServerInfo().getServerURI(); |
| ExternalInfo.listCommitFiles = this.listCommitFiles(); |
| |
| } |
| |
| /** |
| * Create a list of all files adjusted with this commit. The list filter the COMMIT_MSG. |
| * |
| * @return List<String> of files found in this commit |
| */ |
| private List<String> listCommitFiles() { |
| List<String> listFiles = new ArrayList<>(); |
| |
| if (fViewer instanceof TableViewer) { |
| Object obj = fViewer.getInput(); |
| if (obj instanceof IObservableList) { |
| IObservableList<StringToFileInfoImpl> list = (IObservableList<StringToFileInfoImpl>) obj; |
| for (int i = 0; i < list.size(); i++) { |
| // Remove the commit msg from the list of files |
| if (!list.get(i).getKey().toUpperCase().endsWith("COMMIT_MSG")) { //$NON-NLS-1$ |
| listFiles.add(list.get(i).getKey()); |
| } |
| } |
| } |
| } |
| return listFiles; |
| } |
| } |