blob: b0214b11568e7e6586a6aa196786de4060664197 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_181) on Fri Sep 14 11:34:51 BST 2018 -->
<title>Overview (Master Filesystem)</title>
<meta name="date" content="2018-09-14">
<link rel="stylesheet" type="text/css" href="javadoc.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Overview (Master Filesystem)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li class="navBarCell1Rev">Overview</li>
<li><a href="org/netbeans/modules/masterfs/providers/package-summary.html">Package</a></li>
<li>Class</li>
<li>Use</li>
<li><a href="org/netbeans/modules/masterfs/providers/package-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage">org.netbeans.modules.masterfs/2 2.57.1 2</div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 class="title">Master Filesystem<br/><span style='font-style:normal; font-size:medium; font-weight:normal; background-color:#e0a0a0;'><a href='http://wiki.netbeans.org/API_Stability#Friend' target='_blank'>Friend, Private or Third Party</a></span></h1>
</div>
<div class="header">
<div class="subTitle">
<div class="block">
MasterFileSystem exports SPI for versioning support.</div>
</div>
<p>See: <a href="#overview.description">Description</a></p>
</div>
<div class="contentContainer">
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Master Filesystem table, listing packages, and an explanation">
<caption><span>Master Filesystem</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Package</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="org/netbeans/modules/masterfs/providers/package-summary.html">org.netbeans.modules.masterfs.providers</a></td>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<div class="contentContainer"><a name="overview.description">
<!-- -->
</a>
<div class="block"><p>
MasterFileSystem exports SPI for versioning support. There is expected that
module that provides implementation of FileSystem that should be plugable into
MasterFileSystem must implement at least <code>FileSystemProvider</code>.
MasterFileSystem doesn't provide pure client API but has tiny API that
is intended just for SPI providers (slightly disputable if it should be called API or SPI).
All SPI are plugable, registred by Lookup.
</p>
<h3>What is New (see <a href="apichanges.html">all changes</a>)?</h3>
<ul>
<!--Search for dates that are later or equal to 1997-09-01 in
.-->
<!--Checking date 2014-10-3 with count of newer 0--><!--year ok-->
<li>Oct 3 '14 <a href="apichanges.html#image.for.files">Split image handling into UI module</a>
<p>
Image handling moved to <code>masterfs.ui</code> module, AnnotationProvider
API changed.
</p>
</li>
<!--Checking date 2014-5-14 with count of newer 1--><!--year ok-->
<li>May 14 '14 <a href="apichanges.html#actions.for.files">Deprecating actions(Set of FileObjects)</a>
<p>
Adding <code>findExtrasFor</code> method to replace
direct reference to <code>javax.swing.Actions</code>.
See <a href="../org-netbeans-modules-masterfs-ui/org/netbeans/modules/masterfs/providers/AnnotationProvider.html" shape="rect">
AnnotationProvider
</a> in <code>masterfs.ui</code> module.
</p>
</li>
<!--Checking date 2013-1-11 with count of newer 2--><!--year ok-->
<li>Jan 11 '13 <a href="apichanges.html#org.netbeans.io.suspend">A property to suspend native listeners</a>
<p>
A <a href="architecture-summary.html#systemproperty-org.netbeans.io.suspend" shape="rect">
way</a> to temporarily suspend native listeners.
</p>
</li>
<!--Checking date 2012-3-2 with count of newer 3--><!--year ok-->
<li>Mar 2 '12 <a href="apichanges.html#fileLocked.io.exception">fileLocked method can throw <code>IOException</code></a>
<p>
Changing the <code>fileLocked</code> method to
throw <a href="http://download.oracle.com/javase/8/docs/api/java/io/IOException.html" shape="rect">IOException</a> is
source incompatible, but
binary compatible. As masterfs friends are always compiled at the same time as
masterfs, and even if they will not, they will link (as the change is binary
compatible), we modified the method signature to throw
<a href="http://download.oracle.com/javase/8/docs/api/java/io/IOException.html" shape="rect">IOException</a>
</p>
</li>
<!--Checking date 2011-12-31 with count of newer 4--><!--year ok-->
<li>Dec 31 '11 <a href="apichanges.html#notifier">External change notifiers in separate modules</a>
<p>
Implementation of <em>native listeners</em> has been moved
to separate modules, so the masterfs itself does not depend
on JNA library.
</p>
</li>
<!--Checking date 2011-2-1 with count of newer 5--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2010-8-27 with count of newer 6--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2010-6-22 with count of newer 7--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2010-5-12 with count of newer 8--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2010-4-16 with count of newer 9--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2008-3-20 with count of newer 10--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2008-1-8 with count of newer 11--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2008-1-8 with count of newer 11--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2007-6-15 with count of newer 13--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2007-2-12 with count of newer 14--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2006-8-8 with count of newer 15--><!--Skipped as the amount of changes is too big-->
<!--Checking date 2006-4-24 with count of newer 16--><!--Skipped as the amount of changes is too big-->
</ul>
<h3>Use Cases</h3>
<answer id="arch-usecases">
MasterFileSystem is just implementation of FileSystem. There are no special use
cases. FileObjects erlier returned from <code>URLMapper</code> or
<code>FileUtil.fromFile</code> provided by <code>LocalFileSystem</code> or
<code>CvsFileSystem</code> will be now provided by <code>MasterFileSystem</code>.
There will be guaranteed that there won't be more instances of FileObject
addressing one <code>java.ioFile</code>.
</answer>
<h3>Exported Interfaces</h3>
This table lists all of the module exported APIs
with
defined stability classifications. It is generated
based on answers to questions about the architecture
of the module. <a href="architecture-summary.html">Read them all</a>...
<a name="group-java">
<h5>Group of java interfaces</h5>
</a>
<table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%">
<tr>
<td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr class="tablersh">
<td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td>
</tr>
<tr class="tabler">
<td>MasterFileSystemAPI</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Friend">Friend</a></td><td><a name="java-MasterFileSystemAPI"><a href="org/netbeans/modules/masterfs/providers/package-summary.html">
.../masterfs/providers/package-summary.html</a>
<p></p>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>
<a name="group-property">
<h5>Group of property interfaces</h5>
</a>
<table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%">
<tr>
<td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr class="tablersh">
<td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td>
</tr>
<tr class="tabler">
<td>refreshSlow</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Private">Private</a></td><td><a name="property-refreshSlow">
<p></p>
One can ask FileObject.getAttribute("refreshSlow") and obtain an instance
of <code>Runnable</code> with intricate behavior. This is a private contract
used from core.ui module to show refresh progress and tested
in <code>masterfs/test/unit/src/org/netbeans/modules/masterfs/SlowRefreshTest.java</code>.
<p></p>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>
<a name="group-systemproperty">
<h5>Group of systemproperty interfaces</h5>
</a>
<table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%">
<tr>
<td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr class="tablersh">
<td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td>
</tr>
<tr class="tabler">
<td>org.netbeans.modules.masterfs.watcher.disable</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Private">Private</a></td><td><a name="systemproperty-org.netbeans.modules.masterfs.watcher.disable">
<p></p>
It is possible to disable native listening on filesystem changes.
Useful mostly in testing environment, but it may be interesting for some
users too. Don't rely (much) on this property from production code however.
<p></p>
</a></td>
</tr>
<tr class="tabler">
<td>org.netbeans.modules.masterfs.watcher.FAM</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Private">Private</a></td><td><a name="systemproperty-org.netbeans.modules.masterfs.watcher.FAM">
<p></p>
It is possible to enable use of FAM notifier on Solaris disabled by default.
Useful mostly in testing environment, but it may be interesting for some
users too. Don't rely (much) on this property from production code however.
<p></p>
</a></td>
</tr>
<tr class="tabler">
<td>org.netbeans.modules.masterfs.case</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Private">Private</a></td><td><a name="systemproperty-org.netbeans.modules.masterfs.case">
<p></p>
To address problems when mixing various types of network file systems
(as described in bug <code>198946</code>)
there is a special property <code>org.netbeans.modules.masterfs.case</code>
that can be set to <code>sensitive</code> or <code>insensitive</code> value
in order to override the system default. This is intended only for end user
consumption, not for consumption by other parts of the system. The name and
meaning of this property may change in any release.
<p></p>
</a></td>
</tr>
<tr class="tabler">
<td>org.netbeans.io.suspend</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="systemproperty-org.netbeans.io.suspend">
<p></p>
<p>
Native listeners check the <code>org.netbeans.io.suspend</code> property.
If it is set to integer greater than zero, they stop delivering file change events.
The list of modified directories is recorded (its size is made available
by setting its string value into <code>org.netbeans.io.pending</code> property),
but its processing is suspended. Events are delivered when
<code>org.netbeans.io.suspend</code> property changes its value to <code>0</code>
or becomes empty.
</p>
<p>
I/O intensive operations in other NetBeans modules are advised
to honour the <code>org.netbeans.io.suspend</code> property as well and
suspend their I/O activities too.
</p>
<p>
In order to properly communicate changes to the property between multiple
<em>receivers</em> and multiple <em>controllers</em> it is suggested to
only manipulate the value under <code>synchronized("org.netbeans.io.suspend".intern())</code>
lock. Those changing the value are supposed to increment it by one when they
request the suspend and decrement it by one when they want to resume their
own suspend.
</p>
<p>
Whenever a change to the state of the property is made,
<em>controllers</em> are supposed to
<code>"org.netbeans.io.suspend".intern().notifyAll()</code>.
</p>
<p></p>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>
<h3>Implementation Details</h3>
<h5>What do other modules need to do to declare a dependency on this one, in addition to or instead of a plain module dependency?</h5>
Nothing currently. Most "clients" are really callers of
<code>FileUtil.toFileObject</code> and so on, and thus
implicitly depend on the existence of this module. In the
future a provide-require token might make sense.
<p>
Read more about the implementation in the <a href="architecture-summary.html">answers to
architecture questions</a>.
</p></div>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li class="navBarCell1Rev">Overview</li>
<li><a href="org/netbeans/modules/masterfs/providers/package-summary.html">Package</a></li>
<li>Class</li>
<li>Use</li>
<li><a href="org/netbeans/modules/masterfs/providers/package-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage">org.netbeans.modules.masterfs/2 2.57.1 2</div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><span class="footnote">Built on September 14 2018.&nbsp;&nbsp;|&nbsp;&nbsp; Copyright &#169; 2017-2018 Apache Software Foundation. All Rights Reserved.</span></small></p>
</body>
</html>