public AbstractPollingTemplate findDefaultTemplateByCriteria(
      ConstantTableItem docType, ConstantTableItem gmdType, String language, boolean isDefault) {
    AbstractPollingTemplate template = null;

    if (template == null && docType != null && gmdType != null && language != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(
              docType, gmdType, language, isDefault);
    }

    if (template == null && docType != null && gmdType != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(docType, gmdType, null, isDefault);
    }

    if (template == null && docType != null && language != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(docType, null, language, isDefault);
    }

    if (template == null && docType != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(docType, null, null, isDefault);
    }

    if (template == null && gmdType != null && language != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(null, gmdType, language, isDefault);
    }

    if (template == null && gmdType != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(null, gmdType, null, isDefault);
    }

    if (template == null && language != null) {
      template =
          voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(null, null, language, isDefault);
    }

    if (template == null) {
      template = voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(null, null, null, isDefault);
    }

    return template;
  }
 public AbstractPollingTemplate savePollingTemplate(AbstractPollingTemplate pollingTemplate)
     throws UsedTemplateException {
   //        if (voteDao.isUsedTemplate(pollingTemplate)) {
   //            throw new UsedTemplateException("template_is_used");
   //
   //        }
   if (pollingTemplate instanceof BibliographicPollingTemplate) {
     ConstantTableItem docType = ((BibliographicPollingTemplate) pollingTemplate).getDocType();
     ConstantTableItem gmdType = ((BibliographicPollingTemplate) pollingTemplate).getGmdType();
     String language = pollingTemplate.getLanguage();
     if (pollingTemplate.isDefaultTemplate()) {
       AbstractPollingTemplate defaultTemplate =
           voteDao.findDefaultTemplateByDocTypeGmdTypeLanguage(docType, gmdType, language, true);
       if (defaultTemplate != null && !defaultTemplate.equals(pollingTemplate)) {
         defaultTemplate.setDefaultTemplate(false);
         voteDao.save(defaultTemplate);
       }
     }
   }
   if (pollingTemplate.getCreationDate() == null) {
     pollingTemplate.setCreationDate(new Date());
   }
   return (AbstractPollingTemplate) voteDao.saveByMerge(pollingTemplate);
 }