package fi.otavanopisto.muikku.plugins.material;
import java.io.IOException;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import org.codehaus.jackson.map.ObjectMapper;
import fi.otavanopisto.muikku.plugins.material.dao.QueryOrganizerFieldDAO;
import fi.otavanopisto.muikku.plugins.material.events.QueryFieldDeleteEvent;
import fi.otavanopisto.muikku.plugins.material.events.QueryFieldUpdateEvent;
import fi.otavanopisto.muikku.plugins.material.fieldmeta.OrganizerFieldMeta;
import fi.otavanopisto.muikku.plugins.material.model.Material;
import fi.otavanopisto.muikku.plugins.material.model.QueryOrganizerField;
@Dependent
public class QueryOrganizerFieldController {
@Inject
private QueryOrganizerFieldDAO queryOrganizerFieldDAO;
@Inject
private Event<QueryFieldUpdateEvent> queryFieldUpdateEvent;
@Inject
private Event<QueryFieldDeleteEvent> queryFieldDeleteEvent;
public QueryOrganizerField createQueryOrganizerField(Material material, String name) {
return queryOrganizerFieldDAO.create(material, name);
}
public QueryOrganizerField findQueryOrganizerFieldbyId(Long id) {
return queryOrganizerFieldDAO.findById(id);
}
public QueryOrganizerField findQueryTextFieldByMaterialAndName(Material material, String name) {
return queryOrganizerFieldDAO.findByMaterialAndName(material, name);
}
public QueryOrganizerField updateQueryOrganizerField(Material material, MaterialField field, boolean removeAnswers) throws MaterialFieldMetaParsingExeption {
ObjectMapper objectMapper = new ObjectMapper();
OrganizerFieldMeta organizerFieldMeta;
try {
organizerFieldMeta = objectMapper.readValue(field.getContent(), OrganizerFieldMeta.class);
} catch (IOException e) {
throw new MaterialFieldMetaParsingExeption("Could not parse select field meta", e);
}
QueryOrganizerField queryField = queryOrganizerFieldDAO.findByMaterialAndName(material, organizerFieldMeta.getName());
// -> fi.otavanopisto.muikku.plugins.workspace.QueryFieldChangeListener
queryFieldUpdateEvent.fire(new QueryFieldUpdateEvent(queryField, field, removeAnswers));
return queryField;
}
public void deleteQueryOrganizerField(QueryOrganizerField queryField, boolean removeAnswers) {
queryFieldDeleteEvent.fire(new QueryFieldDeleteEvent(queryField, removeAnswers));
queryOrganizerFieldDAO.delete(queryField);
}
}