1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.codehaus.plexus.archiver.manager;
18
19 import javax.annotation.Nonnull;
20 import javax.inject.Inject;
21 import javax.inject.Named;
22 import javax.inject.Provider;
23 import javax.inject.Singleton;
24
25 import java.io.File;
26 import java.util.Collection;
27 import java.util.Locale;
28 import java.util.Map;
29
30 import org.codehaus.plexus.archiver.Archiver;
31 import org.codehaus.plexus.archiver.UnArchiver;
32 import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
33 import org.codehaus.plexus.util.StringUtils;
34
35 import static java.util.Objects.requireNonNull;
36
37
38
39
40 @Singleton
41 @Named
42 public class DefaultArchiverManager implements ArchiverManager {
43
44 private final Map<String, Provider<Archiver>> archivers;
45
46 private final Map<String, Provider<UnArchiver>> unArchivers;
47
48 private final Map<String, Provider<PlexusIoResourceCollection>> plexusIoResourceCollections;
49
50 @Inject
51 public DefaultArchiverManager(
52 Map<String, Provider<Archiver>> archivers,
53 Map<String, Provider<UnArchiver>> unArchivers,
54 Map<String, Provider<PlexusIoResourceCollection>> plexusIoResourceCollections) {
55 this.archivers = requireNonNull(archivers);
56 this.unArchivers = requireNonNull(unArchivers);
57 this.plexusIoResourceCollections = requireNonNull(plexusIoResourceCollections);
58 }
59
60 @Override
61 @Nonnull
62 public Archiver getArchiver(@Nonnull String archiverName) throws NoSuchArchiverException {
63 requireNonNull(archiverName);
64 Provider<Archiver> archiver = archivers.get(archiverName);
65 if (archiver == null) {
66 throw new NoSuchArchiverException(archiverName);
67 }
68 return archiver.get();
69 }
70
71 @Override
72 @Nonnull
73 public UnArchiver getUnArchiver(@Nonnull String unArchiverName) throws NoSuchArchiverException {
74 requireNonNull(unArchiverName);
75 Provider<UnArchiver> unArchiver = unArchivers.get(unArchiverName);
76 if (unArchiver == null) {
77 throw new NoSuchArchiverException(unArchiverName);
78 }
79 return unArchiver.get();
80 }
81
82 @Override
83 public @Nonnull PlexusIoResourceCollection getResourceCollection(String resourceCollectionName)
84 throws NoSuchArchiverException {
85 requireNonNull(resourceCollectionName);
86 Provider<PlexusIoResourceCollection> resourceCollection =
87 plexusIoResourceCollections.get(resourceCollectionName);
88 if (resourceCollection == null) {
89 throw new NoSuchArchiverException(resourceCollectionName);
90 }
91 return resourceCollection.get();
92 }
93
94 private static @Nonnull String getFileExtension(@Nonnull File file) {
95
96 String fileName = file.getName().toLowerCase(Locale.ROOT);
97 String[] tokens = StringUtils.split(fileName, ".");
98
99 String archiveExt = "";
100
101 if (tokens.length == 2) {
102 archiveExt = tokens[1];
103 } else if (tokens.length > 2 && "tar".equals(tokens[tokens.length - 2])) {
104 archiveExt = "tar." + tokens[tokens.length - 1];
105 } else if (tokens.length > 2) {
106 archiveExt = tokens[tokens.length - 1];
107 }
108
109 return archiveExt;
110 }
111
112 @Override
113 @Nonnull
114 public Archiver getArchiver(@Nonnull File file) throws NoSuchArchiverException {
115 return getArchiver(getFileExtension(file));
116 }
117
118 @Override
119 public Collection<String> getAvailableArchivers() {
120 return archivers.keySet();
121 }
122
123 @Override
124 @Nonnull
125 public UnArchiver getUnArchiver(@Nonnull File file) throws NoSuchArchiverException {
126 return getUnArchiver(getFileExtension(file));
127 }
128
129 @Nonnull
130 @Override
131 public Collection<String> getAvailableUnArchivers() {
132 return unArchivers.keySet();
133 }
134
135 @Override
136 @Nonnull
137 public PlexusIoResourceCollection getResourceCollection(@Nonnull File file) throws NoSuchArchiverException {
138 return getResourceCollection(getFileExtension(file));
139 }
140
141 @Nonnull
142 @Override
143 public Collection<String> getAvailableResourceCollections() {
144 return plexusIoResourceCollections.keySet();
145 }
146 }