1 package fr.ifremer.coser.result.repository.echobase;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.base.Preconditions;
26 import com.google.common.collect.Sets;
27 import fr.ifremer.coser.bean.EchoBaseProject;
28 import fr.ifremer.coser.result.ResultRepositoryInitializationException;
29 import fr.ifremer.coser.result.repository.ResultRepositoryProvider;
30 import org.apache.commons.io.filefilter.AbstractFileFilter;
31 import org.apache.commons.io.filefilter.AndFileFilter;
32 import org.apache.commons.io.filefilter.FileFilterUtils;
33 import org.apache.commons.logging.Log;
34 import org.apache.commons.logging.LogFactory;
35
36 import java.io.File;
37 import java.io.FileFilter;
38 import java.io.IOException;
39 import java.util.Set;
40
41
42
43
44
45
46
47 public class EchoBaseResultRepositoryProvider implements ResultRepositoryProvider<EchoBaseResultRepository> {
48
49
50 private static final Log log = LogFactory.getLog(EchoBaseResultRepositoryProvider.class);
51
52
53
54
55 protected final File basedir;
56
57 public EchoBaseResultRepositoryProvider(File basedir) {
58 Preconditions.checkNotNull(basedir);
59 this.basedir = basedir;
60 }
61
62 @Override
63 public EchoBaseResultRepositoryType getRepositoryType() {
64 return EchoBaseResultRepositoryType.INSTANCE;
65 }
66
67 @Override
68 public Set<EchoBaseResultRepository> loadRepositories() {
69
70 if (log.isInfoEnabled()) {
71 log.info(String.format("Scan for projects from basedir: %s", basedir));
72 }
73 Set<EchoBaseResultRepository> result = Sets.newHashSet();
74
75 AndFileFilter projectFilter = new AndFileFilter();
76 projectFilter.addFileFilter(FileFilterUtils.directoryFileFilter());
77 projectFilter.addFileFilter(new AbstractFileFilter() {
78
79 @Override
80 public boolean accept(File pathname) {
81 return new File(pathname, EchoBaseProject.METADATA_FILE).exists();
82 }
83 });
84
85 File[] projects = basedir.listFiles((FileFilter) projectFilter);
86 if (projects != null) {
87 for (File projectDirectory : projects) {
88
89 EchoBaseProject project = new EchoBaseProject(projectDirectory);
90
91 if (log.isDebugEnabled()) {
92 log.debug(String.format("Detected result: %s", project.getName()));
93 }
94 try {
95 project.load();
96 } catch (IOException e) {
97 throw new ResultRepositoryInitializationException(this, "Could not load project file", e);
98 }
99 result.add(new EchoBaseResultRepository(project));
100 }
101 }
102 if (log.isInfoEnabled()) {
103 log.info(String.format("Found %s result repository(ies) from basedir: %s", result.size(), basedir));
104 }
105 return result;
106 }
107 }