com.enonic.cms.store.dao.ResourceUsageDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.store.dao.ResourceUsageDaoImpl.java

Source

/*
 * Copyright 2000-2013 Enonic AS
 * http://www.enonic.com/license
 */
package com.enonic.cms.store.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;

import com.enonic.cms.core.content.contenttype.ContentTypeEntity;
import com.enonic.cms.core.resource.ResourceKey;
import com.enonic.cms.core.resource.ResourceReferencer;
import com.enonic.cms.core.resource.ResourceReferencerType;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.page.template.PageTemplateEntity;
import com.enonic.cms.core.structure.portlet.PortletEntity;

@Repository("resourceUsageDao")
public final class ResourceUsageDaoImpl implements ResourceUsageDao {
    @Autowired
    private PageTemplateDao pageTemplateDao;

    @Autowired
    private PortletDao contentObjectDao;

    @Autowired
    private SiteDao siteDao;

    @Autowired
    private ContentTypeEntityDao contentTypeDao;

    public HashMap<ResourceKey, Long> getUsageCountMap() {
        List<Object[]> allUsageCounts = getAllUsageCounts();
        HashMap<ResourceKey, Long> usageCountMap = new HashMap<ResourceKey, Long>();

        for (Object[] obj : allUsageCounts) {
            ResourceKey resourceKey = (ResourceKey) obj[0];
            Long count = (Long) obj[1];

            if (usageCountMap.containsKey(resourceKey)) {
                count += usageCountMap.get(resourceKey);
            }

            usageCountMap.put(resourceKey, count);
        }
        return usageCountMap;
    }

    private List<Object[]> getAllUsageCounts() {
        List<Object[]> allUsageCounts = new ArrayList<Object[]>();

        allUsageCounts.addAll(contentObjectDao.getResourceUsageCountStyle());
        allUsageCounts.addAll(contentObjectDao.getResourceUsageCountBorder());
        allUsageCounts.addAll(contentTypeDao.getResourceUsageCountCSS());
        allUsageCounts.addAll(pageTemplateDao.getResourceUsageCountStyle());
        allUsageCounts.addAll(pageTemplateDao.getResourceUsageCountCSS());
        allUsageCounts.addAll(getAllUsedBySites());

        return allUsageCounts;
    }

    private Multimap<ResourceKey, ResourceReferencer> getUsedBySites(final ResourceKey resourceKey) {
        Multimap<ResourceKey, ResourceReferencer> usedBy = HashMultimap.create();

        final List<SiteEntity> sites = siteDao.findAll();

        for (SiteEntity site : sites) {
            ResourceKey defaultCssKey = site.getDefaultCssKey();
            if (defaultCssKey != null && defaultCssKey.equals(resourceKey)) {
                usedBy.put(resourceKey, new ResourceReferencer(site, ResourceReferencerType.SITE_DEFAULT_CSS));
            }

            ResourceKey defaultLocalizationResource = site.getDefaultLocalizationResource();
            if (defaultLocalizationResource != null && defaultLocalizationResource.equals(resourceKey)) {
                usedBy.put(resourceKey,
                        new ResourceReferencer(site, ResourceReferencerType.SITE_DEFAULT_LOCALIZATION_RESOURCE));
            }

            ResourceKey deviceClassResolver = site.getDeviceClassResolver();
            if (deviceClassResolver != null && deviceClassResolver.equals(resourceKey)) {
                usedBy.put(resourceKey,
                        new ResourceReferencer(site, ResourceReferencerType.SITE_DEVICE_CLASS_RESOLVER));
            }

            ResourceKey localeResolver = site.getLocaleResolver();
            if (localeResolver != null && localeResolver.equals(resourceKey)) {
                usedBy.put(resourceKey, new ResourceReferencer(site, ResourceReferencerType.SITE_LOCALE_RESOLVER));
            }
        }

        return usedBy;
    }

    private List<Object[]> getAllUsedBySites() {
        List<Object[]> list = new ArrayList<Object[]>();

        final List<SiteEntity> sites = siteDao.findAll();

        for (SiteEntity site : sites) {
            ResourceKey defaultCssKey = site.getDefaultCssKey();
            if (defaultCssKey != null) {
                list.add(new Object[] { defaultCssKey, 1L });
            }

            ResourceKey defaultLocalizationResource = site.getDefaultLocalizationResource();
            if (defaultLocalizationResource != null) {
                list.add(new Object[] { defaultLocalizationResource, 1L });
            }

            ResourceKey deviceClassResolver = site.getDeviceClassResolver();
            if (deviceClassResolver != null) {
                list.add(new Object[] { deviceClassResolver, 1L });
            }

            ResourceKey localeResolver = site.getLocaleResolver();
            if (localeResolver != null) {
                list.add(new Object[] { localeResolver, 1L });
            }
        }

        return list;
    }

    public Multimap<ResourceKey, ResourceReferencer> getUsedBy(ResourceKey resourceKey) {

        Multimap<ResourceKey, ResourceReferencer> usedBy = HashMultimap.create();

        for (PortletEntity obj : contentObjectDao.findByStyle(resourceKey)) {
            usedBy.put(resourceKey, new ResourceReferencer(obj, ResourceReferencerType.CONTENT_OBJECT_STYLE));
        }
        for (PortletEntity obj : contentObjectDao.findByBorder(resourceKey)) {
            usedBy.put(resourceKey, new ResourceReferencer(obj, ResourceReferencerType.CONTENT_OBJECT_BORDER));
        }
        for (ContentTypeEntity obj : contentTypeDao.findByCSS(resourceKey)) {
            usedBy.put(resourceKey, new ResourceReferencer(obj, ResourceReferencerType.CONTENT_TYPE_CSS));
        }
        for (PageTemplateEntity obj : pageTemplateDao.findByStyle(resourceKey)) {
            usedBy.put(resourceKey, new ResourceReferencer(obj, ResourceReferencerType.PAGE_TEMPLATE_STYLE));
        }
        for (PageTemplateEntity obj : pageTemplateDao.findByCSS(resourceKey)) {
            usedBy.put(resourceKey, new ResourceReferencer(obj, ResourceReferencerType.PAGE_TEMPLATE_CSS));
        }

        usedBy.putAll(getUsedBySites(resourceKey));

        return usedBy;
    }

    public void updateResourceReference(ResourceKey oldResourceKey, ResourceKey newResourceKey) {
        contentObjectDao.updateResourceStyleReference(oldResourceKey, newResourceKey);
        contentObjectDao.updateResourceBorderReference(oldResourceKey, newResourceKey);
        contentTypeDao.updateResourceCSSReference(oldResourceKey, newResourceKey);
        pageTemplateDao.updateResourceStyleReference(oldResourceKey, newResourceKey);
        pageTemplateDao.updateResourceCSSReference(oldResourceKey, newResourceKey);
        siteDao.updateResourceCSSReference(oldResourceKey, newResourceKey);
    }

    public void updateResourceReferencePrefix(String oldPrefix, String newPrefix) {
        contentObjectDao.updateResourceStyleReferencePrefix(oldPrefix, newPrefix);
        contentObjectDao.updateResourceBorderReferencePrefix(oldPrefix, newPrefix);
        contentTypeDao.updateResourceCSSReferencePrefix(oldPrefix, newPrefix);
        pageTemplateDao.updateResourceStyleReferencePrefix(oldPrefix, newPrefix);
        pageTemplateDao.updateResourceCSSReferencePrefix(oldPrefix, newPrefix);
        siteDao.updateResourceCSSReferencePrefix(oldPrefix, newPrefix);
    }
}