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

(-)a/php.project/manifest.mf (-1 / +1 lines)
Lines 1-6 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
AutoUpdate-Show-In-Client: false
2
AutoUpdate-Show-In-Client: false
3
OpenIDE-Module-Specification-Version: 2.61
3
OpenIDE-Module-Specification-Version: 2.62
4
OpenIDE-Module: org.netbeans.modules.php.project
4
OpenIDE-Module: org.netbeans.modules.php.project
5
OpenIDE-Module-Layer: org/netbeans/modules/php/project/resources/layer.xml
5
OpenIDE-Module-Layer: org/netbeans/modules/php/project/resources/layer.xml
6
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/php/project/resources/Bundle.properties
6
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/php/project/resources/Bundle.properties
(-)a/php.project/nbproject/project.xml (+8 lines)
Lines 315-320 Link Here
315
                    </run-dependency>
315
                    </run-dependency>
316
                </dependency>
316
                </dependency>
317
                <dependency>
317
                <dependency>
318
                    <code-name-base>org.netbeans.modules.web.browser.api</code-name-base>
319
                    <build-prerequisite/>
320
                    <compile-dependency/>
321
                    <run-dependency>
322
                        <specification-version>1.5</specification-version>
323
                    </run-dependency>
324
                </dependency>
325
                <dependency>
318
                    <code-name-base>org.netbeans.modules.web.common</code-name-base>
326
                    <code-name-base>org.netbeans.modules.web.common</code-name-base>
319
                    <build-prerequisite/>
327
                    <build-prerequisite/>
320
                    <compile-dependency/>
328
                    <compile-dependency/>
(-)a/php.project/src/org/netbeans/modules/php/project/PhpProject.java (-2 / +91 lines)
Lines 48-53 Link Here
48
import java.beans.PropertyChangeSupport;
48
import java.beans.PropertyChangeSupport;
49
import java.io.File;
49
import java.io.File;
50
import java.io.IOException;
50
import java.io.IOException;
51
import java.net.MalformedURLException;
52
import java.net.URL;
51
import java.util.ArrayList;
53
import java.util.ArrayList;
52
import java.util.Arrays;
54
import java.util.Arrays;
53
import java.util.Collections;
55
import java.util.Collections;
Lines 84-89 Link Here
84
import org.netbeans.modules.php.project.copysupport.CopySupport;
86
import org.netbeans.modules.php.project.copysupport.CopySupport;
85
import org.netbeans.modules.php.project.internalserver.InternalWebServer;
87
import org.netbeans.modules.php.project.internalserver.InternalWebServer;
86
import org.netbeans.modules.php.project.problems.ProjectPropertiesProblemProvider;
88
import org.netbeans.modules.php.project.problems.ProjectPropertiesProblemProvider;
89
import org.netbeans.modules.php.project.ui.actions.support.CommandUtils;
87
import org.netbeans.modules.php.project.ui.actions.support.ConfigAction;
90
import org.netbeans.modules.php.project.ui.actions.support.ConfigAction;
88
import org.netbeans.modules.php.project.ui.codecoverage.PhpCoverageProvider;
91
import org.netbeans.modules.php.project.ui.codecoverage.PhpCoverageProvider;
89
import org.netbeans.modules.php.project.ui.customizer.CustomizerProviderImpl;
92
import org.netbeans.modules.php.project.ui.customizer.CustomizerProviderImpl;
Lines 94-99 Link Here
94
import org.netbeans.modules.php.spi.framework.PhpFrameworkProvider;
97
import org.netbeans.modules.php.spi.framework.PhpFrameworkProvider;
95
import org.netbeans.modules.php.spi.framework.PhpModuleIgnoredFilesExtender;
98
import org.netbeans.modules.php.spi.framework.PhpModuleIgnoredFilesExtender;
96
import org.netbeans.modules.web.common.spi.ProjectWebRootProvider;
99
import org.netbeans.modules.web.common.spi.ProjectWebRootProvider;
100
import org.netbeans.modules.web.common.spi.ServerURLMappingImplementation;
97
import org.netbeans.spi.project.AuxiliaryConfiguration;
101
import org.netbeans.spi.project.AuxiliaryConfiguration;
98
import org.netbeans.spi.project.support.ant.AntBasedProjectRegistration;
102
import org.netbeans.spi.project.support.ant.AntBasedProjectRegistration;
99
import org.netbeans.spi.project.support.ant.AntProjectEvent;
103
import org.netbeans.spi.project.support.ant.AntProjectEvent;
Lines 606-612 Link Here
606
                InternalWebServer.createForProject(this),
610
                InternalWebServer.createForProject(this),
607
                ProjectPropertiesProblemProvider.createForProject(this),
611
                ProjectPropertiesProblemProvider.createForProject(this),
608
                UILookupMergerSupport.createProjectProblemsProviderMerger(),
612
                UILookupMergerSupport.createProjectProblemsProviderMerger(),
609
                new ProjectWebRootProviderImpl()
613
                new ProjectWebRootProviderImpl(),
614
                ServerMapping.create(this),
610
                // ?? getRefHelper()
615
                // ?? getRefHelper()
611
        });
616
        });
612
    }
617
    }
Lines 1015-1018 Link Here
1015
            return Collections.unmodifiableList(list);
1020
            return Collections.unmodifiableList(list);
1016
        }
1021
        }
1017
    }
1022
    }
1018
}
1023
1024
    private static final class ServerMapping implements ServerURLMappingImplementation, PropertyChangeListener {
1025
1026
        private final PhpProject project;
1027
1028
        private volatile String projectRootUrl;
1029
1030
1031
        private ServerMapping(PhpProject project) {
1032
            assert project != null;
1033
            this.project = project;
1034
        }
1035
1036
        public static ServerMapping create(PhpProject project) {
1037
            ServerMapping serverMapping = new ServerMapping(project);
1038
            ProjectPropertiesSupport.addWeakPropertyEvaluatorListener(project, serverMapping);
1039
            return serverMapping;
1040
        }
1041
1042
        @Override
1043
        public URL toServer(int projectContext, FileObject projectFile) {
1044
            init();
1045
            if (projectRootUrl == null) {
1046
                return null;
1047
            }
1048
            FileObject webRoot = project.getWebRootDirectory();
1049
            if (webRoot == null) {
1050
                return null;
1051
            }
1052
            String relPath = FileUtil.getRelativePath(webRoot, projectFile);
1053
            if (relPath == null) {
1054
                return null;
1055
            }
1056
            try {
1057
                return new URL(projectRootUrl + relPath);
1058
            } catch (MalformedURLException ex) {
1059
                return null;
1060
            }
1061
        }
1062
1063
        @Override
1064
        public FileObject fromServer(int projectContext, URL serverURL) {
1065
            init();
1066
            if (projectRootUrl == null) {
1067
                return null;
1068
            }
1069
            FileObject webRoot = project.getWebRootDirectory();
1070
            if (webRoot == null) {
1071
                return null;
1072
            }
1073
            String url = CommandUtils.urlToString(serverURL, true);
1074
            if (url.startsWith(projectRootUrl)) {
1075
                return webRoot.getFileObject(url.substring(projectRootUrl.length()));
1076
            }
1077
            return null;
1078
        }
1079
1080
        private void init() {
1081
            if (projectRootUrl == null) {
1082
                projectRootUrl = getProjectRootUrl();
1083
            }
1084
        }
1085
1086
        private String getProjectRootUrl() {
1087
            try {
1088
                String url = CommandUtils.urlToString(CommandUtils.getBaseURL(project, true), true);
1089
                if (!url.endsWith("/")) { // NOI18N
1090
                    url += "/"; // NOI18N
1091
                }
1092
                return url;
1093
            } catch (MalformedURLException ex) {
1094
                return null;
1095
            }
1096
        }
1097
1098
        @Override
1099
        public void propertyChange(PropertyChangeEvent evt) {
1100
            if (PhpProjectProperties.URL.equals(evt.getPropertyName())) {
1101
                projectRootUrl = null;
1102
            }
1103
        }
1104
1105
    }
1106
1107
}
(-)a/php.project/src/org/netbeans/modules/php/project/ui/actions/support/CommandUtils.java (+42 lines)
Lines 43-48 Link Here
43
43
44
import java.io.UnsupportedEncodingException;
44
import java.io.UnsupportedEncodingException;
45
import java.net.MalformedURLException;
45
import java.net.MalformedURLException;
46
import java.net.URI;
47
import java.net.URISyntaxException;
46
import java.net.URL;
48
import java.net.URL;
47
import java.net.URLEncoder;
49
import java.net.URLEncoder;
48
import java.util.ArrayList;
50
import java.util.ArrayList;
Lines 51-56 Link Here
51
import java.util.Collections;
53
import java.util.Collections;
52
import java.util.LinkedHashSet;
54
import java.util.LinkedHashSet;
53
import java.util.List;
55
import java.util.List;
56
import java.util.logging.Level;
57
import java.util.logging.Logger;
54
import org.netbeans.modules.php.project.deprecated.PhpProgram.InvalidPhpProgramException;
58
import org.netbeans.modules.php.project.deprecated.PhpProgram.InvalidPhpProgramException;
55
import org.netbeans.modules.php.api.util.FileUtils;
59
import org.netbeans.modules.php.api.util.FileUtils;
56
import org.netbeans.modules.php.api.util.StringUtils;
60
import org.netbeans.modules.php.api.util.StringUtils;
Lines 80-85 Link Here
80
 * @author Radek Matous, Tomas Mysik
84
 * @author Radek Matous, Tomas Mysik
81
 */
85
 */
82
public final class CommandUtils {
86
public final class CommandUtils {
87
88
    private static final Logger LOGGER = Logger.getLogger(CommandUtils.class.getName());
89
83
    private static final String HTML_MIME_TYPE = "text/html"; // NOI18N
90
    private static final String HTML_MIME_TYPE = "text/html"; // NOI18N
84
91
85
    private CommandUtils() {
92
    private CommandUtils() {
Lines 469-474 Link Here
469
        return new URL(baseURLPath);
476
        return new URL(baseURLPath);
470
    }
477
    }
471
478
479
    public static String urlToString(URL url, boolean pathOnly) {
480
        URI uri;
481
        try {
482
            uri = url.toURI();
483
        } catch (URISyntaxException ex) {
484
            // fallback:
485
            LOGGER.log(Level.FINE, "URL '{0}' cannot be converted to URI.", url);
486
            String res = url.toExternalForm();
487
            int end = res.lastIndexOf('?'); // NOI18N
488
            if (end == -1) {
489
                end = res.lastIndexOf('#'); // NOI18N
490
            }
491
            if (pathOnly && end != -1) {
492
                res = res.substring(0, end);
493
            }
494
            return res;
495
        }
496
        StringBuilder sb = new StringBuilder(100);
497
        sb.append(uri.getScheme());
498
        sb.append("://"); // NOI18N
499
        if (uri.getAuthority() != null) {
500
            sb.append(uri.getAuthority());
501
        }
502
        sb.append(uri.getPath());
503
        if (!pathOnly && uri.getQuery() != null) {
504
            sb.append("?"); // NOI18N
505
            sb.append(uri.getQuery());
506
        }
507
        if (!pathOnly && uri.getFragment() != null) {
508
            sb.append("#"); // NOI18N
509
            sb.append(uri.getFragment());
510
        }
511
        return sb.toString();
512
    }
513
472
    /**
514
    /**
473
     * Get {@link Command} for given project and command name (identifier).
515
     * Get {@link Command} for given project and command name (identifier).
474
     * @param project project to get a command for.
516
     * @param project project to get a command for.
(-)a/php.project/src/org/netbeans/modules/php/project/ui/actions/support/ConfigActionLocal.java (-7 / +35 lines)
Lines 43-49 Link Here
43
package org.netbeans.modules.php.project.ui.actions.support;
43
package org.netbeans.modules.php.project.ui.actions.support;
44
44
45
import java.net.MalformedURLException;
45
import java.net.MalformedURLException;
46
import java.net.URISyntaxException;
47
import java.net.URL;
46
import java.net.URL;
48
import java.util.concurrent.Callable;
47
import java.util.concurrent.Callable;
49
import java.util.concurrent.Executors;
48
import java.util.concurrent.Executors;
Lines 54-59 Link Here
54
import org.netbeans.modules.php.project.spi.XDebugStarter;
53
import org.netbeans.modules.php.project.spi.XDebugStarter;
55
import org.netbeans.modules.php.project.ui.customizer.PhpProjectProperties.DebugUrl;
54
import org.netbeans.modules.php.project.ui.customizer.PhpProjectProperties.DebugUrl;
56
import org.netbeans.modules.php.project.ui.customizer.PhpProjectProperties.XDebugUrlArguments;
55
import org.netbeans.modules.php.project.ui.customizer.PhpProjectProperties.XDebugUrlArguments;
56
import org.netbeans.modules.web.browser.api.BrowserSupport;
57
import org.openide.awt.HtmlBrowser;
57
import org.openide.awt.HtmlBrowser;
58
import org.openide.filesystems.FileObject;
58
import org.openide.filesystems.FileObject;
59
import org.openide.filesystems.FileUtil;
59
import org.openide.filesystems.FileUtil;
Lines 108-114 Link Here
108
    @Override
108
    @Override
109
    public void runProject() {
109
    public void runProject() {
110
        try {
110
        try {
111
            HtmlBrowser.URLDisplayer.getDefault().showURL(CommandUtils.urlForProject(project));
111
            showProjectUrl(CommandUtils.urlForProject(project));
112
        } catch (MalformedURLException ex) {
112
        } catch (MalformedURLException ex) {
113
            Exceptions.printStackTrace(ex);
113
            Exceptions.printStackTrace(ex);
114
        }
114
        }
Lines 133-139 Link Here
133
            @Override
133
            @Override
134
            public void run() {
134
            public void run() {
135
                if (urlToShow[0] != null) {
135
                if (urlToShow[0] != null) {
136
                    HtmlBrowser.URLDisplayer.getDefault().showURL(urlToShow[0]);
136
                    showProjectUrl(urlToShow[0]);
137
                }
137
                }
138
            }
138
            }
139
        };
139
        };
Lines 142-148 Link Here
142
            @Override
142
            @Override
143
            public boolean cancel() {
143
            public boolean cancel() {
144
                if (urlToShow[1] != null) {
144
                if (urlToShow[1] != null) {
145
                    HtmlBrowser.URLDisplayer.getDefault().showURL(urlToShow[1]);
145
                    showProjectUrl(urlToShow[1]);
146
                }
146
                }
147
                return true;
147
                return true;
148
            }
148
            }
Lines 172-178 Link Here
172
172
173
            preShowUrl(context);
173
            preShowUrl(context);
174
174
175
            HtmlBrowser.URLDisplayer.getDefault().showURL(url);
175
            showContextUrl(url, context);
176
        } catch (MalformedURLException ex) {
176
        } catch (MalformedURLException ex) {
177
            //TODO: improve error handling
177
            //TODO: improve error handling
178
            Exceptions.printStackTrace(ex);
178
            Exceptions.printStackTrace(ex);
Lines 234-240 Link Here
234
            @Override
234
            @Override
235
            public void run() {
235
            public void run() {
236
                if (urlForStartDebugging != null) {
236
                if (urlForStartDebugging != null) {
237
                    HtmlBrowser.URLDisplayer.getDefault().showURL(urlForStartDebugging);
237
                    showFileUrl(urlForStartDebugging, selectedFile);
238
                }
238
                }
239
            }
239
            }
240
        };
240
        };
Lines 243-249 Link Here
243
            @Override
243
            @Override
244
            public boolean cancel() {
244
            public boolean cancel() {
245
                if (urlForStopDebugging != null) {
245
                if (urlForStopDebugging != null) {
246
                    HtmlBrowser.URLDisplayer.getDefault().showURL(urlForStopDebugging);
246
                    showFileUrl(urlForStopDebugging, selectedFile);
247
                }
247
                }
248
                return true;
248
                return true;
249
            }
249
            }
Lines 279-284 Link Here
279
        dbgStarter.start(project, initDebuggingCallable, props);
279
        dbgStarter.start(project, initDebuggingCallable, props);
280
    }
280
    }
281
281
282
    void showProjectUrl(URL url) {
283
        showFileUrl(url, CommandUtils.fileForProject(project, webRoot));
284
    }
285
286
    private void showContextUrl(URL url, Lookup context) {
287
        FileObject file = CommandUtils.fileForContextOrSelectedNodes(context);
288
        if (file != null) {
289
            showFileUrl(url, file);
290
        } else {
291
            assert false : "FO should be found for context"; // NOI18N
292
            showProjectUrl(url);
293
        }
294
    }
295
296
    void showFileUrl(URL url, FileObject file) {
297
        if (isEaselEnabled()) {
298
            // easel
299
            BrowserSupport.getDefault().load(url, file);
300
        } else {
301
            // use standard browser
302
            HtmlBrowser.URLDisplayer.getDefault().showURL(url);
303
        }
304
    }
305
306
    private static boolean isEaselEnabled() {
307
        return Boolean.getBoolean("easel.everywhere"); // NOI18N
308
    }
309
282
    private static final class StopDebuggingException extends Exception {
310
    private static final class StopDebuggingException extends Exception {
283
        private static final long serialVersionUID = -22807171434417714L;
311
        private static final long serialVersionUID = -22807171434417714L;
284
    }
312
    }
(-)a/web.browser.api/manifest.mf (-1 / +1 lines)
Lines 3-7 Link Here
3
OpenIDE-Module-Layer: org/netbeans/modules/web/browser/ui/resources/layer.xml
3
OpenIDE-Module-Layer: org/netbeans/modules/web/browser/ui/resources/layer.xml
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/web/browser/api/Bundle.properties
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/web/browser/api/Bundle.properties
5
OpenIDE-Module-Requires: org.openide.windows.WindowManager
5
OpenIDE-Module-Requires: org.openide.windows.WindowManager
6
OpenIDE-Module-Specification-Version: 1.4
6
OpenIDE-Module-Specification-Version: 1.5
7
7
(-)a/web.browser.api/nbproject/project.xml (+1 lines)
Lines 129-134 Link Here
129
                <friend>org.netbeans.modules.html</friend>
129
                <friend>org.netbeans.modules.html</friend>
130
                <friend>org.netbeans.modules.html.navigator</friend>
130
                <friend>org.netbeans.modules.html.navigator</friend>
131
                <friend>org.netbeans.modules.javascript.jstestdriver</friend>
131
                <friend>org.netbeans.modules.javascript.jstestdriver</friend>
132
                <friend>org.netbeans.modules.php.project</friend>
132
                <friend>org.netbeans.modules.web.clientproject</friend>
133
                <friend>org.netbeans.modules.web.clientproject</friend>
133
                <friend>org.netbeans.modules.web.clientproject.api</friend>
134
                <friend>org.netbeans.modules.web.clientproject.api</friend>
134
                <friend>org.netbeans.modules.web.inspect</friend>
135
                <friend>org.netbeans.modules.web.inspect</friend>

Return to bug 219542