This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 236176
Collapse All | Expand All

(-)core.multitabs/arch.xml (+1134 lines)
Line 0 Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "../nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
3
  <!ENTITY api-questions SYSTEM "../nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
4
]>
5
6
<api-answers
7
  question-version="1.29"
8
  author="yourname@netbeans.org"
9
>
10
11
  &api-questions;
12
13
14
<!--
15
        <question id="arch-overall" when="init">
16
            Describe the overall architecture. 
17
            <hint>
18
            What will be API for 
19
            <a href="http://wiki.netbeans.org/API_Design#Separate_API_for_clients_from_support_API">
20
                clients and what support API</a>? 
21
            What parts will be pluggable?
22
            How will plug-ins be registered? Please use <code>&lt;api type="export"/&gt;</code>
23
            to describe your general APIs and specify their
24
            <a href="http://wiki.netbeans.org/API_Stability#Private">
25
            stability categories</a>.
26
            If possible please provide simple diagrams.
27
            </hint>
28
        </question>
29
-->
30
 <answer id="arch-overall">
31
  <p>
32
   <api type="export" category="devel" group="java" name="multitabs" />
33
  </p>
34
  <p>The main purpose of this API is to allow third-party customizations of editor
35
  tabs. Instead of implementing many interfaces and creating various UI delegates
36
  it is possible to create a simple decorator-like class that can customize
37
  the appearance of a specific editor tab. For example change tabs background color
38
  according to file type or project type, change its icon etc.</p>
39
 </answer>
40
41
42
43
<!--
44
        <question id="arch-quality" when="init">
45
            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
46
            of your code be tested and 
47
            how are future regressions going to be prevented?
48
            <hint>
49
            What kind of testing do
50
            you want to use? How much functionality, in which areas,
51
            should be covered by the tests? How you find out that your
52
            project was successful?
53
            </hint>
54
        </question>
55
-->
56
 <answer id="arch-quality">
57
  <p>
58
   The API will be covered by unit tests.
59
  </p>
60
 </answer>
61
62
63
64
<!--
65
        <question id="arch-time" when="init">
66
            What are the time estimates of the work?
67
            <hint>
68
            Please express your estimates of how long the design, implementation,
69
            stabilization are likely to last. How many people will be needed to
70
            implement this and what is the expected milestone by which the work should be 
71
            ready?
72
            </hint>
73
        </question>
74
-->
75
 <answer id="arch-time">
76
  <p>
77
   The API is already implemented in org.netbeans.core.multitabs package.
78
  </p>
79
 </answer>
80
81
82
83
<!--
84
        <question id="arch-usecases" when="init">
85
            <hint>
86
                Content of this answer will be displayed as part of page at
87
                http://www.netbeans.org/download/dev/javadoc/usecases.html 
88
                You can use tags &lt;usecase name="name&gt; regular html description &lt;/usecase&gt;
89
                and if you want to use an URL you can prefix if with @TOP@ to begin
90
                at the root of your javadoc
91
            </hint>
92
        
93
            Describe the main <a href="http://wiki.netbeans.org/API_Design#The_Importance_of_Being_Use_Case_Oriented">
94
            use cases</a> of the new API. Who will use it under
95
            what circumstances? What kind of code would typically need to be written
96
            to use the module?
97
        </question>
98
-->
99
 <answer id="arch-usecases">
100
  <p>
101
      <usecase id="tabdecorator" name="Tab Decorator">
102
          <p>To customize the rendering of (some) editor tabs one needs subclass
103
              <code>TabDecorator</code> class and register it in the global <code>Lookup</code>.</p>
104
              <p>The example below shows a decorator that removes file extension
105
              from Java source files to have shorter tabs to show more file names
106
              without the need for scrolling.</p>
107
              <pre>
108
ServiceProvider(service = TabDecorator.class, position = 1000)
109
public class MyTabDecorator extends TabDecorator {
110
111
    public String getText( TabData tab ) {
112
        String res = tab.getText();
113
        if( null != res )
114
            res = res.replace( ".java", "");
115
        return res;
116
    }
117
}
118
              </pre>
119
      </usecase>
120
      <usecase id="customdisplayer" name="Custom Tab Displayer">
121
          <p>If one needs a custom editor tab displayer for example to have special
122
          tab layout or special layout of scrolling buttons etc it is necessary
123
              to subclass <code>TabDisplayer</code> class and register an instance
124
              of <code>TabDisplayerFactory</code> in the global <code>Lookup</code>.
125
          </p>
126
          <pre>
127
128
public class MyTabDisplayer extends TabDisplayer {
129
130
    public MyTabDisplayer( TabDataModel model ) {
131
        super( model );
132
    }
133
134
    ServiceProvider(service = TabDisplayerFactory.class)
135
    public static class MyTabDisplayerFactory extends TabDisplayerFactory {
136
        public TabDisplayer createTabDisplayer( TabDataModel tabModel, int orientation ) {
137
            return new MyTabDisplayer( tabModel );
138
        }
139
    }
140
141
    //implement all abstract methods here
142
}
143
          </pre>
144
      </usecase>
145
  </p>
146
 </answer>
147
148
149
150
<!--
151
        <question id="arch-what" when="init">
152
            What is this project good for?
153
            <hint>
154
            Please provide here a few lines describing the project, 
155
            what problem it should solve, provide links to documentation, 
156
            specifications, etc.
157
            </hint>
158
        </question>
159
-->
160
 <answer id="arch-what">
161
  <p>
162
   Allow easy customization of editor tabs.
163
  </p>
164
 </answer>
165
166
167
168
<!--
169
        <question id="arch-where" when="impl">
170
            Where one can find sources for your module?
171
            <hint>
172
                Please provide link to the Hg web client at
173
                http://hg.netbeans.org/
174
                or just use tag defaultanswer generate='here'
175
            </hint>
176
        </question>
177
-->
178
 <answer id="arch-where">
179
  <defaultanswer generate='here' />
180
 </answer>
181
182
183
184
<!--
185
        <question id="compat-deprecation" when="init">
186
            How the introduction of your project influences functionality
187
            provided by previous version of the product?
188
            <hint>
189
            If you are planning to deprecate/remove/change any existing APIs,
190
            list them here accompanied with the reason explaining why you
191
            are doing so.
192
            </hint>
193
        </question>
194
-->
195
 <answer id="compat-deprecation">
196
  <p>
197
   This API doesn't not deprecate or replace any existing APIs.
198
  </p>
199
 </answer>
200
201
202
203
<!--
204
        <question id="compat-i18n" when="impl">
205
            Is your module correctly internationalized?
206
            <hint>
207
            Correct internationalization means that it obeys instructions 
208
            at <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html">
209
            NetBeans I18N pages</a>.
210
            </hint>
211
        </question>
212
-->
213
 <answer id="compat-i18n">
214
  <p>
215
   Yes
216
  </p>
217
 </answer>
218
219
220
221
<!--
222
        <question id="compat-standards" when="init">
223
            Does the module implement or define any standards? Is the 
224
            implementation exact or does it deviate somehow?
225
        </question>
226
-->
227
 <answer id="compat-standards">
228
  <p>
229
   No
230
  </p>
231
 </answer>
232
233
234
235
<!--
236
        <question id="compat-version" when="impl">
237
            Can your module coexist with earlier and future
238
            versions of itself? Can you correctly read all old settings? Will future
239
            versions be able to read your current settings? Can you read
240
            or politely ignore settings stored by a future version?
241
            
242
            <hint>
243
            Very helpful for reading settings is to store version number
244
            there, so future versions can decide whether how to read/convert
245
            the settings and older versions can ignore the new ones.
246
            </hint>
247
        </question>
248
-->
249
 <answer id="compat-version">
250
  <p>
251
   Yes
252
  </p>
253
 </answer>
254
255
256
257
<!--
258
        <question id="dep-jre" when="final">
259
            Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?
260
            <hint>
261
            It is expected that if your module runs on 1.x that it will run 
262
            on 1.x+1 if no, state that please. Also describe here cases where
263
            you run different code on different versions of JRE and why.
264
            </hint>
265
        </question>
266
-->
267
 <answer id="dep-jre">
268
  <p>
269
   1.6 or better.
270
  </p>
271
 </answer>
272
273
274
275
<!--
276
        <question id="dep-jrejdk" when="final">
277
            Do you require the JDK or is the JRE enough?
278
        </question>
279
-->
280
 <answer id="dep-jrejdk">
281
  <p>
282
   JRE
283
  </p>
284
 </answer>
285
286
287
288
<!--
289
        <question id="dep-nb" when="init">
290
            What other NetBeans projects and modules does this one depend on?
291
            <hint>
292
            Depending on other NetBeans projects influnces the ability of
293
            users of your work to customize their own branded version of
294
            NetBeans by enabling and disabling some modules. Too
295
            much dependencies restrict this kind of customization. If that
296
            is your case, then you may want to split your functionality into
297
            pieces of autoload, eager and regular modules which can be
298
            enabled independently. Usually the answer to this question
299
            is generated from your <code>project.xml</code> file, but
300
            if it is not guessed correctly, you can suppress it by
301
            specifying &lt;defaultanswer generate="none"/&gt; and
302
            write here your own. Please describe such projects as imported APIs using
303
            the <code>&lt;api name="identification" type="import or export" category="stable" url="where is the description" /&gt;</code>.
304
            By doing this information gets listed in the summary page of your
305
            javadoc.
306
            </hint>
307
        </question>
308
-->
309
 <answer id="dep-nb">
310
  <defaultanswer generate='here' />
311
 </answer>
312
313
314
315
<!--
316
        <question id="dep-non-nb" when="init">
317
            What other projects outside NetBeans does this one depend on?
318
            
319
            <hint>
320
            Depending on 3rd party libraries is always problematic,
321
            especially if they are not open source, as that complicates
322
            the licensing scheme of NetBeans. Please enumerate your
323
            external dependencies here, so it is correctly understood since
324
            the begining what are the legal implications of your project.
325
            Also please note that
326
            some non-NetBeans projects are packaged as NetBeans modules
327
            (see <a href="http://libs.netbeans.org/">libraries</a>) and
328
            it is preferred to use this approach when more modules may
329
            depend and share such third-party libraries.
330
            </hint>
331
        </question>
332
-->
333
 <answer id="dep-non-nb">
334
  <p>
335
   The module depends on org.netbeans.swing.tabcontrol module (it reuses its data model)
336
      and on org.netbeans.core.windows module as it implements some of its
337
      tab container interfaces and classes.
338
  </p>
339
 </answer>
340
341
342
343
<!--
344
        <question id="dep-platform" when="init">
345
            On which platforms does your module run? Does it run in the same
346
            way on each?
347
            <hint>
348
            If you plan any dependency on OS or any usage of native code,
349
            please describe why you are doing so and describe how you envision
350
            to enforce the portability of your code.
351
            Please note that there is a support for <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-os-specific">OS conditionally
352
            enabled modules</a> which together with autoload/eager modules
353
            can allow you to enable to provide the best OS aware support
354
            on certain OSes while providing compatibility bridge on the not
355
            supported ones.
356
            Also please list the supported
357
            OSes/HW platforms and mentioned the lovest version of JDK required
358
            for your project to run on. Also state whether JRE is enough or
359
            you really need JDK.
360
            </hint>
361
        </question>
362
-->
363
 <answer id="dep-platform">
364
  <p>
365
   It is platform independent.
366
  </p>
367
 </answer>
368
369
370
371
<!--
372
        <question id="deploy-dependencies" when="final">
373
            What do other modules need to do to declare a dependency on this one,
374
            in addition to or instead of the normal module dependency declaration
375
            (e.g. tokens to require)?
376
            <hint>
377
                Provide a sample of the actual lines you would add to a module manifest
378
                to declare a dependency, for example OpenIDE-Module-Requires: some.token.
379
                If other modules should not depend on this module, or should just use a
380
                simple regular module dependency, you can just answer "nothing". If you
381
                intentionally expose a semistable API to clients using implementation
382
                dependencies, you should mention that here (but there is no need to give
383
                an example of usage).
384
            </hint>
385
        </question>
386
-->
387
 <answer id="deploy-dependencies">
388
  <p>
389
   No other dependencies.
390
  </p>
391
 </answer>
392
393
394
395
<!--
396
        <question id="deploy-jar" when="impl">
397
            Do you deploy just module JAR file(s) or other files as well?
398
            <hint>
399
            Usually a module consist of one JAR file (perhaps with Class-Path
400
            extensions) and also a configuration file that enables it. If you
401
            have any other files, use
402
            &lt;api group="java.io.File" name="yourname" type="export" category="friend"&gt;...&lt;/api&gt;
403
            to define the location, name and stability of your files (of course
404
            changing "yourname" and "friend" to suit your needs).
405
            
406
            If it uses more than one JAR, describe where they are located, how
407
            they refer to each other. 
408
            If it consist of module JAR(s) and other files, please describe
409
            what is their purpose, why other files are necessary. Please 
410
            make sure that installation/uninstallation leaves the system 
411
            in state as it was before installation.
412
            </hint>
413
        </question>
414
-->
415
 <answer id="deploy-jar">
416
  <p>
417
   JAR only
418
  </p>
419
 </answer>
420
421
422
423
<!--
424
        <question id="deploy-nbm" when="impl">
425
            Can you deploy an NBM via the Update Center?
426
            <hint>
427
            If not why?
428
            </hint>
429
        </question>
430
-->
431
 <answer id="deploy-nbm">
432
  <p>
433
   Yes
434
  </p>
435
 </answer>
436
437
438
439
<!--
440
        <question id="deploy-packages" when="init">
441
            Are packages of your module made inaccessible by not declaring them
442
            public?
443
            
444
            <hint>
445
            By default NetBeans build harness treats all packages are private.
446
            If you export some of them - either as public or friend packages,
447
            you should have a reason. If the reason is described elsewhere
448
            in this document, you can ignore this question.
449
            </hint>
450
        </question>
451
-->
452
 <answer id="deploy-packages">
453
  <p>
454
   Only package org.netbeans.core.multitabs is exported as public.
455
  </p>
456
 </answer>
457
458
459
460
<!--
461
        <question id="deploy-shared" when="final">
462
            Do you need to be installed in the shared location only, or in the user directory only,
463
            or can your module be installed anywhere?
464
            <hint>
465
            Installation location shall not matter, if it does explain why.
466
            Consider also whether <code>InstalledFileLocator</code> can help.
467
            </hint>
468
        </question>
469
-->
470
 <answer id="deploy-shared">
471
  <p>
472
   Does not matter
473
  </p>
474
 </answer>
475
476
477
478
<!--
479
        <question id="exec-ant-tasks" when="impl">
480
            Do you define or register any ant tasks that other can use?
481
            
482
            <hint>
483
            If you provide an ant task that users can use, you need to be very
484
            careful about its syntax and behaviour, as it most likely forms an
485
	          API for end users and as there is a lot of end users, their reaction
486
            when such API gets broken can be pretty strong.
487
            </hint>
488
        </question>
489
-->
490
 <answer id="exec-ant-tasks">
491
  <p>
492
   No
493
  </p>
494
 </answer>
495
496
497
498
<!--
499
        <question id="exec-classloader" when="impl">
500
            Does your code create its own class loader(s)?
501
            <hint>
502
            A bit unusual. Please explain why and what for.
503
            </hint>
504
        </question>
505
-->
506
 <answer id="exec-classloader">
507
  <p>
508
   No
509
  </p>
510
 </answer>
511
512
513
514
<!--
515
        <question id="exec-component" when="impl">
516
            Is execution of your code influenced by any (string) property
517
            of any of your components?
518
            
519
            <hint>
520
            Often <code>JComponent.getClientProperty</code>, <code>Action.getValue</code>
521
            or <code>PropertyDescriptor.getValue</code>, etc. are used to influence
522
            a behavior of some code. This of course forms an interface that should
523
            be documented. Also if one depends on some interface that an object
524
            implements (<code>component instanceof Runnable</code>) that forms an
525
            API as well.
526
            </hint>
527
        </question>
528
-->
529
 <answer id="exec-component">
530
  <p>
531
   No
532
  </p>
533
 </answer>
534
535
536
537
<!--
538
        <question id="exec-introspection" when="impl">
539
            Does your module use any kind of runtime type information (<code>instanceof</code>,
540
            work with <code>java.lang.Class</code>, etc.)?
541
            <hint>
542
            Check for cases when you have an object of type A and you also
543
            expect it to (possibly) be of type B and do some special action. That
544
            should be documented. The same applies on operations in meta-level
545
            (Class.isInstance(...), Class.isAssignableFrom(...), etc.).
546
            </hint>
547
        </question>
548
-->
549
 <answer id="exec-introspection">
550
  <p>
551
   No
552
  </p>
553
 </answer>
554
555
556
557
<!--
558
        <question id="exec-privateaccess" when="final">
559
            Are you aware of any other parts of the system calling some of 
560
            your methods by reflection?
561
            <hint>
562
            If so, describe the "contract" as an API. Likely private or friend one, but
563
            still API and consider rewrite of it.
564
            </hint>
565
        </question>
566
-->
567
 <answer id="exec-privateaccess">
568
  <p>
569
   No
570
  </p>
571
 </answer>
572
573
574
575
<!--
576
        <question id="exec-process" when="impl">
577
            Do you execute an external process from your module? How do you ensure
578
            that the result is the same on different platforms? Do you parse output?
579
            Do you depend on result code?
580
            <hint>
581
            If you feed an input, parse the output please declare that as an API.
582
            </hint>
583
        </question>
584
-->
585
 <answer id="exec-process">
586
  <p>
587
   No
588
  </p>
589
 </answer>
590
591
592
593
<!--
594
        <question id="exec-property" when="impl">
595
            Is execution of your code influenced by any environment or
596
            Java system (<code>System.getProperty</code>) property?
597
            On a similar note, is there something interesting that you
598
            pass to <code>java.util.logging.Logger</code>? Or do you observe
599
            what others log?
600
            <hint>
601
            If there is a property that can change the behavior of your 
602
            code, somebody will likely use it. You should describe what it does 
603
            and the <a href="http://wiki.netbeans.org/API_Stability">stability category</a>
604
            of this API. You may use
605
            <pre>
606
                &lt;api type="export" group="property" name="id" category="private" url="http://..."&gt;
607
                    description of the property, where it is used, what it influence, etc.
608
                &lt;/api&gt;            
609
            </pre>
610
            </hint>
611
        </question>
612
-->
613
 <answer id="exec-property">
614
  <p>
615
   No
616
  </p>
617
 </answer>
618
619
620
621
<!--
622
        <question id="exec-reflection" when="impl">
623
            Does your code use Java Reflection to execute other code?
624
            <hint>
625
            This usually indicates a missing or insufficient API in the other
626
            part of the system. If the other side is not aware of your dependency
627
            this contract can be easily broken.
628
            </hint>
629
        </question>
630
-->
631
 <answer id="exec-reflection">
632
  <p>
633
   No
634
  </p>
635
 </answer>
636
637
638
639
<!--
640
        <question id="exec-threading" when="init">
641
            What threading models, if any, does your module adhere to? How the
642
            project behaves with respect to threading?
643
            <hint>
644
                Is your API threadsafe? Can it be accessed from any threads or
645
                just from some dedicated ones? Any special relation to AWT and
646
                its Event Dispatch thread? Also
647
                if your module calls foreign APIs which have a specific threading model,
648
                indicate how you comply with the requirements for multithreaded access
649
                (synchronization, mutexes, etc.) applicable to those APIs.
650
                If your module defines any APIs, or has complex internal structures
651
                that might be used from multiple threads, declare how you protect
652
                data against concurrent access, race conditions, deadlocks, etc.,
653
                and whether such rules are enforced by runtime warnings, errors, assertions, etc.
654
                Examples: a class might be non-thread-safe (like Java Collections); might
655
                be fully thread-safe (internal locking); might require access through a mutex
656
                (and may or may not automatically acquire that mutex on behalf of a client method);
657
                might be able to run only in the event queue; etc.
658
                Also describe when any events are fired: synchronously, asynchronously, etc.
659
                Ideas: <a href="http://core.netbeans.org/proposals/threading/index.html#recommendations">Threading Recommendations</a> (in progress)
660
            </hint>
661
        </question>
662
-->
663
 <answer id="exec-threading">
664
  <p>
665
   The API creates/uses Swing components which should be access from EDT only.
666
  </p>
667
 </answer>
668
669
670
671
<!--
672
        <question id="format-clipboard" when="impl">
673
            Which data flavors (if any) does your code read from or insert to
674
            the clipboard (by access to clipboard on means calling methods on <code>java.awt.datatransfer.Transferable</code>?
675
            
676
            <hint>
677
            Often Node's deal with clipboard by usage of <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
678
            Check your code for overriding these methods.
679
            </hint>
680
        </question>
681
-->
682
 <answer id="format-clipboard">
683
  <p>
684
   No custom data flavors.
685
  </p>
686
 </answer>
687
688
689
690
<!--
691
        <question id="format-dnd" when="impl">
692
            Which protocols (if any) does your code understand during Drag &amp; Drop?
693
            <hint>
694
            Often Node's deal with clipboard by usage of <code>Node.drag, Node.getDropType</code>. 
695
            Check your code for overriding these methods. Btw. if they are not overridden, they
696
            by default delegate to <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
697
            </hint>
698
        </question>
699
-->
700
 <answer id="format-dnd">
701
  <p>
702
   No custom d'n'd
703
  </p>
704
 </answer>
705
706
707
708
<!--
709
        <question id="format-types" when="impl">
710
            Which protocols and file formats (if any) does your module read or write on disk,
711
            or transmit or receive over the network? Do you generate an ant build script?
712
            Can it be edited and modified? 
713
            
714
            <hint>
715
            <p>
716
            Files can be read and written by other programs, modules and users. If they influence
717
            your behaviour, make sure you either document the format or claim that it is a private
718
            api (using the &lt;api&gt; tag). 
719
            </p>
720
            
721
            <p>
722
            If you generate an ant build file, this is very likely going to be seen by end users and
723
            they will be attempted to edit it. You should be ready for that and provide here a link
724
            to documentation that you have for such purposes and also describe how you are going to
725
            understand such files during next release, when you (very likely) slightly change the 
726
            format.
727
            </p>
728
            </hint>
729
        </question>
730
-->
731
 <answer id="format-types">
732
  <p>
733
   No file formats
734
  </p>
735
 </answer>
736
737
738
739
<!--
740
        <question id="lookup-lookup" when="init">
741
            Does your module use <code>org.openide.util.Lookup</code>
742
            or any similar technology to find any components to communicate with? Which ones?
743
            
744
            <hint>
745
            NetBeans is build around a generic registry of services called
746
            lookup. It is preferable to use it for registration and discovery
747
            if possible. See
748
            <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html">
749
            The Solution to Comunication Between Components
750
            </a>. If you do not plan to use lookup and insist usage
751
            of other solution, then please describe why it is not working for
752
            you.
753
            <br/>
754
            When filling the final version of your arch document, please
755
            describe the interfaces you are searching for, where 
756
            are defined, whether you are searching for just one or more of them,
757
            if the order is important, etc. Also classify the stability of such
758
            API contract. Use &lt;api group=&amp;lookup&amp; /&gt; tag, so
759
            your information gets listed in the summary page of your javadoc.
760
            </hint>
761
        </question>
762
-->
763
 <answer id="lookup-lookup">
764
  <p>
765
      The module checks the global lookup for an instance of <code>org.netbeans.core.multitabs.TabDisplayerFactory</code>
766
      to see if other than the default implementation of multi-tabs is available.
767
  </p>
768
  <p>
769
      The default implementation of multi-tabs also looks for <code>org.netbeans.core.multitabs.TabDecorator</code>
770
        instances to check if any third party wants to change the editor tab rendering.
771
  </p>
772
 </answer>
773
774
775
776
<!--
777
        <question id="lookup-register" when="final">
778
            Do you register anything into lookup for other code to find?
779
            <hint>
780
            Do you register using layer file or using a declarative annotation such as <code>@ServiceProvider</code>?
781
            Who is supposed to find your component?
782
            </hint>
783
        </question>
784
-->
785
 <answer id="lookup-register">
786
  <p>
787
      The module registers an instance of
788
     <code>org.netbeans.swing.tabcontrol.customtabs.TabbedComponentFactory</code>
789
     to provide custom implementation of editor tabs displayer.
790
  </p>
791
 </answer>
792
793
794
795
<!--
796
        <question id="lookup-remove" when="final">
797
            Do you remove entries of other modules from lookup?
798
            <hint>
799
            Why? Of course, that is possible, but it can be dangerous. Is the module
800
            your are masking resource from aware of what you are doing?
801
            </hint>
802
        </question>
803
-->
804
 <answer id="lookup-remove">
805
  <p>
806
   No
807
  </p>
808
 </answer>
809
810
811
812
<!--
813
        <question id="perf-exit" when="final">
814
            Does your module run any code on exit?
815
        </question>
816
-->
817
 <answer id="perf-exit">
818
  <p>
819
   No
820
  </p>
821
 </answer>
822
823
824
825
<!--
826
        <question id="perf-huge_dialogs" when="final">
827
            Does your module contain any dialogs or wizards with a large number of
828
            GUI controls such as combo boxes, lists, trees, or text areas?
829
        </question>
830
-->
831
 <answer id="perf-huge_dialogs">
832
  <p>
833
   No
834
  </p>
835
 </answer>
836
837
838
839
<!--
840
        <question id="perf-limit" when="init">
841
            Are there any hard-coded or practical limits in the number or size of
842
            elements your code can handle?
843
            <hint>
844
                Most of algorithms have increasing memory and speed complexity
845
                with respect to size of data they operate on. What is the critical
846
                part of your project that can be seen as a bottleneck with
847
                respect to speed or required memory? What are the practical
848
                sizes of data you tested your project with? What is your estimate
849
                of potential size of data that would cause visible performance
850
                problems? Is there some kind of check to detect such situation
851
                and prevent "hard" crashes - for example the CloneableEditorSupport
852
                checks for size of a file to be opened in editor
853
                and if it is larger than 1Mb it shows a dialog giving the
854
                user the right to decide - e.g. to cancel or commit suicide.
855
            </hint>
856
        </question>
857
-->
858
 <answer id="perf-limit">
859
  <p>
860
   No
861
  </p>
862
 </answer>
863
864
865
866
<!--
867
        <question id="perf-mem" when="final">
868
            How much memory does your component consume? Estimate
869
            with a relation to the number of windows, etc.
870
        </question>
871
-->
872
 <answer id="perf-mem">
873
  <p>
874
   It's just a JTable showing an editor tab in each cell.
875
  </p>
876
 </answer>
877
878
879
880
<!--
881
        <question id="perf-menus" when="final">
882
            Does your module use dynamically updated context menus, or
883
            context-sensitive actions with complicated and slow enablement logic?
884
            <hint>
885
                If you do a lot of tricks when adding actions to regular or context menus, you can significantly
886
                slow down display of the menu, even when the user is not using your action. Pay attention to
887
                actions you add to the main menu bar, and to context menus of foreign nodes or components. If
888
                the action is conditionally enabled, or changes its display dynamically, you need to check the
889
                impact on performance. In some cases it may be more appropriate to make a simple action that is
890
                always enabled but does more detailed checks in a dialog if it is actually run.
891
            </hint>
892
        </question>
893
-->
894
 <answer id="perf-menus">
895
  <p>
896
   No
897
  </p>
898
 </answer>
899
900
901
902
<!--
903
        <question id="perf-progress" when="final">
904
            Does your module execute any long-running tasks?
905
            
906
            <hint>Long running tasks should never block 
907
            AWT thread as it badly hurts the UI
908
            <a href="http://performance.netbeans.org/responsiveness/issues.html">
909
            responsiveness</a>.
910
            Tasks like connecting over
911
            network, computing huge amount of data, compilation
912
            be done asynchronously (for example
913
            using <code>RequestProcessor</code>), definitively it should 
914
            not block AWT thread.
915
            </hint>
916
        </question>
917
-->
918
 <answer id="perf-progress">
919
  <p>
920
   No
921
  </p>
922
 </answer>
923
924
925
926
<!--
927
        <question id="perf-scale" when="init">
928
            Which external criteria influence the performance of your
929
            program (size of file in editor, number of files in menu, 
930
            in source directory, etc.) and how well your code scales?
931
            <hint>
932
            Please include some estimates, there are other more detailed 
933
            questions to answer in later phases of implementation. 
934
            </hint>
935
        </question>
936
-->
937
 <answer id="perf-scale">
938
  <p>
939
   Does not apply
940
  </p>
941
 </answer>
942
943
944
945
<!--
946
        <question id="perf-spi" when="init">
947
            How the performance of the plugged in code will be enforced?
948
            <hint>
949
            If you allow foreign code to be plugged into your own module, how
950
            do you enforce that it will behave correctly and quickly and will not
951
            negatively influence the performance of your own module?
952
            </hint>
953
        </question>
954
-->
955
 <answer id="perf-spi">
956
  <p>
957
   All the code will be executed in EDT, NetBeans slowness detector should kick-in
958
      when third-party plugin takes too much time.
959
  </p>
960
 </answer>
961
962
963
964
<!--
965
        <question id="perf-startup" when="final">
966
            Does your module run any code on startup?
967
        </question>
968
-->
969
 <answer id="perf-startup">
970
  <p>
971
   No
972
  </p>
973
 </answer>
974
975
976
977
<!--
978
        <question id="perf-wakeup" when="final">
979
            Does any piece of your code wake up periodically and do something
980
            even when the system is otherwise idle (no user interaction)?
981
        </question>
982
-->
983
 <answer id="perf-wakeup">
984
  <p>
985
   No
986
  </p>
987
 </answer>
988
989
990
991
<!--
992
        <question id="resources-file" when="final">
993
            Does your module use <code>java.io.File</code> directly?
994
            
995
            <hint>
996
            NetBeans provide a logical wrapper over plain files called 
997
            <code>org.openide.filesystems.FileObject</code> that
998
            provides uniform access to such resources and is the preferred
999
            way that should be used. But of course there can be situations when
1000
            this is not suitable.
1001
            </hint>
1002
        </question>
1003
-->
1004
 <answer id="resources-file">
1005
  <p>
1006
   No
1007
  </p>
1008
 </answer>
1009
1010
1011
1012
<!--
1013
        <question id="resources-layer" when="final">
1014
            Does your module provide own layer? Does it create any files or
1015
            folders in it? What it is trying to communicate by that and with which 
1016
            components?
1017
            
1018
            <hint>
1019
            NetBeans allows automatic and declarative installation of resources 
1020
            by module layers. Module register files into appropriate places
1021
            and other components use that information to perform their task
1022
            (build menu, toolbar, window layout, list of templates, set of
1023
            options, etc.). 
1024
            </hint>
1025
        </question>
1026
-->
1027
 <answer id="resources-layer">
1028
  <p>
1029
   Yes, it is used to register its options panel into Tools - Options window.
1030
  </p>
1031
 </answer>
1032
1033
1034
1035
<!--
1036
        <question id="resources-mask" when="final">
1037
            Does your module mask/hide/override any resources provided by other modules in
1038
            their layers?
1039
            
1040
            <hint>
1041
            If you mask a file provided by another module, you probably depend
1042
            on that and do not want the other module to (for example) change
1043
            the file's name. That module shall thus make that file available as an API
1044
            of some stability category.
1045
            </hint>
1046
        </question>
1047
-->
1048
 <answer id="resources-mask">
1049
  <p>
1050
   No
1051
  </p>
1052
 </answer>
1053
1054
1055
1056
<!--
1057
        <question id="resources-preferences" when="final">
1058
            Does your module uses preferences via Preferences API? Does your module use NbPreferences or
1059
            or regular JDK Preferences ? Does it read, write or both ? 
1060
            Does it share preferences with other modules ? If so, then why ?
1061
            <hint>
1062
                You may use
1063
                    &lt;api type="export" group="preferences"
1064
                    name="preference node name" category="private"&gt;
1065
                    description of individual keys, where it is used, what it
1066
                    influences, whether the module reads/write it, etc.
1067
                    &lt;/api&gt;
1068
                Due to XML ID restrictions, rather than /org/netbeans/modules/foo give the "name" as org.netbeans.modules.foo.
1069
                Note that if you use NbPreferences this name will then be the same as the code name base of the module.
1070
            </hint>
1071
        </question>
1072
-->
1073
 <answer id="resources-preferences">
1074
  <p>
1075
   NbPreferences are used to store user settings in Tools - Options window.
1076
  </p>
1077
 </answer>
1078
1079
1080
1081
<!--
1082
        <question id="resources-read" when="final">
1083
            Does your module read any resources from layers? For what purpose?
1084
            
1085
            <hint>
1086
            As this is some kind of intermodule dependency, it is a kind of API.
1087
            Please describe it and classify according to 
1088
            <a href="http://wiki.netbeans.org/API_Design#What_is_an_API.3F">
1089
            common stability categories</a>.
1090
            </hint>
1091
        </question>
1092
-->
1093
 <answer id="resources-read">
1094
  <p>
1095
   No
1096
  </p>
1097
 </answer>
1098
1099
1100
1101
<!--
1102
        <question id="security-grant" when="final">
1103
            Does your code grant additional rights to some other code?
1104
            <hint>Avoid using a class loader that adds extra
1105
            permissions to loaded code unless really necessary.
1106
            Also note that your API implementation
1107
            can also expose unneeded permissions to enemy code by
1108
            calling AccessController.doPrivileged().</hint>
1109
        </question>
1110
-->
1111
 <answer id="security-grant">
1112
  <p>
1113
   No
1114
  </p>
1115
 </answer>
1116
1117
1118
1119
<!--
1120
        <question id="security-policy" when="final">
1121
            Does your functionality require modifications to the standard policy file?
1122
            <hint>Your code might pass control to third-party code not
1123
            coming from trusted domains. This could be code downloaded over the
1124
            network or code coming from libraries that are not bundled
1125
            with NetBeans. Which permissions need to be granted to which domains?</hint>
1126
        </question>
1127
-->
1128
 <answer id="security-policy">
1129
  <p>
1130
   No
1131
  </p>
1132
 </answer>
1133
1134
</api-answers>
(-)core.multitabs/nbproject/project.properties (-1 / +2 lines)
Lines 1-4 Link Here
1
javac.source=1.6
1
javac.source=1.6
2
javac.compilerargs=-Xlint -Xlint:-serial
2
javac.compilerargs=-Xlint -Xlint:-serial
3
javadoc.arch=${basedir}/arch.xml
3
nbm.needs.restart=true
4
nbm.needs.restart=true
4
spec.version.base=1.4.0
5
spec.version.base=1.5.0
(-)core.multitabs/nbproject/project.xml (-1 / +3 lines)
Lines 88-94 Link Here
88
                    </run-dependency>
88
                    </run-dependency>
89
                </dependency>
89
                </dependency>
90
            </module-dependencies>
90
            </module-dependencies>
91
            <public-packages/>
91
            <public-packages>
92
                <package>org.netbeans.core.multitabs</package>
93
            </public-packages>
92
        </data>
94
        </data>
93
    </configuration>
95
    </configuration>
94
</project>
96
</project>

Return to bug 236176