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 209673
Collapse All | Expand All

(-)versioning/apichanges.xml (+14 lines)
Lines 111-116 Link Here
111
        
111
        
112
        <change>
112
        <change>
113
            <api name="versioning_spi"/>
113
            <api name="versioning_spi"/>
114
            <summary>Added VCSHistoryProvider.HistoryEntry.getParent()</summary>
115
            <version major="1" minor="30"/>
116
            <date day="23" month="3" year="2012"/>
117
            <author login="tstupka"/>
118
            <compatibility addition="yes"/>
119
            <description>
120
                New method <code>VCSHistoryProvider.HistoryEntry.getParent()</code> to provide the 
121
                <code>VCSHistoryProvider.HistoryEntry</code> representing the parent of the given revision.
122
            </description>
123
            <class package="org.netbeans.modules.versioning.spi" name="VersioningSupport"/>
124
            <issue number="209673"/>
125
        </change>                
126
        <change>
127
            <api name="versioning_spi"/>
114
            <summary>Added VCSHistoryProvider</summary>
128
            <summary>Added VCSHistoryProvider</summary>
115
            <version major="1" minor="29"/>
129
            <version major="1" minor="29"/>
116
            <date day="30" month="1" year="2012"/>
130
            <date day="30" month="1" year="2012"/>
(-)versioning/nbproject/project.properties (-1 / +1 lines)
Lines 44-50 Link Here
44
javac.source=1.6
44
javac.source=1.6
45
45
46
javadoc.name=Versioning
46
javadoc.name=Versioning
47
spec.version.base=1.29.0
47
spec.version.base=1.30.0
48
is.autoload=true
48
is.autoload=true
49
49
50
javadoc.arch=${basedir}/arch.xml
50
javadoc.arch=${basedir}/arch.xml
(-)versioning/src/org/netbeans/modules/versioning/Accessor.java (+3 lines)
Lines 45-50 Link Here
45
45
46
import org.netbeans.modules.versioning.spi.VCSContext;
46
import org.netbeans.modules.versioning.spi.VCSContext;
47
import org.netbeans.modules.versioning.spi.VCSHistoryProvider;
47
import org.netbeans.modules.versioning.spi.VCSHistoryProvider;
48
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry;
49
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.ParentProvider;
48
50
49
51
50
/**
52
/**
Lines 72-75 Link Here
72
    
74
    
73
    public abstract VCSHistoryProvider.RevisionProvider getRevisionProvider(VCSHistoryProvider.HistoryEntry entry);
75
    public abstract VCSHistoryProvider.RevisionProvider getRevisionProvider(VCSHistoryProvider.HistoryEntry entry);
74
    public abstract VCSHistoryProvider.MessageEditProvider getMessageEditProvider(VCSHistoryProvider.HistoryEntry entry);
76
    public abstract VCSHistoryProvider.MessageEditProvider getMessageEditProvider(VCSHistoryProvider.HistoryEntry entry);
77
    public abstract ParentProvider getParentProvider(HistoryEntry entry);
75
}
78
}
(-)versioning/src/org/netbeans/modules/versioning/DelegatingVCS.java (-19 / +45 lines)
Lines 580-587 Link Here
580
            HistoryEntry[] proxyHistory = new HistoryEntry[history.length];
580
            HistoryEntry[] proxyHistory = new HistoryEntry[history.length];
581
            for (int i = 0; i < proxyHistory.length; i++) {
581
            for (int i = 0; i < proxyHistory.length; i++) {
582
                final org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he = history[i];
582
                final org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he = history[i];
583
                RevisionProvider rp = new RevisionProvider() {
583
                proxyHistory[i] = delegateHistoryEntry(proxies, he);
584
            }
585
            return proxyHistory;
586
        }
587
584
                    @Override
588
                    @Override
589
        public Action createShowHistoryAction(VCSFileProxy[] proxies) {
590
            File[] files = toFiles(proxies);
591
            return getDelegate().getVCSHistoryProvider().createShowHistoryAction(files);
592
        }
593
594
        private MessageEditProvider delegateMessageEditProvider(final org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he) {
595
            if(he.canEdit()) {
596
                return new MessageEditProvider() {
597
                    @Override
598
                    public void setMessage(String message) throws IOException {
599
                        org.netbeans.modules.versioning.spi.VCSHistoryProvider.MessageEditProvider provider = Accessor.IMPL.getMessageEditProvider(he);
600
                        if(provider != null) {
601
                            provider.setMessage(message);
602
                        }
603
                    }
604
                };
605
            }
606
            return null;
607
        }
608
609
        private RevisionProvider delegateRevisionProvider(final org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he) {
610
            return new RevisionProvider() {
611
                @Override
585
                    public void getRevisionFile(VCSFileProxy originalFile, VCSFileProxy revisionFile) {
612
                    public void getRevisionFile(VCSFileProxy originalFile, VCSFileProxy revisionFile) {
586
                        org.netbeans.modules.versioning.spi.VCSHistoryProvider.RevisionProvider provider = Accessor.IMPL.getRevisionProvider(he);
613
                        org.netbeans.modules.versioning.spi.VCSHistoryProvider.RevisionProvider provider = Accessor.IMPL.getRevisionProvider(he);
587
                        if(provider != null) {
614
                        if(provider != null) {
Lines 593-612 Link Here
593
                        }
620
                        }
594
                    }
621
                    }
595
                };
622
                };
596
                MessageEditProvider mep = null;
623
        }
597
                if(he.canEdit()) {
624
598
                    mep = new MessageEditProvider() {
625
        private ParentProvider delegateParentProvider(final org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he) {
626
            return new ParentProvider() {
599
                        @Override
627
                        @Override
600
                        public void setMessage(String message) throws IOException {
628
                public HistoryEntry getParentEntry() {
601
                            org.netbeans.modules.versioning.spi.VCSHistoryProvider.MessageEditProvider provider = Accessor.IMPL.getMessageEditProvider(he);
629
                    org.netbeans.modules.versioning.spi.VCSHistoryProvider.ParentProvider provider = Accessor.IMPL.getParentProvider(he);
602
                            if(provider != null) {
630
                            if(provider != null) {
603
                                provider.setMessage(message);
631
                            org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he = provider.getParentEntry();
632
                            if(he != null) {
633
                                return delegateHistoryEntry(toProxies(he.getFiles()), he);
604
                            }
634
                            }
605
                        }
635
                        }
636
                    return null;
637
                }
606
                    };
638
                    };
607
                }
639
                }
608
                proxyHistory[i] = 
640
609
                    new HistoryEntry(
641
        private HistoryEntry delegateHistoryEntry(VCSFileProxy[] proxies, final org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry he) {
642
            return new HistoryEntry(
610
                        proxies, 
643
                        proxies, 
611
                        he.getDateTime(), 
644
                        he.getDateTime(), 
612
                        he.getMessage(), 
645
                        he.getMessage(), 
Lines 615-632 Link Here
615
                        he.getRevision(), 
648
                        he.getRevision(), 
616
                        he.getRevisionShort(), 
649
                        he.getRevisionShort(), 
617
                        he.getActions(), 
650
                        he.getActions(), 
618
                        rp,
651
                        delegateRevisionProvider(he),
619
                        mep);
652
                        delegateMessageEditProvider(he), 
653
                        delegateParentProvider(he));
620
            }
654
            }
621
            return proxyHistory;
622
        }
623
655
624
        @Override
625
        public Action createShowHistoryAction(VCSFileProxy[] proxies) {
626
            File[] files = toFiles(proxies);
627
            return getDelegate().getVCSHistoryProvider().createShowHistoryAction(files);
628
        }
629
630
        private class DelegateChangeListener implements org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryChangeListener {
656
        private class DelegateChangeListener implements org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryChangeListener {
631
            private final VCSHistoryProvider.HistoryChangeListener delegate;
657
            private final VCSHistoryProvider.HistoryChangeListener delegate;
632
            public DelegateChangeListener(HistoryChangeListener delegate) {
658
            public DelegateChangeListener(HistoryChangeListener delegate) {
(-)versioning/src/org/netbeans/modules/versioning/spi/AccessorImpl.java (+6 lines)
Lines 46-51 Link Here
46
import org.netbeans.modules.versioning.Accessor;
46
import org.netbeans.modules.versioning.Accessor;
47
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry;
47
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.HistoryEntry;
48
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.MessageEditProvider;
48
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.MessageEditProvider;
49
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.ParentProvider;
49
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.RevisionProvider;
50
import org.netbeans.modules.versioning.spi.VCSHistoryProvider.RevisionProvider;
50
51
51
/**
52
/**
Lines 70-74 Link Here
70
        return entry.getMessageEditProvider();
71
        return entry.getMessageEditProvider();
71
    }
72
    }
72
73
74
    @Override
75
    public ParentProvider getParentProvider(HistoryEntry entry) {
76
        return entry.getParentProvider();
77
    }
73
    
78
    
79
    
74
}
80
}
(-)versioning/src/org/netbeans/modules/versioning/spi/VCSHistoryProvider.java (+75 lines)
Lines 123-128 Link Here
123
        private Action[] actions;
123
        private Action[] actions;
124
        private RevisionProvider revisionProvider;
124
        private RevisionProvider revisionProvider;
125
        private MessageEditProvider messageEditProvider;
125
        private MessageEditProvider messageEditProvider;
126
        private ParentProvider parentProvider;
126
        
127
        
127
        /**
128
        /**
128
         * Creates a new HistoryEntry instance.
129
         * Creates a new HistoryEntry instance.
Lines 198-203 Link Here
198
        }
199
        }
199
        
200
        
200
        /**
201
        /**
202
         * Creates a new HistoryEntry instance.
203
         * 
204
         * @param files involved files
205
         * @param dateTime the date and time when the versioning revision was created
206
         * @param message the message describing the versioning revision 
207
         * @param username full description of the user who created the versioning revision 
208
         * @param usernameShort short description of the user who created the versioning revision 
209
         * @param revision full description of the versioning revision
210
         * @param revisionShort short description of the versioning revision
211
         * @param actions actions which might be called in regard with this revision
212
         * @param revisionProvider a RevisionProvider to get access to a files contents in this revision
213
         * @param messageEditProvider a MessageEditProvider to change a revisions message
214
         * @param parentProvider a ParentProvider to provide this entries parent entry. Not necessary for VCS
215
         * where a revisions parent always is the time nearest previous revision.
216
         * 
217
         * @since 1.30
218
         */
219
        public HistoryEntry(
220
                File[] files, 
221
                Date dateTime, 
222
                String message, 
223
                String username, 
224
                String usernameShort, 
225
                String revision, 
226
                String revisionShort, 
227
                Action[] actions, 
228
                RevisionProvider revisionProvider,
229
                MessageEditProvider messageEditProvider,
230
                ParentProvider parentProvider) 
231
        {
232
            this(files, dateTime, message, username, usernameShort, revision, revisionShort, actions, revisionProvider, messageEditProvider);
233
            this.parentProvider = parentProvider;
234
        }
235
        
236
        /**
201
         * Determines if this HistoryEntry instance supports changes.
237
         * Determines if this HistoryEntry instance supports changes.
202
         * 
238
         * 
203
         * @return true if it is possible to access setter methods in this instance
239
         * @return true if it is possible to access setter methods in this instance
Lines 332-337 Link Here
332
        }
368
        }
333
        
369
        
334
        /**
370
        /**
371
         * Returns this revisions parent entry or null if not available.
372
         * 
373
         * @return this revisions parent entry
374
         * 
375
         * @since 1.30
376
         */
377
        public HistoryEntry getParentEntry() {
378
            if(parentProvider != null) {
379
                return parentProvider.getParentEntry();
380
            } 
381
            return null;
382
        }
383
        
384
        /**
335
         * Returns the RevisionProvider
385
         * Returns the RevisionProvider
336
         * @return the RevisionProvider
386
         * @return the RevisionProvider
337
         */
387
         */
Lines 346-352 Link Here
346
        MessageEditProvider getMessageEditProvider() {
396
        MessageEditProvider getMessageEditProvider() {
347
            return messageEditProvider;
397
            return messageEditProvider;
348
        }
398
        }
399
400
        /**
401
         * Returns the ParentProvider or null 
402
         * @return the ParentProvider
403
         */        
404
        ParentProvider getParentProvider() {
405
            return parentProvider;
349
    }
406
    }
407
    }
350
    
408
    
351
    /**
409
    /**
352
     * Adds a listener for history change events.
410
     * Adds a listener for history change events.
Lines 393-398 Link Here
393
    }
451
    }
394
    
452
    
395
    /**
453
    /**
454
     * Implement and pass over to a {@link HistoryEntry} in case you want 
455
     * {@link HistoryEntry#getParentProvider()} to return relevant values.
456
     * 
457
     * @since 1.30
458
     */
459
    public interface ParentProvider {
460
        /**
461
         * Return a {@link HistoryEntry} representing the parent of the {@link HistoryEntry}
462
         * configured with this ParentProvider.
463
         * 
464
         * @return the parent HistoryEntry
465
         * @since 1.30
466
         */
467
        HistoryEntry getParentEntry();
468
    }
469
    
470
    /**
396
     * Implement and pass over to {@link HistoryEntry} in case 
471
     * Implement and pass over to {@link HistoryEntry} in case 
397
     * {@link HistoryEntry#setMessage(java.lang.String)}
472
     * {@link HistoryEntry#setMessage(java.lang.String)}
398
     * is expected to work.
473
     * is expected to work.
(-)versioning/test/unit/src/org/netbeans/modules/versioning/spi/VCSHistoryTest.java (-1 / +88 lines)
Lines 56-62 Link Here
56
import org.netbeans.modules.versioning.spi.testvcs.TestVCSHistoryProvider;
56
import org.netbeans.modules.versioning.spi.testvcs.TestVCSHistoryProvider;
57
57
58
import org.openide.util.Lookup;
58
import org.openide.util.Lookup;
59
import org.netbeans.modules.versioning.spi.testvcs.TestVCSInterceptor;
60
59
61
/**
60
/**
62
 * Versioning SPI unit tests of VCSInterceptor.
61
 * Versioning SPI unit tests of VCSInterceptor.
Lines 118-123 Link Here
118
        assertTrue(provider.revisionprovided);
117
        assertTrue(provider.revisionprovided);
119
    }
118
    }
120
    
119
    
120
    public void testHistoryEntryProvidesParent() throws IOException {
121
        ParentProviderImpl provider = new ParentProviderImpl();
122
        VCSHistoryProvider.HistoryEntry h =
123
                new VCSHistoryProvider.HistoryEntry(
124
                new File[] {new File("")},
125
                new Date(System.currentTimeMillis()),
126
                "msg",
127
                "user",
128
                "username",
129
                "12345",
130
                "1234567890",
131
                new Action[0],
132
                null,
133
                null,
134
                provider);
135
        
136
        h = h.getParentEntry();
137
        assertNotNull(h);
138
        assertEquals(ParentProviderImpl.PARENT_MSG, h.getMessage());
139
    }
140
121
    public void testHistoryGetRevisionIsReallyInvoked() throws IOException {
141
    public void testHistoryGetRevisionIsReallyInvoked() throws IOException {
122
        File f = new File(dataRootDir, "workdir/root-test-versioned/" + TestVCSHistoryProvider.FILE_PROVIDES_REVISIONS_SUFFIX);
142
        File f = new File(dataRootDir, "workdir/root-test-versioned/" + TestVCSHistoryProvider.FILE_PROVIDES_REVISIONS_SUFFIX);
123
        f.createNewFile();
143
        f.createNewFile();
Lines 148-153 Link Here
148
        assertTrue(TestVCSHistoryProvider.instance.revisionProvided);
168
        assertTrue(TestVCSHistoryProvider.instance.revisionProvided);
149
    }
169
    }
150
    
170
    
171
    public void testHistoryGetParentIsReallyInvoked() throws IOException {
172
        File f = new File(dataRootDir, "workdir/root-test-versioned/" + TestVCSHistoryProvider.FILE_PROVIDES_REVISIONS_SUFFIX);
173
        f.createNewFile();
174
        VersioningSystem vs = VersioningSupport.getOwner(f);
175
        assertNotNull(vs);
176
        VCSHistoryProvider hp = vs.getVCSHistoryProvider();
177
        assertNotNull(hp);
178
        
179
        HistoryEntry[] history = hp.getHistory(new File[] {f}, null);
180
        assertNotNull(history);
181
        assertTrue(history.length > 0);
182
        HistoryEntry parentEntry = history[0].getParentEntry();
183
        assertNotNull(parentEntry);
184
        assertEquals(TestVCSHistoryProvider.PARENT_MSG, parentEntry.getMessage());
185
        
186
        // the same test again just to see that VCSSystemProvider.VersioningSystem properly delegates
187
        VCSFileProxy proxy = VCSFileProxy.createFileProxy(f);
188
        VCSSystemProvider.VersioningSystem pvs = Utils.getOwner(proxy);
189
        assertNotNull(pvs);
190
        org.netbeans.modules.versioning.core.spi.VCSHistoryProvider php = pvs.getVCSHistoryProvider();
191
        assertNotNull(php);
192
193
        org.netbeans.modules.versioning.core.spi.VCSHistoryProvider.HistoryEntry[] phistory = php.getHistory(new VCSFileProxy[] {proxy}, null);
194
        assertNotNull(phistory);
195
        assertTrue(phistory.length > 0);
196
        org.netbeans.modules.versioning.core.spi.VCSHistoryProvider.HistoryEntry proxyParentEntry = phistory[0].getParentEntry();
197
        assertEquals(TestVCSHistoryProvider.PARENT_MSG, proxyParentEntry.getMessage());
198
    }
199
151
    public void testHistoryEntryDoesntProvideRevision() throws IOException {
200
    public void testHistoryEntryDoesntProvideRevision() throws IOException {
152
        RevisionProviderImpl provider = new RevisionProviderImpl();
201
        RevisionProviderImpl provider = new RevisionProviderImpl();
153
        provider.revisionprovided = false;
202
        provider.revisionprovided = false;
Lines 166-171 Link Here
166
        // nothing happend
215
        // nothing happend
167
    }
216
    }
168
    
217
    
218
    public void testHistoryEntryDoesntProvideParent() throws IOException {
219
        RevisionProviderImpl provider = new RevisionProviderImpl();
220
        provider.revisionprovided = false;
221
        VCSHistoryProvider.HistoryEntry h = 
222
                new VCSHistoryProvider.HistoryEntry(
223
                    new File[] {new File("")}, 
224
                    new Date(System.currentTimeMillis()), 
225
                    "msg", 
226
                    "user", 
227
                    "username", 
228
                    "12345", 
229
                    "1234567890", 
230
                    new Action[0], 
231
                    null);
232
        h.getParentEntry();
233
        // nothing happend
234
    }
235
    
169
    public void testHistoryEntryEditable() throws IOException {
236
    public void testHistoryEntryEditable() throws IOException {
170
        MessageEditProviderImpl provider = new MessageEditProviderImpl();
237
        MessageEditProviderImpl provider = new MessageEditProviderImpl();
171
        provider.message = null;
238
        provider.message = null;
Lines 229-234 Link Here
229
        }
296
        }
230
    }
297
    }
231
    
298
    
299
    private class ParentProviderImpl implements VCSHistoryProvider.ParentProvider {
300
        static final String PARENT_MSG = "im.the.parent";
301
        private VCSHistoryProvider.HistoryEntry he = 
302
                new VCSHistoryProvider.HistoryEntry(
303
                    new File[] {new File("")}, 
304
                    new Date(System.currentTimeMillis()), 
305
                    PARENT_MSG, 
306
                    "user", 
307
                    "username", 
308
                    "12345", 
309
                    "1234567890", 
310
                    new Action[0], 
311
                    null,
312
                    null);
313
        @Override
314
        public HistoryEntry getParentEntry() {
315
            return he;
316
        }
317
    }
318
    
232
    private class MessageEditProviderImpl implements VCSHistoryProvider.MessageEditProvider {
319
    private class MessageEditProviderImpl implements VCSHistoryProvider.MessageEditProvider {
233
        String message;
320
        String message;
234
        @Override
321
        @Override
(-)versioning/test/unit/src/org/netbeans/modules/versioning/spi/testvcs/TestVCSHistoryProvider.java (-1 / +22 lines)
Lines 52-62 Link Here
52
 *
52
 *
53
 * @author tomas
53
 * @author tomas
54
 */
54
 */
55
public class TestVCSHistoryProvider implements VCSHistoryProvider, VCSHistoryProvider.RevisionProvider {
55
public class TestVCSHistoryProvider implements VCSHistoryProvider, VCSHistoryProvider.RevisionProvider, VCSHistoryProvider.ParentProvider {
56
    public static final String FILE_PROVIDES_REVISIONS_SUFFIX = "providesRevisions";
56
    public static final String FILE_PROVIDES_REVISIONS_SUFFIX = "providesRevisions";
57
    public static TestVCSHistoryProvider instance;
57
    public static TestVCSHistoryProvider instance;
58
    
58
    
59
    public static String PARENT_MSG = "im.the.parent";
60
    
59
    public boolean revisionProvided = false;
61
    public boolean revisionProvided = false;
62
    public boolean parentrevisionProvided = false;
60
    public static HistoryEntry[] history;
63
    public static HistoryEntry[] history;
61
    
64
    
62
    public TestVCSHistoryProvider() {
65
    public TestVCSHistoryProvider() {
Lines 83-88 Link Here
83
                            "12345", 
86
                            "12345", 
84
                            "1234567890", 
87
                            "1234567890", 
85
                            new Action[0], 
88
                            new Action[0], 
89
                            this,
90
                        null, 
86
                            this)};
91
                            this)};
87
                
92
                
88
            }
93
            }
Lines 114-117 Link Here
114
    public void getRevisionFile(File originalFile, File revisionFile) {
119
    public void getRevisionFile(File originalFile, File revisionFile) {
115
        revisionProvided = true;
120
        revisionProvided = true;
116
    }
121
    }
122
123
    @Override
124
    public HistoryEntry getParentEntry() {
125
        return new VCSHistoryProvider.HistoryEntry(
126
                            new File[] {new File("")}, 
127
                            new Date(System.currentTimeMillis()), 
128
                            PARENT_MSG, 
129
                            "user", 
130
                            "username", 
131
                            "12345", 
132
                            "1234567890", 
133
                            new Action[0], 
134
                            this);
117
}
135
}
136
137
138
}

Return to bug 209673