blob: 143af1d32c41d88707fe8fc875502f1566f3eb45 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}