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.QuerySorterFieldDAO;
import fi.otavanopisto.muikku.plugins.material.events.QueryFieldDeleteEvent;
import fi.otavanopisto.muikku.plugins.material.events.QueryFieldUpdateEvent;
import fi.otavanopisto.muikku.plugins.material.fieldmeta.SorterFieldMeta;
import fi.otavanopisto.muikku.plugins.material.model.Material;
import fi.otavanopisto.muikku.plugins.material.model.QuerySorterField;
@Dependent
public class QuerySorterFieldController {
@Inject
private QuerySorterFieldDAO querySorterFieldDAO;
@Inject
private Event<QueryFieldUpdateEvent> queryFieldUpdateEvent;
@Inject
private Event<QueryFieldDeleteEvent> queryFieldDeleteEvent;
public QuerySorterField createQuerySorterField(Material material, String name) {
return querySorterFieldDAO.create(material, name);
}
public QuerySorterField findQuerySorterFieldbyId(Long id) {
return querySorterFieldDAO.findById(id);
}
public QuerySorterField findQueryTextFieldByMaterialAndName(Material material, String name) {
return querySorterFieldDAO.findByMaterialAndName(material, name);
}
public QuerySorterField updateQuerySorterField(Material material, MaterialField field, boolean removeAnswers) throws MaterialFieldMetaParsingExeption {
ObjectMapper objectMapper = new ObjectMapper();
SorterFieldMeta sorterFieldMeta;
try {
sorterFieldMeta = objectMapper.readValue(field.getContent(), SorterFieldMeta.class);
} catch (IOException e) {
throw new MaterialFieldMetaParsingExeption("Could not parse sorter field meta", e);
}
QuerySorterField queryField = querySorterFieldDAO.findByMaterialAndName(material, sorterFieldMeta.getName());
// -> fi.otavanopisto.muikku.plugins.workspace.QueryFieldChangeListener
queryFieldUpdateEvent.fire(new QueryFieldUpdateEvent(queryField, field, removeAnswers));
return queryField;
}
public void deleteQuerySorterField(QuerySorterField queryField, boolean removeAnswers) {
queryFieldDeleteEvent.fire(new QueryFieldDeleteEvent(queryField, removeAnswers));
querySorterFieldDAO.delete(queryField);
}
}