TesteServlet.java

 avatar
unknown
java
a year ago
3.5 kB
13
Indexable
package com.trilha03.core.servlets;

import com.trilha03.core.models.ModelTeste;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.models.factory.ModelFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component(immediate = true, service = javax.servlet.Servlet.class, property = {
        "sling.servlet.methods=" + "POST",
        "sling.servlet.paths=" + "/bin/TesteServlet",
        "sling.servlet.extensions=" + "json"
})
public class TesteServlet extends SlingAllMethodsServlet {

    private static final long serialVersionUID = 1L;
    private static final Logger LOG = LoggerFactory.getLogger(TesteServlet.class);

    @Reference
    private ModelFactory modelFactory;

    @Override
    protected void doPost(final SlingHttpServletRequest request, final SlingHttpServletResponse response) throws ServletException, IOException {
        // Extracts data directly from parameters, avoiding premature reading of the request body
        String name = request.getParameter("name");
        String ageParam = request.getParameter("age");
        String componentPath = request.getParameter("componentPath"); // Parameter name

        // Validation of the age parameter
        int age;
        try {
            age = Integer.parseInt(ageParam);
        } catch (NumberFormatException e) {
            handleBadRequest(response, "Invalid age parameter. Provide a valid integer.");
            return;
        }

        // Gets the target resource based on the provided component path
        Resource componentResource = request.getResourceResolver().getResource(componentPath);

        // Checks if the component resource was found
        if (componentResource == null) {
            LOG.error("Component resource not found for the path: {}", componentPath);
            handleBadRequest(response, "Component resource not found.");
            return;
        }

        // Adapts the component resource to ModelTeste using the ModelFactory
        ModelTeste modelTeste = modelFactory.createModel(componentResource, ModelTeste.class);

        // Updates the properties of ModelTeste
        modelTeste.setNome(name); // Updated method name
        modelTeste.setIdade(age); // Updated method age

        // Confirms the changes
        try {
            modelTeste.updateProperties();
            LOG.info("AEM node properties updated successfully.");
            response.getWriter().write("AEM node properties updated successfully.");
        } catch (Exception e) {
            LOG.error("Error updating AEM node properties: {}", e);
            handleServerError(response, "Error updating AEM node properties.");
        }
    }

    private void handleBadRequest(SlingHttpServletResponse response, String message) throws IOException {
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        response.getWriter().write(message);
    }

    private void handleServerError(SlingHttpServletResponse response, String message) throws IOException {
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        response.getWriter().write(message);
    }
}
Editor is loading...
Leave a Comment