private void setOCWEnlace(Enlace enlace, UIEntity entity) {
   if (enlace.getOcw()) {
     entity.put("ocw", "Si");
   } else {
     entity.put("ocw", "No");
   }
 }
  protected UIEntity fieldsToUIEntity(Iterator<Map.Entry<String, JsonNode>> fields) {
    UIEntity entity = new UIEntity();

    while (fields.hasNext()) {
      Map.Entry<String, JsonNode> field = fields.next();
      JsonNode fieldValue = field.getValue();

      if (fieldValue instanceof ObjectNode) {
        entity.put(field.getKey(), fieldsToUIEntity(field.getValue().fields()));
      } else if (fieldValue instanceof ArrayNode) {
        Iterator<JsonNode> elements = fieldValue.elements();
        List<Object> listValues = new ArrayList<>();

        while (elements.hasNext()) {
          JsonNode nextNode = elements.next();

          if (nextNode instanceof ObjectNode) {
            listValues.add(fieldsToUIEntity(nextNode.fields()));
          } else {
            listValues.add(nextNode.asText());
          }
        }

        entity.put(field.getKey(), listValues);
      } else if (!(field.getValue() instanceof NullNode)) {
        entity.put(field.getKey(), field.getValue().asText());
      }
    }

    return entity;
  }
 @PUT
 @Path("{grupoId}")
 @Consumes(MediaType.TEXT_XML)
 public ResponseMessage updateGrupo(@PathParam("grupoId") String grupoId, UIEntity entity)
     throws RegistroNoEncontradoException, NumberFormatException {
   Grupo grupo = Grupo.getGrupoById(Long.parseLong(grupoId));
   grupo.setNombre(entity.get("nombre"));
   grupo.setDescripcion(entity.get("descripcion"));
   grupo.update();
   return new ResponseMessage(true);
 }
  private void setAtributosMultidioma(Enlace enlace, UIEntity entity) {
    for (EnlaceIdioma enlaceIdioma : enlace.getEnlacesIdiomas()) {
      if (enlaceIdioma.getDescripcion() != null && !enlaceIdioma.getDescripcion().equals("")) {
        entity.put(
            enlaceIdioma.getIdioma().getAcronimo(), "descripcion", enlaceIdioma.getDescripcion());
      }

      if (enlaceIdioma.getNombre() != null && !enlaceIdioma.getNombre().equals("")) {
        entity.put(enlaceIdioma.getIdioma().getAcronimo(), "nombre", enlaceIdioma.getNombre());
      }

      if (enlaceIdioma.getUrl() != null && !enlaceIdioma.getUrl().equals("")) {
        entity.put(enlaceIdioma.getIdioma().getAcronimo(), "url", enlaceIdioma.getUrl());
      }
    }
  }
  @POST
  @Produces(MediaType.TEXT_XML)
  @Consumes(MediaType.TEXT_XML)
  public List<UIEntity> insertPrioridad(UIEntity uiEntity)
      throws FechaFinPrioridadSuperiorAFechaInicioException,
          SeIndicaUnaHoraSinFechaAsociadaException, ParseException,
          InsertadoContenidoNoAutorizadoException, UsuarioNoAutenticadoException {
    ArrayList<UIEntity> result = new ArrayList<UIEntity>();

    String prioridad = uiEntity.get("prioridad");

    if (contenidoId == null || prioridad == null) {
      return result;
    }

    Persona persona = getPersona();

    Contenido contenido = new Contenido();
    contenido.setId(Long.parseLong(uiEntity.get("contenidoId")));

    PrioridadContenido prioridadContenido = new PrioridadContenido();
    prioridadContenido.setPrioridad(TipoPrioridadContenido.valueOf(prioridad));
    prioridadContenido.setUpoObjeto(contenido);
    prioridadContenido.setFechaInicio(getDate(uiEntity.get("fechaInicio")));
    prioridadContenido.setFechaFin(getDate(uiEntity.get("fechaFin")));
    prioridadContenido.setHoraInicio(getDateTime(uiEntity.get("horaInicio")));
    prioridadContenido.setHoraFin(getDateTime(uiEntity.get("horaFin")));

    prioridadContenidoService.insert(persona, prioridadContenido);

    UIEntity uiEntityRetorno = UIEntity.toUI(prioridadContenido);
    addAtributosNoPrimitivosToUI(prioridadContenido, uiEntityRetorno);

    return Collections.singletonList(uiEntityRetorno);
  }
  @GET
  @Path("{enlaceId}")
  @Produces(MediaType.TEXT_XML)
  public List<UIEntity> getEnlace(@PathParam("enlaceId") String enlaceId)
      throws RegistroNoEncontradoException, NumberFormatException {
    Enlace enlace = Enlace.getEnlace(Long.parseLong(enlaceId));

    UIEntity entity = UIEntity.toUI(enlace);
    setOCWEnlace(enlace, entity);
    setAtributosMultidioma(enlace, entity);

    return Collections.singletonList(entity);
  }
 private void addAtributosNoPrimitivosToUI(
     PrioridadContenido prioridadContenido, UIEntity uiEntity) {
   uiEntity.put("contenidoId", prioridadContenido.getUpoObjeto().getId());
   uiEntity.put("fechaInicio", prioridadContenido.getFechaInicio());
   uiEntity.put("fechaFin", prioridadContenido.getFechaFin());
   uiEntity.put("horaInicio", prioridadContenido.getHoraInicio());
   uiEntity.put("horaFin", prioridadContenido.getHoraFin());
   uiEntity.put("prioridad", prioridadContenido.getPrioridad());
 }
  @GET
  @Produces(MediaType.TEXT_XML)
  public List<UIEntity> getGruposByCursoId(@QueryParam("cursoId") String cursoId)
      throws RegistroNoEncontradoException, NumberFormatException {
    List<UIEntity> result = new ArrayList<UIEntity>();

    if (cursoId != null) {
      for (Grupo grupo : Grupo.getGruposByCursoId(Long.parseLong(cursoId))) {
        UIEntity entity = UIEntity.toUI(grupo);
        result.add(entity);
      }
    }

    return result;
  }
  @GET
  @Produces(MediaType.APPLICATION_XML)
  public List<UIEntity> getPrioridades() {
    List<UIEntity> uiListaPrioridades = new ArrayList<UIEntity>();

    List<PrioridadContenido> prioridades =
        prioridadContenidoService.getPrioridadesByContenido(Long.parseLong(contenidoId));

    for (PrioridadContenido prioridadContenido : prioridades) {
      UIEntity uiEntity = UIEntity.toUI(prioridadContenido);
      addAtributosNoPrimitivosToUI(prioridadContenido, uiEntity);
      uiListaPrioridades.add(uiEntity);
    }

    return uiListaPrioridades;
  }
  @GET
  @Produces(MediaType.TEXT_XML)
  public List<UIEntity> getEnlaces() {
    List<UIEntity> result = new ArrayList<UIEntity>();

    List<Enlace> listaEnlaces = Enlace.getEnlaces();

    for (Enlace enlace : listaEnlaces) {
      UIEntity enlaceUI = UIEntity.toUI(enlace);
      setOCWEnlace(enlace, enlaceUI);
      setAtributosMultidioma(enlace, enlaceUI);

      result.add(enlaceUI);
    }

    return result;
  }
  @POST
  @Produces(MediaType.TEXT_XML)
  @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  public UIEntity insertEnlace(MultivaluedMap<String, String> params)
      throws ParametrosObligatoriosException {
    Enlace enlace = new Enlace();
    enlace.setOrden(Long.parseLong(getParamString(params, "orden")));
    if (params.containsKey("ocw")) {
      enlace.setOcw(true);
    }

    Set<EnlaceIdioma> enlacesIdiomas = new HashSet<EnlaceIdioma>();

    List<Idioma> idiomas = Idioma.getIdiomasEdicion();

    for (Idioma idioma : idiomas) {
      String url = getParamString(params, "url__" + idioma.getAcronimo().toLowerCase());
      String nombre = getParamString(params, "nombre__" + idioma.getAcronimo().toLowerCase());
      String descripcion =
          getParamString(params, "descripcion__" + idioma.getAcronimo().toLowerCase());

      if (!url.equals("") || !nombre.equals("") || !descripcion.equals("")) {
        EnlaceIdioma enlaceIdioma = new EnlaceIdioma();
        enlaceIdioma.setUrl(url);
        enlaceIdioma.setNombre(nombre);
        enlaceIdioma.setDescripcion(descripcion);
        enlaceIdioma.setIdioma(idioma);
        enlaceIdioma.setEnlace(enlace);
        enlacesIdiomas.add(enlaceIdioma);
      }
    }
    enlace.setEnlacesIdiomas(enlacesIdiomas);

    enlace.compruebaCamposObligatorios(idiomas.get(0).getAcronimo());

    enlace = enlace.insert();

    UIEntity entity = UIEntity.toUI(enlace);

    return entity;
  }
  @POST
  @Produces(MediaType.APPLICATION_XML)
  public List<UIEntity> insertGrupo(UIEntity entity) throws RegistroNoEncontradoException {

    if (entity.get("cursoId") == null || entity.get("nombre") == null) {
      return new ArrayList<UIEntity>();
    }

    Curso curso = Curso.getCursoById(Long.parseLong(entity.get("cursoId")));
    Grupo grupo = new Grupo();
    grupo.setCurso(curso);
    grupo.setNombre(entity.get("nombre"));
    grupo.setOrden(Long.parseLong(entity.get("orden")));
    grupo = grupo.insert();

    return Collections.singletonList(UIEntity.toUI(grupo));
  }