/******************************************************************************* * 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.phpbb; import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Map; import org.apache.commons.httpclient.NameValuePair; import org.eclipse.ecf.bulletinboard.IMember; import org.eclipse.ecf.bulletinboard.IMemberGroup; 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.provider.phpbb.identity.MemberGroupID; public class MemberGroup extends PHPBBObject implements IMemberGroup { private String description; private MemberGroupID id; private boolean detailsFetched; public MemberGroup(MemberGroupID id, String name) { super(name, READ_ONLY); this.id = id; this.detailsFetched = false; } private void attainDetailsFetched() { if (!detailsFetched) { GetRequest request = new GetRequest(bb.getHttpClient(), bb.getURL(), "groupcp.php"); request.addParameter(new NameValuePair("g", String.valueOf(id .getLongValue()))); String resp = null; try { request.execute(); resp = request.getResponseBodyAsString(); } catch (IOException e) { e.printStackTrace(); } request.releaseConnection(); if (resp != null) { MemberGroup group = ((PHPBBParser) bb.getParser()) .parseMemberGroup(resp); group.detailsFetched = true; this.description = group.getDescription(); } } } public String getDescription() { attainDetailsFetched(); return description; } public Collection<IMember> getMembers() { Map<ID, IMember> map = Collections.emptyMap(); GetRequest request = new GetRequest(bb.getHttpClient(), bb.getURL(), "groupcp.php"); request.addParameter(new NameValuePair("g", String.valueOf(id .getLongValue()))); try { request.execute(); String str = request.getResponseBodyAsString(); request.releaseConnection(); if (str != null) { map = bb.getParser().parseMembers(str); for (IMember member : map.values()) { ((AbstractBBObject) member).setBulletinBoard(bb); } } } catch (IOException e) { e.printStackTrace(); } return new HashSet<IMember>(map.values()); } public ID getID() { return id; } protected void setDescription(String desc) { this.description = desc; } @Override public boolean equals(Object obj) { if (obj instanceof MemberGroup) { MemberGroup grp = (MemberGroup) obj; return id.equals(grp.id); } return false; } @Override public int hashCode() { return id.hashCode(); } }