package fi.otavanopisto.muikku.plugins.material;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import fi.otavanopisto.muikku.plugins.material.dao.QueryConnectFieldCounterpartDAO;
import fi.otavanopisto.muikku.plugins.material.dao.QueryConnectFieldDAO;
import fi.otavanopisto.muikku.plugins.material.dao.QueryConnectFieldTermDAO;
import fi.otavanopisto.muikku.plugins.material.events.QueryFieldDeleteEvent;
import fi.otavanopisto.muikku.plugins.material.model.Material;
import fi.otavanopisto.muikku.plugins.material.model.QueryConnectField;
import fi.otavanopisto.muikku.plugins.material.model.QueryConnectFieldCounterpart;
import fi.otavanopisto.muikku.plugins.material.model.QueryConnectFieldTerm;
@Dependent
public class QueryConnectFieldController {
@Inject
private QueryConnectFieldDAO queryConnectFieldDAO;
@Inject
private QueryConnectFieldTermDAO queryConnectFieldTermDAO;
@Inject
private QueryConnectFieldCounterpartDAO queryConnectFieldCounterpartDAO;
@Inject
private Event<QueryFieldDeleteEvent> queryFieldDeleteEvent;
/* Connect Field */
public QueryConnectField createQueryConnectField(Material material, String name) {
return queryConnectFieldDAO.create(material, name);
}
public QueryConnectField findQueryConnectFieldById(Long id) {
return queryConnectFieldDAO.findById(id);
}
public QueryConnectField findQueryConnectFieldByMaterialAndName(Material material, String name) {
return queryConnectFieldDAO.findByMaterialAndName(material, name);
}
public void deleteQueryConnectField(QueryConnectField queryField, boolean removeAnswers) {
queryFieldDeleteEvent.fire(new QueryFieldDeleteEvent(queryField, removeAnswers));
for (QueryConnectFieldTerm term : listConnectFieldTermsByField(queryField)) {
queryConnectFieldTermDAO.delete(term);
}
for (QueryConnectFieldCounterpart counterpart : listQueryConnectFieldCounterpartByField(queryField)) {
queryConnectFieldCounterpartDAO.delete(counterpart);
}
queryConnectFieldDAO.delete(queryField);
}
/* Connect Field Terms */
public QueryConnectFieldTerm createConnectFieldTerm(QueryConnectField field, String name, String text, QueryConnectFieldCounterpart counterpart) {
return queryConnectFieldTermDAO.create(field, name, text, counterpart);
}
public QueryConnectFieldTerm findQueryConnectFieldTermByFieldAndName(QueryConnectField field, String name) {
return queryConnectFieldTermDAO.findByFieldAndName(field, name);
}
public List<QueryConnectFieldTerm> listConnectFieldTermsByField(QueryConnectField field) {
return queryConnectFieldTermDAO.listByField(field);
}
public QueryConnectFieldTerm updateConnectFieldTermText(QueryConnectFieldTerm queryConnectFieldTerm, String text) {
return queryConnectFieldTermDAO.updateText(queryConnectFieldTerm, text);
}
public QueryConnectFieldTerm updateConnectFieldTermCounterpart(QueryConnectFieldTerm queryConnectFieldTerm, QueryConnectFieldCounterpart counterpart) {
return queryConnectFieldTermDAO.updateCounterpart(queryConnectFieldTerm, counterpart);
}
/* Connect Field Counterparts */
public QueryConnectFieldCounterpart createConnectFieldCounterpart(QueryConnectField field, String name, String text) {
return queryConnectFieldCounterpartDAO.create(field, name, text);
}
public QueryConnectFieldCounterpart findQueryConnectFieldCounterpartByFieldAndName(QueryConnectField field, String name) {
return queryConnectFieldCounterpartDAO.findByFieldAndName(field, name);
}
public List<QueryConnectFieldCounterpart> listQueryConnectFieldCounterpartByField(QueryConnectField field) {
return queryConnectFieldCounterpartDAO.listByField(field);
}
public QueryConnectFieldCounterpart updateConnectFieldCounterpartText(QueryConnectFieldCounterpart connectFieldCounterpart, String text) {
return queryConnectFieldCounterpartDAO.updateText(connectFieldCounterpart, text);
}
}