WatchFolderConfigurationService.java 17.9 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Node
 *  javax.jcr.PathNotFoundException
 *  javax.jcr.Property
 *  javax.jcr.PropertyIterator
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.Value
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.jackrabbit.api.JackrabbitSession
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceResolverFactory
 *  org.apache.sling.jcr.api.SlingRepository
 *  org.apache.sling.settings.SlingSettingsService
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.aemfd.watchfolder.admin;

import com.adobe.aemfd.watchfolder.config.WatchFolderConfiguration;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.settings.SlingSettingsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
@Component(metatype=0, immediate=1, label="WatchFolderConfigurationService", description="WatchFolder Configuration Service")
@Service(value={WatchFolderConfigurationService.class})
public class WatchFolderConfigurationService {
    public static final String WATCH_FOLDER_NODE_NAME = "watchFolderNodeName";
    public static final String WATCH_FOLDER_ROOT = "/etc/fd/watchfolder/config/";
    public static final String FOLDER_PATH = "folderPath";
    private static String m_strLogFileServicePath = null;
    private static final Logger logger = LoggerFactory.getLogger(WatchFolderConfigurationService.class);
    private Object key;
    @Reference
    SlingRepository slingRepository;
    @Reference
    ResourceResolverFactory resourceResolverNew;
    SlingSettingsService slingSettingsService;
    @Reference
    ResourceResolverFactory resourceResolverFactory;
    ResourceResolver resourceResolver;

    public void createWatchFolderNode(WatchFolderConfiguration config, ResourceResolver resourceResolver) throws PathNotFoundException, RepositoryException, ParseException {
        JackrabbitSession session = (JackrabbitSession)resourceResolver.adaptTo(Session.class);
        Node watchFolderRootNode = session.getNode("/etc/fd/watchfolder/config/");
        Map<String, Object> parameters = config.getParams();
        Set<String> keySet = config.getParams().keySet();
        Node watchFolderNode = watchFolderRootNode.addNode((String)parameters.get("watchFolderNodeName"), "nt:unstructured");
        parameters.remove("watchFolderNodeName");
        for (String key : keySet) {
            if (parameters.get(key) == null || parameters.get(key) == "") continue;
            if (key.equals("stageFileExpirationDuration") || key.equals("pollInterval") || key.equals("waitTime") || key.equals("purgeDuration") || key.equals("batchSize")) {
                watchFolderNode.setProperty(key, Long.parseLong((String)parameters.get(key)));
                continue;
            }
            if (key.equals("deleteExpiredStageFileOnlyWhenThrottled") || key.equals("throttleOn") || key.equals("overwriteDuplicateFilename") || key.equals("preserveOnFailure") || key.equals("enabled") || key.equals("asynch")) {
                watchFolderNode.setProperty(key, Boolean.parseBoolean((String)parameters.get(key)));
                continue;
            }
            if (key.equals("payloadMapperFilter") || parameters.get("inputProcessorType").equals("service") && key.equals("inputProcessorId")) {
                watchFolderNode.setProperty(key, "(service.pid=" + (String)parameters.get(key) + ")");
                continue;
            }
            if (key.startsWith("param.")) {
                if (parameters.get(key) instanceof String) {
                    watchFolderNode.setProperty(key, (String)parameters.get(key));
                    continue;
                }
                if (parameters.get(key) instanceof Boolean) {
                    watchFolderNode.setProperty(key, ((Boolean)parameters.get(key)).booleanValue());
                    continue;
                }
                if (parameters.get(key) instanceof Calendar) {
                    watchFolderNode.setProperty(key, (Calendar)parameters.get(key));
                    continue;
                }
                if (parameters.get(key) instanceof Long) {
                    watchFolderNode.setProperty(key, ((Long)parameters.get(key)).longValue());
                    continue;
                }
                if (!(parameters.get(key) instanceof Double)) continue;
                watchFolderNode.setProperty(key, ((Double)parameters.get(key)).doubleValue());
                continue;
            }
            watchFolderNode.setProperty(key, (String)parameters.get(key));
        }
        session.save();
    }

    public void editExistingWatchfolder(WatchFolderConfiguration config, ResourceResolver resourceResolver) throws PathNotFoundException, RepositoryException, ParseException {
        JackrabbitSession session = (JackrabbitSession)resourceResolver.adaptTo(Session.class);
        Node watchFolderRootNode = session.getNode("/etc/fd/watchfolder/config/");
        Map<String, Object> parameters = config.getParams();
        Set<String> keySet = config.getParams().keySet();
        Node watchFolderNode = watchFolderRootNode.getNode((String)parameters.get("watchFolderNodeName"));
        parameters.remove("watchFolderNodeName");
        for (String key : keySet) {
            if (parameters.get(key) == null || parameters.get(key) == "") continue;
            if (key.equals("stageFileExpirationDuration") || key.equals("pollInterval") || key.equals("waitTime") || key.equals("purgeDuration") || key.equals("batchSize")) {
                watchFolderNode.setProperty(key, Long.parseLong((String)parameters.get(key)));
                continue;
            }
            if (key.equals("deleteExpiredStageFileOnlyWhenThrottled") || key.equals("throttleOn") || key.equals("overwriteDuplicateFilename") || key.equals("preserveOnFailure") || key.equals("enabled") || key.equals("asynch")) {
                watchFolderNode.setProperty(key, Boolean.parseBoolean((String)parameters.get(key)));
                continue;
            }
            if (key.equals("payloadMapperFilter") || parameters.get("inputProcessorType").equals("service") && key.equals("inputProcessorId")) {
                watchFolderNode.setProperty(key, "(service.pid=" + (String)parameters.get(key) + ")");
                continue;
            }
            if (key.startsWith("param.")) {
                if (parameters.get(key) instanceof String) {
                    watchFolderNode.setProperty(key, (String)parameters.get(key));
                    continue;
                }
                if (parameters.get(key) instanceof Boolean) {
                    watchFolderNode.setProperty(key, ((Boolean)parameters.get(key)).booleanValue());
                    continue;
                }
                if (parameters.get(key) instanceof Calendar) {
                    watchFolderNode.setProperty(key, (Calendar)parameters.get(key));
                    continue;
                }
                if (parameters.get(key) instanceof Long) {
                    watchFolderNode.setProperty(key, ((Long)parameters.get(key)).longValue());
                    continue;
                }
                if (!(parameters.get(key) instanceof Double)) continue;
                watchFolderNode.setProperty(key, ((Double)parameters.get(key)).doubleValue());
                continue;
            }
            watchFolderNode.setProperty(key, (String)parameters.get(key));
        }
        PropertyIterator properites = watchFolderNode.getProperties();
        while (properites.hasNext()) {
            String name;
            Property property = properites.nextProperty();
            if (property.isMultiple() || !(name = property.getName()).startsWith("param.") || property.getType() != 1 && property.getType() != 4 && property.getType() != 3 && property.getType() != 6 && property.getType() != 5 || keySet.contains(name)) continue;
            watchFolderNode.setProperty(name, (Value)null);
        }
        session.save();
    }

    public Map<String, Object> getEmptyWatchfolder() {
        HashMap<String, Object> map = new HashMap<String, Object>();
        WatchFolderConfiguration watchfolder = new WatchFolderConfiguration();
        if (watchfolder.getId() != null) {
            map.put("id", String.valueOf(watchfolder.getId()));
        }
        if (watchfolder.getFolderPath() != null) {
            map.put("folderPath", String.valueOf(watchfolder.getFolderPath()));
        }
        if (watchfolder.getInputProcessorType() != null) {
            map.put("inputProcessorType", String.valueOf(watchfolder.getInputProcessorType()));
        }
        if (watchfolder.getInputProcessorId() != null) {
            map.put("inputProcessorId", String.valueOf(watchfolder.getInputProcessorId()));
        }
        if (watchfolder.getRunModes() != null) {
            map.put("runModes", String.valueOf(watchfolder.getRunModes()));
        }
        if (watchfolder.getOutputFilePattern() != null) {
            map.put("outputFilePattern", String.valueOf(watchfolder.getOutputFilePattern()));
        }
        map.put("enabled", String.valueOf(watchfolder.isEnabled()));
        map.put("pollInterval", String.valueOf(watchfolder.getPollInterval()));
        if (watchfolder.getExcludeFilePattern() != null) {
            map.put("excludeFilePattern", String.valueOf(watchfolder.getExcludeFilePattern()));
        }
        if (watchfolder.getIncludeFilePattern() != null) {
            map.put("includeFilePattern", String.valueOf(watchfolder.getIncludeFilePattern()));
        }
        map.put("waitTime", String.valueOf(watchfolder.getWaitTime()));
        map.put("purgeDuration", String.valueOf(watchfolder.getPurgeDuration()));
        if (watchfolder.getInputFolderName() != null) {
            map.put("inputFolderName", String.valueOf(watchfolder.getInputFolderName()));
        }
        if (watchfolder.getStageFolderName() != null) {
            map.put("stageFolderName", String.valueOf(watchfolder.getStageFolderName()));
        }
        if (watchfolder.getFailureFolderName() != null) {
            map.put("failureFolderName", String.valueOf(watchfolder.getFailureFolderName()));
        }
        if (watchfolder.getResultFolderName() != null) {
            map.put("resultFolderName", String.valueOf(watchfolder.getResultFolderName()));
        }
        map.put("batchSize", String.valueOf(watchfolder.getBatchSize()));
        map.put("throttleOn", String.valueOf(watchfolder.isThrottleOn()));
        map.put("overwriteDuplicateFilename", String.valueOf(watchfolder.isOverwriteDuplicateFilename()));
        if (watchfolder.getPreserveFolderName() != null) {
            map.put("preserveFolderName", String.valueOf(watchfolder.getPreserveFolderName()));
        }
        map.put("preserveOnFailure", String.valueOf(watchfolder.isPreserveOnFailure()));
        if (watchfolder.getInputFilePattern() != null) {
            map.put("inputFilePattern", String.valueOf(watchfolder.getInputFilePattern()));
        }
        if (watchfolder.getPayloadMapperFilter() != null) {
            map.put("payloadMapperFilter", String.valueOf(watchfolder.getPayloadMapperFilter()));
        }
        map.put("asynch", String.valueOf(watchfolder.isAsynch()));
        map.put("stageFileExpirationDuration", String.valueOf(watchfolder.getStageFileExpirationDuration()));
        map.put("deleteExpiredStageFileOnlyWhenThrottled", String.valueOf(watchfolder.isDeleteExpiredStageFileOnlyWhenThrottled()));
        return map;
    }

    public Map<String, Object> getExistingWatchfolder(String name, ResourceResolver resourceResolver) throws PathNotFoundException, RepositoryException, ParseException {
        JackrabbitSession session = (JackrabbitSession)resourceResolver.adaptTo(Session.class);
        Node watchFolderRootNode = session.getNode("/etc/fd/watchfolder/config/");
        Node watchFolderNode = watchFolderRootNode.getNode(name);
        Map<String, Object> map = this.getEmptyWatchfolder();
        map.put("watchFolderNodeName", watchFolderNode.getName());
        PropertyIterator prIt = watchFolderNode.getProperties();
        ArrayList<String[]> customProperies = new ArrayList<String[]>();
        while (prIt.hasNext()) {
            Property prop = prIt.nextProperty();
            if (prop.getName().startsWith("param.")) {
                String customPropertyName = prop.getName().substring(prop.getName().indexOf(46) + 1);
                String[] currentProperty = new String[3];
                if (!prop.isMultiple()) {
                    Object customPropertyValue = null;
                    if (prop.getType() == 1) {
                        customPropertyValue = prop.getString();
                        currentProperty[0] = customPropertyName;
                        currentProperty[1] = "String";
                        currentProperty[2] = prop.getString();
                        customProperies.add(currentProperty);
                        continue;
                    }
                    if (prop.getType() == 6) {
                        customPropertyValue = prop.getBoolean();
                        currentProperty[0] = customPropertyName;
                        currentProperty[1] = "Boolean";
                        currentProperty[2] = prop.getString();
                        customProperies.add(currentProperty);
                        continue;
                    }
                    if (prop.getType() == 5) {
                        customPropertyValue = prop.getDate();
                        currentProperty[0] = customPropertyName;
                        currentProperty[1] = "Date";
                        currentProperty[2] = prop.getString();
                        customProperies.add(currentProperty);
                        continue;
                    }
                    if (prop.getType() == 3) {
                        customPropertyValue = prop.getLong();
                        currentProperty[0] = customPropertyName;
                        currentProperty[1] = "Long";
                        currentProperty[2] = prop.getString();
                        customProperies.add(currentProperty);
                        continue;
                    }
                    if (prop.getType() == 4) {
                        customPropertyValue = prop.getDouble();
                        currentProperty[0] = customPropertyName;
                        currentProperty[1] = "Double";
                        currentProperty[2] = prop.getString();
                        customProperies.add(currentProperty);
                        continue;
                    }
                    currentProperty[0] = customPropertyName;
                    currentProperty[1] = "NotSupported";
                    currentProperty[2] = "UnKnown";
                    customProperies.add(currentProperty);
                    continue;
                }
                currentProperty[0] = customPropertyName;
                currentProperty[1] = "NotSupported";
                currentProperty[2] = "UnKnown";
                customProperies.add(currentProperty);
                continue;
            }
            if (prop.getName().equals("payloadMapperFilter") || watchFolderNode.getProperty("inputProcessorType").getValue().getString().equals("service") && prop.getName().equals("inputProcessorId")) {
                String payloadMapperFilter = prop.getString();
                payloadMapperFilter = payloadMapperFilter.substring(13, payloadMapperFilter.length() - 1);
                map.put(prop.getName(), payloadMapperFilter);
                continue;
            }
            map.put(prop.getName(), prop.getString());
        }
        map.put("customProperty", customProperies);
        return map;
    }

    public void deleteWatchfolder(String name, ResourceResolver resourceResolver) throws PathNotFoundException, RepositoryException, ParseException {
        JackrabbitSession session = (JackrabbitSession)resourceResolver.adaptTo(Session.class);
        Node watchFolderRootNode = session.getNode("/etc/fd/watchfolder/config/");
        Node watchFolderNode = watchFolderRootNode.getNode(name);
        watchFolderNode.remove();
        session.save();
    }

    protected void bindSlingRepository(SlingRepository slingRepository) {
        this.slingRepository = slingRepository;
    }

    protected void unbindSlingRepository(SlingRepository slingRepository) {
        if (this.slingRepository == slingRepository) {
            this.slingRepository = null;
        }
    }

    protected void bindResourceResolverNew(ResourceResolverFactory resourceResolverFactory) {
        this.resourceResolverNew = resourceResolverFactory;
    }

    protected void unbindResourceResolverNew(ResourceResolverFactory resourceResolverFactory) {
        if (this.resourceResolverNew == resourceResolverFactory) {
            this.resourceResolverNew = null;
        }
    }

    protected void bindResourceResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        this.resourceResolverFactory = resourceResolverFactory;
    }

    protected void unbindResourceResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        if (this.resourceResolverFactory == resourceResolverFactory) {
            this.resourceResolverFactory = null;
        }
    }
}