/******************************************************************************* * Copyright (c) 2005, 2006 Erkki Lindpere and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Erkki Lindpere - initial API and implementation *******************************************************************************/ package org.eclipse.ecf.internal.provider.vbulletin; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import org.apache.commons.httpclient.NameValuePair; import org.eclipse.ecf.bulletinboard.BBException; import org.eclipse.ecf.bulletinboard.IForum; import org.eclipse.ecf.bulletinboard.IThread; import org.eclipse.ecf.bulletinboard.IllegalWriteException; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.internal.bulletinboard.commons.AbstractBBObject; import org.eclipse.ecf.internal.bulletinboard.commons.webapp.GetRequest; import org.eclipse.ecf.internal.bulletinboard.commons.webapp.WebRequest; import org.eclipse.ecf.internal.provider.vbulletin.identity.ForumID; public class Forum extends VBObject implements IForum { private static final String E_READ_ONLY = "This forum is read only."; protected ForumID id; private Forum parent; protected ArrayList<IForum> subforums; private String description; public Forum(ForumID id, String name) { super(name, READ_WRITE); this.id = id; this.parent = null; this.subforums = new ArrayList<IForum>(); } protected void setParent(Forum parent) { this.parent = parent; } protected void setDescription(String description) { this.description = description; } public String getDescription() { return description; } public int getType() { return IForum.HOLDS_THREADS | IForum.HOLDS_FORUMS; } public IForum getParentForum() { return parent; } public List<IForum> getSubForums() { return subforums; } public Collection<IThread> getThreads() { VBParser parser = (VBParser) bb.getParser(); Map<ID, IThread> threadMap = null; WebRequest request = new GetRequest(bb.getHttpClient(), getURL(), ""); request.addParameter(new NameValuePair("f", String.valueOf(id .getLongValue()))); try { request.execute(); String resp = request.getResponseBodyAsString(); request.releaseConnection(); threadMap = parser.parseThreads(resp); for (IThread thread : threadMap.values()) { ((AbstractBBObject) thread).setBulletinBoard(bb); ((Thread) thread).forum = this; } } catch (IOException e) { e.printStackTrace(); } return new HashSet<IThread>(threadMap.values()); } public URL getURL() { try { return new URL(bb.getURL() + "forumdisplay.php?f=" + id.getLongValue()); } catch (MalformedURLException e) { return null; } } public ID getID() { return id; } public IThread createThread() throws IllegalWriteException, BBException { /* * if ((mode & READ_ONLY) == READ_ONLY) { throw new * IllegalWriteException(E_READ_ONLY); } Thread thread = new Thread(); * thread.bb = bb; thread.forum = this; return thread; */ return null; } public boolean postThread(IThread thread) throws IllegalWriteException, BBException { if ((mode & READ_ONLY) == READ_ONLY) { throw new IllegalWriteException(E_READ_ONLY); } /* * WebRequest request = new PostRequest(bb.getHttpClient(), bb.getURL(), * "posting.php"); * * NameValuePair params[]; params = new NameValuePair[] { new * NameValuePair("subject", thread.getPrePostMessage() .getName()), new * NameValuePair("message", thread.getPrePostMessage() .getMessage()), * new NameValuePair("f", id.getStringValue()), new * NameValuePair("mode", "newtopic"), // checkbox : disabled new * NameValuePair("disable_smilies", // "on"), // checkbox : disabled new * NameValuePair("disable_bbcode", // "on"), // checkbox : disabled new * NameValuePair("notify", "on"), new NameValuePair("post", "Submit") }; * request.addParameters(params); request.execute(); // We seem to * always have to get the response body. try { String resp = * request.getResponseBodyAsString(); } catch (IOException e) { // TODO * Auto-generated catch block e.printStackTrace(); } * request.releaseConnection(); */ return true; } public boolean prune(int pruneDays) throws IllegalWriteException, BBException { /* * PHPBB Admin module checks GET_VARS for SID, so we need to pass it as * a GET var to a POST method. */ // admin/pagestart.php // line 50: if ($HTTP_GET_VARS['sid'] != $userdata['session_id']) /* * WebRequest request = new PostRequest(bb.getHttpClient(), bb.getURL(), * "admin/admin_forum_prune.php?sid=" + bb.getSessionId()); * request.setParameters(new NameValuePair[] { new * NameValuePair("prunedays", String.valueOf(pruneDays)), new * NameValuePair("f", id.getStringValue()), new NameValuePair("doprune", * "Do Prune") }); request.execute(); /*try { * System.out.println(request.getResponseBodyAsString()); } catch * (IOException e) { // TODO Auto-generated catch block * e.printStackTrace(); } */ // request.releaseConnection(); return true; } @Override public boolean equals(Object obj) { if (obj instanceof Forum) { Forum grp = (Forum) obj; return id.equals(grp.id); } return false; } @Override public int hashCode() { return id.hashCode(); } }