View Javadoc
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  }