package com.plectix.simulator.parser.abstractmodel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.plectix.simulator.parser.ParseErrorException;
import com.plectix.simulator.parser.ParseErrorMessage;
import com.plectix.simulator.parser.util.ParserUtil;
import com.plectix.simulator.staticanalysis.NamedEntity;
public final class ModelAgent extends NamedEntity implements Comparable<ModelAgent> {
private static final String DEFAULT_NAME = null;
private final List<ModelSite> sites = new ArrayList<ModelSite>();
private final String name;
public ModelAgent(String name) {
this.name = name;
}
final void addSite(ModelSite site) {
this.sites.add(site);
}
public final List<ModelSite> getSites() {
return sites;
}
public final int compareTo(ModelAgent agent) {
return this.toString().compareTo(agent.toString());
}
//-------------------------------toString-----------------
//TODO remove this code and implement AbstractSite
private static final class ComparableSite implements Comparable<ComparableSite>{
private final ModelSite site;
public ComparableSite(ModelSite site) {
this.site = site;
}
public final ModelSite getSite() {
return site;
}
@Override
public final int compareTo(ComparableSite siteCompareTo) {
return site.getName().compareTo(siteCompareTo.site.getName());
}
@Override
public final String toString() {
return site.toString();
}
}
@Override
public final String toString() {
StringBuffer sb = new StringBuffer();
sb.append(name + "(");
List<ComparableSite> sortedSites = new ArrayList<ComparableSite>();
for (ModelSite site : this.sites) {
sortedSites.add(new ComparableSite(site));
}
Collections.sort(sortedSites);
sb.append(ParserUtil.listToString(sortedSites));
sb.append(")");
return sb.toString();
}
@Override
protected String getDefaultName() {
return DEFAULT_NAME;
}
@Override
public String getName() {
return name;
}
public void addCorrectSite(ModelSite parseSite) throws ParseErrorException {
for (ModelSite modelSite : sites) {
if (modelSite.getName().equals(parseSite.getName())) {
throw new ParseErrorException(
ParseErrorMessage.REPEATED_SITE_NAME, parseSite.getName());
}
}
addSite(parseSite);
}
}