package pl.radical.open.gg.packet.out;
import pl.radical.open.gg.LocalUser;
import pl.radical.open.gg.packet.GGOutgoingPackage;
import pl.radical.open.gg.packet.OutgoingPacket;
import java.util.Collection;
import java.util.List;
/**
* @author <a href="mailto:mnaglik@gazeta.pl">Marcin Naglik</a>
* @author <a href="mailto:mati@sz.home.pl">Mateusz Szczap</a>
*/
@OutgoingPacket(type = 0x0016, label = "GG_USERLIST_REQUEST")
public final class GGUserListRequest implements GGOutgoingPackage {
public static final int GG_USERLIST_REQUEST = 0x0016;
public static final byte GG_USER_LIST_PUT = 0x00;
public static final byte GG_USERLIST_PUT_MORE = 0x01;
public static final int GG_USERLIST_GET = 0x02;
private byte type;
private String request;
private GGUserListRequest() {
}
/**
* @see pl.radical.open.gg.packet.GGOutgoingPackage#getPacketType()
*/
public int getPacketType() {
return GG_USERLIST_REQUEST;
}
/**
* @see pl.radical.open.gg.packet.GGOutgoingPackage#getLength()
*/
public int getLength() {
return 1 + request.length();
}
/**
* @see pl.radical.open.gg.packet.GGOutgoingPackage#getContents()
*/
public byte[] getContents() {
final byte[] toSend = new byte[getLength()];
toSend[0] = type;
final byte[] bytes = request.getBytes();
System.arraycopy(bytes, 0, toSend, 1, bytes.length);
return toSend;
}
public static GGUserListRequest createClearUserListRequest() {
final GGUserListRequest listRequest = new GGUserListRequest();
listRequest.request = "";
listRequest.type = GG_USER_LIST_PUT;
return listRequest;
}
public static void changeRequestType(final GGUserListRequest userListRequest, final byte newType) {
userListRequest.type = newType;
}
public static GGUserListRequest createPutUserListRequest(final List<String> lines) {
if (lines == null) {
throw new IllegalArgumentException("lines collection cannot be null");
}
final GGUserListRequest listRequest = new GGUserListRequest();
listRequest.type = GG_USER_LIST_PUT;
listRequest.request = createRequestFromList(lines);
return listRequest;
}
public static GGUserListRequest createPutMoreUserListRequest(final List<String> lines) {
if (lines == null) {
throw new IllegalArgumentException("lines collection cannot be null");
}
final GGUserListRequest listRequest = new GGUserListRequest();
listRequest.type = GG_USERLIST_PUT_MORE;
listRequest.request = createRequestFromList(lines);
return listRequest;
}
public static GGUserListRequest createGetUserListRequest() {
final GGUserListRequest listRequest = new GGUserListRequest();
listRequest.type = GG_USERLIST_GET;
listRequest.request = "";
return listRequest;
}
private static String createRequestFromList(final List<String> lines) {
final StringBuffer buffer = new StringBuffer();
for (final String line : lines) {
buffer.append(line);
buffer.append('\n');
}
return buffer.toString();
}
public static String prepareRequest(final Collection<LocalUser> usersToExport) {
final StringBuffer buffer = new StringBuffer();
for (final Object element : usersToExport) {
final LocalUser localUser = (LocalUser) element;
if (localUser.isBlocked()) {
buffer.append("i;;;;;;");
buffer.append(Integer.valueOf(localUser.getUin()));
buffer.append('\n');
continue;
}
if (localUser.getFirstName() != null) {
buffer.append(localUser.getFirstName());
}
buffer.append(';');
if (localUser.getLastName() != null) {
buffer.append(localUser.getLastName());
}
buffer.append(';');
if (localUser.getNickName() != null) {
buffer.append(localUser.getNickName());
}
buffer.append(';');
if (localUser.getDisplayName() != null) {
buffer.append(localUser.getDisplayName());
}
buffer.append(';');
if (localUser.getTelephone() != null) {
buffer.append(localUser.getTelephone());
}
buffer.append(';');
if (localUser.getGroup() != null) {
buffer.append(localUser.getGroup());
}
buffer.append(';');
if (localUser.getUin() != -1) {
buffer.append(localUser.getUin());
}
buffer.append(';');
if (localUser.getEmailAddress() != null) {
buffer.append(localUser.getEmailAddress());
}
// buffer.append(';');
// buffer.append(0);
// buffer.append(';');
// buffer.append(';');
// buffer.append(0);
// buffer.append(';');
// buffer.append('\n');
buffer.append(";\n");
}
return buffer.toString();
}
}