All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anotheria.anosite.cms.action.SortTextDataAction Maven / Gradle / Ivy

There is a newer version: 4.3.2.1
Show newest version
package net.anotheria.anosite.cms.action;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.anotheria.anoprise.metafactory.MetaFactory;
import net.anotheria.anoprise.metafactory.MetaFactoryException;
import net.anotheria.anosite.gen.asresourcedata.data.LocalizationBundleDocument;
import net.anotheria.anosite.gen.asresourcedata.service.IASResourceDataService;
import net.anotheria.maf.action.ActionCommand;
import net.anotheria.maf.action.ActionMapping;
import net.anotheria.maf.json.JSONResponse;
import net.anotheria.util.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

/**
 * For now, sort only lines in localization bundle.
 *
 * @author ykalapusha
 */
public class SortTextDataAction extends BaseAction {
    /**
     * {@link IASResourceDataService} instance.
     */
    private final IASResourceDataService iasResourceDataService;

    /**
     * Default constructor.
     */
    public SortTextDataAction() {
        try {
            iasResourceDataService = MetaFactory.get(IASResourceDataService.class);
        } catch (MetaFactoryException e) {
            log.error("Cannot initialize LocalizationBundleSortLinesServlet");
            throw new RuntimeException("Cannot initialize LocalizationBundleSortLinesServlet", e);
        }
    }

    @Override
    public ActionCommand execute(ActionMapping actionMapping, HttpServletRequest req, HttpServletResponse res) throws Exception {
        JSONResponse response = new JSONResponse();
        try {
            String doc = req.getParameter("doc");
            String pId = req.getParameter("pId");
            if (StringUtils.isEmpty(pId) || StringUtils.isEmpty(doc)) {
                log.error("Cannot sort localization bundles data because pId or doc is empty");
                response.addError("Cannot sort localization bundles data because pId or doc is empty");
            } else {
                boolean isUpdated;
                switch (doc) {
                    case "LocalizationBundle":
                        isUpdated = sortLocalizationBundle(pId);
                        break;
                    default:
                        response.addError("Can not sort data for document: " + doc);
                        writeTextToResponse(res, response);
                        return null;
                }
                JSONObject data = new JSONObject();
                data.put("isUpdated", isUpdated);
                response.setData(data);
            }
        } catch (Exception e) {
            log.error("Cannot sort document data", e);
            response.addError("Cannot sort document. See logs");
        }
        writeTextToResponse(res, response);
        return null;
    }

    private boolean sortLocalizationBundle(String pId) throws Exception {
        LocalizationBundleDocument bundle = (LocalizationBundleDocument) iasResourceDataService.getLocalizationBundle(pId);
        Enumeration keys = bundle.getKeys();
        boolean isForUpdate = false;
        while (keys.hasMoreElements()) {
            String key = keys.nextElement();
            if (key.startsWith("messages_") && !StringUtils.isEmpty(bundle.getString(key))) {
                String messages = bundle.getString(key);
                List lines = Arrays.asList(messages.split("\n"));
                Collections.sort(lines);
                StringBuilder sb = new StringBuilder();
                for (String line: lines) {
                    sb.append(line).append("\n");
                }
                bundle.setString(key, sb.toString());
                isForUpdate = true;
            }
        }

        if (isForUpdate) {
            iasResourceDataService.updateLocalizationBundle(bundle);
            return true;
        } else {
            return false;
        }
    }

    private void writeTextToResponse(final HttpServletResponse res, final JSONResponse jsonResponse) throws IOException, JSONException {
        res.setCharacterEncoding("UTF-8");
        res.setContentType("application/json");
        PrintWriter writer = res.getWriter();
        writer.write(jsonResponse.toString());
        writer.flush();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy