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