daffodil.git
2 years agoAdd LICENSE/NOTICE files to be included in jars v2.6.0 v2.6.0-rc2
Steve Lawrence [Wed, 8 Apr 2020 21:11:48 +0000 (17:11 -0400)] 
Add LICENSE/NOTICE files to be included in jars

We currently include the root LICENSE and NOTICE file in each of the
jars that we create and distribute. However, those files define the
license of all the source code in the repository, and is not specific to
each submodule the jar represents. Furthermore, the license references
files that don't actually exist in a compiled jar. We really need a
unique LICENSE and NOTICE for each submodule we distribute to include in
each jar.

This adds those unique LICENSE and NOTICE files to submodules that we
distribute. Aside from daffodil-lib, each of these submodule includes
only Daffodil code, and so no additional licensing information is needed
aside from the standard Apache v2 license and Daffodil notice. The
LICENSE for daffodil-lib has additional information for the few things
that are included in that jar (Scala library code, XSD schema, and
passera).

Also fix "the these" typo in subcomponents blurb in license.

DAFFODIL-2321

2 years agoRequire grouping and decimal separators for non-integer types
Steve Lawrence [Wed, 8 Apr 2020 17:43:12 +0000 (13:43 -0400)] 
Require grouping and decimal separators for non-integer types

Even if the textNumberPattern does not include decimal or grouping
separators, ICU still looks for those separators when the primType is
not an integer. If we do not require and apply the grouping and decimal
separators for these prim types, ICU will get them from the users
LANG, which means our behavior is not system environment interdependent.

To fix this, this requires and applies the decimal and grouping
separator properties for float primTypes, even if textNumberPattern does
not specify the separators.

DAFFODIL-2320

2 years agoRemove SHA256 hash, SHA512 is sufficient
Steve Lawrence [Wed, 8 Apr 2020 14:01:54 +0000 (10:01 -0400)] 
Remove SHA256 hash, SHA512 is sufficient

DAFFODIL-2316

2 years agoAdd license header to .gitignore
Steve Lawrence [Wed, 8 Apr 2020 13:52:02 +0000 (09:52 -0400)] 
Add license header to .gitignore

DAFFODIL-2319

2 years agoAdded licenses
olabusayoT [Wed, 8 Apr 2020 15:15:47 +0000 (11:15 -0400)] 
Added licenses

-- addded license to xml files and removed from rat ignore
-- remove some usused bin/xml files

DAFFODIL-2318

2 years agoDefine sbt options required by the project
Steve Lawrence [Wed, 8 Apr 2020 15:01:30 +0000 (11:01 -0400)] 
Define sbt options required by the project

Rather than providing instructions on how to increase sbt memory
options, which may be different depending on a users operating system,
just create an .sbtopts file in the project root with an appropriate
amount of memory. Now when sbt is run from this directory, it will
always be started with enough memory. 4GB of memory seems to be plenty
to compile and run all tests and is a reasonable amount to expect a user
to have.

DAFFODIL-2217

2 years agoInclude the DISCLAIMER in jars
Steve Lawrence [Wed, 8 Apr 2020 13:44:18 +0000 (09:44 -0400)] 
Include the DISCLAIMER in jars

DAFFODIL-2315

2 years agoDisable Coursier for library management v2.6.0-rc1
Steve Lawrence [Mon, 6 Apr 2020 19:02:13 +0000 (15:02 -0400)] 
Disable Coursier for library management

SBT 1.3.x switched to Coursier for library management. But a bug in
Coursier used by SBT causes retrieveManage to stop working:

  https://github.com/sbt/sbt/issues/5078

This feature is needed for SonarQube. So disable Coursier, and use the
old Ivy for library management.

DAFFODIL-2314

2 years agoUpdate gpg-agent timeout
olabusayoT [Mon, 6 Apr 2020 16:21:49 +0000 (12:21 -0400)] 
Update gpg-agent timeout

-- timeout updated to 3000s
-- kill gpg-agent at the end of the session

DAFFODIL-2312

2 years agoUpgrades sbt to 1.3.9, scala to 2.12.11, genjavadoc to 0.16.
Michael Beckerle [Mon, 6 Apr 2020 15:38:54 +0000 (11:38 -0400)] 
Upgrades sbt to 1.3.9, scala to 2.12.11, genjavadoc to 0.16.

sbt, depending on the terminal you are displaying it in, will issue ANSI
colorization escapes. You may need to add the color=false option to your
environment: e.g., in my .bash_aliases I have

export SBT_OPTS=" -Dsbt.color=false "

Had to fix a number of deprecations.
junit.framework.Assert is deprecated. Changed to org.junit.Assert.

Assert.assertEquals for float/double now requires a delta argument. Supplied
1e-15 where needed.

Since scala 2.12.7, shifting of values by quantities expressed as Long is deprectated. Had to insert ".toInt" calls a number of places to silence these.

Changes to main.yml also fix DAFFODIL-2111 which was javadoc-related errors due
to java 11 occurring on the automated build.

DAFFODIL-2313, DAFFODIL-2111

2 years agoUpdate Container
olabusayoT [Fri, 3 Apr 2020 21:42:01 +0000 (17:42 -0400)] 
Update Container

-- update sbt pgp version to 2.0.1
-- update pgp signing key format

DAFFODIL-2312

2 years agoPrepare for 2.6.0 release
olabusayoT [Fri, 3 Apr 2020 15:51:05 +0000 (11:51 -0400)] 
Prepare for 2.6.0 release

DAFFODIL-2312

2 years agoAdds signing keys for release
olabusayoT [Wed, 1 Apr 2020 17:27:23 +0000 (13:27 -0400)] 
Adds signing keys for release

-- updated keys file with link to apache defaults and some guidelines

2 years agoFix TDML runner losing external var assignments in middle of a round trip.
Michael Beckerle [Wed, 1 Apr 2020 23:33:33 +0000 (19:33 -0400)] 
Fix TDML runner losing external var assignments in middle of a round trip.

DAFFODIL-2311

2 years agoChange API to have functional behavior.
Michael Beckerle [Fri, 27 Mar 2020 05:46:51 +0000 (01:46 -0400)] 
Change API to have functional behavior.

This was all motivated initially by external vars setting thread-safety issues
with the TDML schema cache, which was saving external variables.

The functional changes here are:
(1) The external vars and validation mode are no longer saved as part
of the saved processor when we explicitly invoke save() method. They ARE
however saved by just ordinary object serialization, as might be used by
libraries like Apache Spark.

(2) log warnings are issued if external var settings are established at
schema compile time. These are still checked for correctness/applicability,
but the warning indicates that they are not saved.

These functional changes are visible from API, TDML Runner, and CLI.

The change to a functional-style API deprecates setters, and
provide withXYZ methods.

These withXYZ methods return a new object having the new settings, they don't
modify one. The older setter style is still supported, but deprecated.

This was changed in the DFDL object in the daffodi.api package, also in
JAPI, SAPI, and the TDMLDFDLProcessorFactory and TDMLDFDLProcessor
interfaces and implementations.

Put back missing Compiler synchronized method. This was mentioned in comments
but had been removed from the code at some point, not sure when.

Cleaned up root element specifying which was snarled together across
Compiler, ProcessorFactory, and SchemaSet.

Now the information is just passed from Compiler to PF, from PF to SchemaSet,
and SchemaSet is the only one that does anything with it.

This required moving many things from ProcessorFactory to SchemaSet, and ultimately hollowing out ProcessorFactory, which is no longer a SchemaComponent and mostly just delegates to SchemaSet.

SchemaSet refactored to put Runtime1 things into a Runtime1 Mixin. (Ultimately that stuff came mostly from ProcessorFactory)

Removed legacy of multiple schema source files. This wasn't supported, but vestiges of a list of them were in the code.

Removed some unused and redundant methods.

Changed build.sbt to implement fatal warnings for java-code compilation.

Note: The @TransientParam annotation doesn't work for a parameter declared var.
The parameter will be serialized anyway.

DAFFODIL-2302

2 years agoUse reference equality for dsom shared keys
Steve Lawrence [Tue, 31 Mar 2020 11:32:27 +0000 (07:32 -0400)] 
Use reference equality for dsom shared keys

By using the default object equality, it is possible that two chunks of
XML could look exactly the same and will be shared, even though their
contexts are different and should not be shared. By using reference
equality, XML nodes that happen to have the exact same content but in
different contexts will be seen as different and will not be shared.

DAFFODIL-2308

2 years agoDAFFODIL-2293
Kurt Baumann (E518309) [Fri, 27 Mar 2020 06:32:07 +0000 (07:32 +0100)] 
DAFFODIL-2293

2 years agoSDE if the model group of group definition is a dfdl:hiddenGroupRef
Steve Lawrence [Fri, 27 Mar 2020 13:52:09 +0000 (09:52 -0400)] 
SDE if the model group of group definition is a dfdl:hiddenGroupRef

DAFFODIL-2304

2 years agoSwitch completely to GitHub actions for CI
Steve Lawrence [Thu, 26 Mar 2020 11:20:22 +0000 (07:20 -0400)] 
Switch completely to GitHub actions for CI

- TravisCI fairly frequently has random failures not related to
  Daffodil. And even when it doesn't fail, it often takes a long time to
  run. It also doesn't support Windows. Let's just remove it.
- Azure was more stable, and supports Windows, but Apache does not
  support Azure, and some tests still don't work on Windows. Since this
  isn't actively tested, remove it.
- GitHub actions has all the features we needs, supports both Windows
  and Linux and seems to be more stable as far as random failures go. So
  completely switch to GitHub actions. Also enable code coverage
  reporting in GitHub Actions, which was previously only done by
  TravisCI. Also remove duplication of SBT environment variable now
  that GitHub actions supports that
- Also update coverage report plugin, somehow coverage numbers were
  slightly different otherwise

DAFFODIL-2307

2 years agoSupport empty choice branches with direct dispatch
Steve Lawrence [Thu, 26 Mar 2020 12:17:40 +0000 (08:17 -0400)] 
Support empty choice branches with direct dispatch

When parsing a direct dispatch choice, it's possible one of the choice
branches is an empty sequences. This optimizes to a NadaParser which
cannot be used at runtime. So when this happens, instead use a custom
parser that does nothing, but allows for the ChoiceCombinatorParser to
have a parser to run for that branch.

The logic already exists for non-direct dispatch choices--this just uses
that same parser, though moved to a choice specific file and rename to
be consistent with the equivalent unparser and make the "choice" aspect
of it more apparent.

DAFFODIL-2306

2 years agoRemove unused term methods
olabusayoT [Wed, 25 Mar 2020 20:00:49 +0000 (16:00 -0400)] 
Remove unused term methods

Removed
- possibleFirstChildTerms
- couldBeLastElementInModelGroup
- hasPriorRequiredSiblings
- hasLastRequiredSiblings
- isSquenceChild
- possibleFirstChildElementsInInfoset
- possibleNextSiblingTerms
Rename tests to show representation of testing of
hasStaticallyRequiredOccurrencesInDataRepresentation

DAFFODIL-2305

2 years agoRefactor isHidden
olabusayoT [Wed, 4 Mar 2020 20:32:15 +0000 (15:32 -0500)] 
Refactor isHidden

- Removes isHidden from ElementRuntimeData
- Adds isHidden flag to GroupRef
- Adds private hiddenDepth counter (and associated functions)
- Adds increment/decrement logic (HiddenGroupCombinators) for PState/UState
- overrides increment/decrement functions in UStateForSuspension to
fail on UsageError as these have no place in that context
- Adds check to verify  we are out of hidden state at the end of
parsing/unparsing
- Adds isHidden/setHidden logic to InfosetElement/DIElement
- adds "info hidden" to debugger and associated tests
- Reorders info subcommands and objects to maintain alphabetic ordering
- refactors childrenThatAreRecursivelyNotDefaultableOrOVC to canUnparseIfHidden
- Adds hiddenness to UState/PState toString
- add toNameQString for SGR
- updated SDE for no choices and seqs with no defaultable branches
- refactored sequence unparsers to match choice unparsers when checking
for children that can't be unparsed
- Adds tests for group defs used in both hidden/non-hidden sequence &
choice contexts
- Adds tests for multiply nested hiddenGroupRefs
- add tests to check unparseable children for sequences
- Added test for DAFFODIL-2304

DAFFODIL-2281

2 years agoFix performance regression related to alignment
Steve Lawrence [Mon, 23 Mar 2020 13:02:59 +0000 (09:02 -0400)] 
Fix performance regression related to alignment

Commit 356291c3f5 changed how priorPotentialTerms worked (for the
better) to remove the tuple. The purpose of the second value in tuple
was to optionally contain the parent model group term if there were no
prior terms or if this was an unordered sequence. This was confusing and
probably not originally a good idea, and it wasn't even documented.

When removing backpointers in the aforementioned commit, the alignment
logic was changed to replace optEnclosingParent (assigned from the
second tuple value) with immediatelyEnclosingModelGroup, a seemingly
logical replacement based on the name. But optEnclosingParent was just
poorly named since it was really just the enclosing parent if this term
had no prior siblings or was in an unordered sequence. By using
imediatelyEnclosingModelGroup, which always exist except for root, we
always included the parent alignment even when it couldn't have an
affect on a terms alignment. This meant we could insert unnecessary
alignment processors and caused a pretty drastic reduction in
performance in some cases.

This changes the logic so we only ever include the parent alignment if
it could have an affect and this terms alignment, and does so without
the need of a confusing tuple.

DAFFODIL-2299

2 years agoOnly run the SonarCloud action when triggered in the Daffodil repo
Steve Lawrence [Tue, 24 Mar 2020 14:00:55 +0000 (10:00 -0400)] 
Only run the SonarCloud action when triggered in the Daffodil repo

The SonarCloud action is currently configured to always run on any push,
regardless of the repo that the branch was pushed to, including the main
repo or any GitHub forks. And that action is configured to always use
the Apache Daffodil SonarCloud project, which requires a SONAR_TOKEN
secret that forks will not have. This means that any pushes to a fork
will result in a failure of the SonarCloud action, which might be
confusing to new users.

This adds a condition to the SonarCloud job so that it is only run when
the repository it was triggered from is the main Daffodil repository.
This repo will always have the correct SONAR_TOKEN so that the action
can succeed.

DAFFODIL-2300

2 years agoUpdate github actions/checkout to use v2.0.0
Steve Lawrence [Tue, 24 Mar 2020 14:49:41 +0000 (10:49 -0400)] 
Update github actions/checkout to use v2.0.0

There is a bug in actions/checkout v1.0.0 that prevents re-running a
github workflow, which is needed in some cases when there is a random
failure (e.g. network failure downloaded dependencies). This updates it
to v2.0.0, which fixes this issue. Also updates SonarCloud to use a
specific version instead of master. We've had issues in the past where
the master branch was undergoing development and broke our builds.
Sticking to a specific version prevents that.

DAFFODIL-2301

2 years agoAdd a special unparser for empty choice branches
Steve Lawrence [Fri, 20 Mar 2020 16:33:19 +0000 (12:33 -0400)] 
Add a special unparser for empty choice branches

When unparsing a choice, it is possible that the default branch to
unparsing could be completely empty (e.g. a sequence with a parse only
assertion). In these cases, that empty branch optimizes to a
NadaUnparser. Normally NadaUnparser's are optimized out or else they
will throw an error at runtime. However, the choice combinator unparse
still expects to have an Unparser to unparse, even if it does nothing.
To support this, this creates an empty choice branch unparser that does
nothing, but allows for the choice combinator to have something to
unparse.

DAFFODIL-2296

2 years agoEmbed a signature into release RPMs
Steve Lawrence [Wed, 18 Mar 2020 00:08:56 +0000 (20:08 -0400)] 
Embed a signature into release RPMs

Although we provide signatures and SHAs for all release sources and
binary helpers, it is possible to embed a signature in an RPM so that it
can be verified upon installation. This is a nice added layer of
verification that we should include.

The sbt-native-packager plugin we use to build RPMs does not support
embedding signatures, but it is easy enough to manually add a signature
after the RPM is built via the rpmsign tool. This patch modifies the
release candidate container to use that tool to embed a signature with
the same GPG key used to create all other signatures.

A side effect of this is that users installing the RPM will get a
warning if they do not import the Daffodil GPG keys, but that can be
done by running:

  rpm --import https://downloads.apache.org/incubator/daffodil/KEYS

Also fix a typo and modify README to set a hostname. The build hostname
is included in the RPM so we want this to be consistent and not a random
container ID as is the case by default.

DAFFODIL-2294

2 years agoChanges to remove backpointers, cleanup factory cruft.
Michael Beckerle [Thu, 19 Mar 2020 17:46:26 +0000 (13:46 -0400)] 
Changes to remove backpointers, cleanup factory cruft.

Now that we have sharing in the schema compiler, various things are problematic.
Like the fact that the backpointers that were preventing sharing were still
there.

This removes those, and also simplifies factories for making DSOM objects.

Change to OOLAG requiredEvaluations feature. Now there are two
different kinds: requiredEvaluationsAlways, and
requiredEvaluationsIfActivated. This enables construction of DSOM
object without that implying that they must have all their
requiredEvaluations computed. Objects that are constructed but may not
be needed can be constructed, but must use
requiredEvaluationsIfActivated instead, and something eventually must
call setRequiredEvaluationsActive() for that object.

This was a big contributor to the ability to eliminate unneeded factory
patterns.

Also, refactored ThinThrowable and derived classes to simplify and make
more uniform the access to the cause.

Add compile time tester utiliity to TestUtils in core-unittest for reuse

DAFFODIL-2280

2 years agoFix deep stack sizes when serializing some schemas
Steve Lawrence [Mon, 9 Mar 2020 13:19:46 +0000 (09:19 -0400)] 
Fix deep stack sizes when serializing some schemas

The "parents" val in a DPathCompileInfo is a backpointer to all
DPathCompileInfo's that reference it. The problem with this is that when
elements are shared, these backpointers create a highly connected graph
that requires a large stack to serialize using the default java
serialization as it jumps around parents and children. To avoid this
large stack requirement, we make the parents backpointer transient. This
prevents jumping back up to parents during serialization and results in
only needing a stack depth relative to the schema depth. Once all that
serialization is completed and all the DPathCompileInfo's are
serialized, we then manually traverse all the DPathCompileInfo's again
and serialize the parent sequences (via the serailizeParents method).
Because all the DPathCompileInfo's are already serialized, this just
serializes the Sequence objects and the stack depth is again relative to
the schema depth.

On complex schemas, this saw an order of magnitude reduction in stack
size during serialization.

DAFFODIL-2283

2 years agoFixes typo in project key
olabusayoT [Wed, 4 Mar 2020 21:04:01 +0000 (16:04 -0500)] 
Fixes typo in project key

- inbubator to incubator

DAFFODIL-2291

2 years agoOptimize nil combinator parsers
Steve Lawrence [Mon, 3 Feb 2020 17:53:51 +0000 (12:53 -0500)] 
Optimize nil combinator parsers

The nil combinator currently acts as if it is a ChoiceCombinator, where
the choices are either a nil parser or a value parser. While this works,
the Choice combinator has extra overhead due discriminators, multiple
marks, and extra processor errors to help for good diagnostics. But none
of this is really needed for the nil combinator

This creates a custom nil combinator that is much simpler and has less
overhead. Timings show that the SimpleNilOrValueParser went from ~1000us
to ~600us on average. In a format where almost every element is
nillable, this saw about a 6-7% increase in performance.

DAFFODIL-1883

2 years agoFix non-thread safe code in checking for local delimiters
Steve Lawrence [Fri, 21 Feb 2020 13:13:55 +0000 (08:13 -0500)] 
Fix non-thread safe code in checking for local delimiters

As an optimization, when we add a DFADelimiter to the stack of in-scope
delimiters, we mutate the DFADelimiter to store its index in that stack.
This stored index allows us to quickly determine if a found delimiter is
local or remote by just comparing the index to first local DFA index.
Although these DFADelimiters are mutated, which is the sort of thing
that is usually not thread safe for us, it actually is thread safe
because each instance of a DFADelmiter always ends up in the same index.
So different threads might mutate the same DFADelimiter, but they always
mutated it to the same value.

However, with the recent change to avoid copying, the same DFADelimiter
can now be shared at different stack positions in a parse. This causes
mutable state in the DFADelimiter to differ, and now different threads
can mutate that state with different values and cause random failures.

This commit removes this mutable state and instead just searches the
in-scope delimiters for a matched delimiter to determine if it is local
or remote. Although this removes the optimization, initial performance
testing shows no real difference.

DAFFODIL-2284

2 years agoDAFFODIL-2288 bump jackson version to 2.10.2
Gezapeti Cseh [Sun, 1 Mar 2020 08:02:04 +0000 (09:02 +0100)] 
DAFFODIL-2288 bump jackson version to 2.10.2

2 years agoupdated dependency to 2.9.8 for jackson-core.
Michael Beckerle [Thu, 27 Feb 2020 22:52:28 +0000 (17:52 -0500)] 
updated dependency to 2.9.8 for jackson-core.

DAFFODIL-2288

2 years agoConfigure Sonarcloud.io
olabusayoT [Fri, 7 Feb 2020 15:11:23 +0000 (10:11 -0500)] 
Configure Sonarcloud.io
- sonarcloud workflow with compilation of code and tests, and sonarcloud
action to do the scanning and upload to site based on
sonar-scanner.properties specification
- properties file with organization, projectKey, module information etc

DAFFODIL-2275

2 years agoIntroduce sharing into schema compiler to improve speed and space.
Michael Beckerle [Thu, 13 Feb 2020 23:46:08 +0000 (18:46 -0500)] 
Introduce sharing into schema compiler to improve speed and space.

This eliminates the combinatorial explosion of copying and makes
schema compilation roughly linear in the size of the schema.

Schema compilation time for some large schemas like EDIFACT has dropped
from minutes to seconds.

Primary mechanism is SharedFactory, PropEnv and SharedTerm
cache/Memoization.

We depend on being smart about sharing things that can be shared and
which
don't reference their point-of-use context. I.e., we only share what can
be
shared properly. Nothing in the type system enforces this however.

Instrumentation counts the number of elements compiled and the number of
shared terms memoized currently. These are checked to insure
we don't re-introduce sharing. See tests in TestRefMap class.

Same output instrumentation for EDIFACT:

Without new sharing:
[Schema had 18820 elements.]
[Schema memoized 690 shared terms.]

With new sharing:

[Schema had 1992 elements.]
[Schema memoized 690 shared terms.]

DAFFODIL-1444

2 years agoDo not convert data values in postProcess after evaluating expressions
Steve Lawrence [Mon, 10 Feb 2020 12:25:14 +0000 (07:25 -0500)] 
Do not convert data values in postProcess after evaluating expressions

After an expression is evaluated, the postProcess function is called to
potentially modify the resulting value. One thing it does convert the
result to a Long if the target type of an expression is an
xs:unsignedLong. But this is simply a bug. If an xs:unsignedLong value
is too large to fit in a Long then it is silently truncated.
Additionally, now that we are more strict about elements containing
values of the correct type, this means that an element will have a Long
value when we expected a BigInt for xs:unsignedLong, which causes a
casting exception in some cases.

This removes these unnecessary conversions in postProcess, and instead
just changes the function to a validation function, adding new checks
that all underlying types are correct for their target type. This
ensures that expression conversions do the right thing. And this
actually discovered more cases where we weren't strict about types. The
following fixes were made so types are consistent:

- Infinity/NaN was always represented in the infoset as a Double type,
  even if the target type was xs:float. Switched to use the appropriate
  type for the primitive
- Expressions did not convert types to BigInt's when the target type was
  an xs:unsignedLong, but would just convert them to Longs
- fn:ceil always created a Float, even if the argument type was an
  xs:double
- fn:year-from-dateTime did not allow conversion to the target type
- fn:*-from-date* functions returned an xs:long instead of an xs:integer
  like the XPath spec requires.

DAFFODIL-2276

2 years agoAdded test for poor-diagnostic bug with SSP="never".
Michael Beckerle [Wed, 5 Feb 2020 15:22:47 +0000 (10:22 -0500)] 
Added test for poor-diagnostic bug with SSP="never".

DAFFODIL-2274

2 years agoFixes bugs, vulnerabilities and securityhotspots
olabusayoT [Mon, 3 Feb 2020 18:31:33 +0000 (13:31 -0500)] 
Fixes bugs, vulnerabilities and securityhotspots

- fixes branches in conditional structure with same implementation
- removes double brace intialization
- replaces arr.toString() with 'new String(arr)'
- fixes unused return val
- fixes some indentation (2 spaces)

DAFFODIL-2272

2 years agoAdd new TimeTracker for more advanced performance analysis
Steve Lawrence [Fri, 31 Jan 2020 14:05:35 +0000 (09:05 -0500)] 
Add new TimeTracker for more advanced performance analysis

Because of our nested parsers, it can sometimes be difficult to
determine how much time each processor takes on average to complete it's
parse/unparse, even when using a profiler. This adds a new timer that
makes it much easier to determine how much total time particular parsers
take and on average how long they take. This can help to prioritize
performance optimizations.

The intended use is to modify the Parser.scala parse1() function to look
like this:

  try {
    TimeTracker.track(parserName) {
      parse(pstate)
    }
  }

The resulting output gives a break down of all the parsers and how
performant they are. Once slow processors are found, it can then be
useful to wrap subsections of the parse() method in a call to
TimeTracker.track() to determine which sections are slow. This incurs
less overhead than traditional profilers and give more control over
which sections are actually profiled.

DAFFODIL-1883

2 years agoFixes format string
olabusayoT [Tue, 28 Jan 2020 18:29:52 +0000 (13:29 -0500)] 
Fixes format string

-- unable to trigger ClassNotFoundException in a test

DAFFODIL-2245

2 years agoAssortment of changes to improve performance
Steve Lawrence [Tue, 21 Jan 2020 15:16:25 +0000 (10:16 -0500)] 
Assortment of changes to improve performance

- Optimize how we parse date/times from an XML infoset. Previously we
  attempted to parse a handful of different potential patterns using
  ICU4J SimpleDateFormat.parse(). Profiling show this simple parse
  performed many allocations. Considering that this is a fairly strict
  format we can implement the parsing ourselves, which is much more
  efficient, minimizes allocations, and avoids thread-locals since
  SimpleDateFormat is not thread safe.
- Instead of creating new calendar every time we parse an XML Date/Time,
  clone an already existing one. The process to initialize a new
  Calendar is pretty expensive, cloning is much more efficient.
- Skip remapping XML strings if they do not contain any invalid
  characters. This avoids unnecessary string allocations in the common
  case, but does incur some overhead in the rare case when remapping is
  needed.
- Use the same empty Array of DFADelimiters in the delimiter stack.
  Otherwise we allocate a bunch of empty arrays, and scala even ends up
  allocating even ore stuff to support it (e.g. ClassTags).
- Fix MaybeBoolean to avoid allocating new MaybeBoolean's
- Use Array.length == 0 instead of Array.isEmpty in inner loops. Using
  .isEmpty will allocate a scala ArrayOps, which is unnecssary if all
  were doing is checking the length. Note that .size will also allocate
  an ArrayOps.
- Fix maybeConstant_ in Evaluatable to avoid Maybe allocations

These issues were discovered while profiling an unparse of a CSV schema.
Performance averaged around 20% faster on my testing.

DAFFODIL-2222, DAFFODIL-1883

2 years agoAdd support for textStandardBase
Steve Lawrence [Mon, 13 Jan 2020 13:24:42 +0000 (08:24 -0500)] 
Add support for textStandardBase

Add new primitive, parser, and unparser to handle non base-10 text
numbers. Actual logic from converting to/from bases is handled by Java's
built-in functions.

To maintain backwards compatibility, if the textStandardBase property is
not defined it defaults to "10" unless the requireTextStandardBaseProperty
tunable is set to true, default to false.

Also noticed some unordered sequence tests were commented out and work
with minor tweaks due to incorrect tests.

DAFFODIL-840

2 years agoPrepare for 2.6.0 development
Steve Lawrence [Mon, 13 Jan 2020 14:19:39 +0000 (09:19 -0500)] 
Prepare for 2.6.0 development

DAFFODIL-2271

2 years agoRefactor text numbers and related primitives/parsers
Steve Lawrence [Wed, 18 Dec 2019 18:59:21 +0000 (13:59 -0500)] 
Refactor text numbers and related primitives/parsers

For each text number parser, we allocated a helper which did things like
check if a number was in a valid range, or convert a parsed number to
the correct type. Many of the actions were actually static and aren't
really specific to text numbers, but are more specific to the actual
data type (e.g. int, float). This moves all that static information out
of helpers and into NodeInfo Primitives.

The information in the helper that isn't static is really just specific
to the single text number parser, and so is just passed in directly to
the parser. This also gets rid of the NumberFormatFactory and
CacheDynamic stuff and replaces it with the more modern Evaluatable.

This allows for complete removal of the helpers and even all the
different text number primitives with type parameter, removing a lot of
unnecessary duplication.

This also led to the refactoring of other parts of code that do range
checking, particularly DPath conversions. That removed a lot of
duplicate range checking logic and instead uses the new range checker in
NodeInfo. This also uncovered a handful of cases where we were too lax
or incorrect in the DataValues that were being used (e.g. a dpath
function should return xs:unsignedByte but returned a JLong instead of
JShort). These changes make conversion much more strict about which
numeric types are expected to enforce correctness. This also avoids
unnecessary conversions since we now know exactly which types things
should be.

Additionally, it was discovered that binary numbers do not enforce range
checking, so that is now checked and a PE created if a binary number is
too large for the type. That is the only functional change here.

DAFFODIL-942

2 years agoFix unparsing nested arrays when separatorSuppressionPolicy="never" v2.5.0 v2.5.0-rc2
Steve Lawrence [Thu, 2 Jan 2020 19:16:45 +0000 (14:16 -0500)] 
Fix unparsing nested arrays when separatorSuppressionPolicy="never"

When data has separators and separatorSuppressionPolicy="never", then we
were not pushing/popping onto the arrayIndexStack during unparsing. This
meant that if an array with separatorSuppressionPolicy="never" was a
child of a parent array, then we would incorrectly modify the array
stack of the parent instead of the childs own array stack. This led to
incorrect array indices and invariant failures.

To fix this, this copies the array stack logic and invariant checks from
unparseWithSuppression into the unparseWithNoSuppression.

DAFFODIL-2263

2 years agoUpdate copyright year to 2020
Steve Lawrence [Fri, 3 Jan 2020 12:08:12 +0000 (07:08 -0500)] 
Update copyright year to 2020

DAFFODIL-2265

2 years agoAdd more automation to release candidate container
Steve Lawrence [Thu, 2 Jan 2020 13:42:06 +0000 (08:42 -0500)] 
Add more automation to release candidate container

- Install the wix shell script as part of creating the container instead
  of getting it from the cloned daffodil repo. This avoids having a
  broken symlink before the daffodil repo is cloned
- Change how we clone the svn repo to avoid unneeded directories
- svn remove any previous release candidates if they exist. Needed for
  when doing an rc2, for example
- svn add the new release files so they are ready for commit if all
  checks pass
- Put final steps in a script to automate release after all checks pass
- Add some missing suppression of popd output

DAFFODIL-2264

2 years agoFixed incorrect separator suppression with ock=expression
Josh Adams [Tue, 31 Dec 2019 20:02:40 +0000 (15:02 -0500)] 
Fixed incorrect separator suppression with ock=expression

A user ran into a bug involving incorrect separator suppresion when a
sequence was using occursCountKind='expression', which should behave as
if separatorSuppressionPolicy='never'.

DAFFODIL-2262

2 years agoFixed issue unparsing optional unordered elements
Josh Adams [Mon, 30 Dec 2019 15:05:48 +0000 (10:05 -0500)] 
Fixed issue unparsing optional unordered elements

A user discovered an issue when the first element of an unordered
sequence is optinal and does not have a maxOccurs > 1. There was a logic
error that was resulting in the element being treated as a scalar
element when it should have been treated as an array, due to it being
optional.

DAFFODIL-2261

2 years agoFix choice bug DAFFODIL-2259
Michael Beckerle [Thu, 26 Dec 2019 18:54:03 +0000 (13:54 -0500)] 
Fix choice bug DAFFODIL-2259

Added tests for this.

Also adding tests to mil-std-2045 schema that exercise the previously
unused element that would have shown this bug up before.

Fixed a debugger abort found while debugging the issue.

DAFFODIL-2259

2 years agoPrepare for 2.5.0 release v2.5.0-rc1
Steve Lawrence [Fri, 20 Dec 2019 12:39:07 +0000 (07:39 -0500)] 
Prepare for 2.5.0 release

DAFFODIL-2258

2 years agoSwitch to scala-xml EncodingHeuristics to determine schema encoding
Steve Lawrence [Fri, 20 Dec 2019 14:15:38 +0000 (09:15 -0500)] 
Switch to scala-xml EncodingHeuristics to determine schema encoding

There seems to be a bug or race condigion in Apache Commons IO
XmlStreamReader that sporadically fails to detect UTF-16 encoded
schmeas, which causes Daffodil to fail to parse the schemas. Though it's
difficult reliably reproduce.

Try switching to scala-xml's EncodingHeuristics to determine the schema
encoding and see if that fixes the problem. If not, it's likely a bug in
Daffodil somewhere.

DAFFODIL-1908

2 years agoPurge scala.math.{BigInt BigDecimal}
Brandon Sloane [Thu, 19 Dec 2019 17:56:23 +0000 (12:56 -0500)] 
Purge scala.math.{BigInt BigDecimal}

Long ago, we switch over to use just Java's version of BigInt/BigDecimal,
instead of the Scala wrapper. This commit goes through and systemetically cleans up
all lingering uses of Scala's version.

DAFFODIL-2256

2 years agoRefactor type calculator to take advantage of DataValue type
Brandon Sloane [Mon, 16 Dec 2019 15:56:49 +0000 (10:56 -0500)] 
Refactor type calculator to take advantage of DataValue type

This fixes a bug where we would inadvertandly use Scala BigInts

Daffodil-2188

2 years agoAdd typesafty to our handling of infoset data values.
Brandon Sloane [Wed, 24 Jul 2019 00:14:29 +0000 (20:14 -0400)] 
Add typesafty to our handling of infoset data values.

For performance reasons, we have been making extensive use of
AnyRef to store data values in our infoset, and throughout the runtime.
This allows us to avoid boxing, but prevents the type system from validating
that unexepected types to not infect our values.

This commit introduces a value type, DataValue, which provides a 0 overhead (eg. no boxing)
wrapper around AnyRef, while only allowing a limited number of types to populate it.

In doing so, an unrelated bug of mixing Java and Scala BigInts was uncovered and corrected.
Such a bug should be much less likely to occur in the future.

Due to a bug in Scala 2.11 (https://github.com/scala/bug/issues/7521), we have 2 implementations
of DataValue. The 2.11 version automatically boxes/unboxes all instances of Array[Byte]

DAFFODIL-2169

2 years agoUse a container for building release candidates
Steve Lawrence [Thu, 12 Dec 2019 19:56:39 +0000 (14:56 -0500)] 
Use a container for building release candidates

There are too many environment configurations that can lead to difficult
and inconsistent builds. This switches to containers to build and
publish release candidates. Also makes the release candidate script more
mature, including the ability to use --dry-run to test a build without
publishing anything.

The Dockerfile is used to create a new container based on Fedora 30
minimal, install dependencies, set up the environment, and installs the
release candidate script as the entrypoint to the container. This script
has the logic to download all the necessary repos, build everything,
copy build artifacts to the right places, gives the user a list of
things to check, and if everything looks good, the steps to publish the
release candidate.

DAFFODIL-2227

2 years agoChanges to eliminate need for ERD/TRD at Expression compilation time.
Michael Beckerle [Sat, 7 Dec 2019 02:03:29 +0000 (21:03 -0500)] 
Changes to eliminate need for ERD/TRD at Expression compilation time.

They should only need DPathCompileInfo to compile expressions and
compile Evaluatables.

This eliminates a dependency from the compiler on the details of the
runtime data objects.

Another small incremental step toward DAFFODIL-1444 (schema compiler
space/speed issue.)

The DPathCompileInfo objects are really "universal runtime" objects. If
you are going to compile expressions, then regardless of back-end you
need this information. It has to be in the runtime because of the
debugger, and for runtime diagnostics.

Any runtime backend data structures will subsume what is in
DPathCompileInfo in order to be able to issue decent diagnostics.

DAFFODIL-1444

2 years agoRemove GitHub Actions linux dependency step
Steve Lawrence [Fri, 13 Dec 2019 13:40:49 +0000 (08:40 -0500)] 
Remove GitHub Actions linux dependency step

We currently run apt-get to install linux dependencies like RPM and SBT
as part of our Github Actions workflow. Unfortunately, GitHub has
updated their container to include a Microsoft repository that is buggy
and started breaking builds everyone's builds that ran apt. We could
remove just this buggy repo, but other repos could always break in the
future.

Fortunately, it the GitHub Actions container now includes SBT and RPM by
default, so our dependencies are already met. So remove the Install
Linux Dependencies step so we never have to worry about random
repositories breaking our build.

DAFFODIL-2253

2 years agoRemoved DaffodilTunables object from the Infoset entirely.
Michael Beckerle [Fri, 8 Nov 2019 05:13:36 +0000 (00:13 -0500)] 
Removed DaffodilTunables object from the Infoset entirely.

They aren't stored on the DIDocument even.
Nor are they available on the RuntimeData/DPathCompileInfo.

They are saved in the state of the DataProcessor object when it is
serialized. They exist nowhere else in the runtime data structures.

They go from there, as modified by setTunable() calls, into
the PState/UState for runtime usage. They, or
some value they contain, must be passed everywhere they are needed
at runtime.

DAFFODIL-2242

2 years agoSwitch to file output stream for large data
Josh Adams [Mon, 11 Nov 2019 17:45:15 +0000 (12:45 -0500)] 
Switch to file output stream for large data

Previously, we exclusively were using a ByteArrayOutputStream to handle
buffered output streams, which has a hard limit of 2GB. This commit
allows the output stream to change to a FileOutputStream to a temporary
file once the buffer grows to a specified size, removing the 2GB limit.

This change also removes the BufferedBlobDataOutputStream as it is not
longer needed.

DAFFODIL-2194

2 years agoAdded TakTimer to Timer.scala
Michael Beckerle [Tue, 3 Dec 2019 18:34:38 +0000 (13:34 -0500)] 
Added TakTimer to Timer.scala

Removed Tak-timing stuff from Maybe.scala

DAFFODIL-2246

2 years agoAdded test to tutorials module that runs a TDML test from java code.
Michael Beckerle [Fri, 22 Nov 2019 21:36:19 +0000 (16:36 -0500)] 
Added test to tutorials module that runs a TDML test from java code.

This is an example.

DAFFODIL-2241

2 years agoCode improvements to restrict scoped property lookup to only terms.
Michael Beckerle [Wed, 27 Nov 2019 16:01:57 +0000 (11:01 -0500)] 
Code improvements to restrict scoped property lookup to only terms.

DAFFODIL-2244

2 years agoMany changes to algorithm for how streaming unparser resolves elements.
Michael Beckerle [Fri, 8 Nov 2019 05:13:36 +0000 (00:13 -0500)] 
Many changes to algorithm for how streaming unparser resolves elements.

The relationship/contract
between unparsers and InfosetInputters now requires pushTRD/popTRD
as well as pulling events.

Removed all traces of former inspectPure method, as inspect/advance
methods of infoset inputter are now side-effect free.

I explicly tested:

mil-std-2045 works
bmp works (DAFFODIL-2224)
csv works
edifact works
HL7-v2.7 works
usmtf works
vmf works

DAFFODIL-2192, DAFFODIL-2224

2 years agoAdds serializability checks for UDFs
olabusayoT [Wed, 20 Nov 2019 17:55:21 +0000 (12:55 -0500)] 
Adds serializability checks for UDFs

-- adds check to catch any issues with serializability at UDF
initialization time (i.e when the udf object is created)
-- moves internal UDFProcessing/FatalErrors to udf package
-- wraps error on loading udfs to propagate to a UDFFatalError
-- adds associated tests/test classes

DAFFODIL-2235

2 years agoCleanup: create runtime1 package and mixins for Term classes and Gram.
Michael Beckerle [Thu, 14 Nov 2019 00:46:04 +0000 (19:46 -0500)] 
Cleanup: create runtime1 package and mixins for Term classes and Gram.

The purpose here is separation of concerns.
Things specific to daffodil-runtime1 should be segregated in the schema
compiler to a package with that specific runtime/backend in mind.

This makes it clear that the dsom and grammar packages are supposed to contain
backend-independent code.

However, this is a very partial first step in this direction. The
grammar primitives are still very runtime1-specific with their parser and
unparser methods. Also the dpath package needs separating as well.

Nevertheless, this change is worth it to help better categorize the
various schema compiler optimizers and various computed LV "attributes" into
those that are runtime1 specific, and those that are fully general.

DAFFODIL-2233

2 years agoRemove the 2GB limit when unparsing BLOBs
Steve Lawrence [Wed, 30 Oct 2019 14:00:14 +0000 (10:00 -0400)] 
Remove the 2GB limit when unparsing BLOBs

Due to suspensions, it is possible that we could unparse a BLOB to a
buffered DataOutputStream, which means the entire contents of the BLOB
would be stored in memory until the suspension and its DataOutputStream
were finished. Not only is this a waste of memory since the blob is all
on disk, but can also limit BLOBs to 2GB since buffered
DataOutputStreams use a Byte array for buffering.

This resolves this issue by not immediately unparsing BLOB data, but
instead adding a new BLOB DataOutputStream which writes BLOB data to the
previous DataOutputStream once that stream becomes direct. This means we
never store the full BLOB data in memory and remove the 2GB limit.

Also updates gen_blob to be compatible with python2 and 3 and to write
larger chunks to speed up file creation.

CLI BLOB tests are modified to unaprse the infoset after parsing to test
full round trip to large BLOB support.

DAFFODIL-2194

2 years agoFix eclipse classpaths. Insure generated correctly with source and doc
Michael Beckerle [Wed, 6 Nov 2019 16:35:52 +0000 (11:35 -0500)] 
Fix eclipse classpaths. Insure generated correctly with source and doc

2 years agoFix incorrect comment about queue depth. Whitespace standardization.
Michael Beckerle [Wed, 6 Nov 2019 00:14:20 +0000 (19:14 -0500)] 
Fix incorrect comment about queue depth. Whitespace standardization.

2 years agoTypo fixes and whitespace standardization.
Michael Beckerle [Wed, 6 Nov 2019 00:13:41 +0000 (19:13 -0500)] 
Typo fixes and whitespace standardization.

2 years agoRename Siblings to UnparserInfo. Prior name was misleading.
Michael Beckerle [Wed, 6 Nov 2019 00:11:47 +0000 (19:11 -0500)] 
Rename Siblings to UnparserInfo. Prior name was misleading.

2 years agoDelete ChoOrd dead code file.
Michael Beckerle [Tue, 5 Nov 2019 14:22:03 +0000 (09:22 -0500)] 
Delete ChoOrd dead code file.

2 years agoAdded clarifying comments about ResolvesProperties mixin.
Michael Beckerle [Tue, 5 Nov 2019 13:40:24 +0000 (08:40 -0500)] 
Added clarifying comments about ResolvesProperties mixin.

2 years agoFixes javadoc error of UDFProvider
olabusayoT [Wed, 6 Nov 2019 20:37:50 +0000 (15:37 -0500)] 
Fixes javadoc error of UDFProvider

-- updates with descriptions and adds missing @return

DAFFODIL-2228

2 years agoImproved tutorials content.
Michael Beckerle [Thu, 7 Nov 2019 01:42:22 +0000 (20:42 -0500)] 
Improved tutorials content.

Web security reasons make it better to eliminate file includes.

A variety of cross-site security provisions that are the default these
days make it impossible for a TDML file to reference a stylesheet that
is on a different web server.

That makes maintaining these things far too tedious. So the XSL
stylesheet lives alongside the tutorial files and is included by
relative URI path.

Unfortunately, this means there is some duplication between the
templates used in the daffodil-site jekyll configuration, and this XSLT
stylesheet for the tutorials.

I don't know how to fix that when html doesn't have a first-class
include capability.

The way this is done now you can view a TDML tutorial from a file:///
style URL and it presents properly.

DAFFODIL-2004

2 years agoAdds 2 arg constructor for TDML Runner
olabusayoT [Tue, 5 Nov 2019 20:54:48 +0000 (15:54 -0500)] 
Adds 2 arg constructor for TDML Runner

-- useful for Java calls
-- fixes typo in UDF tests
-- Adds unit tests for RunnerFactory constructors

DAFFODIL-2229

2 years agoSetup so tutorials are deployed to daffodil-site.
Michael Beckerle [Thu, 10 Oct 2019 22:03:46 +0000 (18:03 -0400)] 
Setup so tutorials are deployed to daffodil-site.

The XSLT and other infrastructure are now maintained as part of
daffodil-site.

release-candidate script copies tutorial files from daffodil tree
to daffodil-site tree.

Assumes daffodil-site changes which put tutorial infrastructure and
asciidoc capability into deployed site.

DAFFODIL-2004

2 years agoRemove heap sized limit for parsing
Josh Adams [Thu, 31 Oct 2019 15:15:04 +0000 (11:15 -0400)] 
Remove heap sized limit for parsing

This involved setting a maximum number of buckets and removing old
buckets once that maximum has been reached.

DAFFODIL-2194

2 years agoSpecify the appropriate shell for installing GitHub Actions dependencies
Steve Lawrence [Thu, 31 Oct 2019 15:57:25 +0000 (11:57 -0400)] 
Specify the appropriate shell for installing GitHub Actions dependencies

GitHub Actions seems to have changed the default shell on Windows from
cmd.exe to powershell. We relied on the cmd.exe 'mklink' built-in to add
sbt to the PATH on windows, but that doesn't work in powershell. Ensure
we use cmd.exe for this step.

Also switch to REM for comments in the windows script. YAML does not
treat hashes as comments inside multi-line scalars, so they end being
fed directly to cmd.exe. Change them to cmd.exe style comments.

Also use Util.echoN and pathSeparator to be OS agnostic

DAFFODIL-2225

2 years agoAdd User Defined Functions feature
olabusayoT [Thu, 19 Sep 2019 23:01:15 +0000 (19:01 -0400)] 
Add User Defined Functions feature

- Adds daffodil-udf submodule that has the files needed to write a UDF
- Adds readme doc (which will be posted on website when complete)
- Adds unit tests and tdml tests
- Adds checks, warnings and errors to our UDFService loader
 - invalid UDFs and UDFPs are dropped, and emit a warning
 - if an attempt is made to use a dropped UDF, an SDE will occur
- Adds error handling from UDFs during evaluate execution
- Updates Eclipse .classpath script to add formatting, and more
descriptive error checking

DAFFODIL-2186

2 years agoAdd tests for recent bugs found. Improve a trailingEmptyStrict test.
Michael Beckerle [Thu, 17 Oct 2019 23:21:42 +0000 (19:21 -0400)] 
Add tests for recent bugs found. Improve a trailingEmptyStrict test.

DAFFODIL-2219, DAFFODIL-2217

2 years agoRemove continue-on-error from github actions
Steve Lawrence [Tue, 15 Oct 2019 16:11:01 +0000 (12:11 -0400)] 
Remove continue-on-error from github actions

The original intention of this option was that as long as compilation
succeeded we would run all test steps, even if some one of the test
steps failed. This would allow us to potentially find multiple failures
in a single build instead of just the first failure.

Unfortunately, this option actually just makes it so the step is
considered a success regardless of pass/fail, so this actually hid
errors. We definitely don't want that, so remove the option where it is
used.

Turning this option off actually revealed a handful of tests that have
always been broken on Windows. The following changes were made to fix
those issues:

- Convert files/strings to a URI to force correct URI syntax
- Replace newline separators in tests with pipes to avoid CRLF differences
- Change CLI integration tests to not check for newlines
- Use the portable Util.echoN instead of "echo -n"

DAFFODIL-2215

2 years agoUpdated Unordered Sequence code to better support vCard
Josh Adams [Fri, 11 Oct 2019 18:13:42 +0000 (14:13 -0400)] 
Updated Unordered Sequence code to better support vCard

the vCard schema had triggered some edge cases that weren't found during
the development of unordered sequences. This commit deals with those
edge cases and enables support for the vCard schema.

DAFFODIL-1034

2 years agoAdded AlignedMixin tweak to allow enabling the test.
Michael Beckerle [Thu, 10 Oct 2019 19:54:27 +0000 (15:54 -0400)] 
Added AlignedMixin tweak to allow enabling the test.

2 years agoAdded smaller test to reproduce vCard failure.
Michael Beckerle [Thu, 10 Oct 2019 16:04:16 +0000 (12:04 -0400)] 
Added smaller test to reproduce vCard failure.

Fails currently so is commented out in the scala driver.

DAFFODIL-1034

2 years agoFixes and tests twoPass Mac LE bug
olabusayoT [Wed, 2 Oct 2019 18:21:32 +0000 (14:21 -0400)] 
Fixes and tests twoPass Mac LE bug

Fixes bug where data containing CRs aren't replaced with LFs during
twoPass testing.

DAFFODIL-2209

2 years agoEnabled tests that were blocked by UO seqs
Josh Adams [Thu, 3 Oct 2019 14:22:39 +0000 (10:22 -0400)] 
Enabled tests that were blocked by UO seqs

Also implemented a SDE check for empty UO sequences and converted tabs
to spaces withing the tdml file.

DAFFODIL-918
DAFFODIL-1091
DAFFODIL-1120
DAFFODIL-1151

3 years agoImplemented unordered sequences
Josh Adams [Thu, 11 Jul 2019 13:52:34 +0000 (09:52 -0400)] 
Implemented unordered sequences

Unordered sequences are now ipmlemented using a choice of the sequence
member parsers. This choice is then looped over until we either consume
all the data or hit a failure. The parsed infoset is then sorted into
schema definition order, and unparsing is identical to ordered
sequences.

DAFFODIL-1159

3 years agoAdded tests that illustrate nested choice technique.
Michael Beckerle [Thu, 26 Sep 2019 01:32:27 +0000 (21:32 -0400)] 
Added tests that illustrate nested choice technique.

DAFFODIL-2207

3 years agoDAFFODIL-2200. xs:import problems with xsd files provided in daffodil-lib
dchitlangia [Sat, 21 Sep 2019 05:54:07 +0000 (01:54 -0400)] 
DAFFODIL-2200. xs:import problems with xsd files provided in daffodil-lib

xs:import problems with xsd files provided in daffodil-lib

Corrected schemaLocation to remove prefix 'xsd/'
Removed extra whitespaces
Added schemaLocation for dfdl namespace

DAFFODIL-2200

3 years agoImprove diagnostic with more hex output.
Michael Beckerle [Tue, 17 Sep 2019 23:44:01 +0000 (16:44 -0700)] 
Improve diagnostic with more hex output.

DAFFODIL-2204

3 years agoAllow globals with no referringComponents
Michael Beckerle [Fri, 6 Sep 2019 20:35:16 +0000 (16:35 -0400)] 
Allow globals with no referringComponents

DAFFODIL-2197

3 years agoAdd blob support
Steve Lawrence [Thu, 15 Aug 2019 17:02:34 +0000 (13:02 -0400)] 
Add blob support

- Adds support for xs:anyURI primitive type. Elements with this type
  must specifiy the new property dfdl:objectKind, which can be
  "bytes" or "characters". Support for "characters" is not added in this
  patch.
- On parse elements with objectKind="bytes" will have the data read
  and written out to a file with a randomly generated name, with a URI
  to that file being put in the infoset. On unparse, the data is read
  from the URI and written to the data stream. Behavior is very similar
  to xs:hexBinary.
- BLOB Objects must have lengths set with dfdl:lengthKind="explicit".
- New API functions are added to set where to write blob files to and to
  a get list of all blob files that were written.
- TDML Runner is updated to be aware of xsi:type="xs:anyURI" and compare
  the contents of the blob files. It will also delete blob files after a
  test passes.
- The CLI will write blob files to the $PWD/daffodil-blobs/ directory.

DAFFODIL-1735

3 years agoAdd Github Actions continuous integration configuration
Steve Lawrence [Tue, 20 Aug 2019 16:05:30 +0000 (12:05 -0400)] 
Add Github Actions continuous integration configuration

GitHub Actions (currently in beta, but enabled for Apache projects) has
a lot of nice features compared to TravisCI. We get more memory, it
supports Windows, it averages about 5-10 minutes faster, builds all
matrices at the same time, and it can split build steps into separate
sections making it easier to find why something fails.

This adds a configuration to enable builds for Java 8, 9, and 11, Scala
2.11 and 2.12, and Windows and Linux. There are some limitations to the
config file that make it difficult to reduce some duplication, but
hopefully those issues will be resolved by the time it comes out of
beta.

DAFFODIL-498

3 years agoAdd more obscure charsets needed for some mil formats.
Michael Beckerle [Thu, 18 Jul 2019 20:57:37 +0000 (16:57 -0400)] 
Add more obscure charsets needed for some mil formats.

Also minor changes to support debug.

Added tests of LSBF encoding variants.

DAFFODIL-2185

3 years agoUpdates code for clarity
Olabusayo Kilo [Wed, 10 Jul 2019 15:58:49 +0000 (11:58 -0400)] 
Updates code for clarity

3 years agoAdds support for non-spacing and combining chars
Olabusayo Kilo [Tue, 9 Jul 2019 22:04:27 +0000 (18:04 -0400)] 
Adds support for non-spacing and combining chars

Pads non-spacing/combining chars with spaces so they show up properly
aligned in the debugger without combining with our ~ delimiters or
whitespace. Since they sometimes combine with preceding and following
characters, so we pad them on either side.

DAFFODIL-2168

3 years agoIncremental progress on schema compilation space/speed issue.
Michael Beckerle [Fri, 28 Jun 2019 05:07:15 +0000 (01:07 -0400)] 
Incremental progress on schema compilation space/speed issue.

This change set reorganizes expression compilation so that
expressions are compiled taking all possible contexts where the
expression
is reused into account, rather than compiling a separate copy for each
expression location.

However, it does not implement polymorphic behavior. Rather, it requires
all points of reuse to have the same type usage.

It issues diagnostics that show all places where different type usage
appears (up to 4 instances. Suppresses more than that.)

This does NOT yet eliminate the excessive copying of objects in the
schema compiler. It does eliminate expressions from the set of things
preventing copy-elimination by removing the problem caused by
up-and-out relative paths.

DAFFODIL-1444

3 years agoBump to 2.5.0-SNAPSHOT for development
Steve Lawrence [Fri, 12 Jul 2019 16:57:39 +0000 (12:57 -0400)] 
Bump to 2.5.0-SNAPSHOT for development

DAFFODIL-2181