Modify

Opened 14 years ago

Closed 13 years ago

Last modified 13 years ago

#5824 closed enhancement (fixed)

remotecontrol: add command for opening local files

Reported by: Cobra Owned by: framm
Priority: normal Milestone:
Component: Core remotecontrol Version:
Keywords: Cc:

Description (last modified by simon04)

It would be quite useful to be able to load files into a running instance of josm.

For example, this would allow to open files from a file manager with josm by using a simple script.

Attachments (2)

5824.patch (37.2 KB ) - added by simon04 13 years ago.
5824_v2.patch (37.0 KB ) - added by simon04 13 years ago.

Download all attachments as: .zip

Change History (19)

comment:1 by simon04, 13 years ago

Component: CoreCore remotecontrol
Description: modified (diff)
Owner: changed from team to framm

comment:2 by simon04, 13 years ago

Summary: remotecontrol: add command for opening local files[Patch] remotecontrol: add command for opening local files

Patch attached. This also includes a big refactoring of the remotecontrol package in particular to ease the handling of permission preference.

Nice detail: when Confirm all Remote Control actions manually was enabled, the dialog needed to be answered twice. As nobody complained for months/years, I conclude that nobody uses this feature. :-)

comment:3 by Cobra, 13 years ago

simon04, are you sure this is the patch you intended to upload? This is just some netbeans properties stuff...

by simon04, 13 years ago

Attachment: 5824.patch added

comment:4 by simon04, 13 years ago

Cobra: Of course not. :-) I attached the correct patch now (falsely used git diff instead of git diff --staged to generate the patch).

by simon04, 13 years ago

Attachment: 5824_v2.patch added

comment:5 by simon04, 13 years ago

Resolution: fixed
Status: newclosed

In 5085/josm:

fix #5824 - remotecontrol: add command for opening local files + refactoring of permission preference

comment:6 by Cobra, 13 years ago

I just tested this and got these two exceptions. After restarting only the first exception was thrown.

GET http://localhost:8111/open_file?filename=/tmp/test.osm
OK
Repository Root: http://josm.openstreetmap.de/svn
Build-Date: 2012-03-15 02:32:12
Last Changed Author: simon04
Revision: 5086
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
URL: http://josm.openstreetmap.de/svn/trunk
Last Changed Date: 2012-03-14 23:34:54 +0100 (Wed, 14 Mar 2012)
Last Changed Rev: 5086

Identification: JOSM/1.5 (5086 en)
Memory Usage: 131 MB / 910 MB (35 MB allocated, but free)
Java version: 1.6.0_30, Sun Microsystems Inc., Java HotSpot(TM) 64-Bit Server VM
Operating system: Linux
Dataset consistency test: No problems found

Plugin: FastDraw (27981)
Plugin: FixAddresses (27907)
Plugin: ImportImagePlugin (27906)
Plugin: InfoMode (27981)
Plugin: PicLayer (27883)
Plugin: alignways (27852)
Plugin: buildings_tools (27984)
Plugin: licensechange (27964)
Plugin: measurement (27957)
Plugin: openstreetbugs (27852)
Plugin: openvisible (27852)
Plugin: pdfimport (27867)
Plugin: proj4j (27902)
Plugin: restart (27852)
Plugin: reverter (27865)
Plugin: terracer (27852)
Plugin: undelete (27852)
Plugin: utilsplugin2 (28045)

java.lang.NullPointerException
	at org.openstreetmap.josm.tools.AlphanumComparator.compare(AlphanumComparator.java:75)
	at org.openstreetmap.josm.gui.DefaultNameFormatter$3.compare(DefaultNameFormatter.java:381)
	at org.openstreetmap.josm.gui.DefaultNameFormatter$3.compare(DefaultNameFormatter.java:351)
	at java.util.Arrays.mergeSort(Arrays.java:1293)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at java.util.Collections.sort(Collections.java:159)
	at org.openstreetmap.josm.gui.dialogs.RelationListDialog$RelationListModel.sort(RelationListDialog.java:644)
	at org.openstreetmap.josm.gui.dialogs.RelationListDialog$RelationListModel.setRelations(RelationListDialog.java:668)
	at org.openstreetmap.josm.gui.dialogs.RelationListDialog.initFromLayer(RelationListDialog.java:185)
	at org.openstreetmap.josm.gui.dialogs.RelationListDialog.dataChanged(RelationListDialog.java:920)
	at org.openstreetmap.josm.data.osm.event.DataChangedEvent.fire(DataChangedEvent.java:26)
	at org.openstreetmap.josm.data.osm.event.DatasetEventManager.fireEvents(DatasetEventManager.java:109)
	at org.openstreetmap.josm.data.osm.event.DatasetEventManager.access$200(DatasetEventManager.java:27)
	at org.openstreetmap.josm.data.osm.event.DatasetEventManager$1.run(DatasetEventManager.java:139)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:616)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
	at java.awt.Dialog$1.run(Dialog.java:1044)
	at java.awt.Dialog$3.run(Dialog.java:1096)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Dialog.show(Dialog.java:1094)
	at java.awt.Component.show(Component.java:1584)
	at java.awt.Component.setVisible(Component.java:1536)
	at java.awt.Window.setVisible(Window.java:841)
	at java.awt.Dialog.setVisible(Dialog.java:984)
	at org.openstreetmap.josm.gui.ExtendedDialog.setVisible(ExtendedDialog.java:463)
	at org.openstreetmap.josm.gui.ExtendedDialog.showDialog(ExtendedDialog.java:269)
	at org.openstreetmap.josm.tools.BugReportExceptionHandler$1.run(BugReportExceptionHandler.java:96)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:616)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
	at java.awt.Dialog$1.run(Dialog.java:1044)
	at java.awt.Dialog$3.run(Dialog.java:1096)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Dialog.show(Dialog.java:1094)
	at java.awt.Component.show(Component.java:1584)
	at java.awt.Component.setVisible(Component.java:1536)
	at java.awt.Window.setVisible(Window.java:841)
	at java.awt.Dialog.setVisible(Dialog.java:984)
	at org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor$4.run(PleaseWaitProgressMonitor.java:170)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:616)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
...<snip>...
Repository Root: http://josm.openstreetmap.de/svn
Build-Date: 2012-03-15 02:32:12
Last Changed Author: simon04
Revision: 5086
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
URL: http://josm.openstreetmap.de/svn/trunk
Last Changed Date: 2012-03-14 23:34:54 +0100 (Wed, 14 Mar 2012)
Last Changed Rev: 5086

Identification: JOSM/1.5 (5086 en)
Memory Usage: 158 MB / 910 MB (85 MB allocated, but free)
Java version: 1.6.0_30, Sun Microsystems Inc., Java HotSpot(TM) 64-Bit Server VM
Operating system: Linux
Dataset consistency test: No problems found

Plugin: FastDraw (27981)
Plugin: FixAddresses (27907)
Plugin: ImportImagePlugin (27906)
Plugin: InfoMode (27981)
Plugin: PicLayer (27883)
Plugin: alignways (27852)
Plugin: buildings_tools (27984)
Plugin: licensechange (27964)
Plugin: measurement (27957)
Plugin: openstreetbugs (27852)
Plugin: openvisible (27852)
Plugin: pdfimport (27867)
Plugin: proj4j (27902)
Plugin: restart (27852)
Plugin: reverter (27865)
Plugin: terracer (27852)
Plugin: undelete (27852)
Plugin: utilsplugin2 (28045)

java.lang.AbstractMethodError
	at org.openstreetmap.josm.io.remotecontrol.RequestProcessor.run(RequestProcessor.java:185)

comment:7 by simon04, 13 years ago

  1. See #7507
  2. I'm investigating.

comment:8 by simon04, 13 years ago

  1. I cannot reproduce. I assume, you opened localhost:8111 without any command. When I do so, I do not get this exception. To debug, please try this build with some debugging output: http://osm.simon04.net/josm5824.jar

comment:9 by Cobra, 13 years ago

Both exceptions were thrown after the above command. First one, then immediately the other one.

The second one is thrown when "open local files" isn't allowed in the preferences. Above call results in 403 and the second exception.

After enabling "open local files" and without restarting josm (there is no message to do so) this exception is thrown again, but the file is opened correctly.

Even after restarting josm this exception is thrown again (I'm using 5088 SVN now).

So to reproduce disable "open local files", restart josm, re-enable it again and try again.

comment:10 by simon04, 13 years ago

Summary: [Patch] remotecontrol: add command for opening local filesremotecontrol: add command for opening local files

Sorry, I still cannot reproduce (tested with GNU/Linux 3.2.9 and OpenSDK 1.7, and Windows XP and Sun/Oracle 1.6).

You could try with an empty preference directory …

comment:11 by Cobra, 13 years ago

This happens only when the reverter plugin is installed.

This is the minimal preferences.xml file required to cause this problem:

<?xml version="1.0" encoding="UTF-8"?>
<preferences xmlns="http://josm.openstreetmap.de/preferences-1.0" version="5088">
  <list key='plugins'>
    <entry value='reverter'/>
  </list>
  <tag key='remotecontrol.enabled' value='true'/>
  <tag key='remotecontrol.permission.open-files' value='true'/>
</preferences>

comment:12 by simon04, 13 years ago

Resolution: fixed
Status: closedreopened

Thanks for this hint – I wasn't aware that other plugins also provide remote control handlers. The code needs some adaptation …

comment:13 by simon04, 13 years ago

Resolution: fixed
Status: reopenedclosed

Fixed in o28089.

comment:14 by Cobra, 13 years ago

Resolution: fixed
Status: closedreopened

This doesn't work for file names containing spaces.

GET http://localhost:8111/open_file?filename=/tmp/test\ file.osm
OK
RemoteControl received: GET /open_file?filename=/tmp/test%20file.osm HTTP/1.1
Open file: /tmp/test%20file.osm (0 bytes)
java.io.FileNotFoundException: /tmp/test%20file.osm (No such file or directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:120)
	at org.openstreetmap.josm.io.OsmImporter.importData(OsmImporter.java:54)
	at org.openstreetmap.josm.io.FileImporter.importDataHandleExceptions(FileImporter.java:57)
	at org.openstreetmap.josm.actions.OpenFileAction$OpenFileTask.importData(OpenFileAction.java:328)
	at org.openstreetmap.josm.actions.OpenFileAction$OpenFileTask.realRun(OpenFileAction.java:271)
	at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:82)
	at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:145)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
java.io.IOException: File 'test%20file.osm' does not exist.
	at org.openstreetmap.josm.io.OsmImporter.importData(OsmImporter.java:58)
	at org.openstreetmap.josm.io.FileImporter.importDataHandleExceptions(FileImporter.java:57)
	at org.openstreetmap.josm.actions.OpenFileAction$OpenFileTask.importData(OpenFileAction.java:328)
	at org.openstreetmap.josm.actions.OpenFileAction$OpenFileTask.realRun(OpenFileAction.java:271)
	at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:82)
	at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:145)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

josm tries to open the file /tmp/test%20file.osm. If I create this file, josm will open this one correctly.
The file names must be unescaped before trying to open the file.

As a separate point, why does remotecontrol return "OK" even when the command fails due to wrong file names?

comment:15 by simon04, 13 years ago

Resolution: fixed
Status: reopenedclosed

In 5103/josm:

fix #5824 - remote control: decode URL

in reply to:  14 ; comment:16 by simon04, 13 years ago

Replying to Cobra:

As a separate point, why does remotecontrol return "OK" even when the command fails due to wrong file names?

The file opening is performed in a separate thread and linked to some UI (progress monitor). Thus exceptions cannot be handled in the remote control. However, just testing for existing files would work to catch the main error source, if needed …

in reply to:  16 comment:17 by Cobra, 13 years ago

Replying to simon04:

Replying to Cobra:

As a separate point, why does remotecontrol return "OK" even when the command fails due to wrong file names?

The file opening is performed in a separate thread and linked to some UI (progress monitor). Thus exceptions cannot be handled in the remote control. However, just testing for existing files would work to catch the main error source, if needed …

That's what suspected. Considering that remotecontrol is used only on the same machine I think it's sufficient to keep the whole process like it is. The user will notice that something failed by a separate error/warning dialog, so I don't see much benefit in adding much more code to give some feedback to the calling application.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain framm.
as The resolution will be set.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.