Skip to content

Commit

Permalink
remove libs
Browse files Browse the repository at this point in the history
remove whitespace

fix license in saxon module

add better test resources

add comment

add missing changes
  • Loading branch information
SingingBush committed Oct 13, 2024
1 parent cc91cf3 commit 7cf37a3
Show file tree
Hide file tree
Showing 13 changed files with 374 additions and 71 deletions.
Binary file removed barcode4j-saxon/lib/saxon10/saxon-ee-10.6.jar
Binary file not shown.
Binary file removed barcode4j-saxon/lib/saxon10/saxon-ee-test-10.6.jar
Binary file not shown.
Binary file removed barcode4j-saxon/lib/saxon11/saxon-ee-11.1.jar
Binary file not shown.
5 changes: 5 additions & 0 deletions barcode4j-saxon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
/*
* Copyright 2003-2012 Jeremias Maerki.
* Copyright 2020-2024 Samael Bate (singingbush)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
Expand Down Expand Up @@ -31,7 +34,7 @@
* From version 10 onward, instead of implementing "net.sf.saxon.style.ExtensionElementFactory"
* use "com.saxonica.xsltextn.ExtensionElementFactory"
* </p>
* @author Jeremias Maerki
* @author Jeremias Maerki &amp; Samael Bate (singingbush)
* @see com.saxonica.xsltextn.ExtensionElementFactory
*/
public class BarcodeExtensionElementFactory implements ExtensionElementFactory {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
/*
* Copyright 2003-2004,2007 Jeremias Maerki.
*
* Copyright 2003-2012 Jeremias Maerki.
* Copyright 2020-2024 Samael Bate (singingbush)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -23,9 +24,8 @@

/**
* Non-root barcode elements.
*
* @author Jeremias Maerki
* @version $Id: BarcodeNonRootStyleElement.java,v 1.3 2007-01-15 11:12:33 jmaerki Exp $
*
* @author Jeremias Maerki &amp; Samael Bate (singingbush)
*/
public class BarcodeNonRootStyleElement extends StyleElement {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright 2003-2004,2007 Jeremias Maerki.
* Copyright 2006 Robert Deeken (compatibility with Saxon 8.7.1 and later)
* Copyright 2003-2012 Jeremias Maerki.
* Copyright 2020-2024 Samael Bate (singingbush)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -16,34 +16,34 @@
*/
package org.krysalis.barcode4j.saxon;

import com.saxonica.xqj.SaxonXQPreparedExpression;
import net.sf.saxon.dom.DOMNodeWrapper;
import net.sf.saxon.dom.DocumentWrapper;
import net.sf.saxon.dom.NodeOverNodeInfo;
import net.sf.saxon.event.Outputter;
import net.sf.saxon.event.Receiver;
import net.sf.saxon.event.SequenceReceiver;
import net.sf.saxon.expr.Expression;
import net.sf.saxon.expr.Literal;
import net.sf.saxon.expr.SimpleExpression;
import net.sf.saxon.expr.XPathContext;
import net.sf.saxon.expr.instruct.SimpleNodeConstructor;
import net.sf.saxon.expr.parser.ContextItemStaticInfo;
import net.sf.saxon.expr.parser.ExpressionVisitor;
import net.sf.saxon.expr.parser.RebindingMap;
import net.sf.saxon.om.*;
import net.sf.saxon.option.dom4j.DOM4JNodeWrapper;
import net.sf.saxon.s9api.Axis;
import net.sf.saxon.style.Compilation;
import net.sf.saxon.style.ComponentDeclaration;
import net.sf.saxon.style.ExtensionInstruction;
import net.sf.saxon.style.StyleElement;
import net.sf.saxon.sxpath.XPathExpression;
import net.sf.saxon.trace.ExpressionPresenter;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.tree.iter.ArrayIterator;
import net.sf.saxon.type.SchemaType;
import net.sf.saxon.type.ValidationException;
import com.saxonica.xqj.SaxonXQPreparedExpression;
import net.sf.saxon.dom.DOMNodeWrapper;
import net.sf.saxon.dom.DocumentWrapper;
import net.sf.saxon.dom.NodeOverNodeInfo;
import net.sf.saxon.event.Outputter;
import net.sf.saxon.event.Receiver;
import net.sf.saxon.event.SequenceReceiver;
import net.sf.saxon.expr.Expression;
import net.sf.saxon.expr.Literal;
import net.sf.saxon.expr.SimpleExpression;
import net.sf.saxon.expr.XPathContext;
import net.sf.saxon.expr.instruct.SimpleNodeConstructor;
import net.sf.saxon.expr.parser.ContextItemStaticInfo;
import net.sf.saxon.expr.parser.ExpressionVisitor;
import net.sf.saxon.expr.parser.RebindingMap;
import net.sf.saxon.om.*;
import net.sf.saxon.option.dom4j.DOM4JNodeWrapper;
import net.sf.saxon.s9api.Axis;
import net.sf.saxon.style.Compilation;
import net.sf.saxon.style.ComponentDeclaration;
import net.sf.saxon.style.ExtensionInstruction;
import net.sf.saxon.style.StyleElement;
import net.sf.saxon.sxpath.XPathExpression;
import net.sf.saxon.trace.ExpressionPresenter;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.tree.iter.ArrayIterator;
import net.sf.saxon.type.SchemaType;
import net.sf.saxon.type.ValidationException;

import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
Expand All @@ -53,15 +53,12 @@
import org.krysalis.barcode4j.BarcodeUtil;
import org.krysalis.barcode4j.output.svg.SVGCanvasProvider;
import org.krysalis.barcode4j.tools.ConfigurationUtil;
import org.w3c.dom.Node;

import javax.xml.xquery.XQPreparedExpression;
import org.w3c.dom.Node;

/**
* This represents the main barcode element.
*
* @author Jeremias Maerki
* @version $Id: BarcodeStyleElement.java,v 1.4 2007-01-15 11:12:33 jmaerki Exp $
* @author Jeremias Maerki &amp; Samael Bate (singingbush)
*/
public class BarcodeStyleElement extends StyleElement {

Expand Down Expand Up @@ -109,7 +106,6 @@ public void prepareAttributes() {

//final AttributeInfo attributeInfo = new AttributeInfo(NodeName);


this.message = super.makeAttributeValueTemplate(msgAtt, null);

// final String orientationAtt = super.getAttributeValue("orientation");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,19 @@ void testMayContainSequenceConstructor() {
assertTrue(element.mayContainSequenceConstructor());
}

/*
* Generally a BarcodeStyleElement will have BarcodeNonRootStyleElement as children
* <code>
* <barcode4j:barcode message="{message}" orientation="90">
* <barcode4j:code128>
* <barcode4j:height>15mm</barcode4j:height>
* <barcode4j:module-width>0.21mm</barcode4j:module-width>
* <barcode4j:codesets>ABC</barcode4j:codesets>
* <barcode4j:quiet-zone enabled="true">10mw</barcode4j:quiet-zone>
* </barcode4j:code128>
* </barcode4j:barcode>
* </code>
*/
@Test
@DisplayName("Should permit nor root barcode child elements")
void isPermittedChild() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,47 +15,117 @@
*/
package org.krysalis.barcode4j.saxon;

import junit.framework.TestCase;
import net.sf.saxon.TransformerFactoryImpl;
import com.saxonica.config.EnterpriseConfiguration;
import com.saxonica.config.EnterpriseTransformerFactory;
import net.sf.saxon.Configuration;
import net.sf.saxon.jaxp.SaxonTransformerFactory;
import net.sf.saxon.lib.FeatureKeys;
import net.sf.saxon.trans.LicenseException;
import net.sf.saxon.trans.XPathException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.StringWriter;
import java.net.URISyntaxException;
import java.nio.file.Paths;

import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

/**
* Test class for the Saxon PE/EE extension.
*
* @author Jeremias Maerki
* @version $Id: SaxonExtTest.java,v 1.2 2004-09-04 20:26:15 jmaerki Exp $
* Saxon-PE: com.saxonica.config.ProfessionalTransformerFactory
* Saxon-EE: com.saxonica.config.EnterpriseTransformerFactory
*
* See {@linkplain 'https://www.saxonica.com/documentation12/index.html#!extensibility/extension-functions'}
*
* @author Jeremias Maerki &amp; Samael Bate
*/
public class SaxonExtTest extends TestCase {
@EnabledIf(
value = "validSaxonLicenseFound",
disabledReason = "A valid saxon license needs to be on the classpath for this test to run"
)
public class SaxonExtTest {

private static EnterpriseConfiguration configuration;

@BeforeAll
static void beforeAll() {
configuration = new EnterpriseConfiguration();
}

public SaxonExtTest(String name) {
super(name);
static boolean validSaxonLicenseFound() {
// final Processor processor = new Processor(true);
// processor.registerExtensionFunction(new ExtensionFunction());

// can use either ProfessionalConfiguration or EnterpriseConfiguration
final Configuration configuration = EnterpriseConfiguration.newConfiguration();

try {
System.out.println("Using Saxon " + configuration.getEditionCode() + " configuration");
//return configuration.isLicensedFeature(Feature.ALLOW_SYNTAX_EXTENSIONS.code);
return configuration.isLicensedFeature(Configuration.LicenseFeature.ENTERPRISE_XSLT);
} catch (final LicenseException e) {
System.err.println(e.getMessage());
return false;
}
}

// public void testSaxonExt() throws Exception {
// final TransformerFactory factory = new TransformerFactoryImpl();
// Transformer trans = factory.newTransformer(
// new StreamSource(loadTestResourceFile("xml/saxon-test.xsl"))
// );
// Source src = new StreamSource(loadTestResourceFile("xml/xslt-test.xml"));
//
// StringWriter writer = new StringWriter();
// Result res = new StreamResult(writer);
//
// trans.transform(src, res);
// String output = writer.getBuffer().toString();
// assertTrue(output.indexOf("svg") >= 0);
// //System.out.println(writer.getBuffer());
// }
@DisplayName("Do XML transform using Saxon's implementation of TransformerFactory")
@ParameterizedTest
@ValueSource(strings = { "xml/saxon-xml-transform.xsl", "xml/saxon-html-transform.xsl" })
void testSaxonExt(final String xsltTemplate) throws Exception {
givenBarcodeExtensionRegistered();

final EnterpriseConfiguration config = new EnterpriseConfiguration();

// PE or EE only:
config.setExtensionElementNamespace("http://barcode4j.krysalis.org/ns", BarcodeExtensionElementFactory.class.getName());

//config.setAllNodesUntyped(true); // because we have no license when testing (cannot be Schema Aware)
//config.setExtensionElementNamespace();
final SaxonTransformerFactory factory = new EnterpriseTransformerFactory(config); // required for EE!!

factory.setAttribute(FeatureKeys.ALLOW_SYNTAX_EXTENSIONS, true);

// FeatureKeys.ALLOW_SYNTAX_EXTENSIONS

// todo: Don't use 'net.sf.saxon.jaxp.TransformerImpl', it should be using a PE or EE
// equivalent. new com.saxonica.config.ProfessionalTransformerFactory()
final Transformer trans = factory.newTransformer(
new StreamSource(loadTestResourceFile(xsltTemplate))
);
final Source src = new StreamSource(loadTestResourceFile("xml/barcodes.xml"));

final StringWriter writer = new StringWriter();
Result res = new StreamResult(writer);

trans.transform(src, res);
String output = writer.getBuffer().toString();
assertTrue(output.indexOf("svg") >= 0);
//System.out.println(writer.getBuffer());
}

private void givenBarcodeExtensionRegistered() throws XPathException {
//configuration.registerExtensionInstruction(BarcodeStyleElement.class);

// PE or EE only:
configuration.setExtensionElementNamespace("java:/org.krysalis.barcode4j.saxon.BarcodeExtensionElementFactory", BarcodeExtensionElementFactory.class.getName());
configuration.setExtensionElementNamespace("http://barcode4j.krysalis.org/org.krysalis.barcode4j.saxon.BarcodeExtensionElementFactory", BarcodeExtensionElementFactory.class.getName());

//configuration.setExtensionElementNamespace("http://barcode4j.krysalis.org/ns", BarcodeExtensionElementFactory.class.getName());
//configuration.setExtensionElementNamespace("classpath://org.krysalis.barcode4j.saxon9.BarcodeExtensionElementFactory", BarcodeExtensionElementFactory.class.getName());
}

private File loadTestResourceFile(final String resource) {
try {
Expand Down
25 changes: 25 additions & 0 deletions barcode4j-saxon/src/test/resources/xml/barcodes.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<data>
<barcodes>
<barcode>
<type>upc-A</type>
<message>012345678905</message>
</barcode>
<barcode>
<type>ean-13</type>
<message>0012345678905</message>
</barcode>
<barcode>
<type>code128</type>
<message>1234567890</message>
</barcode>
<barcode>
<type>pdf417</type>
<message>Here is some text encoded in a 2D barcode</message>
</barcode>
<barcode>
<type>datamatrix</type>
<message>Here is some text encoded in a datamatrix</message>
</barcode>
</barcodes>
</data>
Loading

0 comments on commit 7cf37a3

Please sign in to comment.