001    package org.kuali.common.deploy.env.spring;
002    
003    import org.kuali.common.deploy.dns.model.DnsContext;
004    import org.kuali.common.deploy.dns.model.DnsUtils;
005    import org.kuali.common.deploy.env.model.DeployEnvironment;
006    import org.kuali.common.util.Assert;
007    import org.kuali.common.util.project.model.Project;
008    import org.kuali.common.util.project.spring.AutowiredProjectConfig;
009    import org.kuali.common.util.spring.env.EnvironmentService;
010    import org.kuali.common.util.spring.service.SpringServiceConfig;
011    import org.springframework.beans.factory.annotation.Autowired;
012    import org.springframework.context.annotation.Configuration;
013    import org.springframework.context.annotation.Import;
014    
015    @Configuration
016    @Import({ SpringServiceConfig.class, AutowiredProjectConfig.class })
017    public class DefaultDeployEnvironmentConfig implements DeployEnvironmentConfig {
018    
019            public static final String KUALI_DOMAIN = "kuali.org";
020    
021            private final String DOMAIN_KEY = "dns.domain";
022            private final String PREFIX_KEY = "dns.prefix";
023            private final String SUBDOMAIN_KEY = "dns.subdomain";
024            private final String HOSTNAME_KEY = "dns.hostname";
025    
026            private final String GROUP_ID_CODE_KEY = "project.groupId.code";
027            private final String SEQUENCE_KEY = "deploy.env";
028            private final String NAME_KEY = "deploy.env.name";
029    
030            private final String DEFAULT_ENV_PREFIX = "env";
031    
032            @Autowired
033            EnvironmentService env;
034    
035            @Autowired
036            Project project;
037    
038            @Override
039            public DeployEnvironment deployEnvironment() {
040                    int sequence = env.getInteger(SEQUENCE_KEY); // No default value, they must supply "deploy.env"
041                    String defaultName = DEFAULT_ENV_PREFIX + sequence;
042                    String name = env.getString(NAME_KEY, defaultName);
043                    DnsContext dns = getDnsContext(name);
044                    return new DeployEnvironment(project.getGroupId(), sequence, name, dns);
045            }
046    
047            protected DnsContext getDnsContext(String name) {
048                    String prefix = env.getString(PREFIX_KEY, name);
049                    String defaultSubdomain = project.getProperties().getProperty(GROUP_ID_CODE_KEY);
050                    Assert.noBlanks(defaultSubdomain);
051                    String subdomain = env.getString(SUBDOMAIN_KEY, defaultSubdomain);
052                    String domain = env.getString(DOMAIN_KEY, KUALI_DOMAIN);
053                    String defaultHostname = DnsUtils.getHostname(prefix, subdomain, domain);
054                    String hostname = env.getString(HOSTNAME_KEY, defaultHostname);
055                    return new DnsContext.Builder(prefix, subdomain, domain).hostname(hostname).build();
056            }
057    }