diff --git a/lib/commons-codec-1.3.jar b/lib/commons-codec-1.3.jar new file mode 100644 index 000000000000..957b6752af9a Binary files /dev/null and b/lib/commons-codec-1.3.jar differ diff --git a/lib/xmlrpc-2.0.jar b/lib/xmlrpc-2.0.jar new file mode 100644 index 000000000000..991edc29a255 Binary files /dev/null and b/lib/xmlrpc-2.0.jar differ diff --git a/resources/src/componentSets/Core.xml b/resources/src/componentSets/Core.xml index 7eaf6cc41e05..a57f445d4443 100644 --- a/resources/src/componentSets/Core.xml +++ b/resources/src/componentSets/Core.xml @@ -4,6 +4,10 @@ com.intellij.openapi.application.ApplicationInfo com.intellij.openapi.application.impl.ApplicationInfoImpl + + com.intellij.ide.XmlRpcServer + com.intellij.ide.XmlRpcServerImpl + com.intellij.ide.util.PropertiesComponent com.intellij.ide.util.PropertiesComponentImpl @@ -130,7 +134,10 @@ com.intellij.formatting.FormatterEx com.intellij.formatting.FormatterImpl - + + + com.intellij.ide.OpenFileXmlRpcHandler + diff --git a/source/com/intellij/ide/OpenFileXmlRpcHandler.java b/source/com/intellij/ide/OpenFileXmlRpcHandler.java new file mode 100644 index 000000000000..8f08f01456b9 --- /dev/null +++ b/source/com/intellij/ide/OpenFileXmlRpcHandler.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2005 JetBrains s.r.o. All Rights Reserved. + */ +package com.intellij.ide; + +import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.OpenFileDescriptor; +import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NonNls; + +import java.io.File; + +/** + * @author mike + */ +public class OpenFileXmlRpcHandler implements ApplicationComponent { + private static final String HANDLER_NAME = "openFile"; + private final XmlRpcServer myXmlRpcServer; + + public OpenFileXmlRpcHandler(final XmlRpcServer xmlRpcServer) { + myXmlRpcServer = xmlRpcServer; + } + + @NonNls + public String getComponentName() { + return "OpenFileXmlRpcHandler"; + } + + public void initComponent() { + myXmlRpcServer.addHandler(HANDLER_NAME, new OpenFileHandler()); + } + + public void disposeComponent() { + myXmlRpcServer.removeHandler(HANDLER_NAME); + } + + public static class OpenFileHandler { + @SuppressWarnings({"MethodMayBeStatic"}) + public void open(final String absolutePath) { + final Application application = ApplicationManager.getApplication(); + + application.invokeLater(new Runnable() { + public void run() { + final Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); + if (openProjects.length == 0) return; + Project project = openProjects[0]; + + String correctPath = absolutePath.replace(File.separatorChar, '/'); + final VirtualFile[] virtualFiles = new VirtualFile[1]; + final String correctPath1 = correctPath; + application.runWriteAction(new Runnable() { + public void run() { + virtualFiles[0] = LocalFileSystem.getInstance().refreshAndFindFileByPath(correctPath1); + } + }); + if (virtualFiles[0] == null) return; + + FileEditorProviderManager editorProviderManager = FileEditorProviderManager.getInstance(); + if (editorProviderManager.getProviders(project, virtualFiles[0]).length == 0) return; + OpenFileDescriptor descriptor = new OpenFileDescriptor(project, virtualFiles[0]); + FileEditorManager.getInstance(project).openTextEditor(descriptor, true); + } + }); + } + } +} diff --git a/source/com/intellij/ide/XmlRpcServer.java b/source/com/intellij/ide/XmlRpcServer.java new file mode 100644 index 000000000000..43e14fd70e59 --- /dev/null +++ b/source/com/intellij/ide/XmlRpcServer.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2005 JetBrains s.r.o. All Rights Reserved. + */ +package com.intellij.ide; + +/** + * @author mike + */ +public interface XmlRpcServer { + void addHandler (String name, Object handler); + void removeHandler (String name); +} diff --git a/source/com/intellij/ide/XmlRpcServerImpl.java b/source/com/intellij/ide/XmlRpcServerImpl.java new file mode 100644 index 000000000000..85e98c4371e3 --- /dev/null +++ b/source/com/intellij/ide/XmlRpcServerImpl.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2005 JetBrains s.r.o. All Rights Reserved. + */ +package com.intellij.ide; + +import com.intellij.openapi.components.ApplicationComponent; +import org.apache.xmlrpc.WebServer; +import org.jetbrains.annotations.NonNls; + +/** + * @author mike + */ +public class XmlRpcServerImpl implements XmlRpcServer, ApplicationComponent { + public static final int PORT_NUMBER = 63342; + private WebServer myWebServer; + + @NonNls + public String getComponentName() { + return "XmlRpcServer"; + } + + public void initComponent() { + myWebServer = new WebServer(PORT_NUMBER); + myWebServer.start(); + } + + public void disposeComponent() { + myWebServer.shutdown(); + } + + public void addHandler(String name, Object handler) { + myWebServer.addHandler(name, handler); + } + + public void removeHandler(String name) { + myWebServer.removeHandler(name); + } +}