1 package com.atlassian.plugin.schema.impl;
2
3 import com.atlassian.plugin.DefaultModuleDescriptorFactory;
4 import com.atlassian.plugin.ModuleDescriptor;
5 import com.atlassian.plugin.hostcontainer.HostContainer;
6 import com.atlassian.plugin.schema.descriptor.DescribedModuleDescriptorFactory;
7 import com.atlassian.plugin.schema.spi.DocumentBasedSchema;
8 import com.atlassian.plugin.schema.spi.Schema;
9 import com.atlassian.plugin.util.resource.AlternativeClassLoaderResourceLoader;
10 import com.google.common.collect.ImmutableSet;
11
12 import java.util.Set;
13
14 public class DefaultDescribedModuleDescriptorFactory extends DefaultModuleDescriptorFactory implements DescribedModuleDescriptorFactory
15 {
16 public DefaultDescribedModuleDescriptorFactory(final HostContainer hostContainer)
17 {
18 super(hostContainer);
19 addModuleDescriptor("described-module-type", DescribedModuleTypeModuleDescriptor.class);
20 }
21
22 @Override
23 public final Iterable<String> getModuleDescriptorKeys()
24 {
25 return ImmutableSet.copyOf(getDescriptorClassesMap().keySet());
26 }
27
28 @Override
29 public final Set<Class<? extends ModuleDescriptor>> getModuleDescriptorClasses()
30 {
31 return ImmutableSet.copyOf(getDescriptorClassesMap().values());
32 }
33
34 @Override
35 public final Schema getSchema(final String type)
36 {
37 if (!getDescriptorClassesMap().containsKey(type))
38 {
39 return null;
40 }
41
42 DocumentBasedSchema.DynamicSchemaBuilder builder = DocumentBasedSchema
43 .builder(type)
44 .setResourceLoader(new AlternativeClassLoaderResourceLoader(this.getClass()));
45 return builder.validate() ? builder.build() : null;
46 }
47 }