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

(-)a/queries/src/org/netbeans/api/queries/SharabilityQuery.java (+55 lines)
Lines 45-52 Link Here
45
package org.netbeans.api.queries;
45
package org.netbeans.api.queries;
46
46
47
import java.io.File;
47
import java.io.File;
48
import java.net.URI;
49
import java.net.URISyntaxException;
50
import java.net.URL;
48
import org.netbeans.spi.queries.SharabilityQueryImplementation;
51
import org.netbeans.spi.queries.SharabilityQueryImplementation;
52
import org.netbeans.spi.queries.SharabilityQueryImplementation2;
49
import org.openide.filesystems.FileUtil;
53
import org.openide.filesystems.FileUtil;
54
import org.openide.util.Exceptions;
50
import org.openide.util.Lookup;
55
import org.openide.util.Lookup;
51
import org.openide.util.Parameters;
56
import org.openide.util.Parameters;
52
import org.openide.util.Utilities;
57
import org.openide.util.Utilities;
Lines 127-130 Link Here
127
        return UNKNOWN;
132
        return UNKNOWN;
128
    }
133
    }
129
    
134
    
135
    /**
136
     * Check whether an existing file is sharable.
137
     * @param url a file or directory (may or may not already exist); should be normalized.
138
     * @return one of the constants in this class
139
     */
140
    public static int getSharability(URL url) {
141
        Parameters.notNull("file", url);
142
        boolean asserts = false;
143
        assert asserts = true;
144
        if (asserts && !Utilities.isMac()) {
145
            try {
146
                URI uri = new URI(url.toExternalForm());
147
                URI normUri = uri.normalize();
148
                if (!uri.equals(uri)) {
149
                    throw new IllegalArgumentException("Must pass a normalized file: " + uri + " vs. " + normUri);
150
                }
151
            } catch (URISyntaxException ex) {
152
                Exceptions.printStackTrace(ex);
153
            }
154
        }
155
        File file = null;
156
        for (SharabilityQueryImplementation sqi : implementations.allInstances()) {
157
            if (sqi instanceof SharabilityQueryImplementation2) {
158
                int x = ((SharabilityQueryImplementation2)sqi).getSharability(url);
159
                if (x != UNKNOWN) {
160
                    return x;
161
                }
162
            } else {
163
                if (file == null) {
164
                    if ("file".equals(url.getProtocol())) {
165
                        try {
166
                            URI uri = new URI(url.toExternalForm());
167
                            file = new File(uri);
168
                        } catch (URISyntaxException ex) {
169
                            Exceptions.printStackTrace(ex);
170
                            break;
171
                        }
172
                    }
173
                }
174
                if (file != null) {
175
                    int x = sqi.getSharability(file);
176
                    if (x != UNKNOWN) {
177
                        return x;
178
                    }
179
                }
180
            }
181
        }
182
        return UNKNOWN;
183
    }
184
    
130
}
185
}
(-)a/queries/src/org/netbeans/spi/queries/SharabilityQueryImplementation2.java (+83 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 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 2011 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.spi.queries;
43
44
import java.net.URL;
45
46
/**
47
 * Determine whether files should be shared (for example in a VCS) or are intended
48
 * to be unshared.
49
 * <div class="nonnormative">
50
 * <p>
51
 * Could be implemented e.g. by project types which know that certain files or folders in
52
 * a project (e.g. <samp>src/</samp>) are intended for VCS sharing while others
53
 * (e.g. <samp>build/</samp>) are not.
54
 * </p>
55
 * <p>
56
 * Note that the Project API module registers a default implementation of this query
57
 * which delegates to the project which owns the queried file, if there is one.
58
 * This is more efficient than searching instances in global lookup, so use that
59
 * facility wherever possible.
60
 * </p>
61
 * </div>
62
 * <p>
63
 * Threading note: implementors should avoid acquiring locks that might be held
64
 * by other threads. Generally treat this interface similarly to SPIs in
65
 * {@link org.openide.filesystems} with respect to threading semantics.
66
 * </p>
67
 * @see org.netbeans.api.queries.SharabilityQuery
68
 * @see <a href="@org-netbeans-modules-project-ant@/org/netbeans/spi/project/support/ant/AntProjectHelper.html#createSharabilityQuery(java.lang.String[],%20java.lang.String[])"><code>AntProjectHelper.createSharabilityQuery(...)</code></a>
69
 * @author Jesse Glick
70
 * @author Alexander Simon
71
 */
72
public interface SharabilityQueryImplementation2 extends SharabilityQueryImplementation {
73
    
74
    /**
75
     * Check whether a file or directory should be shared.
76
     * If it is, it ought to be committed to a VCS if the user is using one.
77
     * If it is not, it is either a disposable build product, or a per-user
78
     * private file which is important but should not be shared.
79
     * @param url a normalized URL to check for sharability (may or may not yet exist).
80
     * @return one of {@link org.netbeans.api.queries.SharabilityQuery}'s constants
81
     */
82
    int getSharability(URL url);
83
}

Return to bug 198060