--- /dev/null
+package net.sourceforge.phpeclipse.wiki.blog;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.apache.xmlrpc.XmlRpcClient;
+import org.apache.xmlrpc.XmlRpcException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.dialogs.MessageDialog;
+
+public class MetaWeblog {
+
+ XmlRpcClient xmlrpc;
+
+ Configuration config;
+
+ public MetaWeblog(Configuration conf) throws MalformedURLException {
+ config = conf;
+ xmlrpc = new XmlRpcClient(config.getUrl());
+ }
+
+ public String newPost(Configuration config, IFile file, String title, StringBuffer htmlBuffer) {
+ return newPost(config, file, title, htmlBuffer);
+ }
+
+ public String newPost(IFile file, String title, StringBuffer htmlBuffer, boolean publish) {
+ try {
+ // XmlRpcClient xmlrpc = new XmlRpcClient(config.getUrl());
+
+ Hashtable message = new Hashtable();
+ message.put("title", "title");
+ message.put("description", htmlBuffer.toString());
+
+ Vector params = new Vector();
+ String guid = null;
+
+ params.add(config.getBlogID());
+ params.add(config.getUser());
+ params.add(config.getPassword());
+ params.add(message);
+ if (publish) {
+ params.add(Boolean.TRUE); //publish=true
+ } else {
+ params.add(Boolean.FALSE); //publish=false
+ }
+ return (String) xmlrpc.execute("metaWeblog.newPost", params);
+ } catch (MalformedURLException e) {
+ MessageDialog.openError(null, "MalformedURLException: ", e.toString());
+ } catch (Exception e) {
+ MessageDialog.openError(null, "Exception: ", e.toString());
+ // e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * Publish (or delete) the attachement.
+ *
+ * @param snipId
+ * the id of the snip to which the attachment belongs
+ * @param attachementFilename
+ * The blog attachement. If the publication is successful this will be updated to contain a reference to the publication
+ * location.
+ * @param delete
+ * true if the attachment is in fact to be deleted
+ * @return the attachment info
+ * @throws TransferFilesException
+ */
+ public void publishAttachement(String snipId, String attachementFilename, boolean delete) throws TransferFilesException {
+ Vector params = new Vector();
+
+ params.add(config.getBlogID());
+ params.add(config.getUser());
+ params.add(config.getPassword());
+ Hashtable message = new Hashtable();
+ File attf = new File(attachementFilename);
+ try {
+ if (attf.length() > 2 * 1000 * 1000) {
+ throw new TransferFilesException("File should not be close to 2MB. Currently it is " + attf.length() + " bytes.");
+ }
+ byte[] data;
+ if (delete) {
+ data = new byte[0];
+ } else {
+ data = new byte[(int) attf.length()];
+ InputStream in = new FileInputStream(attf);
+ int total = 0;
+ for (int read = 0; total + read < data.length && (read = in.read(data, read, data.length - read)) >= 0; total += read) {
+ } //read file into data
+ if (total != data.length) {
+ throw new TransferFilesException("Could not read all of " + attf);
+ }
+ }
+ message.put("bits", data);
+ message.put("name", attf.getName());
+ int index = attachementFilename.lastIndexOf('.');
+ if (index != (-1)) {
+ message.put("key", attachementFilename.substring(index+1, attachementFilename.length()).toLowerCase());
+ } else {
+ // assume png as default
+ message.put("key", "png");
+ }
+ message.put("postid", snipId); //required for snipsnap.
+ } catch (FileNotFoundException e) {
+ throw new TransferFilesException("Could not find image " + attf, e);
+ } catch (IOException e) {
+ throw new TransferFilesException("Could not read data from file " + attf, e);
+ }
+ params.add(message);
+ String attURL;
+ try {
+ Hashtable res = (Hashtable) xmlrpc.execute("metaWeblog.newMediaObject", params);
+ attURL = (String) res.get("url");
+ } catch (XmlRpcException e) {
+ throw new TransferFilesException("problem in communication with server", e);
+ } catch (IOException e) {
+ throw new TransferFilesException("IO problem trying to communicate with server", e);
+ }
+ // return att.setUrl(attURL);
+ }
+
+ /**
+ * delete the entry from the blog server
+ *
+ * @param entry
+ * @return
+ */
+ boolean deleteEntry(BlogEntry entry) throws TransferFilesException {
+ Vector params = new Vector(5);
+ // params.add(props.getProperty("blogid", "none")); //Should be the appkey, but what use is that?
+ params.add(config.getBlogID());
+ params.add(entry.getGuid());
+ params.add(config.getUser());
+ params.add(config.getPassword());
+ params.add(Boolean.TRUE);
+
+ Boolean result;
+ try {
+ result = (Boolean) xmlrpc.execute("blogger.deletePost", params);
+ } catch (XmlRpcException e) {
+ throw new TransferFilesException("problem in communication with server", e);
+ } catch (IOException e) {
+ throw new TransferFilesException("IO problem trying to communicate with server", e);
+ }
+
+ return result.booleanValue();
+ }
+
+ /**
+ *
+ * @param entry
+ * the entry that requires updating
+ * @return true if successful.
+ */
+ boolean updateEntry(BlogEntry entry, String title, StringBuffer htmlBuffer) throws TransferFilesException {
+ Vector params = new Vector(5);
+ Boolean result = null;
+
+ params.add(entry.getGuid());
+ params.add(config.getUser());
+ params.add(config.getPassword());
+
+ Hashtable message = new Hashtable(5);
+ message.put("title", title);
+ message.put("description", htmlBuffer.toString());
+ message.put("dateCreated", new Date(entry.getTime()));
+ params.add(message);
+
+ params.add(Boolean.TRUE);
+
+ try {
+ result = (Boolean) xmlrpc.execute("metaWeblog.editPost", params);
+ } catch (XmlRpcException e) {
+ throw new TransferFilesException("problem in communication with server", e);
+ } catch (IOException e) {
+ throw new TransferFilesException("IO problem trying to communicate with server", e);
+ }
+ return (result == null) ? false : result.booleanValue();
+
+ }
+
+}
\ No newline at end of file