<!-- <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> todescribeyourgeneralAPIsandspecifytheir <ahref="http://openide.netbeans.org/tutorial/api-design.html#category-private"> stabilitycategories</a>. Ifpossiblepleaseprovidesimplediagrams. </hint> </question>
-->
<answer id="arch-overall">
<p>
The module provides no stable API.
</p>
<p>
The Local History is listening for events from the filesystem,
stores files which where created, modified or deleted in the IDE and
provides an UI to overview the stored data, revert old changes and to setup
what files and for how long are to be hold in the local history.
</p>
<api group="java.io.File" name="localstorage"type="export" category="private">
<p>
A folder in $userdir/cache. Contains the Local History storage.
</p>
</api>
<api group="java.io.File" name="version"type="export" category="private">
<p>
One instance for the whole storage. Contains the storage version.
</p>
</api>
<api group="java.io.File" name="versioned-file"type="export" category="private">
<p>
For every file or folder changed in the IDE there is a new folder with a generated name
created in the main storage folder. It contains metadata files and all stored previous versions
for the versioned file.
</p>
</api>
The following files are created in the storage in case a file was changed:
<ul>
<li>
<api group="java.io.File" name="stored-version"type="export" category="private">
<p>
One instance for every file change. Is a files version before it was changed. Zipped.
XXX
</p>
</api>
</li>
<li>
<api group="java.io.File" name="data"type="export" category="private">
<p>
One instance for each file changed in the IDE. Contains metadata describing its state and origin.
XXX
</p>
</api>
</li>
<li>
<api group="java.io.File" name="labels"type="export" category="private">
<p>
One instance for each file changed in the IDE. Contains labels given to particular versions.
XXX
</p>
</api>
</li>
</ul>
The following files are created in the storage in case a folder was changed
<ul>
<li>
<api group="java.io.File" name="history"type="export" category="private">
<p>
One instance for each folder changed in the IDE. Contains information about structural changes. (file create, file delete, ...)
XXX
</p>
</api>
</li>
</ul>
<p>
Open Issues:
</p>
<ul>
<li>the only event related to a file change comes after a file was already saved.
Not like in beforeDelete and deleteSuccess or beforeCreate and createSuccess</li>
</ul>
</answer>
<p>
The module tracks changes made on files in the IDE and provides an
UI to view a files previous versions and to eventually revert a file to its older version.
</p>
<p>The main features are:</p>
<ul>
<li> to setup what files and for how long are to be stored</li>
<li> to overview the stored file versions</li>
<li> to diff a file with its previous versions in a diff view</li>
<li> to revert a file to its previous version or to restore deleted files</li>
</ul>
</answer>
<!-- <questionid="compat-standards"when="init"> Doesthemoduleimplementordefineanystandards?Isthe implementationexactordoesitdeviatesomehow? </question>
-->
<answer id="compat-standards">
<p>
No standards defined or implemented.
</p>
</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">
<p>
Only one version of the module can be installed at a time.
The settings are shared across different versions and will
be read in future as well.
</p>
<p>
The storage main folder contains a file with the storage version.
</p>
</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">
<p>
Yes. All type checks with <code>instanceof</code> switching the control flow
are made only over module private types.
</p>
</answer>
<!-- <questionid="exec-threading"when="init"> Whatthreadingmodels,ifany,doesyourmoduleadhereto?Howthe projectbehaveswithrespecttothreading? <hint> IsyourAPIthreadsafe?Canitbeaccessedfromanythreadsor justfromsomededicatedones?AnyspecialrelationtoAWTand itsEventDispatchthread?Also ifyourmodulecallsforeignAPIswhichhaveaspecificthreadingmodel, indicatehowyoucomplywiththerequirementsformultithreadedaccess (synchronization,mutexes,etc.)applicabletothoseAPIs. IfyourmoduledefinesanyAPIs,orhascomplexinternalstructures thatmightbeusedfrommultiplethreads,declarehowyouprotect dataagainstconcurrentaccess,raceconditions,deadlocks,etc., andwhethersuchrulesareenforcedbyruntimewarnings,errors,assertions,etc. Examples:aclassmightbenon-thread-safe(likeJavaCollections);might befullythread-safe(internallocking);mightrequireaccessthroughamutex (andmayormaynotautomaticallyacquirethatmutexonbehalfofaclientmethod); mightbeabletorunonlyintheeventqueue;etc. Alsodescribewhenanyeventsarefired:synchronously,asynchronously,etc. Ideas:<ahref="http://core.netbeans.org/proposals/threading/index.html#recommendations">ThreadingRecommendations</a>(inprogress) </hint> </question>
-->
<answer id="exec-threading">
<ul>
<li>
The module is listening on events from the filesystem and processes them synchronously by creating
relevant entries in the local history storage.
</li>
<li>
Several actions retrieve data from the local history storage or modify files through calls on the
<code>org.openide.filesystems.FileObject</code> layer. Such data processing runs always asynchronously
to the AWT thread.
</li>
</ul>
<p>
Concurrent access to the local history storage is prevented by synchronizing all read and write acces to it,
with the future option to eventually breakdown the granularity of synchronization to a finer level,
if a synchronized access to the whole storage should prove as ineficient.
</p>
XXX
</answer>
<!-- <questionid="format-types"when="impl"> Whichprotocolsandfileformats(ifany)doesyourmodulereadorwriteondisk, ortransmitorreceiveoverthenetwork?Doyougenerateanantbuildscript? Canitbeeditedandmodified? <hint> <p> Filescanbereadandwrittenbyotherprograms,modulesandusers.Iftheyinfluence yourbehaviour,makesureyoueitherdocumenttheformatorclaimthatitisaprivate api(usingthe<api>tag). </p> <p> Ifyougenerateanantbuildfile,thisisverylikelygoingtobeseenbyendusersand theywillbeattemptedtoeditit.Youshouldbereadyforthatandprovideherealink todocumentationthatyouhaveforsuchpurposesandalsodescribehowyouaregoingto understandsuchfilesduringnextrelease,whenyou(verylikely)slightlychangethe format. </p> </hint> </question>
-->
<answer id="format-types">
<p>
The Local History stores changed files by creating one-to-one copies from them. The module also stores some additional information
in binary data files. The format isn't specified/stable yet, but they already may be regarded as private.
</p>
<p>
No ant build script.
</p>
</answer>
<!-- <questionid="lookup-lookup"when="init"> Doesyourmoduleuse<code>org.openide.util.Lookup</code> oranysimilartechnologytofindanycomponentstocommunicatewith?Whichones? <hint> NetBeansisbuildaroundagenericregistryofservicescalled lookup.Itispreferabletouseitforregistrationanddiscovery ifpossible.See <ahref="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html"> TheSolutiontoComunicationBetweenComponents </a>.Ifyoudonotplantouselookupandinsistusage ofothersolution,thenpleasedescribewhyitisnotworkingfor you. <br/> Whenfillingthefinalversionofyourarchdocument,please describetheinterfacesyouaresearchingfor,where aredefined,whetheryouaresearchingforjustoneormoreofthem, iftheorderisimportant,etc.Alsoclassifythestabilityofsuch APIcontract.Use<apigroup=&lookup&/>tag,so yourinformationgetslistedinthesummarypageofyourjavadoc. </hint> </question>
-->
<answer id="lookup-lookup">
<p>
Yes. To get the action context for the context aware action.
</p>
</answer>
<!-- <questionid="lookup-register"when="final"> Doyouregisteranythingintolookupforothercodetofind? <hint> Doyouregisterusinglayerfileorusing<code>META-INF/services</code>? Whoissupposedtofindyourcomponent? </hint> </question>
-->
<answer id="lookup-register">
Yes. org.netbeans.modules.versioning.spi.VersioningSystem - it is looked up by the org.netbeans.modules.versioning.VersioningManager for
delegating MFS events to the module.
</answer>
<!-- <questionid="perf-limit"when="init"> Arethereanyhard-codedorpracticallimitsinthenumberorsizeof elementsyourcodecanhandle? <hint> Mostofalgorithmshaveincreasingmemoryandspeedcomplexity withrespecttosizeofdatatheyoperateon.Whatisthecritical partofyourprojectthatcanbeseenasabottleneckwith respecttospeedorrequiredmemory?Whatarethepractical sizesofdatayoutestedyourprojectwith?Whatisyourestimate ofpotentialsizeofdatathatwouldcausevisibleperformance problems?Istheresomekindofchecktodetectsuchsituation andprevent"hard"crashes-forexampletheCloneableEditorSupport checksforsizeofafiletobeopenedineditor andifitislargerthan1Mbitshowsadialoggivingthe usertherighttodecide-e.g.tocancelorcommitsuicide. </hint> </question>
-->
<answer id="perf-limit">
<p>
No explicit limits. Technically, the available memory size is the limit...
</p>
</answer>
<!-- <questionid="perf-mem"when="final"> Howmuchmemorydoesyourcomponentconsume?Estimate witharelationtothenumberofwindows,etc. </question>
-->
<answer id="perf-mem">
<p>The consumed memory will depend on:</p>
<ul>
<li>
how many "Local History View" TopComponents are openend. The memory consumed by a "Local History View" depends on:
<ul>
<li>
how many entries for each "Local History View" context are stored in the local history.
</li>
<li>
how big are the files which are currently diffed in the openend "Local History View"-s
</li>
</ul>
</li>
</ul>
XXX
</answer>
<!-- <questionid="perf-menus"when="final"> Doesyourmoduleusedynamicallyupdatedcontextmenus,or context-sensitiveactionswithcomplicatedandslowenablementlogic? <hint> Ifyoudoalotoftrickswhenaddingactionstoregularorcontextmenus,youcansignificantly slowdowndisplayofthemenu,evenwhentheuserisnotusingyouraction.Payattentionto actionsyouaddtothemainmenubar,andtocontextmenusofforeignnodesorcomponents.If theactionisconditionallyenabled,orchangesitsdisplaydynamically,youneedtocheckthe impactonperformance.Insomecasesitmaybemoreappropriatetomakeasimpleactionthatis alwaysenabledbutdoesmoredetailedchecksinadialogifitisactuallyrun. </hint> </question>
-->
<answer id="perf-menus">
<p>
Yes, there probably will be actions rendering their enablement status depending on information dynamicaly retrieved from the
local history storage. The exact list of candidates is not known yet.
e.g. the "Revert Deleted" action should be enabled only for folders in which where files deleted for the time period covered by
the local history.
</p>
XXX
</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">
<p>
There probably will be actions taking a recognizable amount of time. They will be processed asynchronously.
</p>
XXX
</answer>
<!-- <questionid="perf-scale"when="init"> Whichexternalcriteriainfluencetheperformanceofyour program(sizeoffileineditor,numberoffilesinmenu, insourcedirectory,etc.)andhowwellyourcodescales? <hint> Pleaseincludesomeestimates,thereareothermoredetailed questionstoanswerinlaterphasesofimplementation. </hint> </question>
-->
<answer id="perf-scale">
<p>
Generaly speaking - the amount and size of files in the local history storage will influence the performance of the Local History module.
It is up to further evaluation how significant this impact will be in a reasonable configured environment (time period covered by local history,
max size for stored files, ... ).
XXX
</p>
</answer>
<!-- <questionid="perf-spi"when="init"> Howtheperformanceofthepluggedincodewillbeenforced? <hint> Ifyouallowforeigncodetobepluggedintoyourownmodule,how doyouenforcethatitwillbehavecorrectlyandquicklyandwillnot negativelyinfluencetheperformanceofyourownmodule? </hint> </question>
-->
<answer id="perf-spi">
<p>
No plugged in code.
</p>
</answer>
<!-- <questionid="perf-startup"when="final"> Doesyourmodulerunanycodeonstartup? </question>
-->
<answer id="perf-startup">
<p>
The Local History is supposed to store file versions only for a specified time period. Accordingly should be all obsolete
local history entries removed when their age reaches a defined value. A possible solution to this would be running
a cleanup task on every startup as a alternative to doning this just on demand for a accesed file or the whole storage.
</p>
XXX
</answer>
<!-- <questionid="perf-wakeup"when="final"> Doesanypieceofyourcodewakeupperiodicallyanddosomething evenwhenthesystemisotherwiseidle(nouserinteraction)? </question>
-->
<answer id="perf-wakeup">
<p>
see also perf-startup
XXX
</p>
</answer>
<!-- <questionid="resources-file"when="final"> Doesyourmoduleuse<code>java.io.File</code>directly? <hint> NetBeansprovidealogicalwrapperoverplainfilescalled <code>org.openide.filesystems.FileObject</code>that providesuniformaccesstosuchresourcesandisthepreferred waythatshouldbeused.Butofcoursetherecanbesituationswhen thisisnotsuitable. </hint> </question>
-->
<answer id="resources-file">
Yes. There are two main cases when the Local History creates or modifies files:
<ol>
<li>
to track the changes performed on files in the IDE by copying created, modifed or deleted ones
into the local histories storage and storing some additional data describing this changes.
This is done directly via <code>java.io.File</code>.
</li>
<li>
to revert changes done in the IDE. This is done via <code>org.openide.filesystems.FileObject</code>
as the (reverted) changes should be reflected in the IDE.
</li>
</ol>
</answer>
<!-- <questionid="resources-layer"when="final"> Doesyourmoduleprovideownlayer?Doesitcreateanyfilesor foldersinit?Whatitistryingtocommunicatebythatandwithwhich components? <hint> NetBeansallowsautomaticanddeclarativeinstallationofresources bymodulelayers.Moduleregisterfilesintoappropriateplaces andothercomponentsusethatinformationtoperformtheirtask (buildmenu,toolbar,windowlayout,listoftemplates,setof options,etc.). </hint> </question>
-->
<answer id="resources-layer">
<p>
Yes, files are created for actions and window system layout.
XXX
</p>
</answer>
<!-- <questionid="resources-preferences"when="final"> DoesyourmoduleusespreferencesviaPreferencesAPI?DoesyourmoduleuseNbPreferencesor orregularJDKPreferences?Doesitread,writeorboth? Doesitsharepreferenceswithothermodules?Ifso,thenwhy? <hint> Youmayuse <apitype="export"group="preferences" name="preferencenodename"category="private"> descriptionofindividualkeys,whereitisused,whatit influences,whetherthemodulereads/writeit,etc. </api> DuetoXMLIDrestrictions,ratherthan/org/netbeans/modules/foogivethe"name"asorg.netbeans.modules.foo. NotethatifyouuseNbPreferencesthisnamewillthenbethesameasthecodenamebaseofthemodule. </hint> </question>
-->
<answer id="resources-preferences">
<p>
The module will read and write user options through NbPreferences. None of them will be shared with other modules.
</p>
</answer>
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.57Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-28)
¤
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.