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

(-)a/openide.loaders/src/org/openide/loaders/OpenSupport.java (+8 lines)
Lines 134-139 Link Here
134
    PropertyChangeListener, VetoableChangeListener {
134
    PropertyChangeListener, VetoableChangeListener {
135
        /** generated Serialized Version UID */
135
        /** generated Serialized Version UID */
136
        static final long serialVersionUID = -1934890789745432531L;
136
        static final long serialVersionUID = -1934890789745432531L;
137
138
        public static DataObject findDataObject(Object env) {
139
            if (env instanceof Env) {
140
                return ((Env)env).getDataObject();
141
            }
142
            return null;
143
        }
144
137
        /** object to serialize and be connected to*/
145
        /** object to serialize and be connected to*/
138
        private DataObject obj;
146
        private DataObject obj;
139
        
147
        
(-)a/openide.windows/src/org/openide/windows/CloneableOpenSupport.java (+5 lines)
Lines 94-99 Link Here
94
     * @see #openCloneableTopComponent
94
     * @see #openCloneableTopComponent
95
     */
95
     */
96
    public void open() {
96
    public void open() {
97
        CloneableOpenSupport redirect = CloneableOpenSupportRedirector.findRedirect(this);
98
        if (redirect != null) {
99
            redirect.open();
100
            return;
101
        }
97
        //Bugfix #10688 open() is now run in AWT thread
102
        //Bugfix #10688 open() is now run in AWT thread
98
        Mutex.EVENT.writeAccess(
103
        Mutex.EVENT.writeAccess(
99
            new Runnable() {
104
            new Runnable() {
(-)a/openide.windows/src/org/openide/windows/CloneableOpenSupportRedirector.java (+109 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2013 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 2013 Sun Microsystems, Inc.
41
 */
42
package org.openide.windows;
43
44
import java.util.Collection;
45
import java.util.concurrent.atomic.AtomicReference;
46
import org.openide.util.Lookup;
47
import org.openide.util.LookupEvent;
48
import org.openide.util.LookupListener;
49
50
/**
51
 *
52
 * @author akrasny
53
 */
54
public abstract class CloneableOpenSupportRedirector {
55
56
    private static final Lookup.Result<CloneableOpenSupportRedirector> lkp = Lookup.getDefault().lookup(new Lookup.Template<>(CloneableOpenSupportRedirector.class));
57
    private static final AtomicReference<Collection<? extends CloneableOpenSupportRedirector>> redirectors = new AtomicReference<>();
58
    private static final LookupListener listener = new LookupListener() {
59
        @Override
60
        public void resultChanged(LookupEvent ev) {
61
            redirectors.set(lkp.allInstances());
62
        }
63
    };
64
65
    static {
66
        lkp.addLookupListener(listener);
67
        listener.resultChanged(null);
68
    }
69
70
    protected abstract CloneableOpenSupport redirect(CloneableOpenSupport.Env env);
71
72
    protected abstract void opened(CloneableOpenSupport.Env env);
73
74
    protected abstract void closed(CloneableOpenSupport.Env env);
75
76
    static CloneableOpenSupport findRedirect(CloneableOpenSupport one) {
77
        final CloneableOpenSupport.Env env = one.env;
78
        Collection<? extends CloneableOpenSupportRedirector> rlist = redirectors.get();
79
        if (rlist != null) {
80
            for (CloneableOpenSupportRedirector r : rlist) {
81
                CloneableOpenSupport ces = r.redirect(env);
82
                if (ces != null && ces != one) {
83
                    return ces;
84
                }
85
            }
86
        }
87
        return null;
88
    }
89
90
    static void notifyOpened(CloneableOpenSupport one) {
91
        final CloneableOpenSupport.Env env = one.env;
92
        Collection<? extends CloneableOpenSupportRedirector> rlist = redirectors.get();
93
        if (rlist != null) {
94
            for (CloneableOpenSupportRedirector r : rlist) {
95
                r.opened(env);
96
            }
97
        }
98
    }
99
100
    static void notifyClosed(CloneableOpenSupport one) {
101
        final CloneableOpenSupport.Env env = one.env;
102
        Collection<? extends CloneableOpenSupportRedirector> rlist = redirectors.get();
103
        if (rlist != null) {
104
            for (CloneableOpenSupportRedirector r : rlist) {
105
                r.closed(env);
106
            }
107
        }
108
    }
109
}
(-)a/openide.windows/src/org/openide/windows/CloneableTopComponent.java (-1 / +12 lines)
Lines 191-196 Link Here
191
    protected void componentOpened() {
191
    protected void componentOpened() {
192
        super.componentOpened();
192
        super.componentOpened();
193
        getReference().register(this);
193
        getReference().register(this);
194
        CloneableOpenSupport cos = getLookup().lookup(CloneableOpenSupport.class);
195
        if (cos != null) {
196
            CloneableOpenSupportRedirector.notifyOpened(cos);
197
        }
194
    }
198
    }
195
199
196
    /** Overrides superclass method, adds unregistering from references.
200
    /** Overrides superclass method, adds unregistering from references.
Lines 199-205 Link Here
199
        super.componentClosed();
203
        super.componentClosed();
200
204
201
        if (!isOpened()) {
205
        if (!isOpened()) {
202
            getReference().unregister(this);
206
            try {
207
                CloneableOpenSupport cos = getLookup().lookup(CloneableOpenSupport.class);
208
                if (cos != null) {
209
                    CloneableOpenSupportRedirector.notifyClosed(cos);
210
                }
211
            } finally {
212
                getReference().unregister(this);
213
            }
203
        }
214
        }
204
    }
215
    }
205
216

Return to bug 230126