diff --git a/java/idea-ui/src/com/intellij/ide/OpenFileXmlRpcHandler.java b/java/idea-ui/src/com/intellij/ide/OpenFileXmlRpcHandler.java index d889229532bd..66df7263f699 100644 --- a/java/idea-ui/src/com/intellij/ide/OpenFileXmlRpcHandler.java +++ b/java/idea-ui/src/com/intellij/ide/OpenFileXmlRpcHandler.java @@ -17,7 +17,6 @@ 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; @@ -25,63 +24,40 @@ 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 = "fileOpener"; - private final XmlRpcServer myXmlRpcServer; +public class OpenFileXmlRpcHandler { + @SuppressWarnings({"MethodMayBeStatic"}) + public boolean open(final String absolutePath) { + final Application application = ApplicationManager.getApplication(); - public OpenFileXmlRpcHandler(final XmlRpcServer xmlRpcServer) { - myXmlRpcServer = xmlRpcServer; - } + application.invokeLater(new Runnable() { + public void run() { + final Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); + if (openProjects.length == 0) return; + Project project = openProjects[0]; - @NonNls - public String getComponentName() { - return "OpenFileXmlRpcHandler"; - } + 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; - public void initComponent() { - myXmlRpcServer.addHandler(HANDLER_NAME, new OpenFileHandler()); - } + 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); + } + }); - public void disposeComponent() { - myXmlRpcServer.removeHandler(HANDLER_NAME); - } - - public static class OpenFileHandler { - @SuppressWarnings({"MethodMayBeStatic"}) - public boolean 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); - } - }); - - return true; - } + return true; } } diff --git a/platform/platform-api/src/com/intellij/ide/XmlRpcHandlerBean.java b/platform/platform-api/src/com/intellij/ide/XmlRpcHandlerBean.java new file mode 100644 index 000000000000..dff2f1054814 --- /dev/null +++ b/platform/platform-api/src/com/intellij/ide/XmlRpcHandlerBean.java @@ -0,0 +1,38 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.ide; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.extensions.AbstractExtensionPointBean; +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.util.xmlb.annotations.Attribute; + +/** + * @author yole + */ +public class XmlRpcHandlerBean extends AbstractExtensionPointBean { + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.xmlRpcHandler"); + + @Attribute("name") + public String name; + + @Attribute("implementation") + public String implementation; + + public Object instantiate() throws ClassNotFoundException { + return instantiate(implementation, ApplicationManager.getApplication().getPicoContainer()); + } +} diff --git a/platform/platform-api/src/com/intellij/ide/XmlRpcServer.java b/platform/platform-api/src/com/intellij/ide/XmlRpcServer.java index e3a6916e9925..850200ecbe40 100644 --- a/platform/platform-api/src/com/intellij/ide/XmlRpcServer.java +++ b/platform/platform-api/src/com/intellij/ide/XmlRpcServer.java @@ -19,7 +19,10 @@ package com.intellij.ide; * @author mike */ public interface XmlRpcServer { - void addHandler(String name, Object handler); - void removeHandler(String name); - int getPortNumber(); + /** + * @deprecated use xmlRpcHandler extension point instead + */ + void addHandler(String name, Object handler); + void removeHandler(String name); + int getPortNumber(); } diff --git a/platform/platform-impl/src/com/intellij/ide/XmlRpcServerImpl.java b/platform/platform-impl/src/com/intellij/ide/XmlRpcServerImpl.java index 61390b7f6b39..6e523c8635c0 100644 --- a/platform/platform-impl/src/com/intellij/ide/XmlRpcServerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/XmlRpcServerImpl.java @@ -18,6 +18,7 @@ package com.intellij.ide; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.extensions.Extensions; import org.apache.xmlrpc.IdeaAwareWebServer; import org.apache.xmlrpc.IdeaAwareXmlRpcServer; import org.apache.xmlrpc.WebServer; @@ -61,6 +62,17 @@ public class XmlRpcServerImpl implements XmlRpcServer, ApplicationComponent { finally { thread.setPriority(currentPriority); } + for(XmlRpcHandlerBean handlerBean: Extensions.getExtensions(XmlRpcHandlerBean.EP_NAME)) { + final Object handler; + try { + handler = handlerBean.instantiate(); + } + catch (ClassNotFoundException e) { + LOG.error(e); + continue; + } + addHandler(handlerBean.name, handler); + } } public int getPortNumber() { diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 65e0b6bcf3a7..5f68e53c534e 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -110,4 +110,6 @@ + + diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 799d7cb0a1cc..9ba73e19f5cc 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -205,4 +205,6 @@ + + diff --git a/resources/src/componentSets/Core.xml b/resources/src/componentSets/Core.xml index 3914cf98288d..c6144daef1a0 100644 --- a/resources/src/componentSets/Core.xml +++ b/resources/src/componentSets/Core.xml @@ -1,8 +1,5 @@ - - com.intellij.ide.OpenFileXmlRpcHandler - com.intellij.ide.RecentProjectsManagerBase com.intellij.ide.RecentProjectsManager