/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* 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://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Mathew A. Nelson
* - Initial API and implementation
* Flemming N. Lasen
* - Code cleanup
* - Added the getNameAndVersion() method
* - Changed to use the FileSpecification as local specification instead of
* RobotFileSpecification. This change was done in order to support teams
* - This class now implements java.io.Serializable
* - Updated the Javadocs
*******************************************************************************/
package robocode.control;
import java.io.File;
import net.sf.robocode.security.IHiddenSpecificationHelper;
/**
* Defines the properties of a robot, which is returned from
* {@link RobocodeEngine#getLocalRepository()}.
*
* @author Mathew A. Nelson (original)
* @author Flemming N. Larsen (contributor)
*/
public class RobotSpecification implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private final Object fileSpecification;
private final String name;
private final String author;
private final String webpage;
private final String version;
private final String robocodeVersion;
private final String jarFile;
private final String fullClassName;
private final String description;
private String teamId;
private RobotSpecification(Object fileSpecification, String name, String author, String webpage, String version, String robocodeVersion, String jarFile, String fullClassName, String description) {
this.fileSpecification = fileSpecification;
this.name = name;
this.author = author;
this.webpage = webpage;
this.version = version;
this.robocodeVersion = robocodeVersion;
this.jarFile = jarFile;
this.fullClassName = fullClassName;
this.description = description;
}
/**
* Returns the name of this robot or team.
*
* @return the name of this robot or team.
* @see #getVersion()
* @see #getNameAndVersion()
*/
public String getName() {
return name;
}
/**
* Returns the version of this robot or team.
*
* @return the version of this robot or team.
* @see #getName()
* @see #getNameAndVersion()
*/
public String getVersion() {
return version;
}
/**
* Returns the name and version of this robot or team.
*
* @return the name and version of this robot or team.
* @see #getName()
* @see #getVersion()
* @since 1.3
*/
public String getNameAndVersion() {
String nameAndVersion = getName();
String version = getVersion();
if (version != null && version.trim().length() > 0) {
nameAndVersion += ' ' + version.trim();
}
return nameAndVersion;
}
/**
* Returns the full class name of this robot or team.
*
* @return the full class name of this robot or team.
*/
public String getClassName() {
return fullClassName;
}
/**
* Returns the JAR file containing this robot or team, or {@code null} if it
* does not come from a JAR file (could be class files instead).
*
* @return the JAR file containing this robot or team, or {@code null} if it
* does not come from a JAR file (could be class files instead).
*/
public File getJarFile() {
return new File(jarFile);
}
/**
* Returns the description provided by the author of this robot or team.
*
* @return the description provided by the author of this robot or team.
*/
public String getDescription() {
return description;
}
/**
* Returns the version of Robocode this robot or team was build with.
*
* @return the version of Robocode this robot or team was build with.
*/
public String getRobocodeVersion() {
return robocodeVersion;
}
/**
* Returns the link to the web page for this robot or team.
*
* @return the link to the web page for this robot or team.
*/
public String getWebpage() {
return webpage;
}
/**
* Returns the name of the author of this robot or team.
*
* @return the name of the author of this robot or team.
*/
public String getAuthorName() {
return author;
}
/**
* Returns id of the team in current battle.
*
* @return id of the team in current battle.
*/
public String getTeamId() {
return teamId != null ? teamId : getNameAndVersion();
}
static IHiddenSpecificationHelper createHiddenHelper() {
return new HiddenHelper();
}
private static class HiddenHelper implements IHiddenSpecificationHelper {
public RobotSpecification createSpecification(Object fileSpecification, String name, String author, String webpage, String version, String robocodeVersion, String jarFile, String fullClassName, String description) {
return new RobotSpecification(fileSpecification, name, author, webpage, version, robocodeVersion, jarFile,
fullClassName, description);
}
public Object getFileSpecification(RobotSpecification specification) {
return specification.fileSpecification;
}
public void setTeamName(RobotSpecification specification, String teamName) {
specification.teamId = teamName;
}
public String getTeamName(RobotSpecification specification) {
return specification.teamId;
}
}
}