2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4 * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
6 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7 * Other names may be trademarks of their respective owners.
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]"
29 * The Original Software is NetBeans. The Initial Developer of the Original
30 * Software is Oracle. Portions Copyright 2013-2013 Oracle. All Rights Reserved.
32 * If you wish your version of this file to be governed by only the CDDL
33 * or only the GPL Version 2, indicate your decision by adding
34 * "[Contributor] elects to include this software in this distribution
35 * under the [CDDL or GPL Version 2] license." If you do not indicate a
36 * single choice of license, a recipient has the option to distribute
37 * your version of this file under either the CDDL, the GPL Version 2 or
38 * to extend the choice of license to its licensees as provided above.
39 * However, if you add GPL Version 2 code and therefore, elected the GPL
40 * Version 2 license, then the option applies only if the new code is
41 * made subject to such option by the copyright holder.
43 package net.java.html;
45 import java.util.ServiceLoader;
46 import java.util.logging.Logger;
47 import org.netbeans.html.context.impl.CtxAccssr;
48 import org.netbeans.html.context.impl.CtxImpl;
49 import org.apidesign.html.context.spi.Contexts;
51 /** Represents context where the <code>net.java.html.json.Model</code>
53 * operate in. The context is usually a particular HTML page in a browser.
54 * The context is also associated with the actual HTML technology
55 * in the HTML page - there is likely to be different context for
56 * <a href="http://knockoutjs.com">knockout.js</a> and different one
57 * for <a href="http://angularjs.org">angular</a>.
59 * @author Jaroslav Tulach <jtulach@netbeans.org>
61 public final class BrwsrCtx {
62 private static final Logger LOG = Logger.getLogger(BrwsrCtx.class.getName());
63 private final CtxImpl impl;
64 private BrwsrCtx(CtxImpl impl) {
70 protected BrwsrCtx newContext(CtxImpl impl) {
71 return new BrwsrCtx(impl);
75 protected CtxImpl find(BrwsrCtx context) {
80 /** Dummy context without binding to any real browser or technology.
81 * Useful for simple unit testing of behavior of various business logic
84 public static final BrwsrCtx EMPTY = Contexts.newBuilder().build();
86 /** Seeks for the default context that is associated with the requesting
87 * class. If no suitable context is found, a warning message is
88 * printed and {@link #EMPTY} context is returned.
90 * @param requestor the class that makes the request
91 * @return appropriate context for the request
93 public static BrwsrCtx findDefault(Class<?> requestor) {
94 org.apidesign.html.context.spi.Contexts.Builder cb = Contexts.newBuilder();
95 boolean found = false;
99 l = requestor.getClassLoader();
100 } catch (SecurityException ex) {
104 for (org.apidesign.html.context.spi.Contexts.Provider cp : ServiceLoader.load(
105 org.apidesign.html.context.spi.Contexts.Provider.class, l
107 cp.fillContext(cb, requestor);
111 for (org.apidesign.html.context.spi.Contexts.Provider cp : ServiceLoader.load(org.apidesign.html.context.spi.Contexts.Provider.class, org.apidesign.html.context.spi.Contexts.Provider.class.getClassLoader())) {
112 cp.fillContext(cb, requestor);
115 } catch (SecurityException ex) {
119 // if we have some data from regular provides, go on
122 for (org.apidesign.html.context.spi.Contexts.Provider cp : ServiceLoader.load(org.apidesign.html.context.spi.Contexts.Provider.class)) {
123 cp.fillContext(cb, requestor);
128 LOG.warning("No browser context found. Returning empty technology!");