Apache Edgent (incubating) 1.2.0
==================

The release includes a number of minor SDK bugfixes and enhancements listed below.

The release also includes a major refactoring of the build/release tooling
and affects the source and binary artifacts that are released and how
the Edgent SDK and samples are consumed.

The goals of the refactoring were to improve Edgent SDK and samples 
consumability by Edgent Application Developers.  Additionally,
Edgent runtime developers and release managers should benefit
from tooling/process commonality with other Apache projects.

The build/release tooling is now maven based.

A release now includes two source bundles:
  - Edgent SDK bundle
  - Edgent Samples bundle

A binary bundle is no longer released.  A release now publishes
the Edgent SDK jars in the Apache Nexus repository which auto-sync's
to Maven Central. The names of the jars now conform to standard
practices: "." has been replaced with "-" and the Edgent SDK
versionId is now included.  

The websocket connector jar names are now more sensible:
* `edgent-connectors-websocket-<ver>.jar` was `edgent.connectors.websocket.wsclient-javax.websocket.jar`
* `edgent-connectors-websocket-base-<ver>.jar` was  `edgent.connectors.wsclient.jar`
* `edgent-connectors-websocket-misc-<ver>.jar` was  `edgent.javax.websocket.jar`
* `edgent-connectors-websocket-jetty-<ver>.jar` was  `javax.websocket-client.jar`

Almost all of the Edgent SDK jars are now available for the Java7 and Android platforms.

See `JAVA_SUPPORT.md` for information about the coordinates, jar names, etc.

See `samples/README.md` for information related to Edgent Application
development and deployment as well as information on building and
running the samples.

The (`samples/get-edgent-jars.sh`) tool is provided to make it
easy for a user to retrieve the Edgent SDK jars and their dependencies
from a maven repository.  The retrieved jars can then be used
with application development tooling that does not support
maven repositories and/or they can bundled and conveyed to an 
edge device in support of application execution.

The samples sources and build tooling are now structured as an
Edgent Application Developer, Edgent SDK consumer, might structure
their Edgent applications.  They are no longer part of the SDK and
an associated binary artifact is not released. A new sample/template 
project is provided to help an Edgent Application Developer get started.


New Features
--------------------
TODO

Incompatible API changes
------------------------
TODO
    
Known Issues
--------
Open JIRAs may be found at https://issues.apache.org/jira/browse/EDGENT

Bug Fixes
---------
TODO

Miscellaneous changes
---------------------
TODO


Apache Edgent (incubating) 1.1.0
==================

The release includes a number of minor bugfixes and enhancements listed below.

See EDGENT-379 below for important information related to the 
Edgent connector for the IBM Watson IoT Platform.
See EDGENT-380 below for information about the MQTT connector.

The release has new external jar dependencies for building Edgent. 
An Eclipse based Edgent runtime build environment will encounter failures
until you rerun "./gradlew setupExternalJars" and refresh and rebuild your
workspace. See DEVELOPMENT.md for information about building Edgent.

New Features
--------------------
EDGENT-377  Add IotGateway and IotpGateway
            This feature is incubating.  See the classes Javadoc.
EDGENT-376  Support an edge device using both the Edgent API and WIoTP "Managed Device" APIs
EDGENT-375  Support publishing WIoTP device events using HTTP
EDGENT-370  Add static IotProvider.getPreferences()
EDGENT-367  Add autoSubmit capability to IotProvider

Incompatible API changes
------------------------
None
    
Known Issues
--------
Open JIRAs may be found at https://issues.apache.org/jira/browse/EDGENT

Bug Fixes
---------
EDGENT-374  IotProvider edgentControl commands are silent no-ops under some failure conditions
EDGENT-373  IotProvider needs to log more info upon edgentControl command request failures
EDGENT-366  Tolerate trailing spaces in serverURLs in MqttConfig properties file
EDGENT-333  FileStreamsTextFileWriterTest mishandling string to byte
EDGENT-332  WebSocketTest test*Byte() mishandling string to byte
EDGENT-331  HttpConnector put/post mishandling string to byte
EDGENT-319  CommandStreamsTest* tests fail on MS Windows
EDGENT-318  Javadoc overview mentions wrong jar name for slf4j jdk impl
EDGENT-316  Fix warnings from aggregateJavadoc build task
EDGENT-310  KafkaStreamsTestManual.testSimple() fails with no local zk of kafka servers
EDGENT-234  Console: broken doc links
EDGENT-200  Console: stream hovers in oplet kind lack layout tuple counts

Miscellaneous changes
---------------------
EDGENT-383  Update RELEASE_NOTES and CONTRIBUTORS for 1.1.0
EDGENT-381  Update NOTICES for 2017
EDGENT-380  Upgrade the MQTT connector to use paho-mqtt 1.1.0
EDGENT-379  Upgrade to the WIoTP 0.2.2 Java client API
   Upgrade the Edgent connector for the IBM Watson IoT Platform to use
   the WIoTP 0.2.2 Java client API.
   Note: the WIoTP API changed the way it publishes device events.
   See the "Migration from release 0.1.5 to 0.2.1" information at
   https://github.com/ibm-watson-iot/iot-java/tree/master#migration-from-release-015-to-021
   for details including how to revert the behavior if needed.
   See https://github.com/ibm-watson-iot/iot-java/releases
   for general release information about the WIoTP Java client API.
EDGENT-365  IotProvider device commands table has bad information
EDGENT-363  Clarify / disallow null topology names
EDGENT-362  Fix javadoc for PlumbingStreams.gate
EDGENT-361  Add a periodic usage example for FileStreams.textFileReader
EDGENT-329  Add Apache rat task to builds
EDGENT-328  Make writing-a-connector info easier to locate
EDGENT-325  Improve doc for jdbc, kafka, and java7 tests
EDGENT-321  Add full collection of release management buildTools
EDGENT-308  Is it possible to use poll() with FileStreams together


Apache Edgent (incubating) 1.0.0
==================
The first official Apache Edgent release

New Features
____________
EDGENT-8    Restart topology on uncaught exception
EDGENT-21   Create test application using GPS/OBD sensors
EDGENT-22   Add functionality to sample the tuples in a stream
EDGENT-91   Support joining a stream against another stream/window
EDGENT-96   Add an HTTP POST utility method
EDGENT-114  Have IotProvider start applications using ApplicationService
EDGENT-117  Support IotProvider on Java 7 and Android
EDGENT-128  update to Watson IoT Platform release
EDGENT-166  Add Gate plumbing
EDGENT-173  Add load balanced parallel()
EDGENT-178  console: stream hover should report "alias" in addition to tags
EDGENT-198  Accessibility enhancements to Javadoc
EDGENT-200  Console: stream hovers in oplet kind layout lack tuple counts
EDGENT-214  testFileWriter needs to support compressed rolling log generation
EDGENT-215  Job control gets unregistered from ControlService after job gets closed (BUG)
EDGENT-217  promote IoT device heart beat to a connector utility
EDGENT-218  Add multivariable JsonAnalytics
EDGENT-220  add things to help with csv strings
EDGENT-226  Add connector for "command / OS process"
EDGENT-304  Always build edgent.android.{hardware,topology}.jar

Incompatible changes
--------------------
EDGENT-232  Rename Quarks to Edgent
    Rename packages from quarks.* to org.apache.edgent.*
    Rename jars from quarks.jar to edgent.*.jar
EDGENT-236  Rename Iotf connector to Iotp
    Rename package to org.apache.edgent.connectors.iotp
    Rename jar to edgent.connectors.iotp.jar
EDGENT-139  Rename ./ext/slf4j-1.7.12/slf4j-jdk14-1.7.12.jar
    This jar was available to Edgent applications to provide them and the
    Edgent runtime with an SLF4J logging implementation.
    The name is now ./ext/slf4j-jdk14-1.7.12.jar

Miscellaneous changes
---------------------    
EDGENT-139  Replace Ant build with Gradle tooling
EDGENT-261  Remove all third party jars from the Edgent repository
EDGENT-263  Add source tgz generation
EDGENT-271  Conform to license and notice standards for binary bundle
EDGENT-272  Conform to license and notice standards for source bundle
EDGENT-281  Change release bundle names
    the bundles are now org.apache.edgent-<version>-{src,bin}.tgz
EDGENT-281  Change the name of the directory that a binary release bundle extracts to
    An official release bundle extracts to "edgent-<version>"
    A snapshot release bundle extracts to "edgent-<version>-SNAPSHOT-<date>-<time>"
EDGENT-281  Change names and/or versions of some external dependency jars in the binary release bundle
    Mentioned for completeness but those jars are intended
    to be private the Edgent runtime components.
        
Known Issues
--------
None yet

Bug Fixes
---------
EDGENT-6    Change in JOB MXBean ObjectName causing console not to getch jobs
EDGENT-83   Getting Started documentation page should tell how to build Quarks or explain releases are not Apache
EDGENT-97   Document HTTPStreams.getJson
EDGENT-120  bad graph generation with certain API / oplet sequence
EDGENT-130  Application hands when trying to read commands from iotf
EDGENT-137  Tuple count: Source oplet flows into Peek.  Source tuple count is less than Peek's count.
EDGENT-152  "Quarks SPI" javadoc group declared but not generated
EDGENT-164  Navigation menu works the wrong way
EDGENT-167  width of FanOut output streams is wrong
EDGENT-168  Console Splitter properties hover output tags wrong
EDGENT-169  Console: hover on stream between Filter and Peek doesn't report tuple count
EDGENT-171  Remove JobMXBean,State or Job.State
EDGENT-172  Add stateChange() to JobMXBean
EDGENT-177  Job name not set correctly for control service
EDGENT-179  console: oplet coloring gradients "too close"
EDGENT-180  Calling stateChange(CLOSE) on JobMXBean does not change its state fully
EDGENT-187  Console: TopologyTesstBasic doesn't render after QUARKS-22 changes
EDGENT-188  Console metric propagation shouldn't traverse non-injected metric ops
EDGENT-189  Undesirable metric op injection
EDGENT-201  Make the quarks console keyboard navigible
EDGENT-207  Iotf connect does not receive commands when only subscribing to to commands
EDGENT-208  Improve TWindow aggregate() javadoc
EDGENT-209  No need to insert PlumbingStreams.isolate after JobEvents.source
EDGENT-210  Submit an app, closing an app and the attempting to resubmit an app "kills" the parent app
EDGENT-213  testFileWriter is naming rolling log files with day-in-year not day-in-month
EDGENT-247  "ant release" with ANDROID_SDK_PLATFORM set fails
EDGENT-255  StreamScope.setEnabled(true) resets buffer if already enabled
EDGENT-257  samples.scenarios.iotp no longer functional
EDGENT-307  Improve supported platform documentation
