/
JasperReportsReportGeneratorSupport.kt
58 lines (51 loc) · 2.64 KB
/
JasperReportsReportGeneratorSupport.kt
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
package pl.beone.promena.transformer.reportgenerator.jasperreports.applicationmodel
import pl.beone.lib.typeconverter.applicationmodel.exception.TypeConversionException
import pl.beone.promena.transformer.applicationmodel.exception.transformer.TransformationNotSupportedException
import pl.beone.promena.transformer.applicationmodel.mediatype.MediaType
import pl.beone.promena.transformer.applicationmodel.mediatype.MediaTypeConstants.APPLICATION_OCTET_STREAM
import pl.beone.promena.transformer.applicationmodel.mediatype.MediaTypeConstants.APPLICATION_PDF
import pl.beone.promena.transformer.applicationmodel.mediatype.MediaTypeConstants.TEXT_XML
import pl.beone.promena.transformer.contract.data.DataDescriptor
import pl.beone.promena.transformer.contract.model.Parameters
import pl.beone.promena.transformer.reportgenerator.jasperreports.applicationmodel.JasperReportsReportGeneratorParametersConstants.Records
object JasperReportsReportGeneratorSupport {
@JvmStatic
fun isSupported(dataDescriptor: DataDescriptor, targetMediaType: MediaType, parameters: Parameters) {
dataDescriptor.descriptors.forEach { (_, mediaType) -> MediaTypeSupport.isSupported(mediaType, targetMediaType) }
ParametersSupport.isSupported(parameters)
}
object MediaTypeSupport {
private val supportedMimeType = setOf(
TEXT_XML.mimeType to APPLICATION_PDF,
APPLICATION_OCTET_STREAM.mimeType to APPLICATION_PDF
)
@JvmStatic
fun isSupported(mediaType: MediaType, targetMediaType: MediaType) {
if (!supportedMimeType.contains(mediaType.mimeType to targetMediaType)) {
throw TransformationNotSupportedException.unsupportedMediaType(mediaType, targetMediaType)
}
}
}
object ParametersSupport {
@JvmStatic
fun isSupported(parameters: Parameters) {
parameters.validate(Records.NAME, Records.CLASS, true)
parameters.validate(
JasperReportsReportGeneratorParametersConstants.Parameters.NAME,
JasperReportsReportGeneratorParametersConstants.Parameters.CLASS,
false
)
}
private fun Parameters.validate(name: String, clazz: Class<*>, mandatory: Boolean) {
try {
get(name, clazz)
} catch (e: NoSuchElementException) {
if (mandatory) {
throw TransformationNotSupportedException.mandatoryParameter(name)
}
} catch (e: TypeConversionException) {
throw TransformationNotSupportedException.unsupportedParameterType(name, clazz)
}
}
}
}