package ilarkesto.mda.legacy.generator;
import ilarkesto.core.base.Str;
import ilarkesto.mda.legacy.model.ActionModel;
import ilarkesto.mda.legacy.model.ParameterModel;
import java.util.Collection;
import java.util.List;
public class GwtActionGenerator extends AClassGenerator {
private ActionModel action;
public GwtActionGenerator(ActionModel action) {
super();
this.action = action;
}
@Override
protected final String getName() {
return "G" + action.getName() + "Action";
}
@Override
protected final String getPackage() {
return action.getPackageName().replace(".server", ".client");
}
@Override
protected final boolean isInterface() {
return false;
}
@Override
protected void writeContent() {
writeInstanceVariables();
writeConstructor();
writeIsExecutable();
List<ParameterModel> parameters = action.getParameters();
if (!parameters.isEmpty()) writeGetId(parameters);
}
private void writeInstanceVariables() {
ln();
for (ParameterModel parameter : action.getParameters()) {
ln(" protected " + parameter.getType().replace(".server", ".client") + " " + parameter.getName() + ";");
}
}
private void writeConstructor() {
ln();
StringBuilder sig = new StringBuilder();
boolean first = true;
for (ParameterModel parameter : action.getParameters()) {
if (first) {
first = false;
} else {
sig.append(", ");
}
sig.append(parameter.getType().replace(".server", ".client")).append(" ").append(parameter.getName());
}
ln(" public " + getName() + "(" + sig + ") {");
for (ParameterModel parameter : action.getParameters()) {
ln(" this." + parameter.getName() + " = " + parameter.getName() + ";");
}
ln(" }");
}
private void writeIsExecutable() {
ln();
ln(" @Override");
ln(" public boolean isExecutable() {");
ln(" return true;");
ln(" }");
}
private void writeGetId(Collection<ParameterModel> parameters) {
StringBuilder params = new StringBuilder();
boolean first = true;
for (ParameterModel parameter : parameters) {
if (first) {
first = false;
} else {
params.append(", ");
}
params.append(parameter.getName());
}
ln();
ln(" @Override");
ln(" public String getId() {");
ln(" return " + Str.class.getName() + ".getSimpleName(getClass()) + '_' + " + Str.class.getName()
+ ".toHtmlId(" + params + ");");
ln(" }");
}
@Override
protected final String getSuperclass() {
return "scrum.client.common.AScrumAction";
}
@Override
protected final boolean isAbstract() {
return true;
}
@Override
protected boolean isOverwrite() {
return true;
}
}