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

(-)a/refactoring.api/apichanges.xml (+16 lines)
Lines 49-54 Link Here
49
    <apidef name="refactoring">Refactoring API</apidef>
49
    <apidef name="refactoring">Refactoring API</apidef>
50
</apidefs>
50
</apidefs>
51
<changes>
51
<changes>
52
    <change id="TransactionProgress">
53
        <api name="refactoring"/>
54
        <summary>RefactoringCommit implements the interface ProgressProvider.</summary>
55
        <version major="1" minor="33"/>
56
        <date day="26" month="11" year="2012"/>
57
        <author login="ralphbenjamin"/>
58
        <compatibility addition="yes"/>
59
        <description>
60
            <p>
61
                RefactoringCommit now implements the interface ProgressProvider
62
                to notify the progress of the commit.
63
            </p>
64
        </description>
65
        <class package="org.netbeans.modules.refactoring.spi" name="RefactoringCommit"/>
66
        <issue number="221295"/>
67
    </change>
52
    <change id="ServerSideQueries">
68
    <change id="ServerSideQueries">
53
        <api name="refactoring"/>
69
        <api name="refactoring"/>
54
        <summary>Added support for Scope Providers and ExpandableTreeElements.</summary>
70
        <summary>Added support for Scope Providers and ExpandableTreeElements.</summary>
(-)a/refactoring.api/nbproject/project.properties (-1 / +1 lines)
Lines 4-8 Link Here
4
javadoc.apichanges=${basedir}/apichanges.xml
4
javadoc.apichanges=${basedir}/apichanges.xml
5
javadoc.title=Refactoring API
5
javadoc.title=Refactoring API
6
6
7
spec.version.base=1.32.0
7
spec.version.base=1.33.0
8
test.config.stableBTD.includes=**/*Test.class
8
test.config.stableBTD.includes=**/*Test.class
(-)a/refactoring.api/src/org/netbeans/modules/refactoring/api/RefactoringSession.java (-11 / +65 lines)
Lines 54-59 Link Here
54
import org.netbeans.api.editor.mimelookup.MimeLookup;
54
import org.netbeans.api.editor.mimelookup.MimeLookup;
55
import org.netbeans.modules.refactoring.api.impl.ProgressSupport;
55
import org.netbeans.modules.refactoring.api.impl.ProgressSupport;
56
import org.netbeans.modules.refactoring.api.impl.SPIAccessor;
56
import org.netbeans.modules.refactoring.api.impl.SPIAccessor;
57
import org.netbeans.modules.refactoring.spi.ProgressProvider;
57
import org.netbeans.modules.refactoring.spi.RefactoringElementImplementation;
58
import org.netbeans.modules.refactoring.spi.RefactoringElementImplementation;
58
import org.netbeans.modules.refactoring.spi.RefactoringElementsBag;
59
import org.netbeans.modules.refactoring.spi.RefactoringElementsBag;
59
import org.netbeans.modules.refactoring.spi.Transaction;
60
import org.netbeans.modules.refactoring.spi.Transaction;
Lines 83-88 Link Here
83
    private UndoManager undoManager = UndoManager.getDefault();
84
    private UndoManager undoManager = UndoManager.getDefault();
84
    boolean realcommit = true;
85
    boolean realcommit = true;
85
    private AtomicBoolean finished = new AtomicBoolean(false);
86
    private AtomicBoolean finished = new AtomicBoolean(false);
87
    private static final int COMMITSTEPS = 20;
86
    
88
    
87
    private RefactoringSession(String description) {
89
    private RefactoringSession(String description) {
88
        //internalList = new LinkedList();
90
        //internalList = new LinkedList();
Lines 116-122 Link Here
116
        long time = System.currentTimeMillis();
118
        long time = System.currentTimeMillis();
117
        
119
        
118
        Iterator it = internalList.iterator();
120
        Iterator it = internalList.iterator();
119
        fireProgressListenerStart(0, internalList.size()+1);
121
        ArrayList<Transaction> commits = SPIAccessor.DEFAULT.getCommits(bag);
122
        fireProgressListenerStart(0, internalList.size() + 1 + commits.size() * COMMITSTEPS);
123
        ProgressListener progressListener = new ProgressL(commits, internalList.size());
120
        if (realcommit) {
124
        if (realcommit) {
121
            undoManager.transactionStarted();
125
            undoManager.transactionStarted();
122
            undoManager.setUndoDescription(description);
126
            undoManager.setUndoDescription(description);
Lines 124-155 Link Here
124
        try {
128
        try {
125
            try {
129
            try {
126
                while (it.hasNext()) {
130
                while (it.hasNext()) {
127
                    fireProgressListenerStep();
128
                    RefactoringElementImplementation element = (RefactoringElementImplementation) it.next();
131
                    RefactoringElementImplementation element = (RefactoringElementImplementation) it.next();
129
                    if (element.isEnabled() && !((element.getStatus() == RefactoringElement.GUARDED) || (element.getStatus() == RefactoringElement.READ_ONLY))) {
132
                    if (element.isEnabled() && !((element.getStatus() == RefactoringElement.GUARDED) || (element.getStatus() == RefactoringElement.READ_ONLY))) {
130
                        element.performChange();
133
                        element.performChange();
131
                    }
134
                    }
135
                    fireProgressListenerStep();
132
                }
136
                }
133
            } finally {
137
            } finally {
134
                for (Transaction commit:SPIAccessor.DEFAULT.getCommits(bag)) {
138
                for (Transaction commit : commits) {
135
                    SPIAccessor.DEFAULT.check(commit, false);
139
                    SPIAccessor.DEFAULT.check(commit, false);
136
                }
140
                }
137
141
138
                UndoableWrapper wrapper = MimeLookup.getLookup("").lookup(UndoableWrapper.class);
142
                UndoableWrapper wrapper = MimeLookup.getLookup("").lookup(UndoableWrapper.class);
139
                for (Transaction commit:SPIAccessor.DEFAULT.getCommits(bag)) {
143
                for (Transaction commit : commits) {
140
                    if (wrapper !=null)
144
                    if (wrapper != null) {
141
                        setWrappers(commit, wrapper);
145
                        setWrappers(commit, wrapper);
142
                    
146
                    }
143
                    commit.commit();
147
144
                    if (wrapper !=null)
148
                    if(commit instanceof ProgressProvider) {
149
                        ProgressProvider progressProvider = (ProgressProvider) commit;
150
                        progressProvider.addProgressListener(progressListener);
151
                    }
152
                    try {
153
                        commit.commit();
154
                    } finally {
155
                        if(commit instanceof ProgressProvider) {
156
                            ProgressProvider progressProvider = (ProgressProvider) commit;
157
                            progressProvider.removeProgressListener(progressListener);
158
                        }
159
                    }
160
                    if (wrapper != null) {
145
                        unsetWrappers(commit, wrapper);
161
                        unsetWrappers(commit, wrapper);
162
                    }
146
                }
163
                }
147
                if (wrapper !=null)
164
                if (wrapper != null) {
148
                    wrapper.close();
165
                    wrapper.close();
149
                for (Transaction commit : SPIAccessor.DEFAULT.getCommits(bag)) {
166
                }
167
                for (Transaction commit : commits) {
150
                    SPIAccessor.DEFAULT.sum(commit);
168
                    SPIAccessor.DEFAULT.sum(commit);
151
                }
169
                }
152
                
153
            }
170
            }
154
            if (saveAfterDone) {
171
            if (saveAfterDone) {
155
                LifecycleManager.getDefault().saveAll();
172
                LifecycleManager.getDefault().saveAll();
Lines 184-189 Link Here
184
        return null;
201
        return null;
185
    }
202
    }
186
    
203
    
204
    private class ProgressL implements ProgressListener {
205
206
        private float progressStep;
207
        private float current;
208
        private final ArrayList<Transaction> commits;
209
        private final int start;
210
211
        ProgressL(ArrayList<Transaction> commits, int start) {
212
            this.commits = commits;
213
            this.start = start;
214
        }
215
216
        @Override
217
        public void start(ProgressEvent event) {
218
            progressStep = (float) COMMITSTEPS / event.getCount();
219
            current = start + commits.indexOf(event.getSource()) * COMMITSTEPS;
220
            fireProgressListenerStep((int) current);
221
        }
222
223
        @Override
224
        public void step(ProgressEvent event) {
225
            current = current + progressStep;
226
            fireProgressListenerStep((int) current);
227
        }
228
229
        @Override
230
        public void stop(ProgressEvent event) {
231
            // do not rely on plugins;
232
        }
233
    }
234
    
187
    /**
235
    /**
188
     * do undo of previous doRefactoring()
236
     * do undo of previous doRefactoring()
189
     * @param saveAfterDone save all if true
237
     * @param saveAfterDone save all if true
Lines 296-301 Link Here
296
            progressSupport.fireProgressListenerStep(this);
344
            progressSupport.fireProgressListenerStep(this);
297
        }
345
        }
298
    }
346
    }
347
    
348
    private void fireProgressListenerStep(int count) {
349
        if (progressSupport != null) {
350
            progressSupport.fireProgressListenerStep(this, count);
351
        }
352
    }
299
353
300
    private void fireProgressListenerStop() {
354
    private void fireProgressListenerStop() {
301
        if (progressSupport != null) {
355
        if (progressSupport != null) {
(-)a/refactoring.api/src/org/netbeans/modules/refactoring/spi/ProgressProvider.java (-2 / +4 lines)
Lines 47-54 Link Here
47
import org.netbeans.modules.refactoring.api.ProgressListener;
47
import org.netbeans.modules.refactoring.api.ProgressListener;
48
48
49
/**
49
/**
50
 * Refactoring plugins should implement this interface, if they want to notify their progress of preCheck,
50
 * Refactoring plugins and transactions should implement this interface, if they
51
 * prepare and checkParameters method.
51
 * want to notify their progress of commit, preCheck, prepare and
52
 * checkParameters method.
53
 *
52
 * @author Jan Becicka
54
 * @author Jan Becicka
53
 */
55
 */
54
public interface ProgressProvider {
56
public interface ProgressProvider {
(-)a/refactoring.api/src/org/netbeans/modules/refactoring/spi/RefactoringCommit.java (-2 / +53 lines)
Lines 49-56 Link Here
49
import java.util.logging.Level;
49
import java.util.logging.Level;
50
import java.util.logging.Logger;
50
import java.util.logging.Logger;
51
import org.netbeans.api.annotations.common.NonNull;
51
import org.netbeans.api.annotations.common.NonNull;
52
import org.netbeans.modules.refactoring.api.ProgressEvent;
53
import org.netbeans.modules.refactoring.api.ProgressListener;
52
import org.netbeans.modules.refactoring.api.impl.CannotRedoRefactoring;
54
import org.netbeans.modules.refactoring.api.impl.CannotRedoRefactoring;
53
import org.netbeans.modules.refactoring.api.impl.CannotUndoRefactoring;
55
import org.netbeans.modules.refactoring.api.impl.CannotUndoRefactoring;
56
import org.netbeans.modules.refactoring.api.impl.ProgressSupport;
54
import org.netbeans.modules.refactoring.spi.BackupFacility2.Handle;
57
import org.netbeans.modules.refactoring.spi.BackupFacility2.Handle;
55
import org.openide.cookies.EditorCookie;
58
import org.openide.cookies.EditorCookie;
56
import org.openide.filesystems.FileObject;
59
import org.openide.filesystems.FileObject;
Lines 64-73 Link Here
64
 * @author Jan Becicka
67
 * @author Jan Becicka
65
 * @since 1.23
68
 * @since 1.23
66
 */
69
 */
67
70
 public final class RefactoringCommit implements Transaction, ProgressProvider {
68
 public final class RefactoringCommit implements Transaction {
69
 
71
 
70
     private static final Logger LOG = Logger.getLogger(RefactoringCommit.class.getName());
72
     private static final Logger LOG = Logger.getLogger(RefactoringCommit.class.getName());
73
     private ProgressSupport progressSupport;
71
 
74
 
72
     /**
75
     /**
73
      * FileObjects modified by this Transaction
76
      * FileObjects modified by this Transaction
Lines 127-132 Link Here
127
    
130
    
128
    @Override
131
    @Override
129
    public void commit() {
132
    public void commit() {
133
        fireProgressListenerStart(ProgressEvent.START, results.size());
130
        try {
134
        try {
131
            if (commited) {
135
            if (commited) {
132
                for (BackupFacility2.Handle id:ids) {
136
                for (BackupFacility2.Handle id:ids) {
Lines 153-164 Link Here
153
                    }
157
                    }
154
158
155
                    openNewFiles(result.getNewFiles());
159
                    openNewFiles(result.getNewFiles());
160
                    fireProgressListenerStep();
156
                }
161
                }
157
            }
162
            }
158
        
163
        
159
        } catch (IOException ex) {
164
        } catch (IOException ex) {
160
            throw new RuntimeException(ex);
165
            throw new RuntimeException(ex);
161
        }
166
        }
167
        fireProgressListenerStop();
162
    }
168
    }
163
    
169
    
164
     private boolean newFilesStored = false;
170
     private boolean newFilesStored = false;
Lines 194-198 Link Here
194
            }
200
            }
195
        }
201
        }
196
    }
202
    }
203
204
     /**
205
      * Registers ProgressListener to receive events.
206
      *
207
      * @param listener The listener to register.
208
      * @since 1.33
209
      */
210
     @Override
211
     public synchronized void addProgressListener(ProgressListener listener) {
212
         if (progressSupport == null) {
213
             progressSupport = new ProgressSupport();
214
         }
215
         progressSupport.addProgressListener(listener);
216
     }
217
218
     /**
219
      * Removes ProgressListener from the list of listeners.
220
      *
221
      * @param listener The listener to remove.
222
      * @since 1.33
223
      */
224
     @Override
225
     public synchronized void removeProgressListener(ProgressListener listener) {
226
         if (progressSupport != null) {
227
             progressSupport.removeProgressListener(listener);
228
         }
229
     }
230
    
231
    private void fireProgressListenerStart(int type, int count) {
232
        if (progressSupport != null) {
233
            progressSupport.fireProgressListenerStart(this, type, count);
234
        }
235
    }
236
    
237
    private void fireProgressListenerStep() {
238
        if (progressSupport != null) {
239
            progressSupport.fireProgressListenerStep(this);
240
        }
241
    }
242
    
243
    private void fireProgressListenerStop() {
244
        if (progressSupport != null) {
245
            progressSupport.fireProgressListenerStop(this);
246
        }
247
    }
197
}
248
}
198
            
249
            

Return to bug 221295