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

(-)a/o.n.bootstrap/src/org/netbeans/ModuleManager.java (+3 lines)
Lines 1387-1392 Link Here
1387
        }
1387
        }
1388
        // Also add anything it depends on, if not already there,
1388
        // Also add anything it depends on, if not already there,
1389
        // or already enabled.
1389
        // or already enabled.
1390
        if (m.getCodeName().contains("spring")) {
1391
            Thread.dumpStack();
1392
        }
1390
        for (Dependency dep : m.getDependenciesArray()) {
1393
        for (Dependency dep : m.getDependenciesArray()) {
1391
            if (dep.getType() == Dependency.TYPE_MODULE) {
1394
            if (dep.getType() == Dependency.TYPE_MODULE) {
1392
                String codeNameBase = (String)Util.parseCodeName(dep.getName())[0];
1395
                String codeNameBase = (String)Util.parseCodeName(dep.getName())[0];
(-)a/o.n.core/nbproject/project.xml (-1 / +1 lines)
Lines 168-174 Link Here
168
                    <build-prerequisite/>
168
                    <build-prerequisite/>
169
                    <compile-dependency/>
169
                    <compile-dependency/>
170
                    <run-dependency>
170
                    <run-dependency>
171
                        <specification-version>8.25</specification-version>
171
                        <specification-version>8.29</specification-version>
172
                    </run-dependency>
172
                    </run-dependency>
173
                </dependency>
173
                </dependency>
174
                <dependency>
174
                <dependency>
(-)a/o.n.core/src/org/netbeans/core/NbErrorManager.java (+10 lines)
Lines 44-49 Link Here
44
44
45
package org.netbeans.core;
45
package org.netbeans.core;
46
46
47
import java.io.IOException;
47
import java.io.OutputStreamWriter;
48
import java.io.OutputStreamWriter;
48
import java.io.PrintStream;
49
import java.io.PrintStream;
49
import java.io.PrintWriter;
50
import java.io.PrintWriter;
Lines 61-66 Link Here
61
import java.util.logging.LogRecord;
62
import java.util.logging.LogRecord;
62
import java.util.logging.Logger;
63
import java.util.logging.Logger;
63
import org.netbeans.core.startup.TopLogging;
64
import org.netbeans.core.startup.TopLogging;
65
import org.openide.util.UserQuestionException;
64
66
65
/** Wraps errormanager with logger.
67
/** Wraps errormanager with logger.
66
 *
68
 *
Lines 268-273 Link Here
268
            return false;
270
            return false;
269
        }
271
        }
270
        
272
        
273
        final boolean isUserQuestion() {
274
            return t instanceof UserQuestionException;
275
        }
276
        
277
        final void  confirm() throws IOException {
278
            ((UserQuestionException)t).confirmed();
279
        }
280
        
271
        /** @return class name of the exception */
281
        /** @return class name of the exception */
272
        String getClassName() {
282
        String getClassName() {
273
            return (String)find(3);
283
            return (String)find(3);
(-)a/o.n.core/src/org/netbeans/core/NotifyExcPanel.java (-1 / +16 lines)
Lines 54-59 Link Here
54
import java.awt.Window;
54
import java.awt.Window;
55
import java.awt.event.ActionEvent;
55
import java.awt.event.ActionEvent;
56
import java.awt.event.ActionListener;
56
import java.awt.event.ActionListener;
57
import java.io.IOException;
57
import java.io.PrintWriter;
58
import java.io.PrintWriter;
58
import java.io.StringWriter;
59
import java.io.StringWriter;
59
import java.lang.reflect.ParameterizedType;
60
import java.lang.reflect.ParameterizedType;
Lines 274-280 Link Here
274
    static void notify (
275
    static void notify (
275
        final NbErrorManager.Exc t
276
        final NbErrorManager.Exc t
276
    ) {
277
    ) {
277
        if (!shallNotify(t.getSeverity(), false)) {
278
        if (!t.isUserQuestion() && !shallNotify(t.getSeverity(), false)) {
278
            return;
279
            return;
279
        }
280
        }
280
        
281
        
Lines 285-294 Link Here
285
        }
286
        }
286
287
287
        SwingUtilities.invokeLater (new Runnable () {
288
        SwingUtilities.invokeLater (new Runnable () {
289
            @Override
288
            public void run() {
290
            public void run() {
289
                String glm = t.getLocalizedMessage();
291
                String glm = t.getLocalizedMessage();
290
                Level gs = t.getSeverity();
292
                Level gs = t.getSeverity();
291
                boolean loc = t.isLocalized();
293
                boolean loc = t.isLocalized();
294
                
295
                if (t.isUserQuestion() && loc) {
296
                    Object ret = DialogDisplayer.getDefault().notify(
297
                               new NotifyDescriptor.Confirmation(glm, NotifyDescriptor.OK_CANCEL_OPTION));
298
                    if (ret == NotifyDescriptor.OK_OPTION) {
299
                        try {
300
                            t.confirm();
301
                        } catch (IOException ex) {
302
                            Exceptions.printStackTrace(ex);
303
                        }
304
                    }
305
                    return;
306
                }
292
307
293
                if (loc) {
308
                if (loc) {
294
                    if (gs == Level.WARNING) {
309
                    if (gs == Level.WARNING) {
(-)0df9cb6108b7 (+175 lines)
Added Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2012 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2012 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.core;
43
44
import java.awt.Dialog;
45
import java.awt.EventQueue;
46
import java.awt.GraphicsEnvironment;
47
import java.io.IOException;
48
import javax.swing.JDialog;
49
import junit.framework.Test;
50
import junit.framework.TestSuite;
51
import org.netbeans.core.startup.TopLogging;
52
import org.netbeans.junit.MockServices;
53
import org.netbeans.junit.NbTestCase;
54
import org.openide.DialogDescriptor;
55
import org.openide.DialogDisplayer;
56
import org.openide.NotifyDescriptor;
57
import org.openide.util.Exceptions;
58
import org.openide.util.UserQuestionException;
59
60
/**
61
 *
62
 * @author Jaroslav Tulach <jtulach@netbeans.org>
63
 */
64
public class NbErrorManagerUserQuestionTest extends NbTestCase {
65
66
    public static Test suite() {
67
        return GraphicsEnvironment.isHeadless() ? new TestSuite() : new TestSuite(NbErrorManagerUserQuestionTest.class);
68
    }
69
70
    public NbErrorManagerUserQuestionTest(String name) {
71
        super(name);
72
    }
73
74
    @Override
75
    protected void setUp() throws Exception {
76
        clearWorkDir();
77
78
        MockServices.setServices(MockDD.class);
79
        System.setProperty("netbeans.user", getWorkDirPath());
80
        
81
        // init the whole system
82
        TopLogging.initializeQuietly();
83
    }
84
    
85
    public void testUserQuestionExceptionDisplayedOK() throws Exception {
86
        class UQE extends UserQuestionException {
87
            UQE() {
88
                super("HelloTest");
89
            }
90
            
91
            boolean confirm;
92
            @Override
93
            public void confirmed() throws IOException {
94
                confirm = true;
95
            }
96
97
            @Override
98
            public String getLocalizedMessage() {
99
                return "Reboot?";
100
            }
101
        }
102
        MockDD.reply = NotifyDescriptor.OK_OPTION;
103
        
104
        UQE ex = new UQE();
105
        Exceptions.printStackTrace(ex);
106
        
107
        waitEDT();
108
109
        assertNotNull("Dialog created", MockDD.lastDescriptor);
110
        assertEquals("Message is localized text", "Reboot?", MockDD.lastDescriptor.getMessage());
111
        assertTrue("The message has been confirmed", ex.confirm);
112
    }
113
    
114
    public void testUserQuestionExceptionDisplayedCancel() throws Exception {
115
        class UQE extends UserQuestionException {
116
            UQE() {
117
                super("HelloTest");
118
            }
119
            
120
            boolean confirm;
121
            @Override
122
            public void confirmed() throws IOException {
123
                confirm = true;
124
            }
125
126
            @Override
127
            public String getLocalizedMessage() {
128
                return "Reboot?";
129
            }
130
        }
131
        MockDD.reply = NotifyDescriptor.CLOSED_OPTION;
132
        
133
        UQE ex = new UQE();
134
        Exceptions.printStackTrace(ex);
135
        
136
        waitEDT();
137
138
        assertNotNull("Dialog created", MockDD.lastDescriptor);
139
        assertEquals("Message is localized text", "Reboot?", MockDD.lastDescriptor.getMessage());
140
        assertFalse("The message has not been confirmed", ex.confirm);
141
    }
142
143
    private void waitEDT() throws Exception {
144
        EventQueue.invokeAndWait(new Runnable() {
145
            @Override
146
            public void run() {
147
            }
148
        });
149
    }
150
    
151
    
152
    public static final class MockDD extends DialogDisplayer {
153
        static Object reply;
154
        static NotifyDescriptor lastDescriptor;
155
156
        @Override
157
        public Object notify(NotifyDescriptor descriptor) {
158
            lastDescriptor = descriptor;
159
            return reply;
160
        }
161
162
        @Override
163
        public Dialog createDialog(DialogDescriptor descriptor) {
164
            lastDescriptor = descriptor;
165
            return new JDialog() {
166
                @SuppressWarnings("deprecation")
167
                @Override
168
                public void show() {
169
                }
170
            };
171
        }
172
    }
173
    
174
    
175
}
(-)a/openide.util/apichanges.xml (+18 lines)
Lines 51-56 Link Here
51
    <apidef name="actions">Actions API</apidef>
51
    <apidef name="actions">Actions API</apidef>
52
</apidefs>
52
</apidefs>
53
<changes>
53
<changes>
54
    <change id="automatic-uqe">
55
        <api name="util"/>
56
        <summary>Automatic support for UserQuestionException</summary>
57
        <version major="8" minor="29"/>
58
        <date year="2012" month="11" day="14"/>
59
        <author login="jtulach"/>
60
        <compatibility addition="yes" binary="compatible" source="compatible"/>
61
        <description>
62
            <p>
63
                The default NetBeans Platform infrastructure knows how to
64
                display dialog when an <code>UserQuestionException</code> is
65
                reported.
66
            </p>
67
        </description>
68
        <class package="org.openide.util" name="Exceptions"/>
69
        <class package="org.openide.util" name="UserQuestionException"/>
70
        <issue number="57748"/>
71
    </change>
54
    <change id="File.URI">
72
    <change id="File.URI">
55
        <api name="util"/>
73
        <api name="util"/>
56
        <summary>UNC-safe File / URI interconversion</summary>
74
        <summary>UNC-safe File / URI interconversion</summary>
(-)a/openide.util/manifest.mf (-1 / +1 lines)
Lines 1-5 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.openide.util
2
OpenIDE-Module: org.openide.util
3
OpenIDE-Module-Localizing-Bundle: org/openide/util/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/openide/util/Bundle.properties
4
OpenIDE-Module-Specification-Version: 8.28
4
OpenIDE-Module-Specification-Version: 8.29
5
5
(-)a/openide.util/src/org/openide/util/Exceptions.java (+8 lines)
Lines 184-189 Link Here
184
    /** Notifies an exception with a severe level. Such exception is going
184
    /** Notifies an exception with a severe level. Such exception is going
185
     * to be printed to log file and possibly also notified to alarm the
185
     * to be printed to log file and possibly also notified to alarm the
186
     * user somehow.
186
     * user somehow.
187
     * <p class="nonnormative">
188
     * Since version 8.29 the default implementation of this method inside
189
     * a NetBeans Platform based application understands 
190
     * {@link UserQuestionException}. If the exception is thrown and later
191
     * reported via this method, it is properly shown to the user as a 
192
     * dialog with approve/reject options. If approved, the infrastructure
193
     * calls {@link UserQuestionException#confirmed()} method.
194
     * </p>
187
     *
195
     *
188
     * @param t the exception to notify
196
     * @param t the exception to notify
189
     */
197
     */
(-)a/openide.util/src/org/openide/util/UserQuestionException.java (+5 lines)
Lines 54-59 Link Here
54
* The <code>getLocalizedMessage</code> method should return the user question,
54
* The <code>getLocalizedMessage</code> method should return the user question,
55
* which will be shown to the user in a dialog with OK, Cancel options and
55
* which will be shown to the user in a dialog with OK, Cancel options and
56
* if the user chooses OK, method <code>ex.confirmed ()</code> will be called.
56
* if the user chooses OK, method <code>ex.confirmed ()</code> will be called.
57
* <p>
58
* Since version 8.29 one can just catch the exception and report it to the
59
* infrastructure of any NetBeans Platform based application (for example
60
* via {@link Exceptions#printStackTrace(java.lang.Throwable)}) and the
61
* question dialog will be displayed automatically.
57
*
62
*
58
* @author Jaroslav Tulach
63
* @author Jaroslav Tulach
59
*/
64
*/

Return to bug 57748