From the core team status meeting and email threads on this topic, we've agreed to the following steps and changes:
1) prune unnecessary/unused classes from the framework (see work related to ICE-5787)
2) re-organize classes so that
- public APIs are under org.icefaces.application which matches how JSF does it
- non-public APIS are under org.icefaces.impl
Initial re-packaging analysis:
Good package, looking at renaming to ResourceRegistry. We have multiple paths of resource handling so we should rationalize this to a single path if possible.
org/icefaces/application/DynamicResourceRegistry$Locator.class
org/icefaces/application/DynamicResourceRegistry.class
Move to org.icefaces.impl.* as an initial step. Replaced by the EnvUtils/EnvConfig classes and removed eventually
org/icefaces/application/ExternalContextConfiguration.class
Move to org.icefaces.impl.*
org/icefaces/application/LazyPushManager$1.class
org/icefaces/application/LazyPushManager$State.class
org/icefaces/application/LazyPushManager.class
Good package:
org/icefaces/application/PortableRenderer.class
org/icefaces/application/ProductInfo.class
org/icefaces/application/PushRenderer$1.class
org/icefaces/application/PushRenderer$2.class
org/icefaces/application/PushRenderer.class
Good package. We have multiple paths of resource handling so we should rationalize this to a single path if possible.
org/icefaces/application/ResourceRegistry.class
org/icefaces/application/ResourceRegistryHolder.class
Move to impl (application use of WindowScopeManager?):
org/icefaces/application/WindowELResolver.class
org/icefaces/application/WindowScopeManager$1.class
org/icefaces/application/WindowScopeManager$ReadyObservable.class
org/icefaces/application/WindowScopeManager$ScopeMap.class
org/icefaces/application/WindowScopeManager$State.class
org/icefaces/application/WindowScopeManager.class
Move to impl.
org/icefaces/context/BasicResponseWriter.class
org/icefaces/context/DOMPartialRenderCallback.class
org/icefaces/context/DOMPartialViewContext$1.class
org/icefaces/context/DOMPartialViewContext$2.class
org/icefaces/context/DOMPartialViewContext$3.class
org/icefaces/context/DOMPartialViewContext.class
org/icefaces/context/DOMPartialViewContextFactory.class
org/icefaces/context/DOMResponseWriter.class
Move to impl. The event package is not my favourite name here as most of these are listeners and we're not really emitting any events but that's just minor semantics. We do need to go through and rationalize/factor/measure/optimize this list at some point as there's likely some common things being done. This is covered in ICE-5737.
org/icefaces/event/AjaxDisabledList.class
org/icefaces/event/AjaxDisabledWriter.class
org/icefaces/event/BridgeSetup$1.class
org/icefaces/event/BridgeSetup$2.class
org/icefaces/event/BridgeSetup$3.class
org/icefaces/event/BridgeSetup$4.class
org/icefaces/event/BridgeSetup$JavascriptResourceOutput.class
org/icefaces/event/BridgeSetup.class
org/icefaces/event/DebugTagListener.class
org/icefaces/event/DeltaSubmitPhaseListener$DeltaActionPortletRequest.class
org/icefaces/event/DeltaSubmitPhaseListener$DeltaHttpServletRequest.class
org/icefaces/event/DeltaSubmitPhaseListener.class
org/icefaces/event/FormSubmit$1.class
org/icefaces/event/FormSubmit.class
org/icefaces/event/HeadBodyListener.class
org/icefaces/event/JSFViewStateNavigationFix$1.class
org/icefaces/event/JSFViewStateNavigationFix.class
org/icefaces/event/MainEventListener.class
org/icefaces/event/ScriptWriter.class
org/icefaces/event/UIOutputWriter.class
org/icefaces/event/WindowAndViewIDSetup$1.class
org/icefaces/event/WindowAndViewIDSetup.class
org/icefaces/event/WindowScopeSetup.class
Move to impl for now. This class is a workaround for a problem with JSF standard messages renderer and should be removed when a fix is available.
org/icefaces/faces/renderkit/html_basic/MessagesRenderer.class
Move to impl for now. All configuration related changes should be ported to use EnvUtils where appropriate.
org/icefaces/push/Configuration.class
org/icefaces/push/ConfigurationException.class
Move to impl for now. Many of these classes likely not necessary as they were used in ICEfaces 1.8 to virtualize Request/Response artifacts when doing Ajax Push. Now that Push has been re-designed, the virtualization is no longer necessary (see ICE-5787).
org/icefaces/push/CurrentContext.class
org/icefaces/push/DisposeWindowScope.class
org/icefaces/push/DynamicResourceDispatcher$1.class
org/icefaces/push/DynamicResourceDispatcher$ExtendedResourceOptions.class
org/icefaces/push/DynamicResourceDispatcher$FileNameOption.class
org/icefaces/push/DynamicResourceDispatcher$Mapping.class
org/icefaces/push/DynamicResourceDispatcher$RelativeResourceLinker.class
org/icefaces/push/DynamicResourceDispatcher$ResourceServer$1.class
org/icefaces/push/DynamicResourceDispatcher$ResourceServer$ResourceOptions.class
org/icefaces/push/DynamicResourceDispatcher$ResourceServer.class
org/icefaces/push/DynamicResourceDispatcher.class
org/icefaces/push/SessionBoundServer$1.class
org/icefaces/push/SessionBoundServer$2.class
org/icefaces/push/SessionBoundServer.class
org/icefaces/push/SessionViewManager$1.class
org/icefaces/push/SessionViewManager$State.class
org/icefaces/push/SessionViewManager.class
org/icefaces/push/http/AbstractServer.class
org/icefaces/push/http/DynamicResource$Options.class
org/icefaces/push/http/DynamicResource.class
org/icefaces/push/http/DynamicResourceLinker$Handler.class
org/icefaces/push/http/DynamicResourceLinker.class
org/icefaces/push/http/MimeTypeMatcher.class
org/icefaces/push/http/Request$Environment.class
org/icefaces/push/http/Request.class
org/icefaces/push/http/RequestProxy.class
org/icefaces/push/http/Response.class
org/icefaces/push/http/ResponseHandler.class
org/icefaces/push/http/ResponseProxy.class
org/icefaces/push/http/Server.class
org/icefaces/push/http/ServerProxy.class
org/icefaces/push/http/standard/CacheControlledServer$EnhancedRequest$1.class
org/icefaces/push/http/standard/CacheControlledServer$EnhancedRequest.class
org/icefaces/push/http/standard/CacheControlledServer.class
org/icefaces/push/http/standard/CompressingServer$CompressingRequest$1.class
org/icefaces/push/http/standard/CompressingServer$CompressingRequest.class
org/icefaces/push/http/standard/CompressingServer$CompressingResponse.class
org/icefaces/push/http/standard/CompressingServer.class
org/icefaces/push/http/standard/EmptyResponse$1.class
org/icefaces/push/http/standard/EmptyResponse.class
org/icefaces/push/http/standard/FixedSizeContentHandler.class
org/icefaces/push/http/standard/FixedXMLContentHandler.class
org/icefaces/push/http/standard/NoCacheContentHandler.class
org/icefaces/push/http/standard/NotFoundHandler.class
org/icefaces/push/http/standard/NotModifiedHandler.class
org/icefaces/push/http/standard/OKHandler.class
org/icefaces/push/http/standard/OKResponse.class
org/icefaces/push/http/standard/PathDispatcherServer.class
org/icefaces/push/http/standard/ResponseHandlerServer.class
org/icefaces/push/http/standard/StreamingContentHandler.class
org/icefaces/push/http/standard/StringContentHandler.class
org/icefaces/push/servlet/BasicAdaptingServlet.class
org/icefaces/push/servlet/ICEfacesResourceHandler$1.class
org/icefaces/push/servlet/ICEfacesResourceHandler$2.class
org/icefaces/push/servlet/ICEfacesResourceHandler.class
org/icefaces/push/servlet/ICEpushResourceHandler.class
org/icefaces/push/servlet/PathDispatcher.class
org/icefaces/push/servlet/ProxyHttpSession.class
org/icefaces/push/servlet/PseudoServlet.class
org/icefaces/push/servlet/ServletContextConfiguration.class
org/icefaces/push/servlet/ServletEnvironmentListener.class
org/icefaces/push/servlet/ServletRequestResponse.class
org/icefaces/push/servlet/SessionDispatcher$1.class
org/icefaces/push/servlet/SessionDispatcher$Monitor.class
org/icefaces/push/servlet/SessionDispatcher.class
org/icefaces/push/servlet/SessionExpiredException.class
Move to impl. Consider mirroring Sun's package structure when we implement stuff like this (com.sun.faces.renderkit = org.icefaces.renderkit).
org/icefaces/render/DOMRenderKit.class
Move to impl.
org/icefaces/util/Base64.class
org/icefaces/util/CoreUtils.class
org/icefaces/util/DOMUtils.class
org/icefaces/util/EnvConfig.class
Good package:
org/icefaces/util/EnvUtils.class
Packaging review can be discussed within this JIRA. For instance org/icefaces/push/Configuration.java is not specific to push and is not an application-developer class. Since we do not have the java.lang.* and com.sun.* separation common to Java (all classes for ICEfaces 2.0 belong to org.icefaces) we may wish to create org.icefaces.impl.* to indicate classes that are not of interest to application developers. Other strategies from existing open source projects should be included here.