Search in sources :

Example 6 with ResourceLoader

use of cn.taketoday.core.io.ResourceLoader in project today-infrastructure by TAKETODAY.

the class OnResourceCondition method getMatchOutcome.

@Override
public ConditionOutcome getMatchOutcome(ConditionEvaluationContext context, AnnotatedTypeMetadata metadata) {
    MultiValueMap<String, Object> attributes = metadata.getAllAnnotationAttributes(ConditionalOnResource.class.getName(), true);
    ResourceLoader loader = context.getResourceLoader();
    List<String> locations = new ArrayList<>();
    collectValues(locations, attributes.get("value"));
    Assert.isTrue(!locations.isEmpty(), "@ConditionalOnResource annotations must specify at least one resource location");
    ArrayList<String> missing = new ArrayList<>();
    for (String location : locations) {
        String resource = context.getEnvironment().resolvePlaceholders(location);
        if (!loader.getResource(resource).exists()) {
            missing.add(location);
        }
    }
    if (!missing.isEmpty()) {
        return ConditionOutcome.noMatch(ConditionMessage.forCondition(ConditionalOnResource.class).didNotFind("resource", "resources").items(Style.QUOTE, missing));
    }
    return ConditionOutcome.match(ConditionMessage.forCondition(ConditionalOnResource.class).found("location", "locations").items(locations));
}
Also used : ResourceLoader(cn.taketoday.core.io.ResourceLoader) ArrayList(java.util.ArrayList)

Example 7 with ResourceLoader

use of cn.taketoday.core.io.ResourceLoader in project today-infrastructure by TAKETODAY.

the class TestPropertySourceUtilsTests method addPropertiesFilesToEnvironmentWithSinglePropertyFromVirtualFile.

@Test
void addPropertiesFilesToEnvironmentWithSinglePropertyFromVirtualFile() {
    ConfigurableEnvironment environment = new MockEnvironment();
    PropertySources propertySources = environment.getPropertySources();
    propertySources.remove(MockPropertySource.MOCK_PROPERTIES_PROPERTY_SOURCE_NAME);
    assertThat(propertySources.size()).isEqualTo(0);
    String pair = "key = value";
    ByteArrayResource resource = new ByteArrayResource(pair.getBytes(), "from inlined property: " + pair);
    ResourceLoader resourceLoader = mock(ResourceLoader.class);
    given(resourceLoader.getResource(anyString())).willReturn(resource);
    addPropertiesFilesToEnvironment(environment, resourceLoader, FOO_LOCATIONS);
    assertThat(propertySources.size()).isEqualTo(1);
    assertThat(environment.getProperty("key")).isEqualTo("value");
}
Also used : ResourceLoader(cn.taketoday.core.io.ResourceLoader) TestPropertySourceUtils.buildMergedTestPropertySources(cn.taketoday.test.context.support.TestPropertySourceUtils.buildMergedTestPropertySources) PropertySources(cn.taketoday.core.env.PropertySources) ConfigurableEnvironment(cn.taketoday.core.env.ConfigurableEnvironment) MockEnvironment(cn.taketoday.mock.env.MockEnvironment) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) ByteArrayResource(cn.taketoday.core.io.ByteArrayResource) Test(org.junit.jupiter.api.Test)

Example 8 with ResourceLoader

use of cn.taketoday.core.io.ResourceLoader in project today-framework by TAKETODAY.

the class FreeMarkerConfigurationFactoryBeanTests method freeMarkerConfigurationFactoryBeanWithNonFileResourceLoaderPath.

@Test
@SuppressWarnings("rawtypes")
public void freeMarkerConfigurationFactoryBeanWithNonFileResourceLoaderPath() throws Exception {
    fcfb.setTemplateLoaderPath("file:/mydir");
    Properties settings = new Properties();
    settings.setProperty("localized_lookup", "false");
    fcfb.setFreemarkerSettings(settings);
    fcfb.setResourceLoader(new ResourceLoader() {

        @Override
        public Resource getResource(String location) {
            if (!("file:/mydir".equals(location) || "file:/mydir/test".equals(location))) {
                throw new IllegalArgumentException(location);
            }
            return new ByteArrayResource("test".getBytes(), "test");
        }

        @Override
        public ClassLoader getClassLoader() {
            return getClass().getClassLoader();
        }
    });
    fcfb.afterPropertiesSet();
    assertThat(fcfb.getObject()).isInstanceOf(Configuration.class);
    Configuration fc = fcfb.getObject();
    Template ft = fc.getTemplate("test");
    assertThat(FreeMarkerTemplateUtils.processTemplateIntoString(ft, new HashMap())).isEqualTo("test");
}
Also used : ResourceLoader(cn.taketoday.core.io.ResourceLoader) DefaultResourceLoader(cn.taketoday.core.io.DefaultResourceLoader) Configuration(freemarker.template.Configuration) HashMap(java.util.HashMap) Resource(cn.taketoday.core.io.Resource) ByteArrayResource(cn.taketoday.core.io.ByteArrayResource) FileSystemResource(cn.taketoday.core.io.FileSystemResource) ByteArrayResource(cn.taketoday.core.io.ByteArrayResource) Properties(java.util.Properties) Template(freemarker.template.Template) Test(org.junit.jupiter.api.Test)

Example 9 with ResourceLoader

use of cn.taketoday.core.io.ResourceLoader in project today-framework by TAKETODAY.

the class ApplicationContextLoader method prepareEnvironment.

private void prepareEnvironment(MergedContextConfiguration config, Application application, ConfigurableEnvironment environment, boolean applicationEnvironment) {
    setActiveProfiles(environment, config.getActiveProfiles(), applicationEnvironment);
    ResourceLoader resourceLoader = (application.getResourceLoader() != null) ? application.getResourceLoader() : new DefaultResourceLoader(null);
    TestPropertySourceUtils.addPropertiesFilesToEnvironment(environment, resourceLoader, config.getPropertySourceLocations());
    TestPropertySourceUtils.addInlinedPropertiesToEnvironment(environment, getInlinedProperties(config));
}
Also used : DefaultResourceLoader(cn.taketoday.core.io.DefaultResourceLoader) ResourceLoader(cn.taketoday.core.io.ResourceLoader) DefaultResourceLoader(cn.taketoday.core.io.DefaultResourceLoader)

Example 10 with ResourceLoader

use of cn.taketoday.core.io.ResourceLoader in project today-framework by TAKETODAY.

the class AbstractGenericWebContextLoader method configureWebResources.

/**
 * Configures web resources for the supplied web application context (WAC).
 * <h4>Implementation Details</h4>
 * <p>If the supplied WAC has no parent or its parent is not a WAC, the
 * supplied WAC will be configured as the Root WAC (see "<em>Root WAC
 * Configuration</em>" below).
 * <p>Otherwise the context hierarchy of the supplied WAC will be traversed
 * to find the top-most WAC (i.e., the root); and the {@link ServletContext}
 * of the Root WAC will be set as the {@code ServletContext} for the supplied
 * WAC.
 * <h4>Root WAC Configuration</h4>
 * <ul>
 * <li>The resource base path is retrieved from the supplied
 * {@code WebMergedContextConfiguration}.</li>
 * <li>A {@link ResourceLoader} is instantiated for the {@link MockServletContext}:
 * if the resource base path is prefixed with "{@code classpath:}", a
 * {@link DefaultResourceLoader} will be used; otherwise, a
 * {@link FileSystemResourceLoader} will be used.</li>
 * <li>A {@code MockServletContext} will be created using the resource base
 * path and resource loader.</li>
 * <li>The supplied {@link GenericWebServletApplicationContext} is then stored in
 * the {@code MockServletContext} under the
 * {@link WebServletApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE} key.</li>
 * <li>Finally, the {@code MockServletContext} is set in the
 * {@code WebServletApplicationContext}.</li>
 * </ul>
 *
 * @param context the web application context for which to configure the web resources
 * @param webMergedConfig the merged context configuration to use to load the web application context
 */
protected void configureWebResources(GenericWebServletApplicationContext context, WebMergedContextConfiguration webMergedConfig) {
    ApplicationContext parent = context.getParent();
    // set the current context as the root WebServletApplicationContext:
    if (!(parent instanceof WebServletApplicationContext)) {
        String resourceBasePath = webMergedConfig.getResourceBasePath();
        ResourceLoader resourceLoader = (resourceBasePath.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX) ? new DefaultResourceLoader() : new FileSystemResourceLoader());
        ServletContext servletContext = new MockServletContext(resourceBasePath, resourceLoader);
        servletContext.setAttribute(WebServletApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
        context.setServletContext(servletContext);
    } else {
        ServletContext servletContext = null;
        // Find the root WebServletApplicationContext
        while (parent != null) {
            if (parent instanceof WebServletApplicationContext && !(parent.getParent() instanceof WebServletApplicationContext)) {
                servletContext = ((WebServletApplicationContext) parent).getServletContext();
                break;
            }
            parent = parent.getParent();
        }
        Assert.state(servletContext != null, "Failed to find root WebServletApplicationContext in the context hierarchy");
        context.setServletContext(servletContext);
    }
}
Also used : FileSystemResourceLoader(cn.taketoday.core.io.FileSystemResourceLoader) ResourceLoader(cn.taketoday.core.io.ResourceLoader) DefaultResourceLoader(cn.taketoday.core.io.DefaultResourceLoader) GenericWebServletApplicationContext(cn.taketoday.web.context.support.GenericWebServletApplicationContext) WebServletApplicationContext(cn.taketoday.web.servlet.WebServletApplicationContext) ConfigurableApplicationContext(cn.taketoday.context.ConfigurableApplicationContext) ApplicationContext(cn.taketoday.context.ApplicationContext) FileSystemResourceLoader(cn.taketoday.core.io.FileSystemResourceLoader) MockServletContext(cn.taketoday.mock.web.MockServletContext) ServletContext(jakarta.servlet.ServletContext) GenericWebServletApplicationContext(cn.taketoday.web.context.support.GenericWebServletApplicationContext) WebServletApplicationContext(cn.taketoday.web.servlet.WebServletApplicationContext) MockServletContext(cn.taketoday.mock.web.MockServletContext) DefaultResourceLoader(cn.taketoday.core.io.DefaultResourceLoader)

Aggregations

ResourceLoader (cn.taketoday.core.io.ResourceLoader)22 Test (org.junit.jupiter.api.Test)14 DefaultResourceLoader (cn.taketoday.core.io.DefaultResourceLoader)12 ByteArrayResource (cn.taketoday.core.io.ByteArrayResource)8 Resource (cn.taketoday.core.io.Resource)6 ConfigurableApplicationContext (cn.taketoday.context.ConfigurableApplicationContext)4 FileSystemResource (cn.taketoday.core.io.FileSystemResource)4 Configuration (freemarker.template.Configuration)4 Template (freemarker.template.Template)4 HashMap (java.util.HashMap)4 Properties (java.util.Properties)4 BeanWrapper (cn.taketoday.beans.BeanWrapper)2 BeansException (cn.taketoday.beans.BeansException)2 PropertyValues (cn.taketoday.beans.PropertyValues)2 ApplicationContext (cn.taketoday.context.ApplicationContext)2 ConfigurableEnvironment (cn.taketoday.core.env.ConfigurableEnvironment)2 Environment (cn.taketoday.core.env.Environment)2 PropertySources (cn.taketoday.core.env.PropertySources)2 ClassPathResource (cn.taketoday.core.io.ClassPathResource)2 FileSystemResourceLoader (cn.taketoday.core.io.FileSystemResourceLoader)2