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 import static com.atlassian.plugin.Permissions.getRequiredPermissions;
15
16 public class DefaultDescribedModuleDescriptorFactory extends DefaultModuleDescriptorFactory implements DescribedModuleDescriptorFactory
17 {
18 public DefaultDescribedModuleDescriptorFactory(final HostContainer hostContainer)
19 {
20 super(hostContainer);
21 addModuleDescriptor("described-module-type", DescribedModuleTypeModuleDescriptor.class);
22 }
23
24 @Override
25 public final Iterable<String> getModuleDescriptorKeys()
26 {
27 return ImmutableSet.copyOf(getDescriptorClassesMap().keySet());
28 }
29
30 @Override
31 public final Set<Class<? extends ModuleDescriptor>> getModuleDescriptorClasses()
32 {
33 return ImmutableSet.copyOf(getDescriptorClassesMap().values());
34 }
35
36 @Override
37 public final Schema getSchema(final String type)
38 {
39 if (!getDescriptorClassesMap().containsKey(type))
40 {
41 return null;
42 }
43
44 DocumentBasedSchema.DynamicSchemaBuilder builder = DocumentBasedSchema
45 .builder(type)
46 .setResourceLoader(new AlternativeClassLoaderResourceLoader(this.getClass()))
47 .setRequiredPermissions(getRequiredPermissions(getModuleDescriptorClass(type)));
48 return builder.validate() ? builder.build() : null;
49 }
50 }