package net.cloudcodex.server.test;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.cloudcodex.shared.dto.Result;
import net.cloudcodex.shared.dto.campaign.character.CharacterHeaderDTO;
import net.cloudcodex.shared.dto.home.CharacterSummaryDTO;
import net.cloudcodex.shared.dto.home.HomeDTO;
import net.cloudcodex.shared.dto.msg.MessageDTO;
import net.cloudcodex.shared.dto.msg.SceneDTO;
import net.cloudcodex.shared.rpc.CampaignRPC;
import net.cloudcodex.shared.rpc.HomeRPCAsync;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.googlecode.gwtrpccommlayer.client.impl.GwtRpcClientSideProxy;
import com.googlecode.gwtrpccommlayer.client.impl.GwtRpcCommLayerClient;
public class CallRPCFromJavaTest {
public static class Proxy extends GwtRpcClientSideProxy {
@Override
protected void onAfterRequest(HttpPost httppost, HttpResponse response) {
System.err.println("onAfterRequest : " + response.getStatusLine().getStatusCode());
System.err.println("onAfterRequest : " + ToStringBuilder.reflectionToString(response, ToStringStyle.MULTI_LINE_STYLE));
for(Header header : response.getAllHeaders()) {
System.err.println("header : " + header.getName() + " : " + header.getValue());
}
}
}
public static void main(String[] args) throws Exception {
//STEP 1: create the URL that points to your service/servlet
//URL url = new URL("http://127.0.0.1:8888/_ah/login?email=krazlafas@gmail.com&continue=http://localhost:8888/cloudcodex/home2");
final DefaultHttpClient http = new DefaultHttpClient ();
http.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);
HttpPost http_get = new HttpPost("http://localhost:8888/_ah/login?continue=http://localhost/&email=krazlafas@gmail.com");
HttpResponse response = http.execute(http_get);
if(response.getStatusLine().getStatusCode() != 302) {
// Response should be a redirect
System.err.println(response.getStatusLine().getStatusCode());
return;
}
for(Cookie cookie : http.getCookieStore().getCookies()) {
System.err.println(cookie.getName() + " / '" + cookie.getValue() + "'");
}
URL urlHome = new URL("http://localhost:8888/cloudcodex/home2");
GwtRpcCommLayerClient clientHome = new GwtRpcCommLayerClient(urlHome, http.getCookieStore().getCookies());
clientHome.setGwtRpcClientSizeProxyImplClass(Proxy.class.getName());
final HomeRPCAsync homeRpc = clientHome.createRemoteServicePojoProxy(HomeRPCAsync.class);
URL urlCampaign = new URL("http://localhost:8888/cloudcodex/campaign2");
GwtRpcCommLayerClient clientCampaign = new GwtRpcCommLayerClient(urlCampaign, http.getCookieStore().getCookies());
clientCampaign.setGwtRpcClientSizeProxyImplClass(Proxy.class.getName());
final CampaignRPC campaignRpc = clientCampaign.createRemoteServicePojoProxy(CampaignRPC.class);
// asynchronous call
homeRpc.getHome(new AsyncCallback<Result<HomeDTO>>() {
@Override
public void onSuccess(Result<HomeDTO> result) {
System.err.println(result.hasErrors());
final HomeDTO home = result.getData();
System.err.println(home.getNickname() + " : ");
for(CharacterSummaryDTO character : home.getCharacters()) {
// synchronous call
System.err.println("\n----------------\n" + character.getName() + " : ");
final Result<List<SceneDTO>> result2 =
campaignRpc.getMessages(character.getCampaign().getId(), character.getId(), null, null);
final List<SceneDTO> scenes = result2.getData();
for(SceneDTO scene : scenes) {
final StringBuffer buffer = new StringBuffer();
final Map<Long, CharacterHeaderDTO> authors = new HashMap<Long, CharacterHeaderDTO>();
for(CharacterHeaderDTO header : scene.getCharacters()) {
if(buffer.length() != 0) {
buffer.append(", ");
}
buffer.append(header.getName());
authors.put(header.getId(), header);
}
System.err.println("\n--\nWith : " + buffer + " : ");
for(MessageDTO message : scene.getMessages()) {
final CharacterHeaderDTO author = authors.get(message.getAuthor());
final String authorname = author == null ? "GM" : author.getName();
System.err.println(authorname + " : " + message.getType() + " / " + message.getContent());
}
}
}
}
@Override
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
});
}
}