EntityImportOperation.java 7.48 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.ui.components.HtmlResponse
 *  com.day.cq.i18n.I18n
 *  javax.servlet.http.HttpServletRequest
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.servlets.post.Modification
 *  org.slf4j.Logger
 */
package com.adobe.cq.mobile.dps.impl.operations;

import com.adobe.cq.mobile.dps.DPSEntity;
import com.adobe.cq.mobile.dps.DPSException;
import com.adobe.cq.mobile.dps.DPSObject;
import com.adobe.cq.mobile.dps.DPSProject;
import com.adobe.cq.mobile.dps.impl.DPSEntityImporter;
import com.adobe.cq.mobile.dps.impl.ImportStatus;
import com.adobe.cq.mobile.dps.impl.operations.MobilePublishAbstractOperation;
import com.adobe.granite.ui.components.HtmlResponse;
import com.day.cq.i18n.I18n;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.servlets.post.Modification;
import org.slf4j.Logger;

@Component(metatype=0, label="Experience Manager Mobile Import")
@Service
@Properties(value={@Property(name="sling.post.operation", value={"dpsapps:dpsImport"}), @Property(name="sling.servlet.methods", value={"POST"})})
public class EntityImportOperation
extends MobilePublishAbstractOperation {
    private static final String ENTITY_TYPE_ALL = "ALL";
    private static final String ENTITY_TYPE_ARTICLES = "articles";
    private static final String ENTITY_TYPE_BANNERS = "banners";
    private static final String ENTITY_TYPE_COLLECTIONS = "collections";
    private static final String[] validTypes = new String[]{"ALL", "articles", "banners", "collections"};
    private static final String PARAM_ENTITY_TYPE = "entityType";

    @Override
    protected void perform(SlingHttpServletRequest request, HtmlResponse response, List<Modification> modifications) {
        I18n i18n = new I18n((HttpServletRequest)request);
        Resource resource = request.getResource();
        String errorTitle = i18n.get("Error");
        String responseTitle = i18n.get("Experience Manager Mobile Items imported");
        String responseMessage = "";
        try {
            DPSObject dpsObject = this.getDPSObject(request);
            if (dpsObject == null) {
                String message = i18n.get("Invalid dps resource {0}", "resource path", new Object[]{resource.getPath()});
                throw new DPSException(message);
            }
            if (dpsObject instanceof DPSProject) {
                ImportStatus importStatus;
                DPSProject dpsProject = (DPSProject)dpsObject;
                String importType = request.getParameter("entityType");
                if (StringUtils.isEmpty((String)importType)) {
                    String message = i18n.get("Missing mandatory parameter: {0}", "parameter name", new Object[]{"entityType"});
                    this.generateError(response, message, errorTitle);
                    return;
                }
                if (!Arrays.asList(validTypes).contains(importType)) {
                    String validList = StringUtils.join((Object[])validTypes, (String)", ");
                    String message = i18n.get("Invalid entityType parameter: {0}.  Should be one of {1}", "parameter name", new Object[]{importType, validList});
                    this.generateError(response, message, errorTitle);
                    return;
                }
                String entitiesName = this.getItemsString(i18n, importType);
                boolean all = importType.equals("ALL");
                DPSEntityImporter dpsEntityImporter = this.getDPSEntityImporter(request);
                ImportStatus cummulativeImportStatus = new ImportStatus();
                if (all || importType.equals("articles")) {
                    importStatus = dpsEntityImporter.importDPSArticles(dpsProject);
                    cummulativeImportStatus.merge(importStatus);
                }
                if (all || importType.equals("banners")) {
                    importStatus = dpsEntityImporter.importDPSBanners(dpsProject);
                    cummulativeImportStatus.merge(importStatus);
                }
                if (all || importType.equals("collections")) {
                    importStatus = dpsEntityImporter.importDPSCollections(dpsProject);
                    cummulativeImportStatus.merge(importStatus);
                }
                if (!cummulativeImportStatus.getSkipped().isEmpty()) {
                    List badNames = cummulativeImportStatus.getSkipped();
                    String status = "" + badNames.size() + "/" + cummulativeImportStatus.getTotalProcessed();
                    throw new DPSException("Failed to import " + status + ". The following have invalid names and could not be imported; " + StringUtils.join((Object[])badNames.toArray()));
                }
                responseTitle = i18n.get("Experience Manager Mobile Items imported");
                responseMessage = i18n.get("{0} for {1} have been imported.", "plural, localized entity name (i.e. Articles) and project path", new Object[]{entitiesName, dpsProject.getPath()});
            } else if (dpsObject instanceof DPSEntity) {
                DPSEntityImporter dpsEntityImporter = this.getDPSEntityImporter(request);
                ImportStatus importStatus = dpsEntityImporter.importDPSEntity((DPSEntity)dpsObject);
                responseTitle = i18n.get("Experience Manager Mobile Item imported");
                responseMessage = i18n.get("{0} has been imported.", "entity title", new Object[]{dpsObject.getTitle()});
            }
            response.setPath(resource.getPath());
            this.generateResponse(response, 200, responseMessage, responseTitle, request.getPathInfo(), "");
        }
        catch (Exception ex) {
            String cause = this.getCauseMessage(ex);
            if (StringUtils.isEmpty((String)cause)) {
                cause = ex.getLocalizedMessage();
            }
            if (StringUtils.isEmpty((String)cause)) {
                cause = ex.getClass().getName();
            }
            String resourceName = resource == null ? "" : resource.getName();
            String message = i18n.get("Error importing {0}: {1}.", "plural, localized entity name (i.e. Articles), project name and root cause", new Object[]{resourceName, cause});
            this.getLogger().error(message, (Throwable)ex);
            this.generateError(response, message, errorTitle, ex);
        }
    }

    private String getItemsString(I18n i18n, String importType) {
        String entitiesName = i18n.get("Items");
        if (importType.equals("ALL")) {
            entitiesName = i18n.get("All entities");
        } else if (importType.equals("articles")) {
            entitiesName = i18n.get("Articles");
        } else if (importType.equals("banners")) {
            entitiesName = i18n.get("Banners");
        } else if (importType.equals("collections")) {
            entitiesName = i18n.get("Collections");
        }
        return entitiesName;
    }
}