Bug 574779: [R-Console] Adapt and revise tool command handlers
Change-Id: I1ff6823137c3df32622da6c1b9e79f2ddaa2e990
diff --git a/r/org.eclipse.statet.nico.core/META-INF/MANIFEST.MF b/r/org.eclipse.statet.nico.core/META-INF/MANIFEST.MF
index b187477..bdbae03 100644
--- a/r/org.eclipse.statet.nico.core/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.nico.core/META-INF/MANIFEST.MF
@@ -24,8 +24,7 @@
org.eclipse.statet.jcommons.lang;version="4.5.0",
org.eclipse.statet.jcommons.status;version="4.5.0",
org.eclipse.statet.jcommons.status.eplatform;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core.util;version="4.5.0"
+ org.eclipse.statet.jcommons.ts.core;version="4.5.0"
Export-Package: org.eclipse.statet.internal.nico.core;x-friends:="org.eclipse.statet.nico.ui",
org.eclipse.statet.nico.core,
org.eclipse.statet.nico.core.runtime,
diff --git a/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/HistoryOperationsHandler.java b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/HistoryOperationsHandler.java
index 9713c91..6488dd5 100644
--- a/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/HistoryOperationsHandler.java
+++ b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/HistoryOperationsHandler.java
@@ -17,73 +17,77 @@
import static org.eclipse.statet.jcommons.status.Status.CANCEL_STATUS;
import static org.eclipse.statet.jcommons.status.Status.OK_STATUS;
-import java.util.Map;
-
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ErrorStatus;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
-import org.eclipse.statet.jcommons.ts.core.ToolCommandHandler;
-import org.eclipse.statet.jcommons.ts.core.ToolService;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.internal.nico.core.Messages;
import org.eclipse.statet.nico.core.NicoCore;
+import org.eclipse.statet.nico.core.util.AbstractConsoleCommandHandler;
/**
- * {@link #LOAD_HISTORY_ID}
- * {@link #SAVE_HISTORY_ID}
- * {@link #ADDTO_HISTORY_ID}
+ * {@link #LOAD_HISTORY_COMMAND_ID}
+ * {@link #SAVE_HISTORY_COMMAND_ID}
+ * {@link #ADDTO_HISTORY_COMMAND_ID}
*/
-public class HistoryOperationsHandler implements ToolCommandHandler {
+@NonNullByDefault
+public class HistoryOperationsHandler extends AbstractConsoleCommandHandler {
- public static final String LOAD_HISTORY_ID = "console/loadHistory"; //$NON-NLS-1$
+ public static final String LOAD_HISTORY_COMMAND_ID= "console/loadHistory"; //$NON-NLS-1$
- public static final String SAVE_HISTORY_ID = "console/saveHistory"; //$NON-NLS-1$
+ public static final String SAVE_HISTORY_COMMAND_ID= "console/saveHistory"; //$NON-NLS-1$
- public static final String ADDTO_HISTORY_ID = "console/addtoHistory"; //$NON-NLS-1$
+ public static final String ADDTO_HISTORY_COMMAND_ID= "console/addtoHistory"; //$NON-NLS-1$
- @Override
- public Status execute(final String id, final ToolService service, final Map<String, Object> data,
- final ProgressMonitor m) {
- if (service instanceof ConsoleService) {
- final ConsoleService console = (ConsoleService) service;
- if (id.equals(LOAD_HISTORY_ID)) {
- return loadHistory(console, data, m);
- }
- if (id.equals(SAVE_HISTORY_ID)) {
- return saveHistory(console, data, m);
- }
- if (id.equals(ADDTO_HISTORY_ID)) {
- final String item = ToolCommandHandlerUtils.getCheckedData(data, "text", String.class, true); //$NON-NLS-1$
- console.getTool().getHistory().addCommand(item, console.getController().getCurrentSubmitType());
- return OK_STATUS;
- }
- }
- throw new UnsupportedOperationException();
+ public HistoryOperationsHandler() {
}
- protected Status loadHistory(final ConsoleService tools, final Map<String, Object> data,
+ @Override
+ public Status execute(final String id, final ConsoleService service, final ToolCommandData data,
+ final ProgressMonitor m) {
+ switch (id) {
+ case LOAD_HISTORY_COMMAND_ID:
+ return loadHistory(service, data, m);
+ case SAVE_HISTORY_COMMAND_ID:
+ return saveHistory(service, data, m);
+
+ case ADDTO_HISTORY_COMMAND_ID:
+ { final String item= data.getStringRequired("text"); //$NON-NLS-1$
+ service.getTool().getHistory().addCommand(item,
+ service.getController().getCurrentSubmitType() );
+ return OK_STATUS;
+ }
+
+ default:
+ throw new UnsupportedOperationException();
+ }
+ }
+
+
+ protected Status loadHistory(final ConsoleService tools, final ToolCommandData data,
final ProgressMonitor m) {
try {
- CoreException fileException = null;
- IFileStore fileStore = null;
- final String filename = ToolCommandHandlerUtils.getCheckedData(data, "filename", String.class, true); //$NON-NLS-1$
- final ToolWorkspace workspaceData = tools.getWorkspaceData();
+ CoreException fileException= null;
+ IFileStore fileStore= null;
+ final String filename= data.getStringRequired("filename"); //$NON-NLS-1$
+ final ToolWorkspace workspaceData= tools.getWorkspaceData();
try {
- fileStore = workspaceData.toFileStore(filename);
+ fileStore= workspaceData.toFileStore(filename);
}
catch (final CoreException e) {
- fileException = e;
+ fileException= e;
}
final Status status;
if (fileStore == null) {
@@ -104,23 +108,23 @@
}
}
- protected Status saveHistory(final ConsoleService tools, final Map<String, Object> data,
+ protected Status saveHistory(final ConsoleService tools, final ToolCommandData data,
final ProgressMonitor m) {
try {
- CoreException fileException = null;
- IFileStore fileStore = null;
+ CoreException fileException= null;
+ IFileStore fileStore= null;
final Status status;
- final String filename = ToolCommandHandlerUtils.getCheckedData(data, "filename", String.class, true); //$NON-NLS-1$
- final ToolWorkspace workspaceData = tools.getWorkspaceData();
+ final String filename= data.getStringRequired("filename"); //$NON-NLS-1$
+ final ToolWorkspace workspaceData= tools.getWorkspaceData();
try {
- fileStore = workspaceData.toFileStore(filename);
+ fileStore= workspaceData.toFileStore(filename);
}
catch (final CoreException e) {
- fileException = e;
+ fileException= e;
}
if (fileStore == null) {
- status = new ErrorStatus(NicoCore.BUNDLE_ID, NLS.bind(
+ status= new ErrorStatus(NicoCore.BUNDLE_ID, NLS.bind(
Messages.ToolController_FileOperation_error_CannotResolve_message,
filename ),
fileException );
diff --git a/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/ToolController.java b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/ToolController.java
index d87357d..acff6fa 100644
--- a/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/ToolController.java
+++ b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/runtime/ToolController.java
@@ -39,6 +39,7 @@
import org.eclipse.statet.jcommons.collections.ImIdentityList;
import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.Disposable;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.lang.ObjectUtils;
import org.eclipse.statet.jcommons.lang.ObjectUtils.ToStringBuilder;
import org.eclipse.statet.jcommons.status.CancelStatus;
@@ -48,8 +49,10 @@
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
+import org.eclipse.statet.jcommons.ts.core.BasicToolCommandData;
import org.eclipse.statet.jcommons.ts.core.SystemRunnable;
import org.eclipse.statet.jcommons.ts.core.Tool;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolCommandHandler;
import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
import org.eclipse.statet.jcommons.ts.core.ToolService;
@@ -740,9 +743,10 @@
try {
final ToolCommandHandler handler= this.actionHandlers.get(SCHEDULE_QUIT_EVENT_ID);
if (handler != null) {
- final Map<String, Object> data= new HashMap<>();
- data.put("scheduledQuitRunnables", getQuitRunnables()); //$NON-NLS-1$
- final Status status= executeHandler(SCHEDULE_QUIT_EVENT_ID, handler, data, new NullProgressMonitor());
+ final ToolCommandData data= new BasicToolCommandData(Map.of(
+ "scheduledQuitRunnables", getQuitRunnables() ));
+ final Status status= executeHandler(SCHEDULE_QUIT_EVENT_ID, handler, data,
+ new NullProgressMonitor() );
if (status != null && status.getSeverity() > Status.OK) {
schedule= false;
}
@@ -1730,7 +1734,8 @@
}
final ToolCommandHandler handler= getCommandHandler(REPORT_STATUS_EVENT_ID);
if (handler != null) {
- final Map<String, Object> data= Collections.singletonMap(REPORT_STATUS_DATA_KEY, (Object) status);
+ final ToolCommandData data= new BasicToolCommandData(Map.of(
+ REPORT_STATUS_DATA_KEY, status ));
final Status reportStatus= executeHandler(REPORT_STATUS_EVENT_ID, handler, data, m);
if (reportStatus != null && reportStatus.getSeverity() == Status.OK) {
return;
@@ -1750,8 +1755,9 @@
null ));
}
- protected Status executeHandler(final String commandID, final ToolCommandHandler handler,
- final Map<String, Object> data, final ProgressMonitor m) {
+ protected @Nullable Status executeHandler(final String commandID,
+ final ToolCommandHandler handler, final ToolCommandData data,
+ final ProgressMonitor m) {
try {
return handler.execute(commandID, this, data, m);
}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/AbstractConsoleCommandHandler.java b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/AbstractConsoleCommandHandler.java
similarity index 79%
rename from r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/AbstractConsoleCommandHandler.java
rename to r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/AbstractConsoleCommandHandler.java
index 8e8dc2b..3354697 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/AbstractConsoleCommandHandler.java
+++ b/r/org.eclipse.statet.nico.core/src/org/eclipse/statet/nico/core/util/AbstractConsoleCommandHandler.java
@@ -12,14 +12,13 @@
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
-package org.eclipse.statet.internal.nico.ui;
-
-import java.util.Map;
+package org.eclipse.statet.nico.core.util;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolCommandHandler;
import org.eclipse.statet.jcommons.ts.core.ToolService;
@@ -31,12 +30,12 @@
@Override
- public Status execute(final String id, final ToolService service, final Map<String, Object> data,
+ public Status execute(final String id, final ToolService service, final ToolCommandData data,
final ProgressMonitor m) throws StatusException {
- return execute(id, (ConsoleService) service, data, m);
+ return execute(id, (ConsoleService)service, data, m);
}
- protected abstract Status execute(final String id, final ConsoleService service, final Map<String, Object> data,
- final ProgressMonitor m) throws StatusException;
+ protected abstract Status execute(String id, ConsoleService service, ToolCommandData data,
+ ProgressMonitor m) throws StatusException;
}
diff --git a/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF
index 2117321..d803c96 100644
--- a/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF
@@ -44,8 +44,7 @@
org.eclipse.statet.jcommons.status;version="4.5.0",
org.eclipse.statet.jcommons.status.eplatform;version="4.5.0",
org.eclipse.statet.jcommons.text.core;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core.util;version="4.5.0"
+ org.eclipse.statet.jcommons.ts.core;version="4.5.0"
Export-Package: org.eclipse.statet.nico.ui,
org.eclipse.statet.nico.ui.actions,
org.eclipse.statet.nico.ui.console,
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java
index 896d771..e3b1040 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ChooseFileHandler.java
@@ -17,9 +17,6 @@
import static org.eclipse.statet.jcommons.status.Status.CANCEL_STATUS;
import static org.eclipse.statet.jcommons.status.Status.OK_STATUS;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.core.filesystem.IFileStore;
@@ -34,9 +31,11 @@
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
@@ -45,41 +44,54 @@
import org.eclipse.statet.ecommons.ui.util.UIAccess;
import org.eclipse.statet.ecommons.ui.workbench.ResourceInputComposite;
-import org.eclipse.statet.internal.nico.ui.AbstractConsoleCommandHandler;
import org.eclipse.statet.internal.nico.ui.Messages;
import org.eclipse.statet.internal.nico.ui.NicoUIPlugin;
import org.eclipse.statet.nico.core.runtime.ConsoleService;
import org.eclipse.statet.nico.core.runtime.IProgressInfo;
import org.eclipse.statet.nico.core.runtime.ToolProcess;
+import org.eclipse.statet.nico.core.util.AbstractConsoleCommandHandler;
/**
* TODO: Better support for remote engines (resource mapping); disable OK button on errors?
*/
+@NonNullByDefault
public class ChooseFileHandler extends AbstractConsoleCommandHandler {
- public static final String CHOOSE_FILE_ID = "common/chooseFile"; //$NON-NLS-1$
+ public static final String CHOOSE_FILE_COMMAND_ID= "common/chooseFile"; //$NON-NLS-1$
private static class ChooseFileDialog extends ToolDialog {
- private final int fMode;
+ private final int mode;
- private final String fMessage;
+ private final String message;
- private ResourceInputComposite fLocationGroup;
- private WritableValue fNewLocationString;
- private final String fHistoryId;
+ private ResourceInputComposite locationGroup;
+ private final WritableValue<String> newLocationValue;
+ private final String historyId;
- public ChooseFileDialog(final Shell shell, final ToolProcess tool, final String message, final boolean newFile) {
+ public ChooseFileDialog(final Shell shell, final ToolProcess tool, final String message,
+ final boolean newFile) {
super(tool, shell, null, Messages.Util_ChooseFile_Dialog_title);
- fMode = newFile ? (ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_SAVE)
- : (ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_OPEN);
- fMessage = message;
- fHistoryId = "statet:"+getTool().getMainType()+":location.commonfile"; //$NON-NLS-1$ //$NON-NLS-2$
+ this.mode= newFile ?
+ (ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_SAVE) :
+ (ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_OPEN);
+ this.message= message;
+ this.historyId= "statet:" + getTool().getMainType() + ":location.commonfile"; //$NON-NLS-1$ //$NON-NLS-2$
+
+ final IFileStore current= getTool().getWorkspaceData().getWorkspaceDir();
+ String dir= ""; //$NON-NLS-1$
+ if (current != null) {
+ final IPath path= URIUtil.toPath(current.toURI());
+ if (path != null) {
+ dir= path.toOSString();
+ }
+ }
+ this.newLocationValue= new WritableValue<>(dir, String.class);
}
@@ -90,48 +102,39 @@
@Override
protected Control createDialogContent(final Composite parent) {
- setTitle(fMessage);
+ setTitle(this.message);
- final Composite composite = new Composite(parent, SWT.NONE);
+ final Composite composite= new Composite(parent, SWT.NONE);
composite.setLayout(LayoutUtils.newCompositeGrid(1));
- final Composite inputComposite = new Composite(composite, SWT.NONE);
+ final Composite inputComposite= new Composite(composite, SWT.NONE);
inputComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
inputComposite.setLayout(LayoutUtils.newCompositeGrid(2));
- fLocationGroup = new ResourceInputComposite(inputComposite,
+ this.locationGroup= new ResourceInputComposite(inputComposite,
ResourceInputComposite.STYLE_COMBO,
- fMode,
- Messages.Util_ChooseFile_File_label);
- fLocationGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- final String[] history = getDialogSettings().getArray(fHistoryId);
- fLocationGroup.setHistory(history);
+ this.mode,
+ Messages.Util_ChooseFile_File_label );
+ this.locationGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ final String[] history= getDialogSettings().getArray(this.historyId);
+ this.locationGroup.setHistory(history);
- final DataBindingSupport databinding = new DataBindingSupport(composite);
+ final DataBindingSupport databinding= new DataBindingSupport(composite);
addBindings(databinding);
- fNewLocationString.setValue((history != null && history.length > 0) ? history[0] : ""); //$NON-NLS-1$
+ this.newLocationValue.setValue((history != null && history.length > 0) ? history[0] : ""); //$NON-NLS-1$
- databinding.installStatusListener(new TitleAreaStatusUpdater(this, fMessage));
+ databinding.installStatusListener(new TitleAreaStatusUpdater(this, this.message));
return composite;
}
protected void addBindings(final DataBindingSupport db) {
- final IFileStore current = getTool().getWorkspaceData().getWorkspaceDir();
- String dir = ""; //$NON-NLS-1$
- if (current != null) {
- final IPath path = URIUtil.toPath(current.toURI());
- if (path != null) {
- dir = path.toOSString();
- }
- }
- fNewLocationString = new WritableValue(dir, String.class);
db.getContext().bindValue(
- fLocationGroup.getObservable(),
- fNewLocationString,
- new UpdateValueStrategy<>()
- .setAfterGetValidator(fLocationGroup.getValidator()),
+ this.locationGroup.getObservable(),
+ this.newLocationValue,
+ new UpdateValueStrategy<String, String>()
+ .setAfterGetValidator(this.locationGroup.getValidator()),
null );
}
@@ -142,48 +145,42 @@
}
public void saveSettings() {
- final IDialogSettings settings = getDialogSettings();
- DialogUtils.saveHistorySettings(settings, fHistoryId, (String) fNewLocationString.getValue());
+ final IDialogSettings settings= getDialogSettings();
+ DialogUtils.saveHistorySettings(settings, this.historyId, this.newLocationValue.getValue());
}
public IFileStore getResource() {
- return fLocationGroup.getResourceAsFileStore();
+ return this.locationGroup.getResourceAsFileStore();
}
}
@Override
- public Status execute(final String id, final ConsoleService service, final Map<String, Object> data,
+ public Status execute(final String id, final ConsoleService service, final ToolCommandData data,
final ProgressMonitor m) {
final String message;
- { String s = ToolCommandHandlerUtils.getCheckedData(data, "message", String.class, false); //$NON-NLS-1$
+ { String s= data.getString("message"); //$NON-NLS-1$
if (s == null) {
- final IProgressInfo progressInfo = service.getController().getProgressInfo();
- s = NLS.bind("Choose file (asked by {0}):", progressInfo.getLabel());
+ final IProgressInfo progressInfo= service.getController().getProgressInfo();
+ s= NLS.bind("Choose file (asked by {0}):", progressInfo.getLabel());
}
- message = s;
+ message= s;
}
- final Boolean newFile = ToolCommandHandlerUtils.getCheckedData(data, "newResource", Boolean.class, true); //$NON-NLS-1$
- final AtomicReference<IFileStore> file= new AtomicReference<>();
- final Runnable runnable = new Runnable() {
- @Override
- public void run() {
- final ChooseFileDialog dialog = new ChooseFileDialog(UIAccess.getActiveWorkbenchShell(true),
- service.getTool(), message, newFile.booleanValue());
- dialog.setBlockOnOpen(true);
- if (dialog.open() == Dialog.OK) {
- file.set(dialog.getResource());
- }
- }
- };
- UIAccess.getDisplay().syncExec(runnable);
- if (file.get() == null) {
+ final boolean newFile= data.getBooleanRequired("newResource"); //$NON-NLS-1$
+ final var file= UIAccess.<@Nullable IFileStore>syncExecGet(() -> {
+ final ChooseFileDialog dialog= new ChooseFileDialog(UIAccess.getActiveWorkbenchShell(true),
+ service.getTool(), message, newFile );
+ dialog.setBlockOnOpen(true);
+ return (dialog.open() == Dialog.OK) ? dialog.getResource() : null;
+ });
+ if (file == null) {
return CANCEL_STATUS;
}
- { final String fileName = file.get().toString();
- data.put("filename", fileName); //$NON-NLS-1$
- data.put("fileName", fileName); //$NON-NLS-1$
+ { final String fileName= file.toString();
+ data.setReturnData("filename", fileName); //$NON-NLS-1$
+ data.setReturnData("fileName", fileName); //$NON-NLS-1$
+ data.setReturnData("filePath", fileName); //$NON-NLS-1$
}
return OK_STATUS;
}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java
index f45d78a..586f4d9 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java
@@ -16,30 +16,29 @@
import static org.eclipse.statet.jcommons.status.Status.OK_STATUS;
-import java.util.Map;
-
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.status.ErrorStatus;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
-import org.eclipse.statet.internal.nico.ui.AbstractConsoleCommandHandler;
import org.eclipse.statet.nico.core.runtime.ConsoleService;
import org.eclipse.statet.nico.core.runtime.IToolEventHandler;
import org.eclipse.statet.nico.core.runtime.ToolWorkspace;
+import org.eclipse.statet.nico.core.util.AbstractConsoleCommandHandler;
import org.eclipse.statet.nico.ui.NicoUI;
import org.eclipse.statet.nico.ui.views.HistoryView;
@@ -49,41 +48,46 @@
* {@link IToolEventHandler#SHOW_HISTORY_ID} - shows the history view
*
*/
+@NonNullByDefault
public class EclipseIDEOperationsHandler extends AbstractConsoleCommandHandler {
- public static final String SHOW_FILE_ID = "common/showFile"; //$NON-NLS-1$
+ public static final String OPEN_FILE_COMMAND_ID= "common/openFile";
+ @Deprecated
+ public static final String OPEN_FILE_COMMAND_OLD_ID= "common/showFile"; //$NON-NLS-1$
- public static final String SHOW_HISTORY_ID = "common/showHistory"; //$NON-NLS-1$
+ public static final String SHOW_HISTORY_COMMAND_ID= "common/showHistory"; //$NON-NLS-1$
@Override
- public Status execute(final String id, final ConsoleService service, final Map<String, Object> data,
+ public Status execute(final String id, final ConsoleService service, final ToolCommandData data,
final ProgressMonitor m) {
- if (id.equals(SHOW_FILE_ID)) {
- final IFileStore fileStore;
- final IFile workspaceFile;
- String fileName = ToolCommandHandlerUtils.getCheckedData(data, "filename", String.class, false); //$NON-NLS-1$
- if (fileName == null) {
- fileName = ToolCommandHandlerUtils.getCheckedData(data, "fileName", String.class, true); //$NON-NLS-1$
- }
- final ToolWorkspace workspaceData = service.getWorkspaceData();
- try {
- fileStore = workspaceData.toFileStore(fileName);
- workspaceFile = getWorkspaceFile(fileStore, m);
- }
- catch (final CoreException e) {
- final Status status= new ErrorStatus(NicoUI.BUNDLE_ID,
- "Failed to resolve filename.",
- e );
- service.handleStatus(status, m);
- return status;
- }
- final Display display = UIAccess.getDisplay();
- display.syncExec(new Runnable() {
- @Override
- public void run() {
- final IWorkbenchPage page = NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
+ switch (id) {
+ case OPEN_FILE_COMMAND_ID:
+ case OPEN_FILE_COMMAND_OLD_ID:
+ { final IFileStore fileStore;
+ final IFile workspaceFile;
+ String fileName= data.getString("filename"); //$NON-NLS-1$
+ if (fileName == null) {
+ fileName= data.getString("fileName"); //$NON-NLS-1$
+ if (fileName == null) {
+ fileName= data.getStringRequired("filePath"); //$NON-NLS-1$
+ }
+ }
+ final ToolWorkspace workspaceData= service.getWorkspaceData();
+ try {
+ fileStore= workspaceData.toFileStore(fileName);
+ workspaceFile= getWorkspaceFile(fileStore, m);
+ }
+ catch (final CoreException e) {
+ final Status status= new ErrorStatus(NicoUI.BUNDLE_ID,
+ "Failed to resolve filename.",
+ e );
+ service.handleStatus(status, m);
+ return status;
+ }
+ UIAccess.getDisplay().syncExec(() -> {
+ final IWorkbenchPage page= NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
try {
if (workspaceFile != null) {
IDE.openEditor(page, workspaceFile);
@@ -98,19 +102,16 @@
e );
service.handleStatus(status, m);
}
- }
- });
- return OK_STATUS;
- }
- if (id.equals(SHOW_HISTORY_ID)) {
- final String pattern = ToolCommandHandlerUtils.getCheckedData(data, "pattern", String.class, false); //$NON-NLS-1$
- final Display display = UIAccess.getDisplay();
- display.syncExec(new Runnable() {
- @Override
- public void run() {
+ });
+ return OK_STATUS;
+ }
+
+ case SHOW_HISTORY_COMMAND_ID:
+ { final String pattern= data.getString("pattern"); //$NON-NLS-1$
+ UIAccess.getDisplay().syncExec(() -> {
try {
- final IWorkbenchPage page = NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
- final HistoryView view = (HistoryView) page.showView(NicoUI.HISTORY_VIEW_ID);
+ final IWorkbenchPage page= NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
+ final HistoryView view= (HistoryView)page.showView(NicoUI.HISTORY_VIEW_ID);
if (pattern != null) {
view.search(pattern, false);
}
@@ -121,18 +122,20 @@
e );
service.handleStatus(status, m);
}
- }
- });
- return OK_STATUS;
+ });
+ return OK_STATUS;
+ }
+
+ default:
+ throw new UnsupportedOperationException();
}
- throw new UnsupportedOperationException();
}
- private IFile getWorkspaceFile(final IFileStore fileStore, final ProgressMonitor m) throws CoreException {
- final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- final IFile[] files = root.findFilesForLocationURI(fileStore.toURI());
+ private @Nullable IFile getWorkspaceFile(final IFileStore fileStore, final ProgressMonitor m) throws CoreException {
+ final IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
+ final IFile[] files= root.findFilesForLocationURI(fileStore.toURI());
if (files != null && files.length > 0) {
- final IFile file = files[0];
+ final IFile file= files[0];
if (!file.exists()) { // Bug 549546
file.refreshLocal(0, EStatusUtils.convert(m));
}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/LoginHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/LoginHandler.java
index 375de65..8ffaf6c 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/LoginHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/LoginHandler.java
@@ -23,7 +23,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import javax.security.auth.callback.Callback;
@@ -51,12 +50,13 @@
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.status.ErrorStatus;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolService;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
import org.eclipse.statet.ecommons.runtime.core.util.StatusUtils;
import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
@@ -75,18 +75,19 @@
*
* Uses Equinox Security storage to save login data
*/
+@NonNullByDefault
public class LoginHandler implements IToolEventHandler {
- private static final String SECURE_PREF_ROOT = "/statet/nico"; //$NON-NLS-1$
- private static final String SECURE_PREF_CHARSET = "UTF-8"; //$NON-NLS-1$
- private static final String SECURE_PREF_NAME_KEY = "name"; //$NON-NLS-1$
- private static final String SECURE_PREF_PASSWORD_KEY = "password"; //$NON-NLS-1$
+ private static final String SECURE_PREF_ROOT= "/statet/nico"; //$NON-NLS-1$
+ private static final String SECURE_PREF_CHARSET= "UTF-8"; //$NON-NLS-1$
+ private static final String SECURE_PREF_NAME_KEY= "name"; //$NON-NLS-1$
+ private static final String SECURE_PREF_PASSWORD_KEY= "password"; //$NON-NLS-1$
private static class LoginDialog extends ToolMessageDialog {
- private String message;
+ private @Nullable String message;
private Callback[] callbacks;
private boolean allowSave;
@@ -112,12 +113,12 @@
super.createMessageArea(parent);
LayoutUtils.addGDDummy(parent);
- final Composite inputComposite = new Composite(parent, SWT.NONE);
+ final Composite inputComposite= new Composite(parent, SWT.NONE);
inputComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
inputComposite.setLayout(LayoutUtils.newCompositeGrid(3));
if (this.message != null) {
- final Label label = new Label(inputComposite, SWT.WRAP);
+ final Label label= new Label(inputComposite, SWT.WRAP);
label.setText(this.message);
label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
@@ -126,8 +127,8 @@
ITER_CALLBACKS: for (final Callback callback : this.callbacks) {
if (callback instanceof TextOutputCallback) {
- final TextOutputCallback outputCallback = (TextOutputCallback) callback;
- final Label icon = new Label(inputComposite, SWT.LEFT);
+ final TextOutputCallback outputCallback= (TextOutputCallback) callback;
+ final Label icon= new Label(inputComposite, SWT.LEFT);
switch (outputCallback.getMessageType()) {
case TextOutputCallback.ERROR:
icon.setImage(Display.getCurrent().getSystemImage(SWT.ICON_ERROR));
@@ -140,24 +141,24 @@
break;
}
icon.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
- final Label label = new Label(inputComposite, SWT.WRAP);
+ final Label label= new Label(inputComposite, SWT.WRAP);
label.setText(outputCallback.getMessage());
label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
continue ITER_CALLBACKS;
}
if (callback instanceof NameCallback) {
- final NameCallback nameCallback = (NameCallback) callback;
- final Label label = new Label(inputComposite, SWT.LEFT);
+ final NameCallback nameCallback= (NameCallback) callback;
+ final Label label= new Label(inputComposite, SWT.LEFT);
label.setText(nameCallback.getPrompt()+':');
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
- final Text field = new Text(inputComposite, SWT.LEFT | SWT.BORDER);
- final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
- gd.widthHint = LayoutUtils.hintWidth(field, 25);
+ final Text field= new Text(inputComposite, SWT.LEFT | SWT.BORDER);
+ final GridData gd= new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+ gd.widthHint= LayoutUtils.hintWidth(field, 25);
field.setLayoutData(gd);
- String init = nameCallback.getName();
+ String init= nameCallback.getName();
if (init == null || init.isEmpty()) {
- init = nameCallback.getDefaultName();
+ init= nameCallback.getDefaultName();
}
if (init != null) {
field.setText(init);
@@ -167,7 +168,7 @@
@Override
public void run() {
if (LoginDialog.this.username == null) {
- LoginDialog.this.username = field.getText();
+ LoginDialog.this.username= field.getText();
}
nameCallback.setName(field.getText());
}
@@ -175,13 +176,13 @@
continue ITER_CALLBACKS;
}
if (callback instanceof PasswordCallback) {
- final PasswordCallback passwordCallback = (PasswordCallback) callback;
- final Label label = new Label(inputComposite, SWT.LEFT);
+ final PasswordCallback passwordCallback= (PasswordCallback) callback;
+ final Label label= new Label(inputComposite, SWT.LEFT);
label.setText(passwordCallback.getPrompt()+':');
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
- final Text field = new Text(inputComposite, SWT.LEFT | SWT.BORDER | SWT.PASSWORD);
- final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
- gd.widthHint = LayoutUtils.hintWidth(field, 25);
+ final Text field= new Text(inputComposite, SWT.LEFT | SWT.BORDER | SWT.PASSWORD);
+ final GridData gd= new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+ gd.widthHint= LayoutUtils.hintWidth(field, 25);
field.setLayoutData(gd);
field.setTextLimit(50);
@@ -194,18 +195,18 @@
continue ITER_CALLBACKS;
}
if (callback instanceof TextInputCallback) {
- final TextInputCallback inputCallback = (TextInputCallback) callback;
- final Label label = new Label(inputComposite, SWT.LEFT);
+ final TextInputCallback inputCallback= (TextInputCallback) callback;
+ final Label label= new Label(inputComposite, SWT.LEFT);
label.setText(inputCallback.getPrompt()+':');
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
- final Text field = new Text(inputComposite, SWT.LEFT | SWT.BORDER | SWT.PASSWORD);
- final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
- gd.widthHint = LayoutUtils.hintWidth(field, 25);
+ final Text field= new Text(inputComposite, SWT.LEFT | SWT.BORDER | SWT.PASSWORD);
+ final GridData gd= new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+ gd.widthHint= LayoutUtils.hintWidth(field, 25);
field.setLayoutData(gd);
- String init = inputCallback.getText();
+ String init= inputCallback.getText();
if (init == null || init.isEmpty()) {
- init = inputCallback.getDefaultText();
+ init= inputCallback.getDefaultText();
}
if (init != null) {
field.setText(init);
@@ -224,7 +225,7 @@
if (this.allowSave) {
LayoutUtils.addSmallFiller(inputComposite, false);
- this.saveControl = new Button(inputComposite, SWT.CHECK);
+ this.saveControl= new Button(inputComposite, SWT.CHECK);
this.saveControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
this.saveControl.setText(Messages.Login_Dialog_Save_label);
this.saveControl.setSelection(false);
@@ -244,7 +245,7 @@
@Override
protected void okPressed() {
if (this.saveControl != null) {
- this.save = this.saveControl.getSelection();
+ this.save= this.saveControl.getSelection();
}
for (final Runnable runnable : this.okRunners) {
runnable.run();
@@ -256,12 +257,12 @@
@Override
- public Status execute(final String id, final ToolService service, final Map<String, Object> data,
+ public Status execute(final String id, final ToolService service, final ToolCommandData data,
final ProgressMonitor m) {
- final ConsoleService console = (ConsoleService) service;
- final boolean saveAllowed = ToolCommandHandlerUtils.getCheckedData(data, "save.allowed", Boolean.TRUE); //$NON-NLS-1$
- final boolean saveActivated = ToolCommandHandlerUtils.getCheckedData(data, "save.activated", Boolean.FALSE); //$NON-NLS-1$
- final Callback[] callbacks = ToolCommandHandlerUtils.getCheckedData(data, LOGIN_CALLBACKS_DATA_KEY, Callback[].class, true);
+ final ConsoleService console= (ConsoleService) service;
+ final boolean saveAllowed= data.getBoolean("save.allowed", true); //$NON-NLS-1$
+ final boolean saveActivated= data.getBoolean("save.activated", false); //$NON-NLS-1$
+ final Callback[] callbacks= data.getRequired(LOGIN_CALLBACKS_DATA_KEY, Callback[].class);
ITER_CALLBACKS: for (final Callback callback : callbacks) {
if (callback instanceof TextOutputCallback
@@ -270,24 +271,22 @@
|| callback instanceof TextInputCallback) {
continue ITER_CALLBACKS;
}
- final Status status = new ErrorStatus(NicoUI.BUNDLE_ID,
+ final Status status= new ErrorStatus(NicoUI.BUNDLE_ID,
Messages.Login_error_UnsupportedOperation_message,
new UnsupportedCallbackException(callback) );
StatusManager.getManager().handle(StatusUtils.convert(status), StatusManager.SHOW | StatusManager.LOG);
return status;
}
- final ToolProcess process = console.getTool();
+ final ToolProcess process= console.getTool();
if (id.equals(IToolEventHandler.LOGIN_REQUEST_EVENT_ID)) {
// count login tries
- final int attempt = ToolCommandHandlerUtils.getCheckedData(data, "attempt", Integer.valueOf(1)); //$NON-NLS-1$
- data.put("attempt", attempt+1); //$NON-NLS-1$
- if (saveAllowed && attempt == 1) {
+ if (saveAllowed && data.getInt("attempt", -1) == 1) { //$NON-NLS-1$
if (readData(callbacks, getDataNode(process, data, false), data)) {
return OK_STATUS;
}
}
- final String message = ToolCommandHandlerUtils.getCheckedData(data, LOGIN_MESSAGE_DATA_KEY, String.class, false);
+ final String message= data.getString(LOGIN_MESSAGE_DATA_KEY);
if (callbacks.length == 0) {
return OK_STATUS;
}
@@ -295,19 +294,19 @@
UIAccess.getDisplay().syncExec(new Runnable() {
@Override
public void run() {
- final IWorkbenchWindow window = UIAccess.getActiveWorkbenchWindow(true);
- final LoginDialog dialog = new LoginDialog(process, window.getShell());
- dialog.message = message;
- dialog.callbacks = callbacks;
- dialog.allowSave = saveAllowed;
- dialog.save = saveActivated;
+ final IWorkbenchWindow window= UIAccess.getActiveWorkbenchWindow(true);
+ final LoginDialog dialog= new LoginDialog(process, window.getShell());
+ dialog.message= message;
+ dialog.callbacks= callbacks;
+ dialog.allowSave= saveAllowed;
+ dialog.save= saveActivated;
if (dialog.open() == Dialog.OK) {
- data.put("save.activated", Boolean.valueOf(dialog.allowSave && dialog.save)); //$NON-NLS-1$
- data.put(LOGIN_USERNAME_DATA_KEY, dialog.username);
+ data.setReturnData("save.activated", (dialog.allowSave && dialog.save)); //$NON-NLS-1$
+ data.setReturnData(LOGIN_USERNAME_DATA_KEY, dialog.username);
result.set(OK_STATUS);
}
else {
- data.put("save.activated", null); //$NON-NLS-1$
+ data.setReturnData("save.activated", null); //$NON-NLS-1$
}
}
});
@@ -326,36 +325,40 @@
}
- private boolean readData(final Callback[] callbacks, final ISecurePreferences node, final Map<String, Object> data) {
+ private boolean readData(final Callback[] callbacks, final @Nullable ISecurePreferences node,
+ final ToolCommandData data) {
try {
- int nameCount = 0;
- int passwordCount = 0;
- boolean complete = true;
- final Charset charset = Charset.forName(SECURE_PREF_CHARSET);
+ int nameCount= 0;
+ int passwordCount= 0;
+ boolean complete= true;
+ final Charset charset= Charset.forName(SECURE_PREF_CHARSET);
ITER_CALLBACKS: for (final Callback callback : callbacks) {
if (callback instanceof TextOutputCallback) {
continue ITER_CALLBACKS;
}
if (callback instanceof NameCallback) {
- final NameCallback nameCallback = (NameCallback) callback;
- String name = (node != null) ? node.get(SECURE_PREF_NAME_KEY + nameCount++, null) : null;
- if (name == null || name.isEmpty() || Boolean.TRUE.equals(data.get(LOGIN_USERNAME_FORCE_DATA_KEY))) {
- name = (String) data.get(LOGIN_USERNAME_DATA_KEY);
+ final NameCallback nameCallback= (NameCallback) callback;
+ String name= (node != null) ? node.get(SECURE_PREF_NAME_KEY + nameCount++, null) : null;
+ if (name == null || name.isEmpty()
+ || Boolean.TRUE.equals(data.get(LOGIN_USERNAME_FORCE_DATA_KEY, Boolean.class)) ) {
+ name= data.get(LOGIN_USERNAME_DATA_KEY, String.class);
}
if (name != null && name.length() > 0) {
nameCallback.setName(name);
- data.put(LOGIN_USERNAME_DATA_KEY, name);
+ data.setReturnData(LOGIN_USERNAME_DATA_KEY, name);
}
else {
- complete = false;
+ complete= false;
}
continue ITER_CALLBACKS;
}
if (callback instanceof PasswordCallback) {
- final PasswordCallback passwordCallback = (PasswordCallback) callback;
- final byte[] array = (node != null) ? node.getByteArray(SECURE_PREF_PASSWORD_KEY + passwordCount++, null) : null;
+ final PasswordCallback passwordCallback= (PasswordCallback) callback;
+ final byte[] array= (node != null) ?
+ node.getByteArray(SECURE_PREF_PASSWORD_KEY + passwordCount++, null) :
+ null;
if (array != null) {
- final char[] password = charset.decode(ByteBuffer.wrap(array)).array();
+ final char[] password= charset.decode(ByteBuffer.wrap(array)).array();
passwordCallback.setPassword(password);
Arrays.fill(array, (byte) 0);
Arrays.fill(password, (char) 0);
@@ -363,8 +366,8 @@
continue ITER_CALLBACKS;
}
if (callback instanceof TextInputCallback) {
- // final TextInputCallback inputCallback = (TextInputCallback) callback;
- complete = false;
+ // final TextInputCallback inputCallback= (TextInputCallback) callback;
+ complete= false;
continue ITER_CALLBACKS;
}
}
@@ -376,36 +379,36 @@
}
}
- private boolean saveData(final Callback[] callbacks, final ISecurePreferences node) {
+ private boolean saveData(final Callback[] callbacks, final @Nullable ISecurePreferences node) {
if (node == null) {
return false;
}
try {
- int nameCount = 0;
- int passwordCount = 0;
- boolean complete = true;
- final Charset charset = Charset.forName(SECURE_PREF_CHARSET);
+ int nameCount= 0;
+ int passwordCount= 0;
+ boolean complete= true;
+ final Charset charset= Charset.forName(SECURE_PREF_CHARSET);
ITER_CALLBACKS: for (final Callback callback : callbacks) {
if (callback instanceof TextOutputCallback) {
continue ITER_CALLBACKS;
}
if (callback instanceof NameCallback) {
- final NameCallback nameCallback = (NameCallback) callback;
+ final NameCallback nameCallback= (NameCallback) callback;
node.put(SECURE_PREF_NAME_KEY + nameCount++, nameCallback.getName(), true);
continue ITER_CALLBACKS;
}
if (callback instanceof PasswordCallback) {
- final PasswordCallback passwordCallback = (PasswordCallback) callback;
- final char[] password = passwordCallback.getPassword();
- final byte[] array = charset.encode(CharBuffer.wrap(password)).array();
+ final PasswordCallback passwordCallback= (PasswordCallback) callback;
+ final char[] password= passwordCallback.getPassword();
+ final byte[] array= charset.encode(CharBuffer.wrap(password)).array();
node.putByteArray(SECURE_PREF_PASSWORD_KEY + passwordCount++, array, true);
Arrays.fill(password, (char) 0);
Arrays.fill(array, (byte) 0);
continue ITER_CALLBACKS;
}
if (callback instanceof TextInputCallback) {
- // final TextInputCallback inputCallback = (TextInputCallback) callback;
- complete = false;
+ // final TextInputCallback inputCallback= (TextInputCallback) callback;
+ complete= false;
continue ITER_CALLBACKS;
}
}
@@ -418,17 +421,17 @@
}
private @Nullable ISecurePreferences getDataNode(final ToolProcess process,
- final Map<String, Object> data, final boolean create) {
- final String id = ToolCommandHandlerUtils.getCheckedData(data, LOGIN_ADDRESS_DATA_KEY, String.class, false);
+ final ToolCommandData data, final boolean create) {
+ final String id= data.getString(LOGIN_ADDRESS_DATA_KEY);
if (id == null) {
return null;
}
- final ISecurePreferences store = SecurePreferencesFactory.getDefault();
+ final ISecurePreferences store= SecurePreferencesFactory.getDefault();
if (store == null) {
return null;
}
- final String path = SECURE_PREF_ROOT + '/' +
+ final String path= SECURE_PREF_ROOT + '/' +
EncodingUtils.encodeSlashes(process.getMainType()) + '/' +
EncodingUtils.encodeSlashes(id);
if (!create && !store.nodeExists(path)) {
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/QuitHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/QuitHandler.java
index 89a24ab..9351da0 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/QuitHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/QuitHandler.java
@@ -19,7 +19,6 @@
import java.lang.reflect.InvocationTargetException;
import java.util.List;
-import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -30,13 +29,14 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
import org.eclipse.statet.jcommons.ts.core.Tool;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
-import org.eclipse.statet.jcommons.ts.core.ToolService;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
@@ -46,13 +46,14 @@
import org.eclipse.statet.nico.core.runtime.IToolEventHandler;
import org.eclipse.statet.nico.core.runtime.ToolController;
import org.eclipse.statet.nico.core.runtime.ToolProcess;
+import org.eclipse.statet.nico.core.util.AbstractConsoleCommandHandler;
import org.eclipse.statet.nico.ui.NicoUI;
/**
* @see IToolEventHandler#SCHEDULE_QUIT_EVENT_ID
*/
-public class QuitHandler implements IToolEventHandler {
+public class QuitHandler extends AbstractConsoleCommandHandler implements IToolEventHandler {
private static class UIRunnable implements Runnable {
@@ -98,14 +99,15 @@
}
+
@Override
- public Status execute(final String id, final ToolService service, final Map<String, Object> data,
+ @NonNullByDefault
+ public Status execute(final String id, final ConsoleService service, final ToolCommandData data,
final ProgressMonitor m) {
- final ConsoleService console= (ConsoleService) service;
if (PlatformUI.getWorkbench().isClosing()) {
- final ToolController controller= console.getController();
+ final ToolController controller= service.getController();
if (controller != null) {
- if (console.getTool().isProvidingFeatureSet(IRemoteEngineController.FEATURE_SET_ID)) {
+ if (service.getTool().isProvidingFeatureSet(IRemoteEngineController.FEATURE_SET_ID)) {
try {
((IRemoteEngineController) controller).disconnect(m);
return CANCEL_STATUS;
@@ -121,13 +123,13 @@
return CANCEL_STATUS;
}
- final List<ToolRunnable> quitRunnables= (List<ToolRunnable>) data.get("scheduledQuitRunnables");
+ final List<ToolRunnable> quitRunnables= data.getRequired("scheduledQuitRunnables", List.class);
if (quitRunnables.isEmpty()) {
return OK_STATUS; // run default= schedule quit
}
final UIRunnable runner= new UIRunnable();
- runner.controller= console.getController();
+ runner.controller= service.getController();
final ToolProcess process= runner.controller.getTool();
runner.dialogTitle= NLS.bind(Messages.TerminatingMonitor_title, process.getLabel(Tool.DEFAULT_LABEL));
runner.dialogMessage= NLS.bind(Messages.TerminatingMonitor_message, process.getLabel(Tool.LONG_LABEL));
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ReportStatusHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ReportStatusHandler.java
index 8dbc952..fc3a421 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ReportStatusHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/ReportStatusHandler.java
@@ -19,7 +19,6 @@
import static org.eclipse.statet.nico.core.runtime.IToolEventHandler.REPORT_STATUS_DATA_KEY;
import java.util.List;
-import java.util.Map;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.CoreException;
@@ -28,23 +27,25 @@
import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
-import org.eclipse.statet.internal.nico.ui.AbstractConsoleCommandHandler;
import org.eclipse.statet.nico.core.NicoCore;
import org.eclipse.statet.nico.core.NicoCoreMessages;
import org.eclipse.statet.nico.core.runtime.ConsoleService;
import org.eclipse.statet.nico.core.runtime.IToolEventHandler;
import org.eclipse.statet.nico.core.runtime.ToolStreamMonitor;
+import org.eclipse.statet.nico.core.util.AbstractConsoleCommandHandler;
/**
* @see {@link IToolEventHandler#REPORT_STATUS_EVENT_ID}
*/
+@NonNullByDefault
public class ReportStatusHandler extends AbstractConsoleCommandHandler {
@@ -52,10 +53,14 @@
private static final String INDENT= " "; //$NON-NLS-1$
+ public ReportStatusHandler() {
+ }
+
+
@Override
- public Status execute(final String id, final ConsoleService service, final Map<String, Object> data,
+ public Status execute(final String id, final ConsoleService service, final ToolCommandData data,
final ProgressMonitor m) {
- final Status status= ToolCommandHandlerUtils.getCheckedData(data, REPORT_STATUS_DATA_KEY, Status.class, false);
+ final Status status= data.get(REPORT_STATUS_DATA_KEY, Status.class);
if (status != null) {
final String br= service.getWorkspaceData().getLineSeparator();
final String br1= br + INDENT;
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/RunBlockingHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/RunBlockingHandler.java
index 2ea4f6a..78e4085 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/RunBlockingHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/RunBlockingHandler.java
@@ -18,7 +18,6 @@
import static org.eclipse.statet.jcommons.status.Status.OK_STATUS;
import java.lang.reflect.InvocationTargetException;
-import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -27,14 +26,15 @@
import org.eclipse.ui.progress.IProgressService;
import org.eclipse.ui.statushandlers.StatusManager;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ErrorStatus;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
import org.eclipse.statet.jcommons.ts.core.ToolService;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
import org.eclipse.statet.internal.nico.ui.Messages;
import org.eclipse.statet.nico.core.NicoCore;
@@ -44,14 +44,19 @@
/**
* @see IToolEventHandler#RUN_BLOCKING_EVENT_ID
*/
+@NonNullByDefault
public class RunBlockingHandler implements IToolEventHandler {
+ public RunBlockingHandler() {
+ }
+
+
@Override
- public Status execute(final String id, final ToolService service, final Map<String, Object> data,
+ public Status execute(final String id, final ToolService service, final ToolCommandData data,
final ProgressMonitor m) {
- final IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
- final ToolRunnable toolRunnable = ToolCommandHandlerUtils.getCheckedData(data, RUN_RUNNABLE_DATA_KEY, ToolRunnable.class, true);
+ final IProgressService progressService= PlatformUI.getWorkbench().getProgressService();
+ final ToolRunnable toolRunnable= data.getRequired(RUN_RUNNABLE_DATA_KEY, ToolRunnable.class);
try {
progressService.busyCursorWhile(new IRunnableWithProgress() {
@Override
@@ -68,7 +73,7 @@
return OK_STATUS;
}
catch (final InvocationTargetException e) {
- final Throwable targetException = e.getCause();
+ final Throwable targetException= e.getCause();
if (targetException instanceof StatusException
&& ((StatusException) targetException).getStatus().getSeverity() == Status.CANCEL) {
return CANCEL_STATUS;
diff --git a/r/org.eclipse.statet.r.apps/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.apps/META-INF/MANIFEST.MF
index c2c82bf..8b90c13 100644
--- a/r/org.eclipse.statet.r.apps/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.apps/META-INF/MANIFEST.MF
@@ -29,6 +29,5 @@
org.eclipse.statet.jcommons.collections;version="4.5.0",
org.eclipse.statet.jcommons.lang;version="4.5.0",
org.eclipse.statet.jcommons.status;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core.util;version="4.5.0"
+ org.eclipse.statet.jcommons.ts.core;version="4.5.0"
Export-Package: org.eclipse.statet.r.apps.ui
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRCommandHandler.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRCommandHandler.java
index ad746f7..14efa34 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRCommandHandler.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRCommandHandler.java
@@ -16,14 +16,12 @@
import static org.eclipse.statet.jcommons.status.Status.OK_STATUS;
-import java.util.Map;
-
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.nico.core.runtime.ToolController;
import org.eclipse.statet.r.console.core.RProcess;
@@ -63,27 +61,34 @@
@Override
- protected Status execute(final String id, final RToolService r,
- final Map<String, Object> data,
+ protected Status execute(final String id, final RToolService r, final ToolCommandData data,
final ProgressMonitor m) throws StatusException {
- if (id.equals(ON_APP_STARTED_ID)) {
- if (this.currentRunner != null) {
- this.currentRunner.onAppStarted(
- ToolCommandHandlerUtils.getCheckedData(data, "url", String.class, false), //$NON-NLS-1$
- ToolCommandHandlerUtils.getCheckedData(data, "typeId", String.class, false) ); //$NON-NLS-1$
+ final var currentRunner= this.currentRunner;
+
+ switch (id) {
+ case ON_APP_STARTED_ID:
+ if (currentRunner != null) {
+ currentRunner.onAppStarted(
+ data.getStringRequired("url"), //$NON-NLS-1$
+ data.getString("typeId") ); //$NON-NLS-1$
}
- }
- if (id.equals(ON_APP_STOPPED_ID)) {
- if (this.currentRunner != null) {
- this.currentRunner.onAppStopped(
- ToolCommandHandlerUtils.getCheckedData(data, "url", String.class, false) ); //$NON-NLS-1$
+ return OK_STATUS;
+
+ case ON_APP_STOPPED_ID:
+ if (currentRunner != null) {
+ currentRunner.onAppStopped(
+ data.getString("url") ); //$NON-NLS-1$
}
+ return OK_STATUS;
+
+ default:
+ throw new UnsupportedOperationException();
}
- return OK_STATUS;
}
void disconnect(final AppRunner runner) {
- if (this.currentRunner == runner) {
+ final var currentRunner= this.currentRunner;
+ if (currentRunner == runner) {
this.currentRunner= null;
}
}
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRunner.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRunner.java
index 8355ae6..3170cd5 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRunner.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/launching/AppRunner.java
@@ -44,6 +44,7 @@
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
+import org.eclipse.statet.jcommons.ts.core.BasicToolCommandData;
import org.eclipse.statet.jcommons.ts.core.RunnableStatus;
import org.eclipse.statet.jcommons.ts.core.Tool;
import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
@@ -144,7 +145,8 @@
final Map<String, Object> connectionInfo= this.rProcess.getConnectionInfo();
if (connectionInfo != null && Objects.equals(connectionInfo.get("protocol"), "ssh")) {
this.remoteHost= LOCALHOST;
- this.sshSession= RjsUtil.getSession(connectionInfo, m);
+ this.sshSession= RjsUtil
+ .getSession(new BasicToolCommandData(connectionInfo), m);
}
}
else {
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RTermController.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RTermController.java
index b576d1c..f0d6111 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RTermController.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RTermController.java
@@ -24,7 +24,6 @@
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -45,6 +44,8 @@
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
+import org.eclipse.statet.jcommons.ts.core.BasicToolCommandData;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolCommandHandler;
import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
import org.eclipse.statet.jcommons.ts.core.ToolService;
@@ -309,7 +310,8 @@
final ToolCommandHandler handler= getCommandHandler(RUN_BLOCKING_EVENT_ID);
if (handler != null) {
final RTermCancelRunnable cancelRunnable= new RTermCancelRunnable();
- final Map<String, Object> data= Collections.singletonMap(RUN_RUNNABLE_DATA_KEY, (Object) cancelRunnable);
+ final ToolCommandData data= new BasicToolCommandData(Map.of(
+ RUN_RUNNABLE_DATA_KEY, cancelRunnable ));
final Status status= executeHandler(RUN_BLOCKING_EVENT_ID, handler, data, null);
return (status != null && status.getSeverity() == Status.OK);
}
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java
index cc8201b..a8d1b31 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java
@@ -28,7 +28,6 @@
import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -47,6 +46,7 @@
import org.eclipse.osgi.util.NLS;
import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.lang.SystemUtils;
import org.eclipse.statet.jcommons.rmi.RMIAddress;
@@ -57,6 +57,8 @@
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
+import org.eclipse.statet.jcommons.ts.core.BasicToolCommandData;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.jcommons.ts.core.ToolCommandHandler;
import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
import org.eclipse.statet.jcommons.ts.core.ToolService;
@@ -101,7 +103,6 @@
import org.eclipse.statet.r.nico.IRSrcref;
import org.eclipse.statet.r.nico.RWorkspaceConfig;
import org.eclipse.statet.rj.RjException;
-import org.eclipse.statet.rj.data.RDataJConverter;
import org.eclipse.statet.rj.data.REnvironment;
import org.eclipse.statet.rj.data.RLanguage;
import org.eclipse.statet.rj.data.RList;
@@ -146,6 +147,7 @@
import org.eclipse.statet.rj.services.RPlatform;
import org.eclipse.statet.rj.services.RServiceControlExtension;
import org.eclipse.statet.rj.ts.core.RTool;
+import org.eclipse.statet.rj.ts.core.util.RjToolCommandData;
/**
@@ -244,9 +246,9 @@
@Override
protected void initGraphicFactory() {
final ToolCommandHandler handler= getCommandHandler(INIT_RGRAPHIC_FACTORY_HANDLER_ID);
- final Map<String, Object> data= new HashMap<>();
+ final ToolCommandData data= new BasicToolCommandData();
final Status status= executeHandler(INIT_RGRAPHIC_FACTORY_HANDLER_ID, handler, data, null);
- final RClientGraphicFactory factory= (RClientGraphicFactory) data.get("factory"); //$NON-NLS-1$
+ final RClientGraphicFactory factory= data.get("factory", RClientGraphicFactory.class); //$NON-NLS-1$
if (status != null && status.getSeverity() < Status.ERROR && factory != null) {
setGraphicFactory(factory, new ERClientGraphicActions(this, getTool()));
}
@@ -307,9 +309,8 @@
@Override
protected RList handleUICallback(String commandId, final RList args,
+ final boolean acceptsAnswer,
final ProgressMonitor m) throws Exception {
- // TODO: allow handlers to use RJ data objects
- // TODO: allow handlers to return values
// TODO: provide extension point for event handlers
ToolCommandHandler handler= getCommandHandler(commandId);
if (handler == null && commandId.startsWith("r/")) {
@@ -320,18 +321,13 @@
}
}
if (handler != null) {
- final RDataJConverter converter= new RDataJConverter();
- converter.setKeepArray1(false);
- converter.setRObjectFactory(RjsController.this.fRObjectFactory);
-
- final Map<String, Object> javaArgs= new HashMap<>();
- if (args != null) {
- for (int i= 0; i < args.getLength(); i++) {
- javaArgs.put(args.getName(i), converter.toJava(args.get(i)));
+ final var data= new RjToolCommandData(args) {
+ @NonNull RList getAnswer() {
+ return getRJReturnData(RjsController.this.fRObjectFactory);
}
- }
+ };
- final Status status= handler.execute(commandId, RjsController.this, javaArgs, m);
+ final Status status= handler.execute(commandId, RjsController.this, data, m);
switch (status.getSeverity()) {
case Status.OK:
break;
@@ -339,22 +335,15 @@
throw new StatusException(status);
}
- Map<String, Object> javaAnswer= null;
- if (commandId.equals("common/chooseFile")) { //$NON-NLS-1$
- javaAnswer= Collections.singletonMap(
- "filename", javaArgs.get("filename") ); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- if (javaAnswer != null) {
- final RList answer= (RList) converter.toRJ(javaAnswer);
- return answer;
+ if (acceptsAnswer && data.hasReturnData()) {
+ return data.getAnswer();
}
else {
return null;
}
}
- return super.handleUICallback(commandId, args, m);
+ return super.handleUICallback(commandId, args, acceptsAnswer, m);
}
@Override
@@ -582,38 +571,44 @@
this.fRjsId= RjsComConfig.registerClientComHandler(this.fRjs);
this.fRjs.initClient(getTool(), this, this.rjsProperties, this.fRjsId);
try {
- final Map<String, Object> data= new HashMap<>();
final ToolCommandHandler loginHandler= getCommandHandler(LOGIN_REQUEST_EVENT_ID);
String msg= null;
boolean connected= false;
+ int attempt= 0;
while (!connected) {
final Map<String, Object> connectionInfo= getTool().getConnectionInfo();
final ServerLogin login= this.rjsConnection.getServer().createLogin(Server.C_CONSOLE_CONNECT);
try {
+ final ToolCommandData data;
final ImList<Callback> callbacks= login.getCallbacks();
if (!callbacks.isEmpty()) {
+ if (loginHandler == null) {
+ throw new StatusException(new ErrorStatus(RConsoleCorePlugin.BUNDLE_ID,
+ "Login requested but not supported by this configuration." ));
+ }
+
final List<Callback> checked= new ArrayList<>();
FxCallback fx= null;
for (final Callback callback : callbacks) {
if (callback instanceof FxCallback) {
- fx= (FxCallback) callback;
+ fx= (FxCallback)callback;
}
else {
checked.add(callback);
}
}
- if (connectionInfo != null) {
- data.putAll(connectionInfo);
+ { final var dataMap= new HashMap<String, Object>();
+ if (connectionInfo != null) {
+ dataMap.putAll(connectionInfo);
+ }
+ dataMap.put(LOGIN_ADDRESS_DATA_KEY, (fx != null) ? this.address.getHost() : this.address.getAddress());
+ dataMap.put(LOGIN_MESSAGE_DATA_KEY, msg);
+ dataMap.put(LOGIN_CALLBACKS_DATA_KEY, checked.toArray(new Callback[checked.size()]));
+ dataMap.put("attempt", ++attempt);
+ data= new BasicToolCommandData(dataMap);
}
- data.put(LOGIN_ADDRESS_DATA_KEY, (fx != null) ? this.address.getHost() : this.address.getAddress());
- data.put(LOGIN_MESSAGE_DATA_KEY, msg);
- data.put(LOGIN_CALLBACKS_DATA_KEY, checked.toArray(new Callback[checked.size()]));
- if (loginHandler == null) {
- throw new StatusException(new ErrorStatus(RConsoleCorePlugin.BUNDLE_ID,
- "Login requested but not supported by this configuration." ));
- }
if (loginHandler.execute(LOGIN_REQUEST_EVENT_ID, this, data, m).getSeverity() != Status.OK) {
throw new StatusException(Status.CANCEL_STATUS);
}
@@ -624,6 +619,9 @@
fx, m.newSubMonitor(1) );
}
}
+ else {
+ data= null;
+ }
msg= null;
m.checkCanceled();
@@ -633,18 +631,20 @@
REngine rjServer;
if ((this.rjsFlags & RJS_SETUP_CONSOLE) != 0) {
args.put("args", this.rArgs); //$NON-NLS-1$
- rjServer= (REngine) this.rjsConnection.getServer().execute(Server.C_CONSOLE_START, args, login.createAnswer());
+ rjServer= (REngine)this.rjsConnection.getServer().execute(
+ Server.C_CONSOLE_START, args, login.createAnswer() );
}
else {
- rjServer= (REngine) this.rjsConnection.getServer().execute(Server.C_CONSOLE_CONNECT, args, login.createAnswer());
+ rjServer= (REngine)this.rjsConnection.getServer().execute(
+ Server.C_CONSOLE_CONNECT, args, login.createAnswer() );
}
this.fRjs.setServer(rjServer, 0);
connected= true;
- if (!callbacks.isEmpty()) {
+ if (data != null) {
loginHandler.execute(LOGIN_OK_EVENT_ID, this, data, m);
if (connectionInfo != null) {
- connectionInfo.put(LOGIN_USERNAME_DATA_KEY, data.get(LOGIN_USERNAME_DATA_KEY));
+ connectionInfo.put(LOGIN_USERNAME_DATA_KEY, data.getString(LOGIN_USERNAME_DATA_KEY));
}
}
}
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsUtil.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsUtil.java
index 2545b8f..d658bdb 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsUtil.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsUtil.java
@@ -54,6 +54,7 @@
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.ecommons.net.ssh.core.ISshSessionService;
@@ -65,7 +66,8 @@
public class RjsUtil {
- public static Session getSession(final Map<String, Object> loginData, final IProgressMonitor monitor) throws CoreException {
+ public static Session getSession(final Map<String, Object> loginData,
+ final IProgressMonitor monitor) throws CoreException {
final String username= (String)loginData.get(LOGIN_USERNAME_DATA_KEY);
final String sshHost= (String)loginData.get(LOGIN_SSH_HOST_DATA_KEY);
final Integer sshPort= (Integer)loginData.get(LOGIN_SSH_PORT_DATA_KEY);
@@ -75,14 +77,14 @@
monitor );
}
- public static Session getSession(final Map<String, Object> loginData, final ProgressMonitor m) throws StatusException {
- final String username= (String)loginData.get(LOGIN_USERNAME_DATA_KEY);
- final String sshHost= (String)loginData.get(LOGIN_SSH_HOST_DATA_KEY);
- final Integer sshPort= (Integer)loginData.get(LOGIN_SSH_PORT_DATA_KEY);
+ public static Session getSession(final ToolCommandData loginData,
+ final ProgressMonitor m) throws StatusException {
+ final String username= loginData.getStringRequired(LOGIN_USERNAME_DATA_KEY);
+ final String sshHost= loginData.getStringRequired(LOGIN_SSH_HOST_DATA_KEY);
+ final int sshPort= loginData.getInt(LOGIN_SSH_PORT_DATA_KEY, ISshSessionService.SSH_DEFAULT_PORT);
try {
- return StatetCore.getSshSessionManager().getSshSession(
- username, sshHost, (sshPort != null) ? sshPort.intValue() : ISshSessionService.SSH_DEFAULT_PORT,
+ return StatetCore.getSshSessionManager().getSshSession(username, sshHost, sshPort,
EStatusUtils.convert(m) );
}
catch (final CoreException e) {
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/launching/RConsoleLaunching.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/launching/RConsoleLaunching.java
index 403f0fe..d0e64db 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/launching/RConsoleLaunching.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/launching/RConsoleLaunching.java
@@ -30,7 +30,7 @@
import org.eclipse.statet.nico.ui.util.RunBlockingHandler;
import org.eclipse.statet.r.console.core.AbstractRController;
import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.ui.dataeditor.ShowElementCommandHandler;
+import org.eclipse.statet.r.ui.dataeditor.ShowRElementCommandHandler;
import org.eclipse.statet.r.ui.graphics.RGraphicCommandHandler;
import org.eclipse.statet.r.ui.pkgmanager.RPkgUICommandHandler;
import org.eclipse.statet.r.ui.rhelp.RHelpUICommandHandler;
@@ -113,24 +113,30 @@
controller.addCommandHandler(IToolEventHandler.SCHEDULE_QUIT_EVENT_ID, new QuitHandler());
controller.addCommandHandler(IToolEventHandler.RUN_BLOCKING_EVENT_ID, new RunBlockingHandler());
controller.addCommandHandler(IToolEventHandler.REPORT_STATUS_EVENT_ID, new ReportStatusHandler());
+
{ final ToolCommandHandler handler = new HistoryOperationsHandler();
- controller.addCommandHandler(HistoryOperationsHandler.LOAD_HISTORY_ID, handler);
- controller.addCommandHandler(HistoryOperationsHandler.SAVE_HISTORY_ID, handler);
- controller.addCommandHandler(HistoryOperationsHandler.ADDTO_HISTORY_ID, handler);
- controller.addCommandHandler(ChooseFileHandler.CHOOSE_FILE_ID, new ChooseFileHandler());
+ controller.addCommandHandler(HistoryOperationsHandler.LOAD_HISTORY_COMMAND_ID, handler);
+ controller.addCommandHandler(HistoryOperationsHandler.SAVE_HISTORY_COMMAND_ID, handler);
+ controller.addCommandHandler(HistoryOperationsHandler.ADDTO_HISTORY_COMMAND_ID, handler);
+ }
+ { final ToolCommandHandler handler= new ChooseFileHandler();
+ controller.addCommandHandler(ChooseFileHandler.CHOOSE_FILE_COMMAND_ID, handler);
}
{ final ToolCommandHandler handler = new EclipseIDEOperationsHandler();
- controller.addCommandHandler(EclipseIDEOperationsHandler.SHOW_FILE_ID, handler);
- controller.addCommandHandler(EclipseIDEOperationsHandler.SHOW_HISTORY_ID, handler);
+ controller.addCommandHandler(EclipseIDEOperationsHandler.OPEN_FILE_COMMAND_ID, handler);
+ controller.addCommandHandler(EclipseIDEOperationsHandler.OPEN_FILE_COMMAND_OLD_ID, handler);
+ controller.addCommandHandler(EclipseIDEOperationsHandler.SHOW_HISTORY_COMMAND_ID, handler);
}
- { final ToolCommandHandler handler = new ShowElementCommandHandler();
- controller.addCommandHandler(ShowElementCommandHandler.SHOW_ELEMENT_COMMAND_ID, handler);
+ { final ToolCommandHandler handler = new ShowRElementCommandHandler();
+ controller.addCommandHandler(ShowRElementCommandHandler.SHOW_ELEMENT_COMMAND_ID, handler);
+ controller.addCommandHandler(ShowRElementCommandHandler.SHOW_ELEMENT_COMMAND_OLD_ID, handler);
}
{ final ToolCommandHandler handler = new RGraphicCommandHandler();
controller.addCommandHandler(AbstractRController.INIT_RGRAPHIC_FACTORY_HANDLER_ID, handler);
}
{ final ToolCommandHandler handler = new RHelpUICommandHandler();
controller.addCommandHandler(RHelpUICommandHandler.SHOW_HELP_COMMAND_ID, handler);
+ controller.addCommandHandler(RHelpUICommandHandler.SHOW_HELP_COMMAND_OLD_ID, handler);
}
if (controller.getTool().getREnv() != null) {
final ToolCommandHandler handler = new RPkgUICommandHandler();
diff --git a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
index 58d8a10..43b5297 100644
--- a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
@@ -67,7 +67,6 @@
org.eclipse.statet.jcommons.text.core.input;version="4.5.0",
org.eclipse.statet.jcommons.text.core.util;version="4.5.0",
org.eclipse.statet.jcommons.ts.core;version="4.5.0",
- org.eclipse.statet.jcommons.ts.core.util;version="4.5.0",
org.eclipse.statet.rj.renv.core;version="4.5.0"
Export-Package: org.eclipse.statet.internal.r.objectbrowser;x-internal:=true,
org.eclipse.statet.internal.r.ui;x-friends:="org.eclipse.statet.redocs.tex.r,org.eclipse.statet.redocs.wikitext.r",
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/RDataEditor.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/RDataEditor.java
index d3253e7..b076221 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/RDataEditor.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/RDataEditor.java
@@ -23,6 +23,7 @@
import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.r.core.model.RElementName;
import org.eclipse.statet.r.ui.RUI;
@@ -67,13 +68,14 @@
}
public static void open(final IWorkbenchPage page, final RTool tool,
- final RElementName elementName, final long[] indexes) {
+ final RElementName elementName,
+ final long @Nullable [] indexes) {
open(page, elementName, createFQRef(tool, elementName), indexes);
}
public static void open(final IWorkbenchPage page,
final RElementName elementName, final FQRObjectRef<? extends RTool> elementRef,
- final long[] indexes) {
+ final long @Nullable [] indexes) {
try {
final IEditorPart editor= IDE.openEditor(page,
new RLiveDataEditorInput(elementName, elementRef),
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/ShowElementCommandHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/ShowRElementCommandHandler.java
similarity index 78%
rename from r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/ShowElementCommandHandler.java
rename to r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/ShowRElementCommandHandler.java
index 682e8ff..92036fe 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/ShowElementCommandHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/dataeditor/ShowRElementCommandHandler.java
@@ -16,7 +16,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import org.eclipse.ui.IWorkbenchPage;
@@ -26,7 +25,7 @@
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.jcommons.ts.core.SystemRunnable;
import org.eclipse.statet.jcommons.ts.core.Tool;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
@@ -42,7 +41,7 @@
@NonNullByDefault
-public class ShowElementCommandHandler extends AbstractRToolCommandHandler {
+public class ShowRElementCommandHandler extends AbstractRToolCommandHandler {
private static class CheckRunnable extends AbstractRToolRunnable implements SystemRunnable {
@@ -106,32 +105,38 @@
}
- public static final String SHOW_ELEMENT_COMMAND_ID= "showElement"; //$NON-NLS-1$
+ public static final String SHOW_ELEMENT_COMMAND_ID= "r/showElement"; //$NON-NLS-1$
+ @Deprecated
+ public static final String SHOW_ELEMENT_COMMAND_OLD_ID= "showElement"; //$NON-NLS-1$
- public ShowElementCommandHandler() {
+ public ShowRElementCommandHandler() {
}
@Override
- public Status execute(final String id, final RToolService r, final Map<String, Object> data,
+ public Status execute(final String id, final RToolService r, final ToolCommandData data,
final ProgressMonitor m) throws StatusException {
- if (id.equals(SHOW_ELEMENT_COMMAND_ID)) {
- final RTool tool= r.getTool();
- final String elementName= ToolCommandHandlerUtils.getCheckedData(data, "elementName",
- String.class, true);
- final RElementName rElementName= RElementName.parseDefault(elementName);
- if (rElementName != null) {
- if (rElementName.getScope() != null) {
- doOpen(tool, rElementName);
+ switch (id) {
+ case SHOW_ELEMENT_COMMAND_ID:
+ case SHOW_ELEMENT_COMMAND_OLD_ID:
+ { final RTool tool= r.getTool();
+ final String elementName= data.getStringRequired("elementName");
+ final RElementName rElementName= RElementName.parseDefault(elementName);
+ if (rElementName != null) {
+ if (rElementName.getScope() != null) {
+ doOpen(tool, rElementName);
+ }
+ else {
+ tool.getQueue().addHot(new CheckRunnable(tool, rElementName));
+ }
}
- else {
- tool.getQueue().addHot(new CheckRunnable(tool, rElementName));
- }
+ return Status.OK_STATUS;
}
- return Status.OK_STATUS;
+
+ default:
+ throw new UnsupportedOperationException();
}
- throw new UnsupportedOperationException();
}
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/graphics/RGraphicCommandHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/graphics/RGraphicCommandHandler.java
index 43e82e2..d166ebf 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/graphics/RGraphicCommandHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/graphics/RGraphicCommandHandler.java
@@ -16,16 +16,17 @@
import static org.eclipse.statet.jcommons.status.Status.OK_STATUS;
-import java.util.Map;
-
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.internal.r.ui.RUIPlugin;
import org.eclipse.statet.rj.ts.core.AbstractRToolCommandHandler;
import org.eclipse.statet.rj.ts.core.RToolService;
+@NonNullByDefault
public class RGraphicCommandHandler extends AbstractRToolCommandHandler {
@@ -34,9 +35,9 @@
@Override
- public Status execute(final String id, final RToolService r, final Map<String, Object> data,
+ public Status execute(final String id, final RToolService r, final ToolCommandData data,
final ProgressMonitor m) {
- data.put("factory", RUIPlugin.getInstance().getCommonRGraphicFactory()); //$NON-NLS-1$
+ data.setReturnData("factory", RUIPlugin.getInstance().getCommonRGraphicFactory()); //$NON-NLS-1$
return OK_STATUS;
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgManagerUI.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgManagerUI.java
index 06004be..fc16cc8 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgManagerUI.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgManagerUI.java
@@ -30,6 +30,7 @@
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.jcommons.status.ErrorStatus;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
@@ -81,7 +82,7 @@
}
public static Status openDialog(final RProcess tool, final Shell parentShell,
- final int requestFlags, final StartAction startAction) {
+ final int requestFlags, final @Nullable StartAction startAction) {
final IRPkgManager.Ext manager= (IRPkgManager.Ext) getPackageManager(tool);
if (manager == null) {
return new ErrorStatus(RUI.BUNDLE_ID, "", null);
@@ -116,7 +117,7 @@
public static RPkgManagerDialog openDialog(final IRPkgManager.Ext manager,
final RProcess tool, final Shell parentShell,
- final StartAction startAction) {
+ final @Nullable StartAction startAction) {
final REnv rEnv= manager.getREnv();
RPkgManagerDialog dialog= DIALOGS.get(rEnv);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgUICommandHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgUICommandHandler.java
index c731bce..1c557b0 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgUICommandHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/pkgmanager/RPkgUICommandHandler.java
@@ -14,12 +14,12 @@
package org.eclipse.statet.r.ui.pkgmanager;
-import java.util.Map;
-
import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
import org.eclipse.statet.nico.ui.NicoUI;
import org.eclipse.statet.r.console.core.RProcess;
@@ -27,6 +27,7 @@
import org.eclipse.statet.rj.ts.core.RToolService;
+@NonNullByDefault
public class RPkgUICommandHandler extends AbstractRToolCommandHandler {
@@ -38,16 +39,18 @@
@Override
- public Status execute(final String id, final RToolService r, final Map<String, Object> data,
+ public Status execute(final String id, final RToolService r, final ToolCommandData data,
final ProgressMonitor m) {
- if (id.equals(OPEN_PACKAGE_MANAGER_COMMAND_ID)) {
- final RProcess process= (RProcess) r.getTool();
- final IWorkbenchPage page= NicoUI.getToolRegistry().findWorkbenchPage(process);
+ switch (id) {
+ case OPEN_PACKAGE_MANAGER_COMMAND_ID:
+ final IWorkbenchPage page= NicoUI.getToolRegistry().findWorkbenchPage(r.getTool());
- return RPkgManagerUI.openDialog(process, page.getWorkbenchWindow().getShell(), 0, null);
+ return RPkgManagerUI.openDialog((RProcess)r.getTool(),
+ page.getWorkbenchWindow().getShell(), 0, null );
+
+ default:
+ throw new UnsupportedOperationException();
}
-
- throw new UnsupportedOperationException();
}
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/OpenRHelpHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/OpenRHelpHandler.java
index 74bf193..7dfa921 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/OpenRHelpHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/OpenRHelpHandler.java
@@ -19,13 +19,15 @@
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.statushandlers.StatusManager;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.status.ErrorStatus;
+import org.eclipse.statet.jcommons.status.InfoStatus;
+import org.eclipse.statet.jcommons.status.Status;
+import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
import org.eclipse.statet.ecommons.ui.mpbv.BrowserSession;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
@@ -88,10 +90,10 @@
}
}
- public @Nullable IStatus execute(final RTool rTool, final @Nullable String urlString) {
+ public @Nullable Status execute(final RTool rTool, final @Nullable String urlString) {
final REnv rEnv= rTool.getREnv();
if (rEnv == null) {
- return null;
+ return new InfoStatus(RUI.BUNDLE_ID, "Not supported for this R tool.");
}
final URI url= getUrl(rEnv, urlString);
if (url == null) {
@@ -111,10 +113,10 @@
return Status.OK_STATUS;
}
catch (final CoreException e) {
- final IStatus status= new Status(IStatus.ERROR, RUI.BUNDLE_ID,
+ final Status status= new ErrorStatus(RUI.BUNDLE_ID,
"An error occured when opening R help page in R help view.",
e );
- StatusManager.getManager().handle(status);
+ StatusManager.getManager().handle(EStatusUtils.convert(status));
return status;
}
});
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/RHelpUICommandHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/RHelpUICommandHandler.java
index 50e970b..4cde7a4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/RHelpUICommandHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/rhelp/RHelpUICommandHandler.java
@@ -14,25 +14,22 @@
package org.eclipse.statet.r.ui.rhelp;
-import java.util.Map;
-
-import org.eclipse.statet.jcommons.status.ErrorStatus;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.status.ProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
-import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
-import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.jcommons.ts.core.ToolCommandData;
-import org.eclipse.statet.r.console.core.RProcess;
-import org.eclipse.statet.r.ui.RUI;
-import org.eclipse.statet.rj.renv.core.REnv;
import org.eclipse.statet.rj.ts.core.AbstractRToolCommandHandler;
import org.eclipse.statet.rj.ts.core.RToolService;
+@NonNullByDefault
public class RHelpUICommandHandler extends AbstractRToolCommandHandler {
- public static final String SHOW_HELP_COMMAND_ID= "showHelp"; //$NON-NLS-1$
+ public static final String SHOW_HELP_COMMAND_ID= "org.eclipse.statet.r.rhelp.showHelp"; //$NON-NLS-1$
+ @Deprecated
+ public static final String SHOW_HELP_COMMAND_OLD_ID= "showHelp"; //$NON-NLS-1$
public RHelpUICommandHandler() {
@@ -40,31 +37,31 @@
@Override
- public Status execute(final String id, final RToolService r, final Map<String, Object> data,
+ public Status execute(final String id, final RToolService r, final ToolCommandData data,
final ProgressMonitor m) {
- if (id.equals(SHOW_HELP_COMMAND_ID)) {
- String url= ToolCommandHandlerUtils.getCheckedData(data, "url", String.class, true);
- if (url.startsWith("html:///")) { //$NON-NLS-1$
- int idx= url.indexOf("<head"); //$NON-NLS-1$
- if (idx >= 0) {
- idx= url.indexOf('>', idx+5);
+ switch (id) {
+ case SHOW_HELP_COMMAND_ID:
+ case SHOW_HELP_COMMAND_OLD_ID:
+ { String url= data.getStringRequired("url");
+ if (url.startsWith("html:///")) { //$NON-NLS-1$
+ int idx= url.indexOf("<head"); //$NON-NLS-1$
if (idx >= 0) {
- idx++;
- url= url.substring(0, idx) + "<base href=\"about:\"/>" + url.substring(idx); //$NON-NLS-1$
+ idx= url.indexOf('>', idx+5);
+ if (idx >= 0) {
+ idx++;
+ url= url.substring(0, idx) + "<base href=\"about:\"/>" + url.substring(idx); //$NON-NLS-1$
+ }
}
}
+
+ final OpenRHelpHandler handler= new OpenRHelpHandler(true);
+ final Status status= handler.execute(r.getTool(), url);
+ return (status != null) ? status : Status.OK_STATUS;
}
- final RProcess process= (RProcess) r.getTool();
- final REnv rEnv= process.getREnv();
- if (rEnv == null) {
- return new ErrorStatus(RUI.BUNDLE_ID, "Not supported.");
- }
- final OpenRHelpHandler handler= new OpenRHelpHandler(true);
- return EStatusUtils.convert(handler.execute(process, url));
+ default:
+ throw new UnsupportedOperationException();
}
-
- throw new UnsupportedOperationException();
}
}