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?