mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IdeaAwareXmlRpc/IdeaAwareWebServer are part of idea module and exposed via PeerFactory
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -31,6 +31,10 @@ import com.intellij.psi.search.scope.packageSet.PackageSetFactory;
|
||||
import com.intellij.ui.UIHelper;
|
||||
import com.intellij.ui.content.ContentFactory;
|
||||
import com.intellij.ui.errorView.ErrorViewFactory;
|
||||
import org.apache.xmlrpc.XmlRpcServer;
|
||||
import org.apache.xmlrpc.WebServer;
|
||||
|
||||
import java.net.InetAddress;
|
||||
|
||||
public abstract class PeerFactory {
|
||||
public static PeerFactory getInstance() {
|
||||
@@ -59,4 +63,8 @@ public abstract class PeerFactory {
|
||||
public abstract StructureViewFactory getStructureViewFactory();
|
||||
|
||||
public abstract PsiBuilder createBuilder(ASTNode tree, Language lang, CharSequence seq, final Project project);
|
||||
|
||||
public abstract XmlRpcServer createRpcServer();
|
||||
|
||||
public abstract WebServer createWebServer(int port, InetAddress addr, XmlRpcServer xmlrpc);
|
||||
}
|
||||
@@ -57,12 +57,17 @@ import com.intellij.util.ui.Table;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.util.ui.treetable.TreeTable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.apache.xmlrpc.XmlRpcServer;
|
||||
import org.apache.xmlrpc.IdeaAwareXmlRpcServer;
|
||||
import org.apache.xmlrpc.WebServer;
|
||||
import org.apache.xmlrpc.IdeaAwareWebServer;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.tree.TreeCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.net.InetAddress;
|
||||
|
||||
public class PeerFactoryImpl extends PeerFactory implements ApplicationComponent {
|
||||
private ProcessProxyFactory myProxyFactory = null;
|
||||
@@ -310,4 +315,12 @@ public class PeerFactoryImpl extends PeerFactory implements ApplicationComponent
|
||||
public PsiBuilder createBuilder(ASTNode tree, Language lang, CharSequence seq, final Project project) {
|
||||
return new PsiBuilderImpl(lang, project, SharedImplUtil.findCharTableByTree(tree), seq);
|
||||
}
|
||||
|
||||
public XmlRpcServer createRpcServer() {
|
||||
return new IdeaAwareXmlRpcServer();
|
||||
}
|
||||
|
||||
public WebServer createWebServer(final int port, final InetAddress addr, final XmlRpcServer xmlrpc) {
|
||||
return new IdeaAwareWebServer(port, addr, xmlrpc);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package org.apache.xmlrpc;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
|
||||
import java.net.*;
|
||||
import java.util.Vector;
|
||||
import java.util.Stack;
|
||||
import java.util.EmptyStackException;
|
||||
import java.util.StringTokenizer;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* A minimal web server that uses IDEA built-in pool
|
||||
*
|
||||
* @author Maxim.Mossienko
|
||||
*/
|
||||
public class IdeaAwareWebServer extends WebServer
|
||||
{
|
||||
/**
|
||||
* Creates a web server at the specified port number and IP
|
||||
* address.
|
||||
*/
|
||||
public IdeaAwareWebServer(int port, InetAddress addr, XmlRpcServer xmlrpc)
|
||||
{
|
||||
super(port, addr, xmlrpc);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected Runner getRunner()
|
||||
{
|
||||
return new MyRunner();
|
||||
}
|
||||
|
||||
/**
|
||||
* Put <code>runner</code> back into {@link #threadpool}.
|
||||
*
|
||||
* @param runner The instance to reclaim.
|
||||
*/
|
||||
void repoolRunner(Runner runner)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Responsible for handling client connections.
|
||||
*/
|
||||
class MyRunner extends Runner
|
||||
{
|
||||
/**
|
||||
* Handles the client connection on <code>socket</code>.
|
||||
*
|
||||
* @param socket The source to read the client's request from.
|
||||
*/
|
||||
public synchronized void handle(Socket socket) throws IOException
|
||||
{
|
||||
con = new Connection(socket);
|
||||
count = 0;
|
||||
|
||||
try {
|
||||
// Attempt to execute on pooled thread
|
||||
final Class<?> aClass = Class.forName("com.intellij.openapi.application.ApplicationManager");
|
||||
final Method getApplicationMethod = aClass.getMethod("getApplication");
|
||||
final Object application = getApplicationMethod.invoke(null);
|
||||
final Method executeOnPooledThreadMethod = application.getClass().getMethod("executeOnPooledThread", Runnable.class);
|
||||
executeOnPooledThreadMethod.invoke(application, this);
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegates to <code>con.run()</code>.
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
try {
|
||||
con.run();
|
||||
} finally {
|
||||
Thread.interrupted(); // reset interrupted status
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package org.apache.xmlrpc;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* XmlRpcServer that does not pool processors
|
||||
*
|
||||
* @author Maxim.Mossienko
|
||||
*/
|
||||
public class IdeaAwareXmlRpcServer extends XmlRpcServer {
|
||||
|
||||
public IdeaAwareXmlRpcServer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the request and execute the handler method, if one is
|
||||
* found. If the invoked handler is AuthenticatedXmlRpcHandler,
|
||||
* use the credentials to authenticate the user. Context information
|
||||
* is passed to the worker, and may be passed to the request handler.
|
||||
*/
|
||||
public byte[] execute(InputStream is, XmlRpcContext context)
|
||||
{
|
||||
XmlRpcWorker worker = getWorker();
|
||||
return worker.execute(is, context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hands out pooled workers.
|
||||
*
|
||||
* @return A worker (never <code>null</code>).
|
||||
* @throws RuntimeException If the server exceeds its maximum
|
||||
* number of allowed requests.
|
||||
*/
|
||||
protected XmlRpcWorker getWorker()
|
||||
{
|
||||
return new XmlRpcWorker(getHandlerMapping());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user