incubator-daffodil.git
7 days agoBump version to 2.2.0-SNAPSHOT for development master
Steve Lawrence [Tue, 15 May 2018 11:09:23 +0000 (07:09 -0400)] 
Bump version to 2.2.0-SNAPSHOT for development

DAFFODIL-1936

2 weeks agoExplicitly use the Xerces factories that use our custom catalog resolver
Steve Lawrence [Fri, 13 Apr 2018 13:30:30 +0000 (09:30 -0400)] 
Explicitly use the Xerces factories that use our custom catalog resolver

The DFDLCatalogResolver is a custom resolver that extends the Xerces
EntityResolver. This means that the SAXParserFactory's and
SchemaFactory's that use this resolver must also be the Xerces versions
since only they know how to use the Xerces EntityResolver correctly.

The newInstance(...) method provides a parameter to state explicitly
which SchemaFactory/SAXParserFactory instance to create so that we can
ensure the Xerces versions are used. However, this appears to use a
different ClassLoader than normal. This has become apparent in cases
where the Daffodil dependencies (included Xerces) are in a "fat jar", in
which case newInstance() fails to find the Xerces classes with a
ClassNotFoundException, presumably because it uses a ClassLoader that
does not understand to look in the fat jar.

So, instead of using newInstance() and worrying about ClassLoaders, this
changes all SchemaFactory and SAXParserFactory instances to directly
instantiate the Xerces version, which will load the classes just like
every other class instantiation.

The downside with this approach is that one cannot swap out to a
different SchemaFactory/SAXParserFactory, but that was not possible
anyways due to our custom EntityResolver that depends on the Xerces
version, so this isn't really a new limitation.

DFDL-1924

2 weeks agoFix so trace works even when layering is being used.
Michael Beckerle [Mon, 7 May 2018 16:24:54 +0000 (12:24 -0400)] 
Fix so trace works even when layering is being used.

DAFFODIL-1935

2 weeks agoAdded AISPayloadArmoring layer with tests.
Michael Beckerle [Thu, 3 May 2018 18:30:20 +0000 (14:30 -0400)] 
Added AISPayloadArmoring layer with tests.

Added tests matching to layering wiki page.

DAFFODIL-1805

2 weeks agoFix performance regression in layering feature
Steve Lawrence [Fri, 4 May 2018 14:10:45 +0000 (10:10 -0400)] 
Fix performance regression in layering feature

Commit 1ea2290f28 changed how the input data was copied to a
ByteArrayOutputStream by coping byte-by-byte rather than use
IOUtils.copy(). The byte-by-byte change was useful for debugging, but
caused a noticeable performance hit since IOUtils.copy() can copy in
chunks. Revert the change to bring back the performance.

DAFFODIL-1933

2 weeks agoAdded tests to verify processing of escapeBlock escapeScheme
Dave Thompson [Fri, 20 Apr 2018 18:39:31 +0000 (14:39 -0400)] 
Added tests to verify processing of escapeBlock escapeScheme
where the escapeBlockEnd and escapeEscapeBlock characters are the same.

Added tests to verify processing of apostrophes (') within the document
and infoset data.

DAFFODIL-1923 DAFFODIL-1928

2 weeks agoRemove Category X test files
Steve Lawrence [Thu, 19 Apr 2018 14:26:13 +0000 (10:26 -0400)] 
Remove Category X test files

These test schemas are Category X and do not contain anything that we do
not have covered in other tests. Since they do not provide any extra
value and are not compatible with the ASLv2 license, simply remove them.

DAFFODIL-1925

2 weeks agoAll properties for Base64/layering implemented.
Michael Beckerle [Tue, 6 Mar 2018 13:34:33 +0000 (08:34 -0500)] 
All properties for Base64/layering implemented.

Layers allowed are base64_MIME, gzip, lineFolded_IMF, lineFolded_iCalendar

base64_MIME supports layerLengthKind 'boundaryMark'
gzip supports layerLengthKind 'explcit'
lineFolded_XXX supports either 'boundaryMark' or 'implicit'

Characterized with tests, what is needed in order to implement
stream filters that impose terminators that are scanned for - using
Java's Scanner class.

Java's scanner class saves us the hassle of block filling/enlarging,
etc. that is otherwise necessary when you want to use the regex
libraries against a stream.

Also put catch for ClassNotFound around compiler.reload for Java 7 vs.
Java 8. Note: Base64 needs Java 8 classes. (there may be alternative
implementation that would work with Java 7.)

Identified a couple cleanups where java.io.HashMap can be replaced with
our NonAllocatingMap - which uses Maybe types instead of null/notNull.
Just code cleanups.

For future use in AIS layer: Added a charset so we can use the encoder
to unparse AIS data that must be armored with AIS_PAYLOAD_ARMORING
which is a 6 bit to 8 bit.

This is all part of layering, i.e., AIS format requires layering as does
base64, so merging this all onto same branch.

Combined tests that have base64 encoded regions that contain gzip data
having a computed length field also with the base64 region.... a test of
that works.

Verified that the nato-stanag-5516 schema still works with this build,
as well as VMF. Those are the most bit-order intensive schemas we have.

Changed terminology uniformly from terminator to boundaryMark for
layers.

Refactored BoundaryMarkLimitingStream to pull out a
RegexLimitingStream. Needed because line folded data is terminated by a
CRLF followed by either a tab or a space. Can't express this as a
boundary mark string.

DAFFODIL-1734, DAFFODIL-1805

6 weeks agoImproved toString of grammar and parser/unparser objects. rel/v2.1.0 v2.1.0-rc3
Michael Beckerle [Thu, 29 Mar 2018 16:24:50 +0000 (12:24 -0400)] 
Improved toString of grammar and parser/unparser objects.

This is just to assist in debugging some thorny problems.

DAFFODIL-1920

6 weeks agoAdd new tunable (errorOnUnsupportedJavaVersion) to allow running with older versions...
Steve Lawrence [Tue, 3 Apr 2018 12:50:21 +0000 (08:50 -0400)] 
Add new tunable (errorOnUnsupportedJavaVersion) to allow running with older versions of Java

Currently we intentionally throw an exception if Daffodil is not run
with Java 8 due to bugs in how Java 7 handles decoding errors. However,
there are some cases where a user has no choice except to run under Java
7.

This patch adds a new tunable "errorOnUnsupportedJavaVersion" that causes
Java 8 check failures to be logged as a warning rather than thrown as an
exception. This allows the above use case to be possible, with the explicit
understanding that it is not fully tested and is know to have unexpected
behavior in some circumstances.

Additionally, the file "/daffodil-config.xml" can be put on the
classpath to override tunables globally, regardless of how Daffodil is
run (e.g. CLI, TDMLRunner, API, etc.). This allows one to easily run all
tests and processing with the errorOnUnsupportedJavaVersion check
disable, or other tunables modified, if desired.

DAFFODIL-1921

6 weeks agoUpdates to LICENSE/NOTICE
Steve Lawrence [Mon, 5 Mar 2018 16:19:11 +0000 (11:19 -0500)] 
Updates to LICENSE/NOTICE

- Add explicit paths to files that are not Apache licensed
- Append -bin to LICENSE/NOTICE in daffodil-cli to clarify that it is
  for binary release files
- Add acknowledgments to UoI NCSA, Tresys, and IBM for their pre-ASF
  contributions
- Remove content from NOTICE files that is not legally required to be
  there (e.g. BSD copyrights)
- Remove Utility.scala. This was copied from the Scala library and we
  only use the most basic of features that are already accessible in scala
  lib. This file isn't needed.
- Move the PrettyPrinter.scala file out of the scalaLib directory. This
  file was originally based off of a file in the scala library. Since
  then, this file was essentially rewritten with completely different
  behavior. Since it is no longer looks anything like the scala lib
  version except for some function names, move it out of the directory
  to make this clear.
- Correct the short notice for W3C documents

DAFFODIL-1906

6 weeks agoRevert "Fixes some issues with separated empty optional elements, (ie. 1:2::4:5)."
Josh Adams [Thu, 5 Apr 2018 12:37:48 +0000 (08:37 -0400)] 
Revert "Fixes some issues with separated empty optional elements, (ie. 1:2::4:5)."

This reverts commit a54caa74deb895816aa274353d389a241c303917.
Although this commit allowed some cases of empty optional elements with
trailing suppression to work it caused regressions in some previously
working schema projects (DAFFODIL-1922). Parts of this commit may still be used once
changes have been made to the compiler that will allow full support for
trailing separator supression (DAFFODIL-1919)

DAFFODIL-1919 and DAFFODIL-1922

7 weeks agoFixes some issues with separated empty optional elements, (ie. 1:2::4:5).
Josh Adams [Fri, 23 Feb 2018 15:53:16 +0000 (10:53 -0500)] 
Fixes some issues with separated empty optional elements, (ie. 1:2::4:5).
This was one of the bugs that was preventing the IBMTLOG4690 schema
project form working correctly.  Note that formats that have these
optional empty elements will not necessarily round trip.

There is still a bug that is preventing sequences with separated
optional content where the first element is missing from working (ie.
:2:3::5), see DAFFODIL-1919

DAFFODIL-1886, DAFFODIL-1919

2 months agoAdds missing properties to DFDLGeneralFormat.dfdl.xsd
Michael Beckerle [Fri, 9 Mar 2018 18:16:43 +0000 (13:16 -0500)] 
Adds missing properties to DFDLGeneralFormat.dfdl.xsd

Tolerates encodingErrorPolicy='error' with a warning.

DAFFODIL-1915

2 months agoChange val and lazy val to def - multi-threading bug due to state?
Michael Beckerle [Tue, 20 Feb 2018 23:43:46 +0000 (18:43 -0500)] 
Change val and lazy val to def - multi-threading bug due to state?

DAFFODIL-1908

2 months agoFix eclipse project files for daffodil-cli module.
Michael Beckerle [Mon, 5 Mar 2018 21:52:42 +0000 (16:52 -0500)] 
Fix eclipse project files for daffodil-cli module.

In the recent changes to simplify sbt tasks so that specialized tasks
aren't needed for the cli except for testing it, the src/test directory
was renamed src/it.

This change adjusts the eclipse project setup to match.

Eclipes classpath updater now excludes genjavadoc tool jar.

DAFFODIL-1913, DAFFODIL-1914

2 months agoMove CLI tests to sbt integration
Steve Lawrence [Wed, 28 Feb 2018 16:28:09 +0000 (11:28 -0500)] 
Move CLI tests to sbt integration

Move CLI tests to src/it/ rather than being part of src/test. This means
that we can reenable aggregation of the daffodil-cli subproject without
fear of 'sbt test' running the CLI tests and extending the test cycle.
With aggregation reenabled, this also means that we no longer need to
run commands explicitly in the daffodil-cli project (i.e. things like
'sbt compile' or 'sbt clean' will compile/clean all subprojects,
including daffodil-cli), simplifying build process and preventing some
bugs in sbt from cropping up.

To run cli tests, use 'sbt it:test'.

To debug cli tests, use 'sbt debugIt:test'.

DAFFODIL-1911

2 months agoCorrectly check if an element is required
Steve Lawrence [Tue, 27 Feb 2018 14:32:53 +0000 (09:32 -0500)] 
Correctly check if an element is required

When determining which elements could appear after an element in an
infoset for unparsing, we need to determine if an element is optional or
not to know if its siblings could also appear next. We use a mixture of
isOptional (for scalars) and isRequiredArrayElment (for arrays) to
determine if an element is optional. However, this logic was actually
not correct and has some edge cases it misses. Instead, we should just
use the isRequired function, which has the correct logic to determine if
an element could exist or not.

DAFFODIL-1910

2 months agoEnable annotation of an XSD with both DFDL
Michael Beckerle [Tue, 20 Feb 2018 15:58:41 +0000 (10:58 -0500)] 
Enable annotation of an XSD with both DFDL
annotations and an unrelated annotation language.

Problem is that like DFDL, this additional annotation language defines
annotation elements that have xsd:attribute definitions in them.

And Daffodil issues SDE on those attribute definitions because DFDL
doesn't use attributes.

But they're not being used to describe data. They're just being used in
annotation elements that Daffodil (or any DFDL processor) can simply
ignore.

To allow import of a full-function XML Schema for an annotation
language, Daffodil looks at schemas for use of the DFDL_NAMESPACE. If
the root element of the schema uses the DFDL_NAMESPACE (e.g., to define
the dfdl prefix), then the file is treated as a DFDL schema. If the
DFDL_NAMESPACE is not used, then the file is not imported. It is
ignored.

Rationalized validation. Schemas no longer validated by SchemaSet, but
centralized into DFDLSchemaFile class.

This changes validation behavior somewhat. Some errors are superceded by
others now, so negative tests need to change somewhat.

Some tests used to work only because of bugs where validation was not
occurring but should have been, or passed because validation was
occurring when it should not have. So more precise use of test runners,
with fewer tests using modes like validateTDMLFile=false or
validateDFDLSchemas=false.

DAFFODIL-1907,  DAFFODIL-1473

2 months agoAdded WarnIDs for all warnings. Removed non-warnID forms of methods.
Michael Beckerle [Tue, 27 Feb 2018 19:06:34 +0000 (14:06 -0500)] 
Added WarnIDs for all warnings. Removed non-warnID forms of methods.

Fixes DAFFODIL-1874, and also DAFFODIL-1838
Enables fixing https://github.com/DFDLSchemas/NACHA/issues/2

DAFFODIL-1874, DAFFODIL-1838

3 months agoAdded tests that clarify what we allow in appinfo annotations. v2.1.0-rc2
Michael Beckerle [Fri, 16 Feb 2018 17:03:14 +0000 (12:03 -0500)] 
Added tests that clarify what we allow in appinfo annotations.

DAFFODIL-1902

3 months agoHandle ChoiceGroups correctly in immediatelyEnclosingModelGroup
Josh Adams [Fri, 16 Feb 2018 14:56:13 +0000 (09:56 -0500)] 
Handle ChoiceGroups correctly in immediatelyEnclosingModelGroup

This one took a while to track down for what ended up being a one line
change.  Before when immediatelyEnclosingModelGroup was called on a
child element of a ChoiceGroup, it would return the enclosing ModelGroup
of the ChoiceGroup, not the ChoiceGroup itself.  This caused issues
when the CoiceGroup's parent would have initiatedContent="yes", as the
child element of the ChoiceGroup would typically not have an initiator
defined. This issue also effected nested sequence groups and this commit
fixes those as well.

This commit fixes one of the issues preventing the IBM-TLOG schema
project from working correctly.

DAFFODIL-1885

Changes made based on review

Use GeneralFormat instead of daffoidlTest1

3 months agoFix LICENSE/NOTICE issues
Steve Lawrence [Tue, 13 Feb 2018 12:25:31 +0000 (07:25 -0500)] 
Fix LICENSE/NOTICE issues

- Moves copyright statements from LICENSE to NOTICE
- Add missing copyright headers for w3c documents so that Apache Rat can
  detect the license
- Add BSD license to top of ScalaLib files to clarify that they are BSD
  licensed and not Apache
- Remove Passera, ScalaLib, and W3C paths from .rat-excludes. Although
  Apache Rat is unable to detect passera and ScalaLib and will cause
  failures, this makes it more visible that some files are not Apache
  licensed.

DAFFODIL-1988, DAFFODIL-1901

3 months agoAdd back deprecated support for built-in-formats.dfdl.xsd
Steve Lawrence [Thu, 15 Feb 2018 12:58:30 +0000 (07:58 -0500)] 
Add back deprecated support for built-in-formats.dfdl.xsd

- Claim DFDLGeneralFormatDefinition.dfdl.xsd as our own, filling it with
  the default properties from built-in-formats.xsd. Schemas should use
  this instead of built-in-formats.xsd
- Modify all TDML tests to use DFDLGeneralFormatDefinition.dfdl.xsd
- Move built-in-formats.dfdl.xsd to the original NCSA location, but
  deprecate it and add an SDW to alert users not to use it
- Reverts dependency changes to build.sbt so not all projects depend on
  core/test
- Rename all DFDL xsd's to have a dfdl.xsd extension
- Revert change to CLI utils that added built-in-formats.xsd to the
  classpath. That is no longer needed.

DAFFODIL-1987

3 months agoSchema cache now works whether you check all top-levels or not.
Michael Beckerle [Wed, 14 Feb 2018 20:38:51 +0000 (15:38 -0500)] 
Schema cache now works whether you check all top-levels or not.

DAFFODIL-1893

3 months agoAdd daffodil-lib-unittest to eclipse class paths so tests will run.
Michael Beckerle [Wed, 14 Feb 2018 15:42:37 +0000 (10:42 -0500)] 
Add daffodil-lib-unittest to eclipse class paths so tests will run.

In order to access built-in-formats, eclipse projects must now have the
daffodil-lib-unittest project on classpath.

DAFFODIL-1903

3 months agoFix bitOrder bug detected by Link16 schema.
mbeckerle [Thu, 8 Feb 2018 18:14:13 +0000 (13:14 -0500)] 
Fix bitOrder bug detected by Link16 schema.

Issue was that alignmentFill wasn't able to provide bit alignment.
(It was checking for bit-order transitions being proper before
doing alignment.)

Note there is a bug in the TDML Runner DAFFODIL-1898 for creating test
data for mixed bit/byte order tests.

Added test test_ep3 which reproduces the problem we were still getting
in Link16.

Added test scala-debug testMixedBigEndianMSBFWithLittleEndianLSBF that
shows the TDML Runner bug.

DAFFODIL-1884

3 months agoRemove src/main/resources from daffodil-core classpath.
mbeckerle [Thu, 8 Feb 2018 14:46:28 +0000 (09:46 -0500)] 
Remove src/main/resources from daffodil-core classpath.

3 months agoChange names of zip/tar/rpm binary artifacts
Steve Lawrence [Thu, 8 Feb 2018 18:03:49 +0000 (13:03 -0500)] 
Change names of zip/tar/rpm binary artifacts

Change the names of the zip, tgz, and rpm binary artifacts to include
"apache" and "incubating". Note that this does not affect the naming of
the jar artifacts at all (e.g. daffodil-lib_2.11-2.1.0.jar stays the
same). The names now look like this:

  apache-daffodil-2.1.0-incubating-bin.zip
  apache-daffodil-2.1.0-incubating-bin.tgz
  apache-daffodil-2.1.0.incubating-1.noarch.rpm

Note that the rpm file has a slightly different naming convention due to
restrictions imposed by rpm.

DAFFODIL-1896

3 months agoFix typo in url to website
Steve Lawrence [Mon, 12 Feb 2018 16:38:31 +0000 (11:38 -0500)] 
Fix typo in url to website

DAFFODIL-1890

3 months agoMove built-in-formats.xsd to test and the backwards compatibility added for it
Steve Lawrence [Thu, 8 Feb 2018 19:44:44 +0000 (14:44 -0500)] 
Move built-in-formats.xsd to test and the backwards compatibility added for it

A handful of schemas use built-in-formats.xsd as a method to get a
default set of DFDL properties. This used to be in the
edu/illinois/ncsa/daffodil namespace, but was moved to
org/apache/daffodil with the move to Apache incubation. This move would
have broken schemas, so code was added to provide backwards
compatability. This code essentially replaced instances of
edu/illinois/ncsa with org/apache/daffodil, but that could break things
if actual schema files were in edu/illinois/ncsa, which is legit and
does happen.

However, built-in-formats.xsd is intended to only be used for testing
and not actual schemas. The GeneralPurposeFormat.xsd from IBM is
provided for this purpose and should be used instead. So move
built-in-format.xsd to src/test/resources and remove the broken
backwards compatibility hack. Also update sbt subproject dependencies so
test projects depend on the core "test" so that built-in-formats.xsd is
on the test classpath. Also update CLI test infrastructure to modify
DAFFODIL_CLASSPATH to include the daffodil-lib test resource directory
for the same reason.

DAFFODIL-1897

3 months agoPrepare for 2.1.0 release v2.1.0-rc1
Steve Lawrence [Mon, 29 Jan 2018 23:00:37 +0000 (18:00 -0500)] 
Prepare for 2.1.0 release

- Remove -SNAPSHOT from version
- Add KEYS file containing Daffodil developer signing keys, initialized
  with key from Steve Lawrence
- Remove "incubating" from the generated RPM name, that is only
  necessary on the source distribution, not on convenience binaries

DAFFODIL-1881

3 months agoEnsure all sources are unix style line endings
Steve Lawrence [Fri, 5 Jan 2018 16:07:49 +0000 (11:07 -0500)] 
Ensure all sources are unix style line endings

The previous change to add the Apache license header always used unix
style line endings. If any files used dos style, they would have mixed
line endings and can be difficult to edit and read. This makes
everything consistent to use unix style line endings. There are no
changes in this patch except for line-endings.

DAFFODIL-1859

3 months agoRelicense to Apache v2
Steve Lawrence [Fri, 5 Jan 2018 16:07:46 +0000 (11:07 -0500)] 
Relicense to Apache v2

- Add LICENSE and NOTICE files for both the repo and the tar/zip/rpm
  that can be generated
- Add the Apache v2 license header where appropriate (some Scala library,
  Passera, and Open Grid Forum files maintain their existing permissive
  licensing)
- Update tests that had line number changes due to the new license header
- Add .rat-excludes file for use with Apache Rat so that it ignores test
  files and files we expect to not have a non-Apache license
- Remove sbt license generator plugin. It cannot generate the type of
  license file we want and adds extra sbt complexity for licenses it
  does not know about or packages for which it can't automatically
  determine the license. Easier to just manually maintain license files.

DAFFODIL-1859

3 months agoRemove unused files and cruft
Steve Lawrence [Fri, 5 Jan 2018 16:07:45 +0000 (11:07 -0500)] 
Remove unused files and cruft

Over the years many files have been added to the repo that are longer
needed in the repo. This includes the DFDL specificaiton, old test
files, out of date documentation, scripts that have since been replaced
by the CLI, and schemas that have been moved to external repositories.
This removes these files from this repository.

DAFFODIL-1859

3 months agoReplace instances of ncsa.illinois.edu with apache.org
Steve Lawrence [Fri, 5 Jan 2018 16:07:42 +0000 (11:07 -0500)] 
Replace instances of ncsa.illinois.edu with apache.org

- Update package names to be org.apache.daffodil. This breaks API
  backwards compatibility, but only requires a small change to update
  imports and our user base is relatively small right now, so this
  should not affect too many people.
- Add new xml 'daf' namespace for daffodil.apache.org. Backwards
  compatibility is maintained with the previous namespace, and provides
  a pattern for adding new namespace versions for when that may be
  needed. All tests are updated to use the new namespace.
- Some external schema files might reference built-in-formats.xsd in an
  xs:include tag, using the old edu/illinos/ncsa/ directory structure.
  Backwards compatability is maintained by automatically replacing and
  schemaLocations to edu/illinois/ncsa/daffodil/ with
  org/apache/daffodil. A warning id displaying saying the path is
  deprecated.

DAFFODIL-1859

3 months agoMove directory layout from edu/illinois/ncsa to org/apache
Steve Lawrence [Fri, 5 Jan 2018 16:07:40 +0000 (11:07 -0500)] 
Move directory layout from edu/illinois/ncsa to org/apache

This does not change content, this just moves files to the new
org.apache namespace directory layout. All changes should appear
like a 100% rename.

DAFFODIL-1859

3 months agoFix unparser interactions of bitOrder with suspensions/splits.
mbeckerle [Tue, 6 Feb 2018 20:49:21 +0000 (15:49 -0500)] 
Fix unparser interactions of bitOrder with suspensions/splits.

Call ustate.bitOrder after each term unparser.
setPriorBitOrder in a few places where it was missing.

This corrects an oversight where the unparser was not modified to handle
bit order changes properly. Because few data formats change bit orders
in the middle of data, this error went unrecognized until it was
discovered in NACT Link16 data where the NACT envelope is MSBF, but the
Link16 payload is LSBF.

Test bitOrderOVC1 exercises changing bit orders where a bit order change
occurs, on a byte boundary, but alignment fill is inserted before to
fill a partial byte. The alignment fill for the fragment byte must be
LSBF even though the element having that alignment fill is MSBF.

The tests test_ep1 and test_ep2 are also envelope-payload tests with BE MSBF
envelop and LE LSBF payloads.

DAFFODIL-1884

3 months agoUpdate wiki links to daffodil.apache.org
Steve Lawrence [Wed, 7 Feb 2018 14:58:21 +0000 (09:58 -0500)] 
Update wiki links to daffodil.apache.org

User related documentation is moved from the wiki to the
daffodil.apache.org website. Update the links to reference those pages.

DFDL-1890

3 months agoRemoved working test from scala-debug
Josh Adams [Tue, 30 Jan 2018 18:46:28 +0000 (13:46 -0500)] 
Removed working test from scala-debug

Dave noticed that I forgot to remove the reference to a working test
from scala-debug

3 months agoFixed bug in calculating bit length for delimited unparsing
Josh Adams [Wed, 24 Jan 2018 19:12:53 +0000 (14:12 -0500)] 
Fixed bug in calculating bit length for delimited unparsing

 - getBitLength now simply returns 0 for delimited unparsers
 - Refactored *FromBigInteger functions to be more clear in how the
 packed data is padded
 - Refactored delimited unparsers to not take a minLength parameter
 - Moved existing tests out of scala-debug that now work
 - Added several test cases for delimited parsing of packed numbers
 - Added some unparser test cases for delimited unparsing.

DAFFODIL-1739

3 months agoTDML Runner no longer strips all attributes.
Mike Beckerle [Tue, 12 Sep 2017 16:12:16 +0000 (12:12 -0400)] 
TDML Runner no longer strips all attributes.

Modified tests that were using type="..." instead of xsi:type="..."

XMLUtils for comparison of test results modified to ignore dafint, and
xsi:type, but preserve all other attributes.

Moved working test test_testNoRootUnnecessaryBinding to scala/test.

DAFFODIL-1846

3 months agoPerformance improvements around FormatInfo change.
mbeckerle [Fri, 12 Jan 2018 20:27:30 +0000 (15:27 -0500)] 
Performance improvements around FormatInfo change.

Flattened out EvaluatableBase since it was only used one place.

Simplified methods - e.g., apply() gone.

Inlined simple methods.

Combined CharsetEv and CheckCharsetEv together into one so only one
evaluation is needed.

Introduced BitsCharset which is NOT derived from java's
java.nio.charset.Charset because well that class has a lot of final
methods. We need to be able to create a proxy charset that delegates to
an existing java Charset.

Because of all the final methods in java Charset, there is no way to do
this.

So instead we have Daffodil's own BitsCharset which implements an API
very close to that of java's Charset. But BitsCharset is NOT derived
from java Charset - which is fine because we are the only ones calling
it anyway.

A BitsCharset implements the additional bits-oriented methods on the
BitsCharset and on the encoders and decoders it creates.

Added Methods to allow us to skip mandatory alignment calculations.

Improve performance by caching FormatInfo members in the PState/UState.

Caches are cleared every parse1 or unparse1 call. So the FormatInfo
members are computed only once every parse or unparse.

Merged DFDLCharset and BitsCharset.

Changed all use of java.nio.charset.Charset... to JavaCharset...

Merged NBitsWidthCharset with NonByteSizedCharset into NBitsWidth_BitsCharset

Refactored to avoid code duplication.

Removed redundant (and error prone) ParserObject and UnparserObject.
All parsers and unparsers now must explicitly define
runtimeDependencies. Inheriting an empty one, by mistake, is not possible,
though one could still inherit it from a base class for the particular kind
of parser/unparser.

Fixed bug where bitOrder change wasn't being checked.

Caused test test_packed5Bit6 to fail. Fixed. Test evolved, but now
solicits the kind of change error that was expected.

DAFFODIL-1876, DAFFODIL-1597, DAFFODIL-1001

3 months agoImprove XMLTextInfosetOutputter output
Steve Lawrence [Wed, 24 Jan 2018 13:38:57 +0000 (08:38 -0500)] 
Improve XMLTextInfosetOutputter output

- Write the XML declaration in startDocument so that some tools (e.g.
  file) see the output as XML, instead of something else like HTML
- Call flush() in endDocument to ensure all XML output is written

DAFFODIL-1844, DAFFODIL-1871

3 months agoMerge pull request #16 from jadams-tresys/daffodil-1739-packedDecimal
jadams-tresys [Tue, 23 Jan 2018 17:41:40 +0000 (12:41 -0500)] 
Merge pull request #16 from jadams-tresys/daffodil-1739-packedDecimal

Implemented packed binary formats

3 months agoImplemented packed binary formats (Packed Decimal, BCD, IBM4690Packed) 16/head
Josh Adams [Thu, 26 Oct 2017 13:24:29 +0000 (09:24 -0400)] 
Implemented packed binary formats (Packed Decimal, BCD, IBM4690Packed)

 - Implemented parsers and unparsers for Packed, BCD, and IBM4690
 - Implemented binaryPackedSignCodes and binaryNumberCheckPolicy
 - Implemented the various restrictions in the DFDL spec for the packed
 formats (ie. length and alignment must be multiples of 4 bits)
 - Added test suite to verify the conversion functions for the various
 formats
 - The delimited parsers for these formats are currently limited to only
 supporting ISO-8895-1 encoding, just like hexBinary (DAFFODIL-1541)

DAFFODIL-1739

4 months agoPrepend rather than append when adding required evaluations to the root OOLAGContext
Steve Lawrence [Thu, 18 Jan 2018 17:25:32 +0000 (12:25 -0500)] 
Prepend rather than append when adding required evaluations to the root OOLAGContext

Setting the OOLAG context causes an append the required evaluations to
the root requiredEvalFunctions list. Because it is an append, scala will
make a copy of the requiredEvalFunctions list and append the items to
that copy. For very large schemas with lots of Expressions (which calls
setOOLAGContext), this can result in a huge amount of copies, resulting
in large performance slowdowns during schema compilation. To prevent
this, change the append to a prepend, which does not require a copy of
the very large root requiredEvalFunctions list and will only copy the
much smaller requiredEvalFunctions list from the child. This greatly
reduces the copying and improves schema compilation time.

DAFFODIL-1877

4 months agoFix so query-style paths are allowed if unambiguous at runtime.
mbeckerle [Thu, 28 Dec 2017 22:20:47 +0000 (17:20 -0500)] 
Fix so query-style paths are allowed if unambiguous at runtime.

This fix done for nato-stanag-5516 latest schema which has choice branches that share an element name, and expressions that then refer to that element.
(That Link16 is currently broken is DAFFODIL-1869)

So /foo/bar if bar has multiple occurrances, but isn't an array, is
going to be accepted for compiling, though with a warning.
At runtime it is going to test for multiple values, and if there
are more than 1 it will issue a runtime SDE.

Someday it would be good to improve analysis to recognize choices so
that these warnings aren't issued in that case.

Infoset changed so we get a Runtime SDE if expression evaluates to more
than one node.

Tests added which insure one gets this warning, and the runtime SDE in
proper situations. See test_queryStyle1 and test_queryStyle2.

Modified TDML runner to check for warnings whether or not we also get
errors. This fixes DAFFODIL-1583.
Tests test_warningWhenExpectingSuccess and
test_warningWhenExpectingError are in the TDML Runner tests.

Modified expression compiler so that one can issue warnings from it, and
they get saved on the associated schema component.

Modified debugger to capture and issue any warnings that come from path
expression compilation at debug time.

Eliminated circularity bug problem caused by asking expression tree for
isError which checks errors for *everything*.

Refactored confusing ExpresssionCompiler class.

Methods are now explicitly named: compileProperty, compileDelimiter, and
compileExpression, with shared helper routines.

DAFFODIL-1869, DAFFODIL-1773, DAFFODIL-1583

4 months agoOptimizations with Infoset HashMap lookups/insertions
Steve Lawrence [Fri, 5 Jan 2018 16:07:33 +0000 (11:07 -0500)] 
Optimizations with Infoset HashMap lookups/insertions

- Add a new variable to DPathElementCompileInfo that keeps track of
  which path steps are used in an expression. Because the variable is
  set when expression are compiled, which relies on the
  DPathElementCompileInfo already existing, this new variable is a var
  that is toggled during expression compilation. This replaces the
  notReferencedByExpressions in the ElementRuntimeData, which isn't
  actually used, and can't work since the ERD must exist before
  expression compilation.
- Use this new variable to only insert elements into the Infoset fast
  lookup hash map if that flag is set and thus might be needed in an
  expression. This minimizes the number of hash insertions, greatly
  improving performance.
- Add a new tunable, allowExternalPathExpressions, which allows one to
  evaluate expression on path steps that were not compiled at schema
  compilation time (e.g. using expressions when debugging). When this
  tunable is true and a path step is not found in the fast lookup hash
  map, a slower linear search is performed to see if the element exists.
  This is slower, but should only occur when debugging/testing. This
  tunable is automatically set when debugging is enabled.
- Remove the resetChildArray function. This isn't used anywhere and is
  not adequately tested, and it isn't clear what it is supposed to do.
- In the hashmap, rather than checking if the hashmap containsKey()
  and then calling get() if true, just call get() and check for null for
  existence. This avoids an extra hash lookup.
- Use += rather than append() to add to an ArrayBuffer. The append() takes a
  vararg, which causes scala to allocate a WrappedArray for a single
  element. Instead, use += which avoids that allocation. Similary,
  instead of the companion object ArrayBuffer(), which uses a vararg
  constructor, just use "new ArrayBuffer()" and append to it using +=,
  also avoiding a WrappedArray allocation.
- Use reduceToSize rather than dropRight with the ArrayBuffer. dropRight
  is more general and slower than reduceToSize.
- Make the childNodes array non-lazy. The vast majority of complex
  elements will end up using the array and causing it to be allocated,
  so this removes all the lazy checks to determine if it was initialized
  or not.

DAFFODIL-1860

4 months agoRevised daffodil-io module to require passing in a FormatInfo object. 20/head
Mike Beckerle [Wed, 31 May 2017 13:44:57 +0000 (09:44 -0400)] 
Revised daffodil-io module to require passing in a FormatInfo object.

This is just one part in addressing this major issue of daffodil
schema compiler slowness/speed.

It also fixes DAFFODIL-1843 (bit order and OVC interaction bug)

The FormatInfo object is used to obtain the very commonly used format
properties like byteOrder, bitOrder, etc. This eliminates the need to
call setters that set these properties, eliminates the need to
save/restore them on backtracking, and when evaluating unparser
suspensions. Instead, the daffodil runtime just passes an object
(the PState/UState) which contains this information - getting it from
the ERD of an element most likely, or if runtime defined, from an
Evaluatable object which caches the property value on the infoset
element.

The state/finfo has a ref to the processor which must be set so that
FormatInfo can obtain the right ERD/MGRD from that.

THis change eliminates all the "change" processors
(e.g., EncodingChangeParser, ByteOrderChangeParser, and
BitOrderChangeParser and
unparser variants thereof) the insertion of which uses compile-time
context-upward analysis. This should help with increasing sharing and
avoiding duplicated work and data structures in the schema compiler
(DAFFODIL-1444)

There is some overhead in this change - performance impact will have to
be measured. It should reduce backtracking overheads to compensate
perhaps.

Unparser runtime was improved also to remove unneeded DOS splits.

We were splitting the DOS even for evaluations of just expressions -
things that couldn't write to the DOS at all. So we were creating
lots of known zero-length buffering DOS for no reason.

Improved scaladoc and comments to the suspension-related code
areas.

It seems our test coverage of LE_MSBF is thin at the unit test level.

Two TDML tests moved from scala-debug to scala-new as they work now.

Enhance TDML runner for config, defaultConfig, in files or embedded.

Note: Entity replacer/cooker for fill byte (FillByteCooker) isn't
behaving
correctly.  See comments in DAFFODIL-1646.

DAFFODIL-1444, DAFFODIL-1843, DAFFODIL-1868

4 months agoUpdate eclipse classpaths to work with latest.
mbeckerle [Mon, 18 Dec 2017 21:35:02 +0000 (16:35 -0500)] 
Update eclipse classpaths to work with latest.

4 months agoClean up SBT warnings
Steve Lawrence [Tue, 2 Jan 2018 16:35:27 +0000 (11:35 -0500)] 
Clean up SBT warnings

- Change how we disable publishing some subprojects by setting "skip in
  publish" to true. The previous method of changing publishArtifact and
  packagedArtifacts was a hack that broke some things, including "sbt
  updateClassifiers", which resulted in an error message about "a
  required artifact is not listed by module descriptor".
- Both sbt and the sbt-native-pacakger plugin have transitive
  dependencies to different versions of plexus-utils and guava, but with
  different major version numbers. SBT interprets the major version
  number differences as having dependencies that are potentially not
  binary compatible, resulting in a warning message when starting SBT.
  It appears the binary incompatibilities, if they exist, do not affect
  building Daffodil, so this specifies dependencyOverrides in
  plugins.sbt to force use of the latest dependencies and remove the
  warning.
- Modify the 'nopublish' val to also disable 'sbt publishM2' when
  publishing to a local maven repository.

DAFFODIL-1873

5 months agoFix eclipse classpath for daffodil-io to exclude test dirs.
mbeckerle [Fri, 15 Dec 2017 17:52:02 +0000 (12:52 -0500)] 
Fix eclipse classpath for daffodil-io to exclude test dirs.

DAFFODIL-1872

5 months agoRename CLI tests directory from 'scala-cli' to 'scala'
Steve Lawrence [Mon, 11 Dec 2017 20:04:39 +0000 (15:04 -0500)] 
Rename CLI tests directory from 'scala-cli' to 'scala'

Commit cf322c0e5c updated the sbt configuration so that running CLI
tests required one to do 'sbt daffodil-cli/test' so that it could use
the normal 'src/test/scala' directory structure as other tests. However,
that commit forgot to rename the 'scala-cli' directory 'scala', prevent
sbt from finding and running any of the cli tests. This does that rename
so 'sbt daffodil-cli/test' can actually find the tests.

DAFFODIL-1857

5 months agoFix invalid URLs in source files
Steve Lawrence [Thu, 7 Dec 2017 13:00:40 +0000 (08:00 -0500)] 
Fix invalid URLs in source files

- Fixes SCM information for the move to gitbox
- Fixes location of the DFDL specification on https://daffodil.apache.org

DAFFODIL-1870

5 months agoUpdate sbt to 1.x, simplifing build config and replacing deprecated syntax
Steve Lawrence [Thu, 30 Nov 2017 18:30:52 +0000 (13:30 -0500)] 
Update sbt to 1.x, simplifing build config and replacing deprecated syntax

- Remove build.scala. Everything is now in the global build.sbt or
  build.sbt specific to a subproject
- Fix macrolib so it no longer needs to be published--it now only has a
  compile time dependency and mappings are added to copy the generated
  macros to the correct location
- Remove the 'sbt cli' tasks. Instead, make the cli tests use the exact
  same directory structure as tests (meaning scala-debug can now work), but
  do not aggregate cli in the root project. This means that to run any
  cli commands, one must specify the daffodil-cli subproject, e.g. 'sbt
  daffodil-cli/test' (also requires modificaations to the Travis CI
  configuration)
- Move scala-new tests to scala and remove he 'sbt new' commands. The
  'new' workflow added extra overhead and is no longer needed
- Remove sbt pgp plugin. That should be configured locally in ~/.sbt if
  a user needs to published signed releases

DAFFODIL-1857

5 months agoFix truncation bug when unparsing escapeKind="character"
Steve Lawrence [Thu, 30 Nov 2017 13:02:33 +0000 (08:02 -0500)] 
Fix truncation bug when unparsing escapeKind="character"

Daffodil had a logic bug when unparsing a field with an escape scheme
with escapeKind="character". In such a case, we run the field DFA
looking at each character to unparse to see if it could potentially
start a delimiter and thus may need to be escaped. If we do find such a
character, we then run each delimiter DFA on the input to determine if
the delimiter actually existed or if we just found a character the looks
like it starts a delimiter but actually doesn't. We then gather up
successful matches for a longest match check. This logic is all
correct.

The problem is that for escapeKind="character", each time a delimiter
DFA failed to match, we would move the field register to the next rule. So
if we checked for 10 delimiters and 9 failed, we would advance the field
register 9 times, which is wrong and would cause the field register to
end prematurely, leading to truncated unparsed data.

Instead, we should wait until all the delimiter DFAs are checked, and
only if none match (i.e. success.isEmpty is true) then we advance the
field register by one rule to add that character to the field. This
patch fixes the text delimited unparser to use this logic for
escapeKind="character". This is actually very similar logic that
escapeKind="block" had, so this matches that correct behavior. Comments
were also added to clarify this section of code.

DAFFODIL-1851

5 months agoEnsure marks are always returned to the markpool
Steve Lawrence [Mon, 6 Nov 2017 22:59:54 +0000 (17:59 -0500)] 
Ensure marks are always returned to the markpool

MarkPool leaks have been notoriously difficult to track down. This is
partly due to the fact that we don't check for leaks until the very end
of parsing, so we don't know there is a leak until well after it has
happened, giving us little information about where or why.

Additionally, we do not currently return leaked marks. Since marks are
stored in a ThreadLocal, and since they aren't returned, leaked marks
are forever leaked, and every subsequent parse will cause an assertion
due to the final validation check.

This modifies the users of marks to always return marks so the
processing could potentially continue if an API user wanted to (like in
the case of NiFi). This also throws an invariant failed assertion a mark
is leaked so we know exactly where it occurred. Furthermore, if an
exception was the cause of a mark leak, the stack trace of the exception
is captured to help determine the original cause.

DAFFODIL-1862

5 months agoRemove charsReadUntilDelim from Registers
Steve Lawrence [Wed, 29 Nov 2017 16:42:21 +0000 (11:42 -0500)] 
Remove charsReadUntilDelim from Registers

This field is not used and currently creates a memory leak since it is
never reset and frequently appended to. Since it is not used, just remove
it.

DAFFODIL-1867

5 months agoAdd travis.yml file for continuous integration with Travis CI
Steve Lawrence [Thu, 26 Oct 2017 16:50:39 +0000 (12:50 -0400)] 
Add travis.yml file for continuous integration with Travis CI

- This tests compiling source, tests, and debug tests, running all tests
  and cli tests, building CLI zip/tar/rpm, and building javadoc and
  scaladoc.
- The rpm package is needed for rpmbuild used by rpm:packageBin
- Unsets _JAVA_OPTS, which causes strings to be written to stdout,
  interfering with CLI tests

DAFFODIL-1858

5 months agoFix eclipse classpaths and application that maintains them. 9/head
mbeckerle [Wed, 29 Nov 2017 13:41:19 +0000 (08:41 -0500)] 
Fix eclipse classpaths and application that maintains them.

Problem was being caused by duplicate entries in bundles and jars
subdirs of lib_managed.

sbt populates same jars into both bundles and jars directories
for a number of dependencies.

Duplicates removed, and tool now checks and excludes duplicates.

DFDL-1866

5 months agoEliminate spurious SDE when using lengthKind pattern on all-text file. 7/head
mbeckerle [Wed, 29 Nov 2017 12:32:16 +0000 (07:32 -0500)] 
Eliminate spurious SDE when using lengthKind pattern on all-text file.

The isScannable computation is incorrect. For entirely textual formats
in one encoding it still comes up with isScannable false.

This causes a SDE if you are using lengthKind pattern. The SDE says the
data must be scannable in order to use lengthKind pattern.

This applies the patch 22b7bc7238a5434570ebd088357c9f25bf09a8c9 from
support/v2.0.x branch to the master branch.

There has been enough change to master (files moved, removed, etc.), and
some functional change affecting test behavior, and this is such a small
change set, that applying it by just re-editing the files was easiest;
hence, I did not do a rebase and then resolve the conflicts, nor use any
git cherry-pick operation.

DAFFODIL-1864

5 months agoUpdates for Apache incubation
Steve Lawrence [Thu, 26 Oct 2017 16:45:12 +0000 (12:45 -0400)] 
Updates for Apache incubation

- Update URLs to point to apache infrastructure
- Add Apache incubating DISCLAIMER
- Remove the use of git to determine version numbers. The version is
  now hardcoded in build.sbt and needs to be updated manually. Not only
  does this reduce complexity, it allows one to build Daffodil from
  source tarballs without needing git installed and without needing
  certain branches and tags.
- Remove the NCSA resolver, not needed for any dependency resolution

DAFFODIL-1856

6 months agoProperty Resolution - part of fixing schema compilation 5/head
mbeckerle [Mon, 23 Oct 2017 21:50:21 +0000 (17:50 -0400)] 
Property Resolution - part of fixing schema compilation

Refactors property resolving onto elementrefs and grouprefs so
as to eliminate use of backrefs when accessing properties.

Reorganized DSOM for model groups and references to them.

Converted OOLAGHost, SchemaComponent etc. down to LocalElementBase
into traits so that I can mix them the way I need to so that
Global elements aren't terms, etc.

Group references are allowed to carry annotations like dfdl:assert. It
is global group definitions that cannot. (They can't have annotations
period. Annotations go on the model group within the global group
definition)

SequenceBase is a ModelGroup is a Term, and is
the base of Sequence and SequenceGroupRef.

SequenceGroupDef is not a SequenceBase. It is GroupDefLike in that
it has children. It is not a Term, because the SequenceGroupRef that
refers to it is the Term.

Groups work exactly analogously to Elements now. For Elements, the Terms
are
LocalElementDecl and ElementRef. A GlobalElementDecl is *not* a Term.

Added package scaladoc for dsom and grammar packages.

Decided not to rename ModelGroup, nor ElementBase this go-round.

Decided not to try to fix precision of diagnostic messages - most will
have the location of the element ref/group ref not that of the
referenced definition now.

DFDL-1855

6 months agoRemove concept of slots from InfosetImpl.
Taylor Wise [Wed, 18 Oct 2017 16:25:30 +0000 (12:25 -0400)] 
Remove concept of slots from InfosetImpl.

Remove slotInParentIndex

Delete use of childSlot in UpDownMoves.scala.

DFDL-1854

8 months agoAdded test_bitOrderOVC1 which illustrates DFDL-1843
mbeckerle [Thu, 14 Sep 2017 21:13:57 +0000 (17:13 -0400)] 
Added test_bitOrderOVC1 which illustrates DFDL-1843

This is a Runtime SDE due to an interaction of bitOrder with
outputValueCalc, discovered originally in the Link16 schema, but
isolated here outside of that context.

DFDL-1843

8 months agoAdding tests for tunables and fixing typo in setTunable rel/v2.0.0
Beth Finnegan [Thu, 31 Aug 2017 22:37:34 +0000 (18:37 -0400)] 
Adding tests for tunables and fixing typo in setTunable

DFDL-1143

8 months agoDaffodilTunables is no longer a globally accessed class.
Taylor Wise [Wed, 30 Aug 2017 18:10:58 +0000 (14:10 -0400)] 
DaffodilTunables is no longer a globally accessed class.

SSRD/ERD, PState/UState, Compiler, DataProcessor receive
an immutable instance of DaffodilTunables.

DFDL-1143

8 months agoFix xs:hexBinary equality check
Josh Adams [Tue, 29 Aug 2017 18:53:16 +0000 (14:53 -0400)] 
Fix xs:hexBinary equality check

Before any sort of equality check on a xs:hexBinary element would need
to be converted to a string. I have now added an equality checker for
byte arrays that allows direct comparison of xs:hexBinary elements
without the need for conversion.

DFDL-1618

8 months agoFix eclipse classpath errors.
Mike Beckerle [Tue, 29 Aug 2017 17:58:50 +0000 (13:58 -0400)] 
Fix eclipse classpath errors.

8 months agoEnsure Bit/ByteOrderChange parsers always exist at root
Steve Lawrence [Fri, 25 Aug 2017 13:25:29 +0000 (09:25 -0400)] 
Ensure Bit/ByteOrderChange parsers always exist at root

If the dfdl:byteOrder or dfdl:bitOrder properties were not provided,
Daffodil did not complain, and it would not insert a Bit/ByteOrderChange
parser at root. This meant that Daffodil would use a default value,
which in some cases caused incorrect behavior. It also meant that the
check for valid bit and byte orders (e.g. not bigEndian &
leastSignificantBitFirst) never occurred since that only happend in
ByteOrderChange parsers, meaning it could allow invalid bit/byte order
combinations.

This changes Daffodil so the root element will always insert Bit and
ByteOrderChange parsers, ensuring that the validity of the properties
are correct and ensuring correct parsing/unparsing. This means that
byteOrder is now always required, even in some cases where it might not
technically be needed.

This also modifies the initial UState/PState creation to not set
bit/byte order, but to instead rely on the Bit/ByteOrderChange parsers
to always be inserted first thing.

DFDL-1835

8 months agoCalculate the approximate length of delimited and pattern lengthKinds for alignment
Steve Lawrence [Fri, 25 Aug 2017 13:09:09 +0000 (09:09 -0400)] 
Calculate the approximate length of delimited and pattern lengthKinds for alignment

By assuming the length of delimited and pattern lengthKinds was 1,
Daffodil was unable to optimize out some alignment unparsers, which
could lead to deadlocks.

This changes that so the length of delimited or pattern lengthKinds is a
multiple of the length of the encoding. This allows Daffodil to optimize
out some alignment unparsers and prevent deadlocks.

DFDL-1836

8 months agoFix Xerces resource resolution for includes/imports
Steve Lawrence [Mon, 21 Aug 2017 20:42:17 +0000 (16:42 -0400)] 
Fix Xerces resource resolution for includes/imports

After we found a resource (like from an include/import), we reported the
location to Xerces incorrectly. For example, say we resolved the
systemID at

  org1/xsd/payload.xsd

to the absolute URI at

  file:/foo/bar/baz/org1/xsd/payload.xsd

When we created the new Input to return where we found payload.xsd to
Xerces, we set the systemID to the original relative systemID
(org/xsd/payload.xsd), and set the baseURI to the absolute URI
(file:/foo/bar/baz/org1/xsd/payload.xsd). To Xerces, this meant that the
resource was found at the first path relative to the second path. But
the first path relative to the second path is

  file:/foo/bar/baz/org1/xsd/org1/xsd/payload.xsd

So parts of the path end up doubled, and Xerces cannot actually find the
resource. We thought this was a bug in Xerces and added heuristics to
remove these doubled paths, but upon further inspection, it was just a
bug in how we created Input's that Xerces used.

This patch fixes this so that the Input sets the systemId to the
resolved absolute URI, and does not set a baseURI. Xerces will not try
to do any relative stuff and the absolute resource will work. This also
means we can remove the heuristics that tried to remove doubled paths
(but which did not actually work in non-trivial cases).

Also, fix how arrayIndexStack and occursBoundsStack modifications are
undone when errors occurr with Arrays. Rather than the Array pushing and
a child rep parser popping on error, the array should do both the push
and pop. The logic was wrong before and things were not popped correctly
in some cases.

DFDL-1832, DFDL-1183

8 months agoAdded new test-stdLayout project for testing include/import.
Mike Beckerle [Fri, 18 Aug 2017 21:55:53 +0000 (17:55 -0400)] 
Added new test-stdLayout project for testing include/import.

This new project (within daffodil) is for testing the standard project
layout. In particular, there are include/import bugs associated with
it.

There is a test in scala-debug which fails with a path containing
.../org2/xsd/org2/xsd....
Which is clearly wrong given that the directory is
src/main/resources/org2/xsd

Tests cover cases where a schema file in
src/main/resources/org1/xsd tries to include one from
src/main/resources/org2/xsd.

And where a schema file in
src/test/resources/org2/xsd tries to include one from
src/main/resources/org2/xsd.

And where a TDML embedded schema tries to include one from
src/main/resources/org2/xsd.

DFDL-1832

8 months agoFixed test embedded-with-include so it actually includes.
Mike Beckerle [Wed, 16 Aug 2017 20:18:09 +0000 (16:18 -0400)] 
Fixed test embedded-with-include so it actually includes.

Had cut/paste error and the test case was requesting the wrong schema.

8 months agoAdding test for bit order without byte order specified
Beth Finnegan [Tue, 22 Aug 2017 18:47:11 +0000 (14:47 -0400)] 
Adding test for bit order without byte order specified

DFDL-1468

9 months agoEnsure the infoset exists before trying to display it in the debugger
Steve Lawrence [Fri, 18 Aug 2017 14:01:03 +0000 (10:01 -0400)] 
Ensure the infoset exists before trying to display it in the debugger

If you run 'info infoset' before stepping at least once, there will be
no infoset to visit. This checks to make sure that an infoset exists
before trying to print it in the debugger.

DFDL-1834

9 months agoSDE when arrays or optional elements contain dfdl:outputValueCalc property
Steve Lawrence [Thu, 17 Aug 2017 14:18:40 +0000 (10:18 -0400)] 
SDE when arrays or optional elements contain dfdl:outputValueCalc property

DFDL-1546

9 months agoModify test to verify that dfdl:inputValueCalc and dfdl:outputValueCalc cannot be...
Steve Lawrence [Thu, 17 Aug 2017 14:59:32 +0000 (10:59 -0400)] 
Modify test to verify that dfdl:inputValueCalc and dfdl:outputValueCalc cannot be on the same element

DFDL-1027

9 months agoAdded some tests for fixed length strings
Josh Adams [Fri, 4 Aug 2017 18:30:02 +0000 (14:30 -0400)] 
Added some tests for fixed length strings

Testing situations with fixed length strings with a default value and
fixed length string with a length of 0

9 months agoAdd license information for ICU
Steve Lawrence [Thu, 17 Aug 2017 13:29:35 +0000 (09:29 -0400)] 
Add license information for ICU

The ICU package does contain license information, but the link it points
to is dead. Manually override it to a link in the svn repo that works.

DFDL-1825

9 months agoThrow an Not Yet Implmemented SDE for encodingErrorPolicy="error"
Steve Lawrence [Wed, 16 Aug 2017 16:21:49 +0000 (12:21 -0400)] 
Throw an Not Yet Implmemented SDE for encodingErrorPolicy="error"

It isn't supported and can result in weird behavior and mark pool leaks.
Best to just not allow it.

DFDL-1828

9 months agoImprove nil checking for infoset outputters
Steve Lawrence [Wed, 16 Aug 2017 11:43:55 +0000 (07:43 -0400)] 
Improve nil checking for infoset outputters

The InfosetOutputters use _.isNilled to determine if an infoset element
is nil. However, _.isNilled can throw an exception if the nilled flag
has not been set (e.g. while debugging). This could lead to thrown
exceptions during the 'info infoset' debugger command. This patch adds a
new isNilled helper function to the InfosetOutputter trait that performs
the correct logic to check if the nilled flag is set and determine if an
element is nilled, and updates all the InfosetOutputters to use this
function.

DFDL-1829

9 months agoUpdating copyright date in LICENSE
Beth Finnegan [Tue, 15 Aug 2017 19:40:55 +0000 (15:40 -0400)] 
Updating copyright date in LICENSE

9 months agoUpdating input for automated CLI test
Beth Finnegan [Fri, 11 Aug 2017 15:27:40 +0000 (11:27 -0400)] 
Updating input for automated CLI test

9 months agoUpdated line counter to match current file structure.
Mike Beckerle [Mon, 7 Aug 2017 21:40:22 +0000 (17:40 -0400)] 
Updated line counter to match current file structure.

Also includes NiFi and Spark, all new DFDL schemas, etc.

9 months agoModify isError API logic to support validation errors
Steve Lawrence [Mon, 7 Aug 2017 14:54:01 +0000 (10:54 -0400)] 
Modify isError API logic to support validation errors

- isError now returns true if either there are processing errors OR
  validation errors
- New methods, isProcessingError and isValidationError, are added to
  give the ability to differentiate why isError is true
- Remove the canProceed() method and deprecate it in the java/scala API.
  This is just a wrapper around !isError
- Rename status to processorStatus to clearly differentiate between the
  new validationStatus
- Remove unused isValidationSuccess method
- Remove status from the processor constructors--this is a holdover from
  when PState was immutable

DFDL-1821

9 months agoAdded simple test to verify division expressions
Josh Adams [Thu, 3 Aug 2017 19:13:16 +0000 (15:13 -0400)] 
Added simple test to verify division expressions

This has already been fixed in commit
3153e271dab64b029bbdde627bba14c42f370357 but no tests were added to
cover the example given in the bug report, dealing with number types
getting mixed up, ending in a divide by zero.

DFDL-1688

9 months agoAdding tests for outputValueCalc in hidden groups.
Beth Finnegan [Wed, 2 Aug 2017 23:57:35 +0000 (19:57 -0400)] 
Adding tests for outputValueCalc in hidden groups.

DFDL-1546

9 months agoMove TestOutputValueCalcAndAlignment from scala-new to scala
Steve Lawrence [Wed, 2 Aug 2017 13:37:50 +0000 (09:37 -0400)] 
Move TestOutputValueCalcAndAlignment from scala-new to scala

Verifies DFDL-1518

9 months agoAdd CLI delimiterStack test
Steve Lawrence [Wed, 2 Aug 2017 12:56:03 +0000 (08:56 -0400)] 
Add CLI delimiterStack test

DFDL-1283

9 months agoComment out unused imports in scala-new
Steve Lawrence [Wed, 2 Aug 2017 11:30:11 +0000 (07:30 -0400)] 
Comment out unused imports in scala-new

9 months agoClosing Ticket: Added test to add coverage for case when value is false.
Taylor Wise [Tue, 1 Aug 2017 20:46:50 +0000 (16:46 -0400)] 
Closing Ticket: Added test to add coverage for case when value is false.
Moved existing test and new test to scala from scala-new.

DFDL-437

9 months agoIgnore all *.sbt files in the root directory except for build.sbt
Steve Lawrence [Tue, 1 Aug 2017 18:49:47 +0000 (14:49 -0400)] 
Ignore all *.sbt files in the root directory except for build.sbt

This is useful for automated build systems to add custom *.sbt files to
add customizations to the build. For example, adding custom sbt
configurations to publish to a local repository. Note that this is
necessary since our sbt configurations makes a release a SNAPSHOT if
there are any untracked files (e.g. custom sbt file) or files with
changes. If we don't ignore this *.sbt files, then it will also build a
SNAPSHOT. This all helps Daffodil build cleanly on a jenkins automated
build and publishing to artifactory.

DFDL-1666

9 months agoFix test to have correct value and move out of debug
Steve Lawrence [Tue, 1 Aug 2017 18:38:21 +0000 (14:38 -0400)] 
Fix test to have correct value and move out of debug

F7FF came frome the specification, but it is wrong. It should be F7DC.
Fix the tests and moved it out of debug.

DFDL-1455

9 months agoMoved scala-new to scala tests to close out Boolean impl tickets.
Mike Beckerle [Tue, 1 Aug 2017 14:12:48 +0000 (10:12 -0400)] 
Moved scala-new to scala tests to close out Boolean impl tickets.

DFDL-177, DFDL-178, DFDL-243, DFDL-461, DFDL-462

9 months agoMoved union tests out of scala-new
Josh Adams [Tue, 1 Aug 2017 12:13:47 +0000 (08:13 -0400)] 
Moved union tests out of scala-new

9 months agoFix TestSchemaCache.scala, which got corrupted.... not sure how.
Mike Beckerle [Mon, 31 Jul 2017 21:45:54 +0000 (17:45 -0400)] 
Fix TestSchemaCache.scala, which got corrupted.... not sure how.

9 months agoClosing DFDL-1521. Moving test scala-new to scala.
Mike Beckerle [Mon, 31 Jul 2017 20:38:31 +0000 (16:38 -0400)] 
Closing DFDL-1521. Moving test scala-new to scala.

9 months agoClosing DFDL-1576, move tests to scala from scala-new
Mike Beckerle [Mon, 31 Jul 2017 20:32:51 +0000 (16:32 -0400)] 
Closing DFDL-1576, move tests to scala from scala-new