<!-- <questionid="arch-overall"when="init"> Describetheoverallarchitecture. <hint> WhatwillbeAPIfor <ahref="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi"> clientsandwhatsupportAPI</a>? Whatpartswillbepluggable? Howwillplug-insberegistered?Pleaseuse<code><apitype="export"/></code> todescribeyourgeneralAPIs. Ifpossiblepleaseprovide simplediagrams. </hint> </question>
-->
<answer id="arch-overall">
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.
</answer>
<!-- <questionid="arch-quality"when="init"> Howthe<ahref="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a> ofyourcodewillbetestedand howfutureregressionsaregoingtobeprevented? <hint> Whatkindoftesting youwanttouse?What/howmuchareaoffunctionality shouldbecoveredbythetests? </hint> </question>
-->
<answer id="arch-quality">
Junit tests as much as possible and as soon as possible.
</answer>
<!-- <questionid="arch-time"when="init"> Whatarethetimeestimatesofthework? <hint> Pleaseexpressyourestimatesofhowlongthedesign,implementation, stabilizationarelikelytolast.Howmanypeoplewillbeneededto implementthisandwhatistheexpectedmilestonetheworkshouldbe ready. </hint> </question>
-->
<answer id="arch-time">
MasterFileSysetm is already implemented, tested and used in current dev builds.
There are a few requests for enhancements including API changes that should be incorporated.
Expected milestone is promo-D.
Currently there doesn't exist any SPI provider that supports automounting
(<code>AutoMountProvider</code>), this feature isn't tested yet and isn't planned to
be used in promo-D.
</answer>
<!-- <questionid="arch-usecases"when="init"> Describethemain<ahref="http://openide.netbeans.org/tutorial/api-design.html#usecase"> usecases</a>ofthenewAPI.Whowilluseitat whatcircumstancesandwhatwillbethetypicalcodetowrite tousethemodule. </question>
-->
<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>
<!-- <questionid="arch-what"when="init"> Whatisthisprojectgoodfor? <hint> Pleaseprovidehereafewlinesdescribingtheproject, whatproblemitshouldsolve,providelinkstodocumentation, specifications,etc. </hint> </question>
-->
<answer id="arch-what">
MasterFileSystems is just implementation of FileSystem provided in standalone
module including implementation of URLMapper that resolves file protocol and
is responsible for conversion from URL into FileObject and vice versa.
Implementation just delegates to the other FileSystem implementations
(LocalFileSystem, VCSFileSystem, ...) and playes the role of arbiter that controls
instantiation and life cycle of provided FileObjects.
<api name="MasterFileSystemAPI" group="java"type="export" category="friend" url="@TOP@/org/netbeans/modules/masterfs/providers/package-summary.html"/>
</answer>
<!-- <questionid="compat-i18n"when="impl"> Isyourmodulecorrectlyinternationalized? <hint> Correctinternationalizationmeansthatitobeysinstructions at<ahref="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html"> NetBeansI18Npages</a>. </hint> </question>
-->
<answer id="compat-i18n">
Implemented with I18N instructions in mind.
</answer>
<!-- <questionid="compat-standards"when="init"> Doesthemoduleimplementordefineanystandards?Isthe implementationexactordoesitdeviatesomehow? </question>
-->
<answer id="compat-standards">
It implements the FileSystem API. No intentional deviations.
</answer>
<!-- <questionid="compat-version"when="impl"> Canyourmodulecoexistwithearlierandfuture versionsofitself?Canyoucorrectlyreadalloldsettings?Willfuture versionsbeabletoreadyourcurrentsettings?Canyouread orpolitelyignoresettingsstoredbyafutureversion? <hint> Veryhelpfulforreadingsettingsistostoreversionnumber there,sofutureversionscandecidewhetherhowtoread/convert thesettingsandolderversionscanignorethenewones. </hint> </question>
-->
<answer id="compat-version">
No settings at all.
</answer>
<!-- <questionid="dep-platform"when="init"> Onwhichplatformsdoesyourmodulerun?Doesitruninthesame wayoneach? <hint> IfyourmoduleisusingJNIordealswithspecialdifferencesof OSeslikefilesystems,etc.pleasedescribeherewhattheyare. </hint> </question>
-->
<answer id="dep-platform">
Any. There is special implementation of root on Windows which has children corresponding
to logical drives (A:, C:, D: ...) , has no delegate, there doesn't exist conversion
to java.io.File, calling refresh checks logical drives and fires regular events.
</answer>
<answer id="deploy-dependencies">
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.
</answer>
<!-- <questionid="deploy-jar"when="impl"> DoyoudeployjustmoduleJARfile(s)orotherfilesaswell? <hint> IfyourmoduleconsistsofjustonemoduleJARfile,justconfirmthat. IfitusesmorethanoneJAR,describewheretheyarelocated,how theyrefertoeachother. IfitconsistofmoduleJAR(s)andotherfiles,pleasedescribe whatistheirpurpose,whyotherfilesarenecessary.Please makesurethatinstallation/uninstallationleavesthesystem instateasitwasbeforeinstallation. </hint> </question>
-->
<answer id="deploy-jar">
Just one module JAR file.
</answer>
<!-- <questionid="deploy-packages"when="init"> Arepackagesofyourmodulemadeinaccessiblebynotdeclaringthem public? <hint> NetBeansmodulesystemallowsrestrictionofaccessrightsto publicclassesofyourmodulefromothermodules.Thisprevents unwanteddependenciesofothersonyourcodeandshouldbeused wheneverpossible(<ahref="http://www.netbeans.org/download/javadoc/OpenAPIs/org/openide/doc-files/upgrade.html#3.4-public-packages"> publicpackages </a>).Ifyoudonotrestrictaccesstoyourclassesyouare makingittooeasyforotherpeopletomisuseyourimplementation details,thatiswhyyoushouldhavegoodreasonfornot restrictingpackageaccess. </hint> </question>
-->
<answer id="deploy-packages">
<p>
The entire API and SPI are in its own public packages.
</p>
<p>
The implementation is in another package and is not considered public.
</p>
</answer>
<!-- <questionid="deploy-shared"when="final"> Doyouneedtobeinstalledinthesharedlocationonly,orintheuserdirectoryonly, orcanyourmodulebeinstalledanywhere? <hint> Installationlocationshallnotmatter,ifitdoesexplainwhy. Consideralsowhether<code>InstalledFileLocator</code>canhelp. </hint> </question>
-->
<answer id="deploy-shared">
Module can be installed anywhere.
</answer>
<!-- <questionid="exec-component"when="impl"> Isexecutionofyourcodeinfluencedbyany(string)property ofanyofyourcomponents? <hint> Often<code>JComponent.getClientProperty</code>,<code>Action.getValue</code> or<code>PropertyDescriptor.getValue</code>,etc.areusedtoinfluence abehaviorofsomecode.Thisofcourseformsaninterfacethatshould bedocumented.Alsoifonedependsonsomeinterfacethatanobject implements(<code>componentinstanceofRunnable</code>)thatformsan APIaswell. </hint> </question>
-->
<answer id="exec-component">
<api name="refreshSlow" category="private"type="export" group="property">
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>.
</api>
<api name="org.netbeans.modules.masterfs.watcher.disable" category="private"type="export" group="systemproperty">
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.
</api>
<api name="org.netbeans.modules.masterfs.watcher.FAM" category="private"type="export" group="systemproperty">
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.
</api>
</answer>
<!-- <questionid="exec-introspection"when="impl"> Doesyourmoduleuseanykindofruntimetypeinformation(<code>instanceof</code>, workwith<code>java.lang.Class</code>,etc.)? <hint> CheckforcaseswhenyouhaveanobjectoftypeAandyoualso expectitto(possibly)beoftypeBanddosomespecialaction.That shouldbedocumented.Thesameappliesonoperationsinmeta-level (Class.isInstance(...),Class.isAssignableFrom(...),etc.). </hint> </question>
-->
<answer id="exec-introspection">
Naturally this module uses instanceof but I don't think its usage isn't suspicious or
worth of mentioning.
</answer>
<!-- <questionid="exec-privateaccess"when="final"> Areyouawareofanyotherpartsofthesystemcallingsomeof yourmethodsbyreflection? <hint> Ifso,describethe"contract"asanAPI.Likelyprivateorfriendone,but stillAPIandconsiderrewriteofit. </hint> </question>
-->
<answer id="exec-privateaccess">
<api category="friend" group="java" name="FileObjectMoveLookup"type="import">
<code>BaseFileObj</code> implementation of <code>FileObject</code> is using
a reflection to re-associate the lookup after a move operation. This is a
contract established with <code>openide.filesystems</code> module.
</api>
</answer>
<!-- <questionid="exec-property"when="impl"> Isexecutionofyourcodeinfluencedbyanyenvironmentor Javasystem(<code>System.getProperty</code>)property? <hint> Ifthereisapropertythatcanchangethebehaviorofyour code,somebodywilllikelyuseit.Youshoulddescribewhatitdoes andthe<ahref="http://openide.netbeans.org/tutorial/api-design.html#life">stabilitycategory</a> ofthisAPI.Youmayuse <pre> <apitype="export"group="property"name="id"category="private"url="http://..."> descriptionoftheproperty,whereitisused,whatitinfluence,etc. </api> </pre> </hint> </question>
-->
<answer id="exec-property">
<api name="org.netbeans.modules.masterfs.case" category="private" group="systemproperty"type="export">
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.
</api>
<api name="org.netbeans.io.suspend" category="devel" group="systemproperty"type="export">
<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>
</api>
</answer>
<!-- <questionid="lookup-lookup"when="init"> Doesyourmoduleuse<code>org.openide.util.Lookup</code> oranysimilartechnologytofindanycomponentstocommunicatewith?Whichones? <hint> Pleasedescribetheinterfacesyouaresearchingfor,where aredefined,whetheryouaresearchingforjustoneormoreofthem, iftheorderisimportant,etc.Alsoclassifythestabilityofsuch APIcontract. </hint> </question>
-->
<answer id="lookup-lookup">
All registered <code>FileSystemProvider</code> and <code>AutoMountProvider</code>
instances are queried and used.
</answer>
<!-- <questionid="lookup-register"when="final"> Doyouregisteranythingintolookupforothercodetofind? <hint> Doyouregisterusinglayerfileorusing<code>META-INF/services</code>? Whoissupposedtofindyourcomponent? </hint> </question>
-->
<answer id="lookup-register">
URLMapper implementation is registered using <code>META-INF/services</code>. URLMapper
is supposed to find it (may sound strange but in filesystems isn't separated API, SPI
and implementation).
</answer>
<!-- <questionid="perf-progress"when="final"> Doesyourmoduleexecuteanylong-runningtasks? <hint>Longrunningtasksshouldneverblock AWTthreadasitbadlyhurtstheUI <ahref="http://performance.netbeans.org/responsiveness/issues.html"> responsiveness</a>. Taskslikeconnectingover network,computinghugeamountofdata,compilation bedoneasynchronously(forexample using<code>RequestProcessor</code>),definitivelyitshould notblockAWTthread. </hint> </question>
-->
<answer id="perf-progress">
Mounting new FileSystem could be considered long-running task under some circumstances.
Cache with living FileObjects must be traversed and delegates are changed if necessary.
</answer>
<!-- <questionid="perf-scale"when="init"> Whichexternalcriteriainfluencetheperformanceofyour program(sizeoffileineditor,numberoffilesinmenu, insourcedirectory,etc.)andhowwellyourcodescales? <hint> Pleaseincludesomeestimates,thereareothermoredetailed questionstoanswerinlaterphasesofimplementation. </hint> </question>
-->
<answer id="perf-scale">
The higher number of registered instances of <code>AutoMountProvider</code> and
the higher number of mounted filesystems then more negatively affected
performance.
</answer>
<!-- <questionid="perf-startup"when="final"> Doesyourmodulerunanycodeonstartup? </question>
-->
<answer id="perf-startup">
MasterFileSystem is just instantiated by <code>AutomountSupport</code>code>.
</answer>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.