# HG changeset patch # User Eugene Ostroukhov # Date 1264553592 28800 # Node ID df12256c6ad0f791a52f4a0323b60a08a4924eac # Parent 206295ed5a0d8a90eead6ce6646bc95984212250 Several bugs were fixed diff -r 206295ed5a0d -r df12256c6ad0 org.symbian.tools.wrttools.feature/compile.org.symbian.tools.wrttools.xml --- a/org.symbian.tools.wrttools.feature/compile.org.symbian.tools.wrttools.xml Tue Jan 26 13:27:13 2010 -0800 +++ b/org.symbian.tools.wrttools.feature/compile.org.symbian.tools.wrttools.xml Tue Jan 26 16:53:12 2010 -0800 @@ -1,10 +1,9 @@ - - - - - + + + + diff -r 206295ed5a0d -r df12256c6ad0 org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/http/WorkspaceResourcesServlet.java --- a/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/http/WorkspaceResourcesServlet.java Tue Jan 26 13:27:13 2010 -0800 +++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/http/WorkspaceResourcesServlet.java Tue Jan 26 16:53:12 2010 -0800 @@ -71,7 +71,6 @@ if (contents != null) { copyData(contents, resp.getOutputStream()); } else { - System.err.println(path); resp.setStatus(HttpServletResponse.SC_NOT_FOUND); } } catch (CoreException e) { diff -r 206295ed5a0d -r df12256c6ad0 org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/preview/PreviewPage.java --- a/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/preview/PreviewPage.java Tue Jan 26 13:27:13 2010 -0800 +++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/preview/PreviewPage.java Tue Jan 26 16:53:12 2010 -0800 @@ -217,7 +217,6 @@ } private void applyProxySettings() { - IProxyService px = PreviewerPlugin.getDefault().getProxyService(); if(px != null){ boolean proxyEnabled = px.isProxiesEnabled(); diff -r 206295ed5a0d -r df12256c6ad0 org.symbian.tools.wrttools/plugin.xml --- a/org.symbian.tools.wrttools/plugin.xml Tue Jan 26 13:27:13 2010 -0800 +++ b/org.symbian.tools.wrttools/plugin.xml Tue Jan 26 16:53:12 2010 -0800 @@ -128,30 +128,35 @@ - + - - - - + + + + + + + + + - + id="org.eclipse.wst.jsdt.ui.navigator.actions.StandardActions"> + { + private IResource getCommonAncestor(IResource r1, IResource r2) { + if (r1 == null) { + return r2; + } + if (r2 == null) { + return null; + } + if (r1.equals(r2)) { + return r1; + } + IPath p1 = r1.getFullPath(); + IPath p2 = r2.getFullPath(); + int l1 = p1.segmentCount(); + int l2 = p2.segmentCount(); + + if (l1 == 0 || l2 == 0) { + return null; + } + int l = Math.min(l1, l2); + do { + p1 = p1.uptoSegment(l); + p2 = p2.uptoSegment(l); + l = l - 1; + } while (l > 0 && (p1 != p2)); + IWorkspaceRoot r = r1.getWorkspace().getRoot(); + return l == 0 ? null : l == 1 ? r.getProject(p1.lastSegment()) : r + .getFolder(p1); + } + + @Override + public boolean visit(IResourceDelta delta) throws CoreException { + if ((delta.getKind() & (IResourceDelta.ADDED | IResourceDelta.REMOVED)) != 0) { + resource = getCommonAncestor(resource, delta.getResource() + .getParent()); + return false; + } + return true; + } + } + + private static final class TreeElementsComparator implements + Comparator { @Override public int compare(Object o1, Object o2) { IResource res1 = getResource(o1); @@ -33,10 +86,10 @@ } else if (o2 == null) { return 1; } - + boolean isFolder1 = isFolder(res1); boolean isFolder2 = isFolder(res2); - + if (isFolder1 == isFolder2) { return res1.getName().compareTo(res2.getName()); } else if (isFolder1) { @@ -46,37 +99,52 @@ } } - private boolean isFolder(IResource res1) { - return res1.getType() == IResource.FOLDER || res1.getType() == IResource.PROJECT; - } - private IResource getResource(Object o1) { final IResource result; if (o1 instanceof IResource) { result = (IResource) o1; } else if (o1 instanceof IAdaptable) { - result = (IResource) ((IAdaptable) o1).getAdapter(IResource.class); + result = (IResource) ((IAdaptable) o1) + .getAdapter(IResource.class); } else { result = null; } return result; } + + private boolean isFolder(IResource res1) { + return res1.getType() == IResource.FOLDER + || res1.getType() == IResource.PROJECT; + } } - - + + private IResourceChangeListener listener = new IResourceChangeListener() { + @Override + public void resourceChanged(IResourceChangeEvent event) { + RootResourceFinder visitor = new RootResourceFinder(); + try { + event.getDelta().accept(visitor); + } catch (CoreException e) { + Activator.log(e); + refreshViewer(null); + } + refreshViewer(visitor.resource); + } + }; + private Viewer viewer; + @Override - protected Object[] getPackageFragmentRoots(IJavaScriptProject project) - throws JavaScriptModelException { - try { - return filter(project.getProject().members()); - } catch (CoreException e) { - Activator.log(e); + public void dispose() { + if (viewer != null) { + ResourcesPlugin.getWorkspace().removeResourceChangeListener( + listener); } - return new Object[0]; + super.dispose(); } - + private Object[] filter(IResource[] members) { - TreeSet output = new TreeSet(new TreeElementsComparator()); + TreeSet output = new TreeSet( + new TreeElementsComparator()); for (int i = 0; i < members.length; i++) { IResource resource = members[i]; Object res = resource; @@ -95,7 +163,49 @@ protected Object[] getFolderContent(IFolder folder) throws CoreException { return filter(folder.members()); } - + + @Override + protected Object[] getPackageFragmentRoots(IJavaScriptProject project) + throws JavaScriptModelException { + try { + return filter(project.getProject().members()); + } catch (CoreException e) { + Activator.log(e); + } + return new Object[0]; + } + + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + if (this.viewer == null) { + ResourcesPlugin.getWorkspace().addResourceChangeListener(listener); + } + this.viewer = viewer; + super.inputChanged(viewer, oldInput, newInput); + } + // + // @SuppressWarnings("unchecked") + // @Override + // protected void postAdd(final Object parent, final Object element, + // Collection runnables) { + // final Object p; + // if (element instanceof IProject) { + // p = null; + // } else { + // p = parent; + // } + // runnables.add(new Runnable() { + // @Override + // public void run() { + // if (p != null) { + // ((TreeViewer) viewer).refresh(p); + // } else { + // ((TreeViewer) viewer).refresh(); + // } + // } + // }); + // } + @Override protected void postAdd(Object parent, Object element, Collection runnables) { if (parent instanceof IWorkspace) { @@ -107,31 +217,13 @@ super.postAdd(parent, element, runnables); } } - -// @Override -// public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { -// this.viewer = viewer; -// super.inputChanged(viewer, oldInput, newInput); -// } -// -// @SuppressWarnings("unchecked") -// @Override -// protected void postAdd(final Object parent, final Object element, Collection runnables) { -// final Object p; -// if (element instanceof IProject) { -// p = null; -// } else { -// p = parent; -// } -// runnables.add(new Runnable() { -// @Override -// public void run() { -// if (p != null) { -// ((TreeViewer) viewer).refresh(p); -// } else { -// ((TreeViewer) viewer).refresh(); -// } -// } -// }); -// } + + protected void refreshViewer(final IResource resource) { + viewer.getControl().getDisplay().asyncExec(new Runnable() { + @Override + public void run() { + ((TreeViewer) viewer).refresh(resource); + } + }); + } }