package ql.ast.form;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import ql.ast.environment.Environment;
import ql.ast.expr.exprType.Ident;
import ql.ast.message.Error;
public class Form {
private final Ident id;
private List<FormItems> formItems;
private final Environment environment;
private JFrame frame;
private String warning;
public Form(Ident id, List<FormItems> formItems){
this.id = id;
this.formItems = formItems;
this.environment = new Environment();
this.warning = "";
}
public List<FormItems> getFormItems() {
return formItems;
}
public String getIdent() {
return id.getValue();
}
public Environment getEnvironment() {
return environment;
}
public String getWarning(){
return warning;
}
public boolean validate() {
boolean valid = true;
List<String> questions = new ArrayList<String>();
for (FormItems f : formItems) {
if (questions.contains(f.getQuestion()))
warning += "Warning: Duplicate labels! " + f.getQuestion() + "\n";
questions.add(f.getQuestion());
valid &= f.validate(environment);
}
return valid;
}
public String getError() {
String errorText = "Form: " + id + "\n";
for (FormItems f : formItems) {
for(Error err : f.getErrors())
errorText += err.getText() + "\n";
}
return errorText;
}
public JPanel buildForm(JFrame frame) {
this.frame = frame;
JPanel panel = new JPanel(new MigLayout("hidemode 3"));
for (FormItems f : formItems) {
f.buildForm(panel, environment, this);
}
eval();
return panel;
}
public void eval() {
for (FormItems f : formItems) {
f.eval(environment);
}
frame.pack();
}
}