- From: Ichiro Furusato <ichiro.furusato@gmail.com>
- Date: Thu, 16 May 2013 20:56:19 +1200
- To: Ari Nordström <Ari.Nordstrom@condesign.se>
- Cc: XProc Dev <xproc-dev@w3.org>
- Message-ID: <CAFKb9FM2SQ9GDtNXusCDg0L6a3VeDpPYgTq5zVK2pZ8dRw8x_A@mail.gmail.com>
Hi Ari,
I've had a number of occasions to develop what are essentially pass-through
steps, i.e., steps that do something related to the pipeline but don't
alter the actual content flowing through. Below is a very quick shell of a
step that displays a JOptionPane that displays a dialog upon encountering
the step. This could obviously be improved by adding passed arguments,
actually altering processing based upon the chosen option, etc., but I
leave that as an exercise to the implementer since I don't know what you'd
plan to do with it.
Hopefully it's helpful.
Here's the declaration:
---------------------- OptionDialogStep.java ---------------------
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step
name="option-dialog"
type="acme:option-dialog"
version="1.0"
xmlns:acme="http://acme.com/xproc/1.0/"
xmlns:p="http://www.w3.org/ns/xproc">
<p:input port="source"/>
<p:output port="result"/>
</p:declare-step>
This must be imported into an existing pipeline using:
<p:import href="declare-option-dialog.xpl"/>
and then used as a step, e.g.,
<acme:option-dialog name="option-dialog-step">
<p:documentation>
This is a step used to display an option dialog.
</p:documentation>
</acme:option-dialog>
And here's the Java code (which I release without license restriction):
---------------------- OptionDialogStep.java ---------------------
package com.acme.transform;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.XdmNode;
import com.xmlcalabash.core.XProcRuntime;
import com.xmlcalabash.io.ReadablePipe;
import com.xmlcalabash.io.WritablePipe;
import com.xmlcalabash.library.DefaultStep;
import com.xmlcalabash.runtime.XAtomicStep;
import javax.swing.JOptionPane;
/**
* An XProc step that displays a dialog box.
*
* @author Ichiro Furusato
*/
public class OptionDialogStep extends DefaultStep
{
private ReadablePipe source = null; // the source of this step
private WritablePipe result = null; // the result of this step
public OptionDialogStep( XProcRuntime runtime, XAtomicStep step )
{
super(runtime, step);
}
@Override
public final void setInput( String port, ReadablePipe pipe )
{
source = pipe;
}
@Override
public final void setOutput( String port, WritablePipe pipe )
{
result = pipe;
}
@Override
public void reset()
{
if ( source != null ) {
source.resetReader();
}
if ( result != null ) {
result.resetWriter();
}
}
@Override
public void run() throws SaxonApiException
{
try {
Object message = "Dialog message here.";
String title = "Dialog Title";
int option = JOptionPane.showConfirmDialog(null,
message, title,
JOptionPane.YES_NO_CANCEL_OPTION);
switch ( option ) {
case JOptionPane.YES_OPTION:
System.out.println("option: YES_OPTION");
break;
case JOptionPane.NO_OPTION:
System.out.println("option: NO_OPTION");
break;
case JOptionPane.CANCEL_OPTION:
System.out.println("option: CANCEL_OPTION");
break;
default:
System.out.println("option: default");
break;
}
super.run();
// get Saxon document from pipeline
XdmNode doc = source.read();
if ( doc == null ) {
throw new IllegalStateException("null document.");
}
// pass through pipeline
result.write(doc);
} catch ( Exception e ) {
throw new SaxonApiException(e.getClass().getName()
+ " thrown by OptionDialogStep: "
+ e.getLocalizedMessage(), e);
}
}
} // end OptionDialogStep
Received on Thursday, 16 May 2013 08:56:50 UTC