All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.anrisoftware.sscontrol.httpd.nginx.staticcache.linux.AbstractStaticCacheConfig.groovy Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013-2015 Erwin Müller 
 *
 * This file is part of sscontrol-httpd-nginx.
 *
 * sscontrol-httpd-nginx is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Affero General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or (at your
 * option) any later version.
 *
 * sscontrol-httpd-nginx is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with sscontrol-httpd-nginx. If not, see .
 */
package com.anrisoftware.sscontrol.httpd.nginx.staticcache.linux

import javax.inject.Inject

import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.builder.ToStringBuilder
import org.joda.time.Duration

import com.anrisoftware.propertiesutils.ContextProperties
import com.anrisoftware.sscontrol.core.service.LinuxScript
import com.anrisoftware.sscontrol.httpd.domain.Domain
import com.anrisoftware.sscontrol.httpd.nginx.nginx.linux.FindServiceConfigWorkerFactory
import com.anrisoftware.sscontrol.httpd.nginx.nginxconfig.NginxConfigListFactory
import com.anrisoftware.sscontrol.httpd.staticservice.StaticCacheService
import com.anrisoftware.sscontrol.httpd.webservice.WebService

/**
 * Static files cache configuration.
 *
 * @author Erwin Mueller, [email protected]
 * @since 1.0
 */
abstract class AbstractStaticCacheConfig {

    private LinuxScript parent

    @Inject
    private FindServiceConfigWorkerFactory findServiceConfigWorkerFactory

    @Inject
    private NginxConfigListFactory configListFactory

    /**
     * Setups the defaults properties of the service.
     *
     * @param service
     *            the {@link StaticCacheService} service.
     *
     * @see #getDefaultIndexFiles()
     * @see #getDefaultExpiresDuration()
     */
    void setupDefaults(StaticCacheService service) {
        if (service.indexFiles == null) {
            service.index files: defaultIndexFiles.join(",")
        }
        if (service.expiresDuration == null) {
            service.expires defaultExpiresDuration
        }
    }

    /**
     * Creates the domain configuration.
     *
     * @param domain
     *            the {@link Domain} domain.
     *
     * @param refDomain
     *            the referenced {@link Domain} or {@code null}.
     *
     * @param service
     *            the {@link WebService} service.
     *
     * @param config
     *            the {@link List} of the domain configuration.
     */
    abstract void deployDomain(Domain domain, Domain refDomain, WebService service, List config)

    /**
     * Creates the domain configuration and configures the service.
     *
     * @param domain
     *            the {@link Domain} domain.
     *
     * @param service
     *            the {@link WebService} service.
     *
     * @param config
     *            the {@link List} of the domain configuration.
     */
    abstract void deployService(Domain domain, WebService service, List config)

    /**
     * Attaches the references services configuration.
     *
     * @param domain
     *            the {@link Domain} domain.
     *
     * @param service
     *            the {@link StaticCacheService} service.
     *
     * @param config
     *            the {@link List} of the domain configuration.
     */
    void attachReferencedServices(Domain domain, StaticCacheService service, List config) {
        if (service.includeRefs == null) {
            return
        }
        service.includeRefs.each { String ref ->
            WebService refservice = domain.services.find { WebService it ->
                it.id == ref
            }
            if (refservice != null) {
                attachReferencedService domain, service, refservice, config
            }
        }
    }

    void attachReferencedService(Domain domain, StaticCacheService service, WebService refservice, List config) {
        def location = getLocationConfig domain, service
        def webconfig = findServiceConfigWorkerFactory.create(script).findServiceConfig profile, refservice
        def list = []
        webconfig.deployDomain domain, null, refservice, list
        String[] split = StringUtils.split list.get(0), "\n"
        int i = 0
        for (; i < split.length; i++) {
            if (split[i].startsWith("location")) {
                break
            }
        }
        if (i == split.length - 1) {
            return
        }
        split[i] = location
        def str = StringUtils.join split, "\n"
        config << str
    }

    /**
     * Returns the static files service location.
     *
     * @param service
     *            the {@link StaticCacheService}.
     *
     * @return the location.
     */
    String staticLocation(StaticCacheService service) {
        String location = service.alias == null ? "" : service.alias
        if (!location.empty && !location.startsWith("/")) {
            location = "/$location"
        }
        return location
    }

    /**
     * Returns the location configuration.
     *
     * @param domain
     *            the {@link Domain} domain.
     *
     * @param service
     *            the {@link StaticCacheService} service.
     */
    abstract String getLocationConfig(Domain domain, StaticCacheService service)

    /**
     * Returns the default index file names, for
     * example {@code "index.$geo.html, index.htm, index.html".}
     *
     * 
    *
  • profile property {@code "static_cache_default_index_files"}
  • *
* * @see #getStaticCacheProperties() */ List getDefaultIndexFiles() { profileListProperty "static_cache_default_index_files", staticCacheProperties } /** * Returns the default expires duration, for * example {@code "P1D".} * *
    *
  • profile property {@code "static_cache_default_expires_duration"}
  • *
* * @see #getStaticCacheProperties() */ Duration getDefaultExpiresDuration() { profileDurationProperty "static_cache_default_expires_duration", staticCacheProperties } /** * Returns the static files names, for * example {@code "jpg, png, gif, jpeg, svg, html, htm, css, js, mp3, wav, swf, mov, doc, pdf, xls, ppt, docx, pptx, xlsx"} * *
    *
  • profile property {@code "static_cache_files"}
  • *
* * @see #getStaticCacheProperties() */ List getStaticFiles() { profileListProperty "static_cache_files", staticCacheProperties } /** * Returns the static files cache properties. * * @return the {@link ContextProperties}. */ abstract ContextProperties getStaticCacheProperties() /** * Returns the service name. */ abstract String getServiceName() /** * Returns the profile name. */ abstract String getProfile() /** * Sets the parent script. */ void setScript(LinuxScript script) { this.parent = script } /** * Returns the parent script. */ LinuxScript getScript() { parent } /** * Delegates missing properties to the parent script. */ def propertyMissing(String name) { parent.getProperty name } /** * Delegates missing methods to the parent script. */ def methodMissing(String name, def args) { parent.invokeMethod name, args } @Override public String toString() { new ToStringBuilder(this) .append("service name", getServiceName()) .append("profile name", getProfile()).toString(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy