forked from griddynamics/OpenGenesis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FilesystemTemplateRepository.scala
executable file
·69 lines (56 loc) · 2.91 KB
/
FilesystemTemplateRepository.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* Copyright (c) 2010-2012 Grid Dynamics Consulting Services, Inc, All Rights Reserved
* http://www.griddynamics.com
*
* This library is free software; you can redistribute it and/or modify it under the terms of
* the GNU Lesser General Public License as published by the Free Software Foundation; either
* version 2.1 of the License, or any later version.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Project: Genesis
* Description: Continuous Delivery Platform
*/
package com.griddynamics.genesis.template
import java.io.{FilenameFilter, File}
import io.Source
import org.apache.commons.io.FilenameUtils
import com.griddynamics.genesis.util.Logging
import org.apache.commons.codec.digest.DigestUtils
class FilesystemTemplateRepository(filesystemFolder: String, wildcard: String) extends TemplateRepository with Logging {
var sources: Map[VersionedTemplate, String] = Map()
var lastModifiedHash = "0"
val genesisHome = Option(System.getProperty("genesis_home"))
def listSources() = {
if (sources.isEmpty || lastModifiedHash != lastModification) {
sources = readSources()
lastModifiedHash = lastModification
}
sources
}
private def readSources() = files.map(f => (VersionedTemplate(f.getAbsolutePath, f.lastModified.toString), Source.fromFile(f).getLines().mkString("\n"))).toMap
def files: Array[File] = {
var topDir = new File(filesystemFolder)
if (!topDir.exists() && genesisHome.isDefined) {
val relativePath = new File(new File(genesisHome.get), filesystemFolder)
if (relativePath.exists() && relativePath.isDirectory) {
topDir = relativePath
}
}
if (!topDir.exists || !topDir.isDirectory)
throw new IllegalArgumentException("Given template directory doesn't exist (%s)".format(topDir.getPath))
topDir.listFiles(new FilenameFilter {
def accept(dir: File, name: String) = FilenameUtils.wildcardMatch(name, wildcard, TemplateRepository.wildCardIOCase)
})
}
private def lastModification: String = DigestUtils.sha256Hex(files.map(_.lastModified()).mkString(""))
}