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);
+ }
+}