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 org.apache.commons.io.IOUtils.closeQuietly;
21
22
23
24
25 public abstract class AbstractPluginFactory implements PluginFactory {
26 private static final Logger log = LoggerFactory.getLogger(AbstractPluginFactory.class);
27
28 protected final DescriptorParserFactory descriptorParserFactory;
29 protected final Set<Application> applications;
30
31 protected AbstractPluginFactory(DescriptorParserFactory descriptorParserFactory, Set<Application> applications) {
32 this.descriptorParserFactory = checkNotNull(descriptorParserFactory);
33 this.applications = checkNotNull(applications);
34 }
35
36
37
38
39
40
41
42
43 public String canCreate(PluginArtifact pluginArtifact) throws PluginParseException {
44 return getPluginKeyFromDescriptor(pluginArtifact);
45 }
46
47
48
49
50 @Deprecated
51 public final Plugin create(DeploymentUnit deploymentUnit, ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException {
52 return create(new JarPluginArtifact(checkNotNull(deploymentUnit).getPath()), moduleDescriptorFactory);
53 }
54
55 protected final boolean hasDescriptor(PluginArtifact pluginArtifact) {
56 InputStream descriptorStream = null;
57 try {
58 descriptorStream = getDescriptorInputStream(pluginArtifact);
59 return descriptorStream != null;
60 } finally {
61 closeQuietly(descriptorStream);
62 }
63 }
64
65 protected final String getPluginKeyFromDescriptor(PluginArtifact pluginArtifact) {
66 String pluginKey = null;
67 InputStream descriptorStream = null;
68 try {
69 descriptorStream = getDescriptorInputStream(pluginArtifact);
70 if (descriptorStream != null) {
71 final DescriptorParser descriptorParser = descriptorParserFactory.getInstance(descriptorStream, applications);
72 if (isValidPluginsVersion().apply(descriptorParser.getPluginsVersion())) {
73 pluginKey = descriptorParser.getKey();
74 }
75 }
76 } finally {
77 closeQuietly(descriptorStream);
78 }
79 return pluginKey;
80 }
81
82 protected abstract InputStream getDescriptorInputStream(PluginArtifact pluginArtifact);
83
84 protected abstract Predicate<Integer> isValidPluginsVersion();
85 }