<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->


<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

<!-- First, a list of API names you may use: -->
<apidefs>
   <apidef name="io.api">I/O API</apidef>
   <apidef name="io.spi">I/O SPI</apidef>
   <!-- etc. -->
</apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

<changes>
    <change id="hyperlink.intent.support">
      <api name="io.spi"/>
      <summary>Add features for dealing with Intent based hyperlinks</summary>
      <version major="1" minor="1"/>
      <date day="12" month="12" year="2014"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              As there are now two types of hyperlinks, which may be handled
              differently in some situations, we need some way to get info about
              the type and internals of hyperlinks.
          </p>
          <p>
              Added new enum <a href="@TOP@/org/netbeans/spi/io/support/HyperlinkType.html">HyperlinkType</a>
              and new methods into class <a href="@TOP@/org/netbeans/spi/io/support/Hyperlinks.html">Hyperlinks</a>:
          </p>
          <ul>
              <li><a href="@TOP@/org/netbeans/spi/io/support/Hyperlinks.html#getType-org.netbeans.api.io.Hyperlink-">Hyperlinks.getType(Hyperlink)</a></li>
              <li><a href="@TOP@/org/netbeans/spi/io/support/Hyperlinks.html#getIntent-org.netbeans.api.io.Hyperlink-">Hyperlinks.getIntent(Hyperlink)</a></li>
              <li><a href="@TOP@/org/netbeans/spi/io/support/Hyperlinks.html#getRunnable-org.netbeans.api.io.Hyperlink-">Hyperlinks.getRunnable(Hyperlink)</a></li>
          </ul>
      </description>
      <issue number="249321" />
    </change>
    <change id="hyperlink.intent">
      <api name="io.api"/>
      <summary>Support hyperlinks based on Intents</summary>
      <version major="1" minor="1"/>
      <date day="12" month="12" year="2014"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Besides hyperlinks based on Runnables, support also hyperlinks
              that are defined by an Intent instance.
          </p>
          <p>
              Added new static methods into class <a href="@TOP@/org/netbeans/api/io/Hyperlink.html">Hyperlink</a>:
          </p>
          <ul>
              <li><a href="@TOP@/org/netbeans/api/io/Hyperlink.html#from-org.netbeans.api.intent.Intent-">Hyperlink.from(Intent)</a></li>
              <li><a href="@TOP@/org/netbeans/api/io/Hyperlink.html#from-org.netbeans.api.intent.Intent-boolean-">Hyperlink.from(Intent, boolean)</a></li>
          </ul>
      </description>
      <issue number="249321" />
    </change>
    <change id="introduction.api">
      <api name="io.api"/>
      <summary>Introduce new I/O API</summary>
      <version major="1" minor="0"/>
      <date day="7" month="11" year="2014"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Introduce new lightweight, UI-independent I/O API, recommended
              alternative for API module openide.io.
          </p>
      </description>
      <issue number="248126" />
    </change>
    <change id="introduction.spi">
      <api name="io.spi"/>
      <summary>Introduce new Output Window SPI</summary>
      <version major="1" minor="0"/>
      <date day="7" month="11" year="2014"/>
      <author login="jhavlin"/>
      <compatibility addition="yes" binary="compatible" semantic="compatible" />
      <description>
          <p>
              Introduce new SPI for custom Output Window implementations. The
              SPI classes are separated from API classes, so they can be easily
              extended in the future without breaking current code.
          </p>
      </description>
      <issue number="248126" />
    </change>
</changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <==============

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE openide/io/api/doc/changes/changes.xml

-->
    <head>
      <title>Change History for the Input/Output API and SPI</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the <a href="@org-netbeans-api-io@/index.html">I/O API and SPI</a>.</p>

<!-- The actual lists of changes, as summaries and details: -->
      <hr/>
      <standard-changelists module-code-name="org.netbeans.api.io"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
