mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extension point for registering XML-RPC handlers
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<XmlRpcHandlerBean> 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());
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -110,4 +110,6 @@
|
||||
|
||||
<extensionPoint name="editorCustomization" area="IDEA_PROJECT" interface="com.intellij.ui.EditorCustomization"/>
|
||||
<extensionPoint name="statistics.usagesCollector" interface="com.intellij.statistic.UsagesCollector"/>
|
||||
|
||||
<extensionPoint name="xmlRpcHandler" beanClass="com.intellij.ide.XmlRpcHandlerBean"/>
|
||||
</extensionPoints>
|
||||
|
||||
@@ -205,4 +205,6 @@
|
||||
<!-- <checkinHandlerFactory implementation="com.intellij.openapi.vcs.CheckRemoteStatusCheckinHandlerFactory"/> -->
|
||||
|
||||
<statistics.usagesCollector implementation="com.intellij.featureStatistics.FeaturesUsageCollector"/>
|
||||
|
||||
<xmlRpcHandler name="fileOpener" implementation="com.intellij.ide.OpenFileXmlRpcHandler"/>
|
||||
</extensions>
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
<components>
|
||||
<application-components>
|
||||
<component>
|
||||
<implementation-class>com.intellij.ide.OpenFileXmlRpcHandler</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<interface-class>com.intellij.ide.RecentProjectsManagerBase</interface-class>
|
||||
<implementation-class>com.intellij.ide.RecentProjectsManager</implementation-class>
|
||||
|
||||
Reference in New Issue
Block a user