1 package com.atlassian.plugin.factories;
2
3 import com.atlassian.plugin.Application;
4 import com.atlassian.plugin.JarPluginArtifact;
5 import com.atlassian.plugin.ModuleDescriptorFactory;
6 import com.atlassian.plugin.Plugin;
7 import com.atlassian.plugin.PluginArtifact;
8 import com.atlassian.plugin.PluginParseException;
9 import com.atlassian.plugin.loaders.classloading.DeploymentUnit;
10 import com.atlassian.plugin.parsers.DescriptorParser;
11 import com.atlassian.plugin.parsers.DescriptorParserFactory;
12 import com.google.common.base.Predicate;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import java.io.InputStream;
17 import java.util.Set;
18
19 import static com.google.common.base.Preconditions.checkNotNull;
20 import static com.google.common.io.Closeables.closeQuietly;
21
22
23
24
25 public abstract class AbstractPluginFactory implements PluginFactory
26 {
27 protected final Logger log = LoggerFactory.getLogger(this.getClass());
28
29 protected final DescriptorParserFactory descriptorParserFactory;
30 protected final Set<Application> applications;
31
32 protected AbstractPluginFactory(DescriptorParserFactory descriptorParserFactory, Set<Application> applications)
33 {
34 this.descriptorParserFactory = checkNotNull(descriptorParserFactory);
35 this.applications = checkNotNull(applications);
36 }
37
38
39
40
41
42
43
44
45 public String canCreate(PluginArtifact pluginArtifact) throws PluginParseException
46 {
47 return getPluginKeyFromDescriptor(pluginArtifact);
48 }
49
50
51
52
53 @Deprecated
54 public final Plugin create(DeploymentUnit deploymentUnit, ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException
55 {
56 return create(new JarPluginArtifact(checkNotNull(deploymentUnit).getPath()), moduleDescriptorFactory);
57 }
58
59 protected final boolean hasDescriptor(PluginArtifact pluginArtifact)
60 {
61 InputStream descriptorStream = null;
62 try
63 {
64 descriptorStream = getDescriptorInputStream(pluginArtifact);
65 return descriptorStream != null;
66 }
67 finally
68 {
69 closeQuietly(descriptorStream);
70 }
71 }
72
73 protected final String getPluginKeyFromDescriptor(PluginArtifact pluginArtifact)
74 {
75 String pluginKey = null;
76 InputStream descriptorStream = null;
77 try
78 {
79 descriptorStream = getDescriptorInputStream(pluginArtifact);
80 if (descriptorStream != null)
81 {
82 final DescriptorParser descriptorParser = descriptorParserFactory.getInstance(descriptorStream, applications);
83 if (isValidPluginsVersion().apply(descriptorParser.getPluginsVersion()))
84 {
85 pluginKey = descriptorParser.getKey();
86 }
87 }
88 }
89 finally
90 {
91 closeQuietly(descriptorStream);
92 }
93 return pluginKey;
94 }
95
96 protected abstract InputStream getDescriptorInputStream(PluginArtifact pluginArtifact);
97
98 protected abstract Predicate<Integer> isValidPluginsVersion();
99 }