version 1.1.2b
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / mediawiki / MediaWikiConnector.java
index b2e845e..2db9f21 100644 (file)
@@ -1,8 +1,6 @@
 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;
 
@@ -27,15 +25,83 @@ 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);
+  public static String getWikiRawText(String wikiDescriptor) {
+    return getWikiRawText(wikiDescriptor, null);
   }
 
   /**
    * Get the text of a wikimedia Wiki-Description
    *  
    */
-  public static String getWikiText(String wikiname, String urlStr) {
+  public static String getWikiRawText(String wikiname, String urlStr) {
+    // examples
+    // http://en.wikipedia.org/w/wiki.phtml?title=Main_Page&action=raw
+    // http://en.wikibooks.org/w/index.php?title=Programming:PHP:SQL_Injection&action=raw
+    // http://en.wikipedia.org/w/wiki.phtml?title=Talk:Division_by_zero&action=raw
+    HttpMethod method = null;
+    try {
+      if (urlStr == null) {
+        WikiEditorPlugin.getDefault().reportError("No Wikipedia URL configured", "URL-String == null");
+        //        urlStr = "http://en.wikipedia.org/w/wiki.phtml?title=" + wikiname + "&action=raw";
+      }
+      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);
+      // timeout after 30 seconds
+      connection.setConnectionTimeout(30000);
+      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 wiki text now:
+        String wikiText = method.getResponseBodyAsString();
+        return wikiText;
+        // wrong text not always complete
+        //        InputStream stream = method.getResponseBodyAsStream();
+        //        int byteLen = stream.available();
+        //        int count = 1;
+        //        byte[] buffer = new byte[byteLen];
+        //        int len = 0;
+        //        stream.read(buffer, 0, byteLen);
+        //        String wikiText = new String(buffer);
+        //        return wikiText;
+        //        System.out.println(wikiText);
+      }
+    } catch (Throwable e) {
+      WikiEditorPlugin.log(e);
+      WikiEditorPlugin.getDefault().reportError("Exception occured", e.getMessage() + "\nSee stacktrace in /.metadata/.log file.");
+    } finally {
+      if (method != null) {
+        method.releaseConnection();
+      }
+    }
+    return null; // no success in getting wiki text
+  }
+
+  public static String getWikiEditTextarea(String wikiname, 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
@@ -44,10 +110,10 @@ public class MediaWikiConnector {
     try {
       if (urlStr == null) {
         urlStr = "http://en.wikipedia.org/w/wiki.phtml?title=" + wikiname + "&action=edit";
-      } 
-//      else {
-//        urlStr = urlStr + "?title=" + wikiname + "&action=edit";
-//      }
+      }
+      //      else {
+      //        urlStr = urlStr + "?title=" + wikiname + "&action=edit";
+      //      }
       URI uri = new URI(urlStr.toCharArray());
 
       String schema = uri.getScheme();
@@ -86,7 +152,7 @@ public class MediaWikiConnector {
         byte[] buffer = new byte[byteLen];
         stream.read(buffer, 0, byteLen);
         String wikiText = new String(buffer);
-//        String wikiText = method.getResponseBodyAsString();
+        //        String wikiText = method.getResponseBodyAsString();
         int start = wikiText.indexOf("<textarea");
         if (start != (-1)) {
           start = wikiText.indexOf(">", start + 1);