Package org.fluxtream.connectors.sms_backup

Source Code of org.fluxtream.connectors.sms_backup.SmsBackupPhotoFacetFinderStrategy

package org.fluxtream.connectors.sms_backup;

import java.util.List;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.fluxtream.core.TimeInterval;
import org.fluxtream.core.connectors.Connector;
import org.fluxtream.core.connectors.ObjectType;
import org.fluxtream.core.domain.AbstractFacet;
import org.fluxtream.core.domain.ApiKey;
import org.fluxtream.core.domain.PhotoFacetFinderStrategy;
import org.fluxtream.core.domain.TagFilter;
import org.jetbrains.annotations.Nullable;
import org.springframework.stereotype.Component;

@Component
public class SmsBackupPhotoFacetFinderStrategy implements PhotoFacetFinderStrategy {

    @PersistenceContext
    private EntityManager em;

    @Override
    public List<AbstractFacet> findAll(final ApiKey apiKey, final ObjectType objectType, final TimeInterval timeInterval) {
        return findAll(apiKey, objectType, timeInterval, null);
    }

    @Override
    public List<AbstractFacet> findBefore(final ApiKey apiKey, final ObjectType objectType, final long timeInMillis, final int desiredCount) {
        return findBefore(apiKey, objectType, timeInMillis, desiredCount, null);
    }

    @Override
    public List<AbstractFacet> findAfter(final ApiKey apiKey, final ObjectType objectType, final long timeInMillis, final int desiredCount) {
        return findAfter(apiKey, objectType, timeInMillis, desiredCount, null);
    }

    @Override
    public List<AbstractFacet> findAll(final ApiKey apiKey, final ObjectType objectType, final TimeInterval timeInterval, @Nullable final TagFilter tagFilter) {
        Query query = getQuery(apiKey,objectType,timeInterval.getStart(),timeInterval.getEnd(),null,null,tagFilter);
        return query.getResultList();
    }

    @Override
    public List<AbstractFacet> findBefore(final ApiKey apiKey, final ObjectType objectType, final long timeInMillis, final int desiredCount, @Nullable final TagFilter tagFilter) {
        Query query = getQuery(apiKey,objectType,null,timeInMillis,desiredCount,"ORDER BY facet.start DESC",tagFilter);
        return query.getResultList();
    }

    @Override
    public List<AbstractFacet> findAfter(final ApiKey apiKey, final ObjectType objectType, final long timeInMillis, final int desiredCount, @Nullable final TagFilter tagFilter) {
        Query query = getQuery(apiKey,objectType,timeInMillis,null,desiredCount,"ORDER BY facet.start ASC",tagFilter);
        return query.getResultList();
    }

    @Override
    public AbstractFacet findOldest(final ApiKey apiKey, final ObjectType objectType) {
        Query query = getQuery(apiKey,objectType,null,null,1,"ORDER BY facet.start ASC",null);
        List facets = query.getResultList();
        if (facets.isEmpty())
            return null;
        return (AbstractFacet) facets.get(0);
    }

    @Override
    public AbstractFacet findLatest(final ApiKey apiKey, final ObjectType objectType) {
        Query query = getQuery(apiKey,objectType,null,null,1,"ORDER BY facet.start DESC",null);
        List facets = query.getResultList();
        if (facets.isEmpty())
            return null;
        return (AbstractFacet) facets.get(0);
    }

    private Query getQuery(final ApiKey apiKey, final ObjectType objectType, @Nullable final Long startTime, @Nullable final Long endTime, @Nullable Integer limit, @Nullable String sortStatement, @Nullable final TagFilter tagFilter){
        final Class<? extends AbstractFacet> facetClass = getFacetClass(apiKey.getConnector(), objectType);
        final Entity entity = facetClass.getAnnotation(Entity.class);
        String queryString = "SELECT facet FROM " + entity.name() + " facet WHERE facet.apiKeyId=" + apiKey.getId() +
                             " AND facet.hasAttachments=true AND facet.attachmentMimeTypes LIKE '%image%'";
        if (startTime != null){
            queryString += " AND facet.start>=" + startTime;
        }
        if (endTime != null)
            queryString +=  " AND facet.end<=" + endTime;

        if (tagFilter != null){
            queryString += " AND (" + tagFilter.getWhereClause() + ")";
        }
        if (sortStatement != null){
            queryString += " " + sortStatement;
        }
        if (limit != null){
            queryString += " LIMIT " + limit;
        }

        return em.createQuery(queryString);



    }

    private Class<? extends AbstractFacet> getFacetClass(final Connector connector, final ObjectType objectType) {
        return objectType != null ? objectType.facetClass() : connector.facetClass();
    }
}
TOP

Related Classes of org.fluxtream.connectors.sms_backup.SmsBackupPhotoFacetFinderStrategy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.