DeleteMobileFolderOperation.java 4.97 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.ui.components.HtmlResponse
 *  com.day.cq.i18n.I18n
 *  javax.jcr.Session
 *  javax.servlet.http.HttpServletRequest
 *  org.apache.commons.lang3.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.api.resource.ResourceResolver
 *  org.apache.sling.servlets.post.Modification
 *  org.apache.sling.servlets.post.PostResponse
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.mobile.platform.impl.operations;

import com.adobe.cq.mobile.appcache.impl.AppCacheManager;
import com.adobe.cq.mobile.appcache.impl.AppCacheManagerAdapterFactory;
import com.adobe.cq.mobile.platform.MobileResource;
import com.adobe.cq.mobile.platform.MobileResourceLocator;
import com.adobe.cq.mobile.platform.MobileResourceType;
import com.adobe.cq.mobile.platform.impl.operations.DeleteMobileAppOperation;
import com.adobe.granite.ui.components.HtmlResponse;
import com.day.cq.i18n.I18n;
import java.util.List;
import javax.jcr.Session;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.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.api.resource.ResourceResolver;
import org.apache.sling.servlets.post.Modification;
import org.apache.sling.servlets.post.PostResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0, label="Deletes Mobile Applications")
@Service
@Properties(value={@Property(name="sling.post.operation", value={"mobileapps:deleteFolder"})})
public class DeleteMobileFolderOperation
extends DeleteMobileAppOperation {
    public static final String OPERATION_NAME = "deleteFolder";
    private static final Logger LOGGER = LoggerFactory.getLogger(DeleteMobileFolderOperation.class);

    @Override
    protected void perform(SlingHttpServletRequest request, HtmlResponse response, List<Modification> changes) {
        I18n i18n = new I18n((HttpServletRequest)request);
        String[] paths = request.getParameterValues("paths");
        if (paths != null) {
            for (String path : paths) {
                Resource folderResource = request.getResourceResolver().getResource(path);
                try {
                    this.deleteFolder(folderResource, request, response);
                    continue;
                }
                catch (Exception ex) {
                    if (request.getResourceResolver().hasChanges() && request.getResourceResolver().isLive()) {
                        request.getResourceResolver().revert();
                    }
                    LOGGER.error("Unable to delete folder", (Throwable)ex);
                    String message = i18n.get("Unable to delete folder");
                    String title = i18n.get("Error");
                    this.generateError(response, message, title, ex);
                }
            }
        }
    }

    private void deleteFolder(Resource folderResource, SlingHttpServletRequest request, HtmlResponse response) throws Exception {
        I18n i18n = new I18n((HttpServletRequest)request);
        MobileResourceLocator locator = (MobileResourceLocator)request.getResourceResolver().adaptTo(MobileResourceLocator.class);
        String errorMessage = "";
        Iterable<MobileResource> appInstances = locator.findResourcesByType(folderResource, MobileResourceType.INSTANCE.getType());
        for (MobileResource instance : appInstances) {
            Resource appResource = (Resource)instance.adaptTo(Resource.class);
            AppCacheManager appCacheManager = this.appCacheManagerAdapterFactory.getAdapter(request.getResourceResolver().adaptTo(Session.class), AppCacheManager.class);
            try {
                this.deleteApplication(appCacheManager, request.getResourceResolver(), (PostResponse)response, appResource);
            }
            catch (Exception ex) {
                errorMessage = errorMessage + " " + ex.getMessage();
            }
        }
        if (StringUtils.isNotEmpty((CharSequence)errorMessage)) {
            if (request.getResourceResolver().hasChanges() && request.getResourceResolver().isLive()) {
                request.getResourceResolver().revert();
            }
            String message = i18n.get("Unable to delete folder {0}", null, new Object[]{folderResource.getPath()});
            String title = i18n.get("Error");
            this.generateError(response, message, title);
        }
        request.getResourceResolver().delete(folderResource);
        response.onDeleted(folderResource.getPath());
    }
}