Lines 49-54
Link Here
|
49 |
import java.io.*; |
49 |
import java.io.*; |
50 |
import java.lang.ref.Reference; |
50 |
import java.lang.ref.Reference; |
51 |
import java.lang.ref.WeakReference; |
51 |
import java.lang.ref.WeakReference; |
|
|
52 |
import java.net.MalformedURLException; |
53 |
import java.net.URL; |
52 |
import java.util.*; |
54 |
import java.util.*; |
53 |
import java.util.ArrayList; |
55 |
import java.util.ArrayList; |
54 |
import java.util.concurrent.CopyOnWriteArrayList; |
56 |
import java.util.concurrent.CopyOnWriteArrayList; |
Lines 149-160
Link Here
|
149 |
import org.netbeans.modules.j2ee.deployment.devmodules.api.InstanceRemovedException; |
151 |
import org.netbeans.modules.j2ee.deployment.devmodules.api.InstanceRemovedException; |
150 |
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule.Type; |
152 |
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule.Type; |
151 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.ArtifactListener; |
153 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.ArtifactListener; |
|
|
154 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider.ConfigSupport.DeployOnSaveListener; |
152 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider.DeployOnSaveSupport; |
155 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider.DeployOnSaveSupport; |
153 |
import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel; |
156 |
import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel; |
154 |
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarFactory; |
157 |
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarFactory; |
155 |
import org.netbeans.modules.j2ee.spi.ejbjar.support.EjbJarSupport; |
158 |
import org.netbeans.modules.j2ee.spi.ejbjar.support.EjbJarSupport; |
156 |
import org.netbeans.modules.java.api.common.project.ProjectProperties; |
159 |
import org.netbeans.modules.java.api.common.project.ProjectProperties; |
157 |
import org.netbeans.modules.web.api.webmodule.WebProjectConstants; |
160 |
import org.netbeans.modules.web.api.webmodule.WebProjectConstants; |
|
|
161 |
import org.netbeans.modules.web.browser.api.BrowserSupport; |
162 |
import org.netbeans.modules.web.browser.spi.PageInspectorCustomizer; |
163 |
import org.netbeans.modules.web.clientproject.spi.URLDisplayerImplementation; |
164 |
import org.netbeans.modules.web.common.api.WebUtils; |
165 |
import org.netbeans.modules.web.common.spi.ServerURLMappingImplementation; |
158 |
import org.netbeans.modules.web.project.api.WebProjectUtilities; |
166 |
import org.netbeans.modules.web.project.api.WebProjectUtilities; |
159 |
import org.netbeans.modules.web.project.classpath.ClassPathSupportCallbackImpl; |
167 |
import org.netbeans.modules.web.project.classpath.ClassPathSupportCallbackImpl; |
160 |
import org.netbeans.modules.web.project.classpath.DelagatingProjectClassPathModifierImpl; |
168 |
import org.netbeans.modules.web.project.classpath.DelagatingProjectClassPathModifierImpl; |
Lines 177-183
Link Here
|
177 |
import org.netbeans.spi.project.support.ant.PropertyUtils; |
185 |
import org.netbeans.spi.project.support.ant.PropertyUtils; |
178 |
import org.netbeans.spi.queries.FileEncodingQueryImplementation; |
186 |
import org.netbeans.spi.queries.FileEncodingQueryImplementation; |
179 |
import org.openide.filesystems.FileLock; |
187 |
import org.openide.filesystems.FileLock; |
180 |
import org.openide.filesystems.FileSystem; |
|
|
181 |
import org.openide.filesystems.FileSystem.AtomicAction; |
188 |
import org.openide.filesystems.FileSystem.AtomicAction; |
182 |
import org.openide.loaders.DataObject; |
189 |
import org.openide.loaders.DataObject; |
183 |
import org.openide.util.Exceptions; |
190 |
import org.openide.util.Exceptions; |
Lines 600-606
Link Here
|
600 |
ExtraSourceJavadocSupport.createExtraJavadocQueryImplementation(this, helper, eval), |
607 |
ExtraSourceJavadocSupport.createExtraJavadocQueryImplementation(this, helper, eval), |
601 |
LookupMergerSupport.createJFBLookupMerger(), |
608 |
LookupMergerSupport.createJFBLookupMerger(), |
602 |
QuerySupport.createBinaryForSourceQueryImplementation(sourceRoots, testRoots, helper, eval), |
609 |
QuerySupport.createBinaryForSourceQueryImplementation(sourceRoots, testRoots, helper, eval), |
603 |
new ProjectWebRootProviderImpl() |
610 |
new ProjectWebRootProviderImpl(), |
|
|
611 |
new ClientSideDevelopmentSupport(), |
604 |
}); |
612 |
}); |
605 |
|
613 |
|
606 |
Lookup ee6 = Lookups.fixed(new Object[]{ |
614 |
Lookup ee6 = Lookups.fixed(new Object[]{ |
Lines 1506-1512
Link Here
|
1506 |
* Class should not request project lock from FS listener methods |
1514 |
* Class should not request project lock from FS listener methods |
1507 |
* (deadlock prone). |
1515 |
* (deadlock prone). |
1508 |
*/ |
1516 |
*/ |
1509 |
private class CopyOnSaveSupport extends FileChangeAdapter implements PropertyChangeListener { |
1517 |
private class CopyOnSaveSupport extends FileChangeAdapter implements PropertyChangeListener, DeployOnSaveListener { |
1510 |
|
1518 |
|
1511 |
private FileObject docBase = null; |
1519 |
private FileObject docBase = null; |
1512 |
|
1520 |
|
Lines 1556-1591
Link Here
|
1556 |
resources = getWebModule().getResourceDirectory(); |
1564 |
resources = getWebModule().getResourceDirectory(); |
1557 |
buildWeb = evaluator().getProperty(WebProjectProperties.BUILD_WEB_DIR); |
1565 |
buildWeb = evaluator().getProperty(WebProjectProperties.BUILD_WEB_DIR); |
1558 |
|
1566 |
|
1559 |
FileSystem docBaseFileSystem = null; |
|
|
1560 |
if (docBase != null) { |
1567 |
if (docBase != null) { |
1561 |
docBaseFileSystem = docBase.getFileSystem(); |
1568 |
docBase.addRecursiveListener(this); |
1562 |
docBaseFileSystem.addFileChangeListener(this); |
|
|
1563 |
} |
1569 |
} |
1564 |
|
1570 |
|
1565 |
if (webInf != null) { |
1571 |
if (webInf != null && !FileUtil.isParentOf(docBase, webInf)) { |
1566 |
if (!webInf.getFileSystem().equals(docBaseFileSystem)) { |
1572 |
webInf.addRecursiveListener(this); |
1567 |
webInf.getFileSystem().addFileChangeListener(this); |
|
|
1568 |
} |
1569 |
} |
1573 |
} |
1570 |
|
1574 |
|
1571 |
if (resources != null) { |
1575 |
if (resources != null) { |
1572 |
FileUtil.addFileChangeListener(this, resources); |
1576 |
FileUtil.addFileChangeListener(this, resources); |
1573 |
} |
1577 |
} |
1574 |
|
1578 |
|
|
|
1579 |
// Add deployed resources notification listener |
1580 |
if (isEaselEnable()) { |
1581 |
webModule.getConfigSupport().addDeployOnSaveListener(this); |
1582 |
} |
1583 |
|
1575 |
LOGGER.log(Level.FINE, "Web directory is {0}", docBaseValue); |
1584 |
LOGGER.log(Level.FINE, "Web directory is {0}", docBaseValue); |
1576 |
LOGGER.log(Level.FINE, "WEB-INF directory is {0}", webInfValue); |
1585 |
LOGGER.log(Level.FINE, "WEB-INF directory is {0}", webInfValue); |
1577 |
} |
1586 |
} |
1578 |
|
1587 |
|
1579 |
public void cleanup() throws FileStateInvalidException { |
1588 |
public void cleanup() throws FileStateInvalidException { |
1580 |
FileSystem docBaseFileSystem = null; |
|
|
1581 |
if (docBase != null) { |
1589 |
if (docBase != null) { |
1582 |
docBaseFileSystem = docBase.getFileSystem(); |
1590 |
docBase.removeRecursiveListener(this); |
1583 |
docBaseFileSystem.removeFileChangeListener(this); |
|
|
1584 |
} |
1591 |
} |
1585 |
if (webInf != null) { |
1592 |
if (webInf != null && !FileUtil.isParentOf(docBase, webInf)) { |
1586 |
if (!webInf.getFileSystem().equals(docBaseFileSystem)) { |
1593 |
webInf.removeRecursiveListener(this); |
1587 |
webInf.getFileSystem().removeFileChangeListener(this); |
|
|
1588 |
} |
1589 |
} |
1594 |
} |
1590 |
if (resources != null) { |
1595 |
if (resources != null) { |
1591 |
FileUtil.removeFileChangeListener(this, resources); |
1596 |
FileUtil.removeFileChangeListener(this, resources); |
Lines 1593-1598
Link Here
|
1593 |
} |
1598 |
} |
1594 |
|
1599 |
|
1595 |
WebProject.this.evaluator().removePropertyChangeListener(this); |
1600 |
WebProject.this.evaluator().removePropertyChangeListener(this); |
|
|
1601 |
|
1602 |
if (isEaselEnable()) { |
1603 |
webModule.getConfigSupport().removeDeployOnSaveListener(this); |
1604 |
} |
1596 |
} |
1605 |
} |
1597 |
|
1606 |
|
1598 |
public void propertyChange(PropertyChangeEvent evt) { |
1607 |
public void propertyChange(PropertyChangeEvent evt) { |
Lines 1902-1907
Link Here
|
1902 |
assert current != null : "webBuildBase: " + webBuildBase + ", path: " + path + ", isFolder: " + isFolder; |
1911 |
assert current != null : "webBuildBase: " + webBuildBase + ", path: " + path + ", isFolder: " + isFolder; |
1903 |
return current; |
1912 |
return current; |
1904 |
} |
1913 |
} |
|
|
1914 |
|
1915 |
public void deployed(Iterable<Artifact> artifacts) { |
1916 |
for (Artifact artifact : artifacts) { |
1917 |
FileObject fileObject = getReloadFileObject(artifact); |
1918 |
if (fileObject != null) { |
1919 |
reload(fileObject); |
1920 |
} |
1921 |
} |
1922 |
} |
1923 |
|
1924 |
private void reload(FileObject fo) { |
1925 |
URL u = getBrowserSupport().getBrowserURL(fo, true); |
1926 |
if (u != null) { |
1927 |
assert getBrowserSupport().canReload(u) : u; |
1928 |
getBrowserSupport().reload(u); |
1929 |
} |
1930 |
} |
1931 |
|
1932 |
private FileObject getReloadFileObject(Artifact artifact) { |
1933 |
File file = artifact.getFile(); |
1934 |
FileObject fileObject = FileUtil.toFileObject(FileUtil.normalizeFile(file)); |
1935 |
if (fileObject == null) { |
1936 |
return null; |
1937 |
} |
1938 |
return getWebDocFileObject(fileObject); |
1939 |
} |
1940 |
|
1941 |
private FileObject getWebDocFileObject(FileObject artifact) { |
1942 |
FileObject webBuildBase = buildWeb == null ? null : helper.resolveFileObject(buildWeb); |
1943 |
if (docBase != null && webBuildBase != null) { |
1944 |
if (!FileUtil.isParentOf(webBuildBase, artifact)) { |
1945 |
return null; |
1946 |
} else { |
1947 |
String path = FileUtil.getRelativePath(webBuildBase, artifact); |
1948 |
return docBase.getFileObject(path); |
1949 |
} |
1950 |
} else { |
1951 |
return null; |
1952 |
} |
1953 |
} |
1954 |
} |
1955 |
|
1956 |
private BrowserSupport getBrowserSupport() { |
1957 |
return BrowserSupport.getDefault(); |
1958 |
} |
1959 |
|
1960 |
public static boolean isEaselEnable() { |
1961 |
return Boolean.getBoolean("easel.everywhere"); |
1905 |
} |
1962 |
} |
1906 |
|
1963 |
|
1907 |
private class ArtifactCopySupport extends ArtifactCopyOnSaveSupport { |
1964 |
private class ArtifactCopySupport extends ArtifactCopyOnSaveSupport { |
Lines 2290-2293
Link Here
|
2290 |
|
2347 |
|
2291 |
} |
2348 |
} |
2292 |
|
2349 |
|
|
|
2350 |
private class ClientSideDevelopmentSupport implements ServerURLMappingImplementation, |
2351 |
URLDisplayerImplementation, PageInspectorCustomizer { |
2352 |
|
2353 |
private String projectRootURL = null; |
2354 |
private FileObject webDocumentRoot; |
2355 |
private boolean initialized = false; |
2356 |
|
2357 |
public ClientSideDevelopmentSupport() { |
2358 |
} |
2359 |
|
2360 |
@Override |
2361 |
public void showURL(URL applicationRootURL, URL urlToOpenInBrowser, FileObject context) { |
2362 |
projectRootURL = WebUtils.urlToString(applicationRootURL); |
2363 |
if (projectRootURL != null && !projectRootURL.endsWith("/")) { |
2364 |
projectRootURL += "/"; |
2365 |
} |
2366 |
getBrowserSupport().load(urlToOpenInBrowser, context); |
2367 |
} |
2368 |
|
2369 |
@Override |
2370 |
public URL toServer(int projectContext, FileObject projectFile) { |
2371 |
init(); |
2372 |
if (projectRootURL == null || webDocumentRoot == null) { |
2373 |
return null; |
2374 |
} |
2375 |
String relPath = FileUtil.getRelativePath(webDocumentRoot, projectFile); |
2376 |
try { |
2377 |
return new URL(projectRootURL + relPath); |
2378 |
} catch (MalformedURLException ex) { |
2379 |
Exceptions.printStackTrace(ex); |
2380 |
return null; |
2381 |
} |
2382 |
} |
2383 |
|
2384 |
@Override |
2385 |
public FileObject fromServer(int projectContext, URL serverURL) { |
2386 |
init(); |
2387 |
if (projectRootURL == null || webDocumentRoot == null) { |
2388 |
return null; |
2389 |
} |
2390 |
String u = WebUtils.urlToString(serverURL); |
2391 |
if (u.startsWith(projectRootURL)) { |
2392 |
return webDocumentRoot.getFileObject(u.substring(projectRootURL.length())); |
2393 |
} |
2394 |
return null; |
2395 |
} |
2396 |
|
2397 |
private FileObject getWebRoot() { |
2398 |
WebModule webModule = WebModule.getWebModule(getProjectDirectory()); |
2399 |
return webModule != null ? webModule.getDocumentBase() : null; |
2400 |
} |
2401 |
|
2402 |
private void init() { |
2403 |
if (initialized) { |
2404 |
return; |
2405 |
} |
2406 |
webDocumentRoot = getWebRoot(); |
2407 |
initialized = true; |
2408 |
} |
2409 |
|
2410 |
@Override |
2411 |
public boolean isHighlightSelectionEnabled() { |
2412 |
return true; |
2413 |
} |
2414 |
|
2415 |
@Override |
2416 |
public void addPropertyChangeListener(PropertyChangeListener l) { |
2417 |
} |
2418 |
|
2419 |
@Override |
2420 |
public void removePropertyChangeListener(PropertyChangeListener l) { |
2421 |
} |
2422 |
|
2423 |
} |
2424 |
|
2293 |
} |
2425 |
} |