Skip to content

Commit 8f24885

Browse files
authored
Merge pull request #22 from ndw/param-tweak
Fix bugs in parameter handling
2 parents 873041e + 3d6ff67 commit 8f24885

File tree

5 files changed

+26
-16
lines changed

5 files changed

+26
-16
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import java.io.{BufferedReader, InputStreamReader}
22

33
enablePlugins(JavaAppPackaging)
44

5-
lazy val xmlCalabashVersion = "2.99.10"
5+
lazy val xmlCalabashVersion = "2.99.11"
66
lazy val jafplVersion = "0.3.83"
77
lazy val saxonVersion = "10.6"
88
lazy val useSaxonEE = Option(System.getProperty("saxonEdition")).getOrElse("HE") == "EE"

src/main/scala/com/xmlcalabash/XMLCalabash.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ class XMLCalabash private(userProcessor: Option[Processor], val configurer: XPro
276276
// Build the options before compiling in case some of them are statics...
277277
_options.clear()
278278
val nsmap = mutable.HashMap.empty[String,String]
279-
for (param <- args.parameters) {
279+
for (param <- parameters) {
280280
param match {
281281
case ns: PipelineNamespace =>
282282
nsmap.put(ns.prefix, ns.namespace)
@@ -355,7 +355,7 @@ class XMLCalabash private(userProcessor: Option[Processor], val configurer: XPro
355355

356356
val nsmap = mutable.HashMap.empty[String,String]
357357

358-
for (param <- args.parameters) {
358+
for (param <- parameters) {
359359
param match {
360360
case ns: PipelineNamespace =>
361361
nsmap.put(ns.prefix, ns.namespace)
@@ -387,7 +387,7 @@ class XMLCalabash private(userProcessor: Option[Processor], val configurer: XPro
387387
// To deal with outputs, we have to collate multiple outputs to the same port together.
388388
// But we also have to check that there's at most one explicit DataConsumer.
389389
val outputMap = mutable.HashMap.empty[String, ListBuffer[PipelineOutputDocument]]
390-
for (opt <- args.parameters collect { case p: PipelineOutputDocument => p }) {
390+
for (opt <- parameters collect { case p: PipelineOutputDocument => p }) {
391391
if (!(outputMap.contains(opt.port))) {
392392
outputMap.put(opt.port, ListBuffer.empty[PipelineOutputDocument])
393393
}

src/main/scala/com/xmlcalabash/runtime/BufferingConsumer.scala renamed to src/main/scala/com/xmlcalabash/testing/BufferingConsumer.scala

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,34 @@
1-
package com.xmlcalabash.runtime
1+
package com.xmlcalabash.testing
22

33
import com.jafpl.messages.Message
44
import com.jafpl.steps.DataConsumer
55
import com.xmlcalabash.exceptions.XProcException
66
import com.xmlcalabash.messages.XProcItemMessage
77
import com.xmlcalabash.model.xxml.XOutput
8+
import com.xmlcalabash.util.MediaType
89

910
import scala.collection.mutable.ListBuffer
1011

11-
class BufferingConsumer(output: XOutput) extends DataConsumer {
12+
class BufferingConsumer() extends DataConsumer {
1213
private val _items = ListBuffer.empty[XProcItemMessage]
14+
private val _mediaTypes = ListBuffer.empty[MediaType]
1315

1416
def messages: List[XProcItemMessage] = _items.toList
1517

18+
def mediaTypes: List[MediaType] = _mediaTypes.toList
19+
def mediaTypes_=(types: List[MediaType]): Unit = {
20+
_mediaTypes.clear()
21+
_mediaTypes ++= types
22+
}
23+
1624
override def consume(port: String, message: Message): Unit = {
1725
message match {
1826
case msg: XProcItemMessage =>
1927
// Check that the message content type is allowed on the output port
20-
val mtypes = output.contentTypes;
2128
val metadata = msg.metadata;
22-
if (mtypes.nonEmpty) {
23-
if (!metadata.contentType.allowed(mtypes)) {
24-
throw XProcException.xdBadOutputMediaType(metadata.contentType, mtypes, output.location)
29+
if (_mediaTypes.nonEmpty) {
30+
if (!metadata.contentType.allowed(_mediaTypes.toList)) {
31+
throw XProcException.xdBadOutputMediaType(metadata.contentType, _mediaTypes.toList, None)
2532
}
2633
}
2734
_items += msg

src/main/scala/com/xmlcalabash/testing/Tester.scala

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package com.xmlcalabash.testing
22

33
import com.xmlcalabash.XMLCalabash
44
import com.xmlcalabash.exceptions.TestException
5-
import com.xmlcalabash.runtime.BufferingConsumer
6-
import com.xmlcalabash.util.S9Api
5+
import com.xmlcalabash.util.{PipelineOutputConsumer, S9Api}
76
import net.sf.saxon.s9api.{QName, Serializer, XdmNode}
87
import org.slf4j.{Logger, LoggerFactory}
98

@@ -37,13 +36,16 @@ class Tester(xmlcalabash: XMLCalabash) {
3736

3837
def run(): TestResult = {
3938
try {
39+
var result: Option[BufferingConsumer] = Some(new BufferingConsumer())
40+
xmlcalabash.parameter(new PipelineOutputConsumer("result", result.get))
41+
4042
xmlcalabash.configure()
41-
val decl = xmlcalabash.step
42-
var result = Option.empty[BufferingConsumer]
4343

44+
val decl = xmlcalabash.step
4445
if (decl.outputPorts.contains("result")) {
45-
result = Some(new BufferingConsumer(decl.output("result")))
46-
xmlcalabash.args.output("result", result.get)
46+
result.get.mediaTypes = decl.output("result").contentTypes
47+
} else {
48+
result = None
4749
}
4850

4951
xmlcalabash.run()

src/main/scala/com/xmlcalabash/util/MediaType.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ object MediaType {
1919
val HTML = new MediaType("text", "html")
2020
val XHTML = new MediaType("application", "xhtml+xml")
2121
val ZIP = new MediaType("application", "zip")
22+
val PDF = new MediaType("application", "pdf")
2223
val MULTIPART = new MediaType("multipart", "*")
2324
val MULTIPART_MIXED = new MediaType("multipart", "mixed")
2425

0 commit comments

Comments
 (0)