Refactoring suggestions
Move the tree layout data into hibernate
All JPA Entities
Can I get rid of / make private the bean setter methods and still persist and serialize entities? It adds unnecessary code and opens up fields that clients don't need to set.
Remove accessors for JPA id fields, which the client should never really touch.
View is too big.
Remove setStyleMap(). Unused and ugly.
Remove convenience methods (getTree(), getLayout()).
Make render() private or protected.
dispatch() just wraps eventBus.fireEventFromSource with a null check.
Subclasses must provide a camera. Add it to the constructor and remove setCamera();
Check if all of the zoom methods are really necessary.
Pull the general event-related stuff up into a superclass?
DetailView is too big
move the handleMouseX(Hit, int, int) and this.addMouseXHandler handlers into an InteractionMode
Simplify DetailView mouse handler changes.
just return the list of registrations from addMouseHandler and addKeyboardHandler, combine them and keep one list of registrations to unregister when changing interaction mode
Refactor the event broadcast and dispatch stuff into another class
All of the highlight methods seem unnecessary. Just have the caller set the highlights on the RenderPreferences.
OverviewView
Add InteractionModes to handle mouse and keyboard?
ViewCircular class seems unnecessary. It's just a few default settings on a DetailView. Make a factory method somewhere.
CanvasGraphics.clearDrawnTextExtents() shouldn't be necessary
Revisit why I did all of the NodeSelectionHandlers in views that just refire events with a different source. If not removing altogether, at least move this to a separate class.
SelectionAreaChangeEvent and its handler don't appear to be used anymore
Combine all of the XClickEvents and XClickHandlers into two classes with maybe an enum for the element being clicked. (see TreeItemEvent class hierarchy)
Change the client services to take a String tree id or root id, instead of a byte[], and then get rid of client Hex class.
Phyloviewer.java
.onModuleLoad() is a monster. refactor this.
style fetching and updating is messy. refactor.
TreeWidget
Constructor shouldn't need to take a SearchServiceAsyncImpl and TreeWidget probably shouldn't need a highlighter field anyway. Handle highlighting on the event bus and leave TreeWidget a little cleaner.
Replace render() calls with RenderEvents? Remove render() from TreeWidget?
Look for a way to get exportImageURL out of it, to avoid calling TreeWidget.exportImageURL() -> ViewCladogram.exportImageURL() -> DetailView.exportImageURL()
remove getView(). Did most of the minor refactorings already, but need a test to make sure that SVG works before changing that call
Are interfaces like HasNodeSelectionHandlers necessary?
Just getEventBus() and addHandlerToSource()
RemoteTree
move RemoteNode.reindex() to RemoteTree
remove RemoteTree(String name) constructor
Remove serialization version IDs, add @Supress annotation.
Revisit why I'm using Serializable instead of isSerializable. Think it was just to make some things not depend on GWT. Allows us to pull out persistent model classes into a project that doesn't depend on gwt.
Constructors, in general: Remove the extra-sugary ones that just set fields. Just use the no-arg constructor and then setters. But keep copy constructors.
NodeTopology
Seems like getRootNode() is not being used. Don't remember why I needed this.
NodeTopology should have a reference to the node it's describing but, if I remember right, this caused persistence or serialization problems
SearchServiceAsyncImpl
Use eventbus instead of the observer pattern
SearchHighlighter
redo with better use of eventbus
Don't hold references to View and SearchService and ITree, and don't use their setXHandler methods, just add listeners to their event buses directly for search . (and send RenderEvents to the view)
At the very least, get the tree from the view's document instead of setting it. that's just plain dumb.
RenderPreferences
Shouldn't the views, etc, listen for changes on the RenderPreferences? or renderpreferences fire a render event?
Does everyone really need a reference to the RenderPreferences? what about just handling those changes with events?
Move LayoutResponse to its own file, or at least into ILayoutData
org.iplantc.phyloviewer.viewer.server.RenderTree just scales an image. browsers can already do this. Can we get GWT to do the scaling in the way that we need it to, consistently across browsers?
deprecate or remove StyleProxy?
Get the JPA out of SearchServiceImpl. Add a method to ITreeData to find nodes by label
TreeIntersectService returns a json string instead of just using the RPC to return an object... Lame.
Add a method to return a Hit or something.
remove all of org.iplantc.phyloviewer.client.math, plus JsHit.java and JsHitResult.java, any other classes used to parse the json response
IntersectTreeServiceImpl: shouldn't the ILayoutData access interface do the databasey stuff for this service?
Break the org.iplantc.phyloviewer.shared.model.metadata package out into a separate project?