/* * Copyright 2014 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amediamanager.controller; import java.beans.PropertyEditorSupport; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.context.WebApplicationContext; import com.amazonaws.auth.BasicSessionCredentials; import com.amediamanager.config.ConfigurationSettings; import com.amediamanager.config.EditableConfigurationProperties; import com.amediamanager.config.EditableConfigurationProperty; import com.amediamanager.config.ProvisionableResource; import com.amediamanager.config.S3ConfigurationProvider; import com.amediamanager.config.ToggleableConfigurationProperty; import com.amediamanager.domain.Privacy; import com.amediamanager.util.PrivacyEditor; @Controller public class ConfigController { @Autowired private WebApplicationContext context; @Autowired private ConfigurationSettings config; @Autowired private EditableConfigurationProperties editableConfigurationProperties; @RequestMapping(value="/config", method = RequestMethod.GET) public String config(ModelMap model) { config.refreshConfigurationProvider(); model.addAttribute("templateName", "config"); model.addAttribute("configLoadedFrom", config.getConfigurationProvider().getPrettyName()); model.addAttribute("appConfig", config.toString()); model.addAttribute("accessKey", config.getAWSCredentialsProvider().getCredentials().getAWSAccessKeyId()); model.addAttribute("isToken", config.getAWSCredentialsProvider().getCredentials() instanceof BasicSessionCredentials); // Inject info about S3 config if(config.getConfigurationProvider() instanceof S3ConfigurationProvider) { model.addAttribute("isS3Config", true); model.addAttribute("configBucket", ((S3ConfigurationProvider)config.getConfigurationProvider()).getBucket()); model.addAttribute("configKey", ((S3ConfigurationProvider)config.getConfigurationProvider()).getKey()); } // Handle ProvisionableResources Map<String, ProvisionableResource> provisionableResources = context.getBeansOfType(ProvisionableResource.class); // Let the view know if there are any unprovisioned resources Boolean allProvisioned = true; for (Map.Entry<String, ProvisionableResource> entry : provisionableResources.entrySet()) { if(entry.getValue().getState() != ProvisionableResource.ProvisionState.PROVISIONED) { allProvisioned = false; break; } } // Set provisionables model.addAttribute("allProvisioned", allProvisioned); model.addAttribute("prs", provisionableResources); // Set EditableConfigurationProperties editableConfigurationProperties.initialize(); model.addAttribute("ecp", editableConfigurationProperties); return "base"; } @RequestMapping(value="/config/provision/{provisionableBeanName}", method=RequestMethod.GET) public String provision(ModelMap model, @PathVariable String provisionableBeanName) { ProvisionableResource pr = (ProvisionableResource)context.getBean(provisionableBeanName); pr.provision(); return config(model); } @RequestMapping(value="/config/edit", method=RequestMethod.POST) public String configure(ModelMap model, @ModelAttribute EditableConfigurationProperties editableConfigurationProperties) { for(EditableConfigurationProperty ecp : editableConfigurationProperties.getConfigProps()) { config.getConfigurationProvider().persistNewProperty(ecp.getPropertyName(), ecp.getPropertyValue()); } return "redirect:/config"; } @InitBinder public void initPrivacyBinder(final WebDataBinder dataBinder) { // Bind tags dataBinder.registerCustomEditor(ConfigurationSettings.ConfigProps.class, new ConfigPropertyEditor()); } class ConfigPropertyEditor extends PropertyEditorSupport { public void setAsText(String text) { setValue(ConfigurationSettings.ConfigProps.valueOf(text)); } } }