Tips for Controllers

  • Resist the temptation to write business logic in controllers.
  • Keep the controllers stateless as controllers may be pooled in future versions of EasyWeb4J.
  • Avoid holding references to models which have not been updated when validating input. See the controllers in tutorials for the right way to get reference to updated models.
  • Use the @InjectRepository annotation to inject appropriate repository instances into controllers.
  • Use the @SpringBean annotation to inject beans from Spring's IoC container.

Controllers' Code

src/main/java/org/languages/controllers/HomeController.java:

This is an empty controller for displaying the welcome screen.

package org.languages.controllers;

// import statements hidden

public class HomeController extends Controller {
}

src/main/java/org/languages/controllers/ParadigmsController.java:

Controller to manage Paradigm entities.

package org.languages.controllers;

// import statements hidden

public class ParadigmsController extends Controller {
    @InjectRepository
    private ParadigmRepository paradigmRepository;
    
    public void index() {
        setRequestAttribute("paradigms", paradigmRepository.findAll());
    }
    
    public void edit(Integer paradigmId) {
        setEditedParadigm(paradigmRepository.find(paradigmId));
    }
    
    public void delete(Integer paradigmId) {
        Paradigm paradigm = paradigmRepository.find(paradigmId, true);
        paradigmRepository.remove(paradigm);
        redirect("Paradigms");
    }
    
    public void create() {
        Paradigm paradigm = updateModel(new Paradigm(), "paradigm");
        
        if(paradigm.isValid()) {
            paradigmRepository.persist(paradigm);
            setSuccessFlash();
            redirect("Paradigms");
        } else {
            setEditedParadigm(paradigm);
            render("add");
        }
    }

    public void update(Integer paradigmId) {
        Paradigm paradigm = paradigmRepository.find(paradigmId, true);
        paradigm = updateModel(paradigm, "paradigm");
        
        if(paradigm.isValid()) {
            paradigmRepository.merge(paradigm);
            setSuccessFlash();
            redirect("Paradigms");
        } else {
            setEditedParadigm(paradigm);
            render("add");
        }
    }
    
    private void setEditedParadigm(Paradigm paradigm) {
        setRequestAttribute("paradigm", paradigm);
    }
    
    private void setSuccessFlash() {
        setFlash("paradigmSuccess", "Paradigm was saved successfully!");
    }
}

src/main/java/org/languages/controllers/ExecutionEnvironmentsController.java:

Controller to manage ExecutionEnvironment entities.

package org.languages.controllers;

// import statements hidden

public class ExecutionEnvironmentsController extends Controller {
    @InjectRepository
    private ExecutionEnvironmentRepository environmentRepository;
    
    public void index() {
        setRequestAttribute("environments", environmentRepository.findAll());
    }
    
    public void edit(Integer environmentId) {
        setEditedEnvironment(environmentRepository.find(environmentId));
    }
    
    public void delete(Integer environmentId) {
        ExecutionEnvironment environment = environmentRepository.find(environmentId, true);
        environmentRepository.remove(environment);
        redirect("ExecutionEnvironments");
    }
    
    public void create() {
        ExecutionEnvironment environment = updateModel(new ExecutionEnvironment(), "environment");
        
        if(environment.isValid()) {
            environmentRepository.persist(environment);
            setSuccessFlash();
            redirect("ExecutionEnvironments");
        } else {
            setEditedEnvironment(environment);
            render("add");
        }
    }
    
    public void update(Integer environmentId) {
        ExecutionEnvironment environment = environmentRepository.find(environmentId, true);
        environment = updateModel(environment, "environment");
        
        if(environment.isValid()) {
            environmentRepository.merge(environment);
            setSuccessFlash();
            redirect("ExecutionEnvironments");
        } else {
            setEditedEnvironment(environment);
            render("edit");
        }
    }
    
    private void setEditedEnvironment(ExecutionEnvironment environment) {
        setRequestAttribute("environment", environment);
    }
    
    private void setSuccessFlash() {
        setFlash("environmentSuccess", "Execution Environment was saved successfully!");
    }
}

src/main/java/org/languages/controllers/LanguagesController.java:

Controller to manage Language entities.

package org.languages.controllers;

// import statements hidden

public class LanguagesController extends Controller {
    @InjectRepository
    private ExecutionEnvironmentRepository executionEnvironmentRepository;
    @InjectRepository
    private ParadigmRepository paradigmRepository;
    @InjectRepository
    private LanguageRepository languageRepository;
    
    private AssociationsProvider provider = new AssociationsProvider() {
        
        public Object getAssociation(String property, String[] values) {
            if(property.equals("paradigms"))
                return getParadigms(values);
            else if(property.equals("executionEnvironment"))
                return getExecutionEnvironment(values[0]);
            
            return null;
        }

        private ExecutionEnvironment getExecutionEnvironment(String value) {
            if(value == null || value.length() == 0)
                return null;
            
            return executionEnvironmentRepository.find(Integer.valueOf(value));
        }

        private List<Paradigm> getParadigms(String[] values) {
            List<Paradigm> paradigms = new ArrayList<Paradigm>();
            for(String value : values)
                if(value != null && value.length() > 0)
                    paradigms.add(paradigmRepository.find(Integer.valueOf(value)));
            
            return paradigms;
        }
    };
    
    public void index() {
        setRequestAttribute("languages", languageRepository.findAll());
    }
    
    public void add() {
        loadFormData();
    }
    
    public void edit(Integer languageId) {
        setEditedLanguage(languageRepository.find(languageId));
        loadFormData();
    }
    
    public void delete(Integer languageId) {
        Language language = languageRepository.find(languageId, true);
        languageRepository.remove(language);
        redirect("Languages");
    }
    
    public void create() {
        Language language = updateModel(new Language(), "language", provider);
        
        if(language.isValid()) {
            languageRepository.persist(language);
            setSuccessFlash();
            redirect("Languages");
        } else {
            setEditedLanguage(language);
            loadFormData();
            render("add");
        }
    }
    
    public void update(Integer languageId) {
        Language language = languageRepository.find(languageId, true);
        language = updateModel(language, "language", provider);
        
        if(language.isValid()) {
            languageRepository.merge(language);
            setSuccessFlash();
            redirect("Languages");
        } else {
            setEditedLanguage(language);
            loadFormData();
            render("edit");
        }
    }
    
    private void loadFormData() {
        setRequestAttribute("paradigms", paradigmRepository.findAll());
        setRequestAttribute("environments", executionEnvironmentRepository.findAll());
    }
    
    private void setEditedLanguage(Language language) {
        setRequestAttribute("language", language);
    }
    
    private void setSuccessFlash() {
        setFlash("languageSuccess", "Language was saved successfully!");
    }
}