diff --git a/bundle/pom.xml b/bundle/pom.xml index 6b8b9b2..e222ea5 100644 --- a/bundle/pom.xml +++ b/bundle/pom.xml @@ -27,7 +27,7 @@ - 2.4.0 + 2.4.1 diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/CliDriverWrapper.java b/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/CliDriverWrapper.java new file mode 100644 index 0000000..5af09da --- /dev/null +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/CliDriverWrapper.java @@ -0,0 +1,68 @@ +package com.jfrog.ide.eclipse.configuration; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +import com.jfrog.ide.common.configuration.JfrogCliDriver; +import com.jfrog.ide.eclipse.log.Logger; + +public class CliDriverWrapper { + + private static CliDriverWrapper instance; + + public static final String CLIENT_ID_SERVER = "eclipse"; + public static final String CLI_VERSION = "2.74.1"; + public static final Path HOME_PATH = Paths.get(System.getProperty("user.home"), ".jfrog-eclipse-plugin"); + + private JfrogCliDriver cliDriver; + + private CliDriverWrapper() { + try { + Files.createDirectories(HOME_PATH); + } catch (Exception e) { + showCliError("An error occurred while creating the JFrog Eclipse plugin directory:",e); + } + // Initialize the cliDriver and download CLI if needed + this.cliDriver = new JfrogCliDriver(null, Logger.getInstance()); + try { + this.cliDriver.downloadCliIfNeeded(HOME_PATH.toString(), CLI_VERSION); + } catch (IOException e) { + showCliError("An error occurred while downloading the JFrog CLI:",e); + } + } + + public static CliDriverWrapper getInstance() { + if (instance == null) { + synchronized (CliDriverWrapper.class) { + if (instance == null) { + instance = new CliDriverWrapper(); + } + } + } + return instance; + } + + public JfrogCliDriver getCliDriver() { + return cliDriver; + } + + public void showCliError(String errorTitle,Exception e) { + Logger.getInstance().error(e.getMessage(), e); + IStatus status = new Status(IStatus.ERROR, "jfrog-eclipse-plugin",e.getMessage(), e); + + // Run UI-related code on the main UI thread + Display.getDefault().asyncExec(() -> { + Shell shell = Display.getDefault().getActiveShell(); + if (shell != null) { + ErrorDialog.openError(shell, "Error", errorTitle, status); + } + }); + } +} \ No newline at end of file diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/XrayGlobalConfiguration.java b/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/XrayGlobalConfiguration.java index 8514cbc..2b5ed72 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/XrayGlobalConfiguration.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/configuration/XrayGlobalConfiguration.java @@ -1,5 +1,6 @@ package com.jfrog.ide.eclipse.configuration; +import org.eclipse.core.runtime.ICoreRunnable; import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.PreferenceDialog; @@ -10,6 +11,7 @@ import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.preferences.ScopedPreferenceStore; +import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.ui.ComponentDetails; import com.jfrog.ide.eclipse.ui.issues.ComponentIssueDetails; @@ -42,11 +44,32 @@ public void createFieldEditors() { @Override public boolean performOk() { - // TODO: This code runs when clicking the 'Apply' button in the settings panel. Implement server configuration using CliDriver here super.performOk(); if (!XrayServerConfigImpl.getInstance().areCredentialsSet()) { return true; } + + // Define the runnable to execute the CLI config command + ICoreRunnable runnable = monitor -> { + try { + CliDriverWrapper.getInstance().getCliDriver().addCliServerConfig( + XrayServerConfigImpl.getInstance().getXrayUrl(), + XrayServerConfigImpl.getInstance().getArtifactoryUrl(), + CliDriverWrapper.CLIENT_ID_SERVER, + XrayServerConfigImpl.getInstance().getUsername(), + XrayServerConfigImpl.getInstance().getPassword(), + XrayServerConfigImpl.getInstance().getAccessToken(), + CliDriverWrapper.HOME_PATH.toFile(), + System.getenv() + ); + } catch (Exception e) { + CliDriverWrapper.getInstance().showCliError("An error occurred while setting up the server connection:", e); + } + }; + + // Schedule the CliJob to execute the runnable + CliJob.doSchedule("Setup Server Configuration", runnable); + boolean doQuickScan = false; ComponentDetails[] componentsDetails = { ComponentIssueDetails.getInstance()}; for (ComponentDetails componentsDetail : componentsDetails) { diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java index 73723ab..6ce0ff4 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java @@ -21,7 +21,7 @@ import com.jfrog.ide.eclipse.configuration.XrayServerConfigImpl; import com.jfrog.ide.eclipse.log.Logger; import com.jfrog.ide.eclipse.log.ProgressIndicatorImpl; -import com.jfrog.ide.eclipse.scheduling.ScanJob; +import com.jfrog.ide.eclipse.scheduling.CliJob; import com.jfrog.ide.eclipse.ui.FilterManagerSingleton; import com.jfrog.ide.eclipse.ui.issues.IssuesTree; import com.jfrog.ide.eclipse.utils.ProjectsMap; @@ -76,7 +76,7 @@ public IProgressMonitor getMonitor(){ * disposed. */ public void scanAndUpdateResults(boolean quickScan, IssuesTree issuesTree, Composite parent) { - ScanJob.doSchedule(project.getName(), new ScanRunnable(parent, issuesTree, quickScan)); + CliJob.doSchedule(project.getName(), new ScanRunnable(parent, issuesTree, quickScan)); } /** diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/ScanJob.java b/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/CliJob.java similarity index 86% rename from bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/ScanJob.java rename to bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/CliJob.java index 8813156..623ecfd 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/ScanJob.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/CliJob.java @@ -13,16 +13,16 @@ * * @author yahavi */ -public class ScanJob extends Job { +public class CliJob extends Job { private ICoreRunnable runnable; public static String FAMILY = "JFrogEclipsePluginJob"; - public ScanJob(String name, ICoreRunnable runnable) { + public CliJob(String name, ICoreRunnable runnable) { super(name); setUser(true); setRule(ResourcesPlugin.getWorkspace().getRoot()); - addJobChangeListener(new XrayJobEventListener()); + addJobChangeListener(new CliJobEventListener()); this.runnable = runnable; } @@ -33,7 +33,7 @@ public ScanJob(String name, ICoreRunnable runnable) { * @param runnable - Job's callback. */ public static void doSchedule(String name, ICoreRunnable runnable) { - new ScanJob(name, runnable).schedule(); + new CliJob(name, runnable).schedule(); } @Override diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/XrayJobEventListener.java b/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/CliJobEventListener.java similarity index 81% rename from bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/XrayJobEventListener.java rename to bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/CliJobEventListener.java index 04bcdec..0726f34 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/XrayJobEventListener.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/scheduling/CliJobEventListener.java @@ -5,11 +5,11 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; -public class XrayJobEventListener extends JobChangeAdapter { +public class CliJobEventListener extends JobChangeAdapter { @Override public void done(IJobChangeEvent event) { - Job[] jobs = Job.getJobManager().find(ScanJob.FAMILY); + Job[] jobs = Job.getJobManager().find(CliJob.FAMILY); // TODO: implement a listener for the audit scan // ScanManagersFactory scanManagersFactory = ScanManagersFactory.getInstance(); if (ArrayUtils.isEmpty(jobs)) {