[ 
https://issues.apache.org/jira/browse/IVYDE-195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12754566#action_12754566
 ] 

Nicolas Lalevée commented on IVYDE-195:
---------------------------------------

I still don't have the images. You need to upload them manually, as images are 
not "diffable" and won't be included in a patch.

About the braces, for instance the SyncIvyFilesJob.java you provided is correct 
whereas IvyRevisionSync.java doesn't. It is not a big deal, I can format it 
before commiting.

I also got some error logged when launching "Show all projects in workspace", 
see the following stack trace:
{noformat}
Java Model Exception: Java Model Status [ivydetest-vfs does not exist]
        at 
org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:492)
        at 
org.eclipse.jdt.internal.core.JavaModelManager.getPerProjectInfoCheckExistence(JavaModelManager.java:2063)
        at 
org.eclipse.jdt.internal.core.JavaProject.getPerProjectInfo(JavaProject.java:1815)
        at 
org.eclipse.jdt.internal.core.JavaProject.getRawClasspath(JavaProject.java:1837)
        at 
org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil.getIvyClasspathContainers(IvyClasspathUtil.java:115)
        at 
org.apache.ivyde.eclipse.ui.core.IvyUtil.getIvyProjectsInWorkspace(IvyUtil.java:50)
        at 
org.apache.ivyde.eclipse.ui.core.IvyUtil.getAllDependencyDescriptorsInWorkspace(IvyUtil.java:125)
        at 
org.apache.ivyde.eclipse.ui.views.ReverseDependencyExplorerView$5.run(ReverseDependencyExplorerView.java:174)
        at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179)
        at 
org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
        at org.eclipse.swt.widgets.Display.syncExec(Display.java:3944)
        at 
org.apache.ivyde.eclipse.ui.views.ReverseDependencyExplorerView.refresh(ReverseDependencyExplorerView.java:170)
        at 
org.apache.ivyde.eclipse.ui.views.ReverseDependencyExplorerView$4.run(ReverseDependencyExplorerView.java:114)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
        at 
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
        at 
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
        at 
org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:452)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
        at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3542)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1270)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1255)
        at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1076)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3440)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3099)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
        at 
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at 
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at 
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
        at 
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:592)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1287)
{noformat}

I think that in IvyUtil#getIvyProjectsInWorkspace() you should first check that 
a project is opened before trying to get its classpath containers.

Then about exception catching, there is an IvyDEException in 
IvyRevisionSync#sync() which is catched but nothing is done with it. I think if 
something bad happened in the parsing of the module descriptor and then 
preventing to update it, the end user should we notified about it. Another 
alternative here is to use the cached version of the module descriptor, because 
it has already been parsed at least for the generation of the reverse 
dependency tree. So then just logging the exception would be sufficient. I 
don't know what is the best of the two solutions though.

Another no very handled exception is in IvyClasspathUtil#toIvyFile(). As far as 
I could remember, a Job shouldn't throw exceptions, because the end user won't 
see that a job has failed unless he looks in the logs. The returned IStatus 
should be used instead to notify the end user of the result of the job. So the 
best here should be I think to throw an IvyDEException and then in 
IvyRevisionSync#sync() catch that thrown IvyDEException accordingly. (hint: see 
the MultiStatus class)

And same note in IvyUtil#getDependencyDescriptorsByProjects(), the 
IvyDEException should be handled. In that case I think that the end user should 
be notified. See IvyDEException#show().

And another very important subject: the colors :) . Well, I just find the green 
and red color highlighting quite aggressive, don't you you too ?


> "Ivy Dependency Explorer" View for synchronizing revisions across multiple 
> projects in a workspace
> --------------------------------------------------------------------------------------------------
>
>                 Key: IVYDE-195
>                 URL: https://issues.apache.org/jira/browse/IVYDE-195
>             Project: IvyDE
>          Issue Type: New Feature
>            Reporter: Jon Schneider
>             Fix For: 2.1.0
>
>         Attachments: ivyde-195(2).patch, new-project-menu-item.jpg, 
> projects-represented-in-explorer.jpg, reverse-dependency-explorer-view.jpg
>
>
> When working with multiple projects in a workspace that represent the whole 
> or part of a larger application, I often want to bring the revisions of 
> dependencies up to a single new revision all at the same time 
> (notwithstanding the wonderful eviction mechanism inherent to Ivy).
> Other times it is instructive just to see what dependencies are being 
> utilized by projects in the workspace by revision without having to dig into 
> each project and look at each individual module descriptor.
> I am introducing the Ivy Dependency explorer that turns the tree upside-down, 
> exploring the workspace by organization, module, and revision and providing a 
> mechanism to synchronize revisions across projects/classpath containers.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to