initial contribution
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / mediawiki / MediaWikiConnector.java
diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/mediawiki/MediaWikiConnector.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/actions/mediawiki/MediaWikiConnector.java
new file mode 100644 (file)
index 0000000..c9d2bda
--- /dev/null
@@ -0,0 +1,111 @@
+package net.sourceforge.phpeclipse.wiki.actions.mediawiki;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.apache.commons.httpclient.ConnectMethod;
+import org.apache.commons.httpclient.HttpConnection;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpState;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.URI;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.protocol.Protocol;
+
+/**
+ * This class gets the wikitext from a wikipedia edit page
+ * 
+ * The basic coding was copied from the commons-httpclient example <code>MediaWikiConnector.java</code>
+ */
+public class MediaWikiConnector {
+
+  /**
+   * Get the text of a wikimedia Wiki-Description from <code>en.wikipedia.org</code>
+   *  
+   */
+  public static String getWikiText(String wikiDescriptor) {
+    return getWikiText(wikiDescriptor, null);
+  }
+
+  /**
+   * Get the text of a wikimedia Wiki-Description
+   *  
+   */
+  public static String getWikiText(String wikiDescriptor, String urlStr) {
+    // examples
+    // http://en.wikipedia.org/w/wiki.phtml?title=Main_Page&action=edit
+    // http://en.wikibooks.org/w/wiki.phtml?title=Programming:PHP:SQL_Injection&action=edit
+    // http://en.wikipedia.org/w/wiki.phtml?title=Talk:Division_by_zero&action=edit
+    HttpMethod method = null;
+    try {
+      if (urlStr == null) {
+        urlStr = "http://en.wikipedia.org/w/wiki.phtml?title=" + wikiDescriptor + "&action=edit";
+      } else {
+        urlStr = urlStr + "?title=" + wikiDescriptor + "&action=edit";
+      }
+      URI uri = new URI(urlStr.toCharArray());
+
+      String schema = uri.getScheme();
+      if ((schema == null) || (schema.equals(""))) {
+        schema = "http";
+      }
+      Protocol protocol = Protocol.getProtocol(schema);
+
+      HttpState state = new HttpState();
+
+      method = new GetMethod(uri.toString());
+      String host = uri.getHost();
+      int port = uri.getPort();
+
+      HttpConnection connection = new HttpConnection(host, port, protocol);
+
+      connection.setProxyHost(System.getProperty("http.proxyHost"));
+      connection.setProxyPort(Integer.parseInt(System.getProperty("http.proxyPort", "80")));
+
+      if (System.getProperty("http.proxyUserName") != null) {
+        state.setProxyCredentials(null, null, new UsernamePasswordCredentials(System.getProperty("http.proxyUserName"), System
+            .getProperty("http.proxyPassword")));
+      }
+
+      if (connection.isProxied() && connection.isSecure()) {
+        method = new ConnectMethod(method);
+      }
+
+      method.execute(state, connection);
+
+      if (method.getStatusCode() == HttpStatus.SC_OK) {
+        // get the textareas wiki text now:
+        InputStream stream = method.getResponseBodyAsStream();
+        int byteLen = stream.available();
+        int count = 1;
+        byte[] buffer = new byte[byteLen];
+        stream.read(buffer, 0, byteLen);
+        String wikiText = new String(buffer);
+//        String wikiText = method.getResponseBodyAsString();
+        int start = wikiText.indexOf("<textarea");
+        if (start != (-1)) {
+          start = wikiText.indexOf(">", start + 1);
+          if (start != (-1)) {
+            int end = wikiText.indexOf("</textarea>");
+            wikiText = wikiText.substring(start + 1, end);
+          }
+        }
+        return wikiText;
+        //        System.out.println(wikiText);
+
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    } finally {
+      if (method != null) {
+        method.releaseConnection();
+      }
+    }
+    return null; // no success in getting wiki text
+  }
+}
+