org.ggp.base.util.presence.InfoResponse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
The newest version!
package org.ggp.base.util.presence;
import java.util.ArrayList;
import java.util.List;
import org.ggp.base.util.symbol.factory.SymbolFactory;
import org.ggp.base.util.symbol.factory.exceptions.SymbolFormatException;
import org.ggp.base.util.symbol.grammar.Symbol;
import org.ggp.base.util.symbol.grammar.SymbolAtom;
import org.ggp.base.util.symbol.grammar.SymbolList;
import org.ggp.base.util.symbol.grammar.SymbolPool;
/**
* Wherein we poorly reinvent JSON, so that we can keep INFO responses
* consistent with the Symbol-based KIF format that the other GGP protocol
* messages are in.
*
* @author schreib
*/
public class InfoResponse {
private String name;
private String status;
private String species;
public InfoResponse() {
;
}
public void setName(String name) {
this.name = name;
}
public void setStatus(String status) {
this.status = status;
}
public void setSpecies(String species) {
this.species = species;
}
public String getName() {
return name;
}
public String getStatus() {
return status;
}
public String getSpecies() {
return species;
}
public InfoResponse(Symbol symbol) {
if (symbol instanceof SymbolList) {
SymbolList pairs = (SymbolList)symbol;
for (int i = 0; i < pairs.size(); i++) {
Symbol pairSymbol = pairs.get(i);
if (pairSymbol instanceof SymbolList) {
SymbolList pair = (SymbolList)pairSymbol;
if (pair.size() < 2) continue;
String key = pair.get(0).toString().toLowerCase();
String value = "";
for (int j = 1; j < pair.size(); j++) {
value += pair.get(j).toString();
}
if (key.equals("name")) {
name = value;
} else if (key.equals("status")) {
status = value;
} else if (key.equals("species")) {
species = value;
}
}
}
} else if (symbol instanceof SymbolAtom) {
status = ((SymbolAtom) symbol).getValue();
}
}
public static InfoResponse create(String original) {
try {
return new InfoResponse(SymbolFactory.create(original));
} catch (SymbolFormatException e) {
return new InfoResponse();
}
}
private Symbol getKeyValueSymbol(String key, String value) {
Symbol keySymbol = SymbolPool.getAtom(key);
Symbol valueSymbol = SymbolPool.getAtom(value);
return SymbolPool.getList(new Symbol[] {keySymbol, valueSymbol} );
}
public Symbol toSymbol() {
List infoList = new ArrayList();
if (name != null) {
infoList.add(getKeyValueSymbol("name", name));
}
if (status != null) {
infoList.add(getKeyValueSymbol("status", status));
}
if (species != null) {
infoList.add(getKeyValueSymbol("species", species));
}
return SymbolPool.getList(infoList);
}
}