// AnalyzeCommand.java
package net.sf.gogui.gtp;
import java.io.File;
import net.sf.gogui.go.ConstPointList;
import net.sf.gogui.go.GoColor;
import static net.sf.gogui.go.GoColor.BLACK;
import static net.sf.gogui.go.GoColor.WHITE;
import net.sf.gogui.go.GoPoint;
import net.sf.gogui.go.PointList;
/** Concrete analyze command including data for wildcard replacements.
See GoGui documentation, chapter "Analyze Commands" */
public class AnalyzeCommand
{
public AnalyzeCommand(AnalyzeDefinition definition)
{
m_definition = definition;
}
public String getLabel()
{
return m_definition.getLabel();
}
public GoColor getColorArg()
{
return m_colorArg;
}
public GoPoint getPointArg()
{
return m_pointArg;
}
public PointList getPointListArg()
{
return m_pointListArg;
}
public AnalyzeType getType()
{
return m_definition.getType();
}
public String getResultTitle()
{
StringBuilder buffer = new StringBuilder(getLabel());
if (needsColorArg() && m_colorArg != null)
{
if (m_colorArg == BLACK)
buffer.append(" Black");
else
{
assert m_colorArg == WHITE;
buffer.append(" White");
}
}
if (needsPointArg() && m_pointArg != null)
{
buffer.append(' ');
buffer.append(m_pointArg);
}
else if (needsPointListArg())
{
for (GoPoint p : m_pointListArg)
{
buffer.append(' ');
buffer.append(p);
}
}
if (needsStringArg() && m_stringArg != null)
{
buffer.append(' ');
buffer.append(m_stringArg);
}
return buffer.toString();
}
public boolean isPointArgMissing()
{
if (needsPointArg())
return (m_pointArg == null);
if (needsPointListArg())
return m_pointListArg.isEmpty();
return false;
}
public boolean isTextType()
{
return m_definition.isTextType();
}
public boolean needsColorArg()
{
return m_definition.needsColorArg();
}
public boolean needsFileArg()
{
return m_definition.needsFileArg();
}
public boolean needsFileOpenArg()
{
return m_definition.needsFileOpenArg();
}
public boolean needsFileSaveArg()
{
return m_definition.needsFileSaveArg();
}
public boolean needsOnlyPointArg()
{
return m_definition.needsOnlyPointArg();
}
public boolean needsOnlyPointAndColorArg()
{
return m_definition.needsOnlyPointAndColorArg();
}
public boolean needsPointArg()
{
return m_definition.needsPointArg();
}
public boolean needsPointListArg()
{
return m_definition.needsPointListArg();
}
public boolean needsStringArg()
{
return m_definition.needsStringArg();
}
public boolean needsOptStringArg()
{
return m_definition.needsOptStringArg();
}
public String replaceWildCards(GoColor toMove)
{
String command = m_definition.getCommand();
String toMoveString = (toMove == BLACK ? "b" : "w");
String result = command.replace("%m", toMoveString);
if (needsPointArg() && m_pointArg != null)
result = result.replace("%p", m_pointArg.toString());
if (needsPointListArg())
{
String pointList = GoPoint.toString(m_pointListArg);
if (getType() == AnalyzeType.EPLIST
&& m_pointListArg.size() > 0)
result = result + ' ' + pointList;
else
result = result.replace("%P", pointList);
}
if (needsFileArg())
{
String fileArg = m_fileArg.toString();
if (fileArg.indexOf(' ') >= 0)
fileArg = "\"" + fileArg + "\"";
result = result.replace("%f", fileArg);
}
if (needsFileOpenArg())
{
String fileOpenArg = m_fileOpenArg.toString();
if (fileOpenArg.indexOf(' ') >= 0)
fileOpenArg = "\"" + fileOpenArg + "\"";
result = result.replace("%r", fileOpenArg);
}
if (needsFileSaveArg())
{
String fileSaveArg = m_fileSaveArg.toString();
if (fileSaveArg.indexOf(' ') >= 0)
fileSaveArg = "\"" + fileSaveArg + "\"";
result = result.replace("%w", fileSaveArg);
}
if (needsStringArg())
{
assert m_stringArg != null;
result = result.replace("%s", m_stringArg);
}
if (needsOptStringArg())
{
assert m_optStringArg != null;
result = result.replace("%o", m_optStringArg);
}
if (needsColorArg())
{
String colorString = "empty";
if (m_colorArg == BLACK)
colorString = "b";
else if (m_colorArg == WHITE)
colorString = "w";
result = result.replace("%c", colorString);
}
return result;
}
public void setColorArg(GoColor color)
{
assert needsColorArg();
m_colorArg = color;
}
public void setFileArg(File file)
{
assert needsFileArg();
m_fileArg = file;
}
public void setFileOpenArg(File file)
{
assert needsFileOpenArg();
m_fileOpenArg = file;
}
public void setFileSaveArg(File file)
{
assert needsFileSaveArg();
m_fileSaveArg = file;
}
public void setPointArg(GoPoint point)
{
m_pointArg = point;
}
public void setPointListArg(ConstPointList pointList)
{
m_pointListArg = new PointList(pointList);
}
public void setStringArg(String value)
{
assert needsStringArg();
m_stringArg = value;
}
public void setOptStringArg(String value)
{
assert needsOptStringArg();
m_optStringArg = value;
}
private final AnalyzeDefinition m_definition;
private GoColor m_colorArg;
private File m_fileArg;
private File m_fileOpenArg;
private File m_fileSaveArg;
private String m_optStringArg;
private String m_stringArg;
private GoPoint m_pointArg;
private PointList m_pointListArg = new PointList();
}