AudienceManagerItemImpl.java 5.9 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.jcr.JcrUtil
 *  com.day.cq.wcm.api.Page
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.PropertyIterator
 *  javax.jcr.RepositoryException
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.aam.client;

import com.adobe.cq.aam.client.AudienceManagerFolderImpl;
import com.adobe.cq.aam.client.RootFolder;
import com.adobe.cq.aam.client.spi.AudienceManagerConfiguration;
import com.adobe.cq.aam.client.spi.AudienceManagerFolder;
import com.adobe.cq.aam.client.spi.AudienceManagerFolders;
import com.adobe.cq.aam.client.spi.AudienceManagerItem;
import com.adobe.cq.aam.client.spi.InvalidItemPage;
import com.day.cq.commons.jcr.JcrUtil;
import com.day.cq.wcm.api.Page;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AudienceManagerItemImpl
implements AudienceManagerItem {
    private static final Logger LOGGER = LoggerFactory.getLogger(AudienceManagerItemImpl.class);
    private Map<String, Object> properties = new HashMap<String, Object>();
    private long itemId;
    private AudienceManagerFolder parent;
    private long folderId;
    private String title;
    private String name;
    private String template;
    private Page segmentPage;

    public AudienceManagerItemImpl(final JSONObject json, AudienceManagerFolders folders, String itemTemplate) throws JSONException {
        this.itemId = json.getLong("sid");
        this.folderId = json.getLong("folderId");
        this.parent = folders.getFolder(this.folderId);
        this.title = json.getString("name");
        this.name = JcrUtil.createValidName((String)this.title);
        this.template = itemTemplate;
        for (String k : new Iterable<String>(){

            @Override
            public Iterator<String> iterator() {
                return json.keys();
            }
        }) {
            this.properties.put("aam_" + k, json.get(k));
        }
    }

    public AudienceManagerItemImpl(Page page) throws InvalidItemPage {
        Resource resource = page.getContentResource();
        if (!"cq/personalization/audiencemanager/components/segmentation/aamsegmentpage".equals(resource.getResourceType())) {
            throw new InvalidItemPage("Page is not a Audience Manager Segment, incorrect resource type. " + page.getPath() + " " + resource.getResourceType());
        }
        try {
            Node node = (Node)resource.adaptTo(Node.class);
            PropertyIterator pi = node.getProperties();
            while (pi.hasNext()) {
                Property p = pi.nextProperty();
                String pname = p.getName();
                if (!pname.startsWith("aam_")) continue;
                this.properties.put(pname, this.getValue(p));
            }
        }
        catch (RepositoryException e) {
            LOGGER.debug(e.getMessage(), (Throwable)e);
        }
        if (!this.properties.containsKey("aam_sid")) {
            throw new InvalidItemPage("Page is not a Audience Manager Segment, no segment id " + page.getPath());
        }
        this.itemId = this.toLong(this.properties.get("aam_sid"));
        if (this.properties.containsKey("aam_folderId")) {
            this.folderId = this.toLong(this.properties.get("aam_folderId"));
        }
        this.title = (String)this.properties.get("aam_name");
        if (this.title != null) {
            this.name = JcrUtil.createValidName((String)this.title);
        }
        this.segmentPage = page.getParent();
    }

    private long toLong(Object object) {
        if (object instanceof Long) {
            return (Long)object;
        }
        if (object instanceof Double) {
            double d = (Double)object;
            return (long)d;
        }
        LOGGER.debug("Failed, object is {} {} ", object, object.getClass());
        return Long.parseLong(String.valueOf(object));
    }

    private Object getValue(Property p) throws RepositoryException {
        if (p.getType() == 3 || p.getType() == 4) {
            return p.getLong();
        }
        return p.getString();
    }

    @Override
    public long getItemId() {
        return this.itemId;
    }

    @Override
    public Set<Map.Entry<String, Object>> getEntrySet() {
        return this.properties.entrySet();
    }

    @Override
    public long getFolderId() {
        return this.folderId;
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public String getTemplate() {
        return this.template;
    }

    @Override
    public String getTitle() {
        return this.title;
    }

    @Override
    public String getAbsolutePath(AudienceManagerConfiguration config) {
        if (this.segmentPage != null) {
            return this.segmentPage.getPath();
        }
        return this.parent.getAbsolutePath(config) + "/" + this.name;
    }

    @Override
    public AudienceManagerFolder getParent() {
        if (this.segmentPage != null) {
            try {
                return new AudienceManagerFolderImpl(this.segmentPage.getParent());
            }
            catch (InvalidItemPage e) {
                return new RootFolder(this.segmentPage.getParent());
            }
        }
        return this.parent;
    }

    @Override
    public String getProperty(String segmentPropertyName) {
        Object value = this.properties.get(segmentPropertyName);
        if (value != null) {
            return String.valueOf(value);
        }
        return null;
    }

}