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  {
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  }