Move remote logging into RF subclasses

Review by: rjrjr@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8769 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml
index fd154c7..d7f348c 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml
@@ -25,7 +25,7 @@
   <set-property name="gwt.logging.enabled" value="TRUE"/> 
   <set-property name="gwt.logging.logLevel" value="INFO"/>
   <set-property name="gwt.logging.consoleHandler" value="ENABLED" />
-  <set-property name="gwt.logging.developmentModeHandler" value="DISABLED" />
+  <set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />
   <set-property name="gwt.logging.firebugHandler" value="ENABLED" />
   <set-property name="gwt.logging.hasWidgetsHandler" value="DISABLED" />
   <set-property name="gwt.logging.popupHandler" value="DISABLED" />
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java
index 37350c0..b8368a5 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java
@@ -20,6 +20,8 @@
 import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.event.shared.SimpleEventBus;
+import com.google.gwt.requestfactory.client.RequestFactoryLogHandler;
+import com.google.gwt.requestfactory.shared.LoggingRequest;
 import com.google.gwt.sample.dynatablerf.client.widgets.DayFilterWidget;
 import com.google.gwt.sample.dynatablerf.client.widgets.FavoritesWidget;
 import com.google.gwt.sample.dynatablerf.client.widgets.SummaryWidget;
@@ -62,8 +64,22 @@
       }
     });
 
-    DynaTableRequestFactory requests = GWT.create(DynaTableRequestFactory.class);
+    final DynaTableRequestFactory requests = 
+      GWT.create(DynaTableRequestFactory.class);
     requests.init(eventBus);
+    
+    // Add remote logging handler
+    RequestFactoryLogHandler.LoggingRequestProvider provider =
+      new RequestFactoryLogHandler.LoggingRequestProvider() {
+        @Override
+        public LoggingRequest getLoggingRequest() {
+          return requests.loggingRequest();
+        }
+      };
+    Logger.getLogger("").addHandler(
+        new RequestFactoryLogHandler(provider, Level.WARNING,
+            "WireActivityLogger"));
+    
     FavoritesManager manager = new FavoritesManager();
     PersonEditorWorkflow.register(eventBus, requests, manager);
 
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
index ddbb5ce..abbb7a0 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
@@ -16,6 +16,7 @@
 package com.google.gwt.sample.dynatablerf.shared;
 
 import com.google.gwt.requestfactory.shared.Instance;
+import com.google.gwt.requestfactory.shared.LoggingRequest;
 import com.google.gwt.requestfactory.shared.ProxyListRequest;
 import com.google.gwt.requestfactory.shared.ProxyRequest;
 import com.google.gwt.requestfactory.shared.RequestFactory;
@@ -64,6 +65,8 @@
 
   AddressRequest addressRequest();
 
+  LoggingRequest loggingRequest();
+
   PersonRequest personRequest();
 
   SchoolCalendarRequest schoolCalendarRequest();
diff --git a/user/src/com/google/gwt/requestfactory/client/RequestFactoryLogHandler.java b/user/src/com/google/gwt/requestfactory/client/RequestFactoryLogHandler.java
index e3b9b8d..3bc29bf 100644
--- a/user/src/com/google/gwt/requestfactory/client/RequestFactoryLogHandler.java
+++ b/user/src/com/google/gwt/requestfactory/client/RequestFactoryLogHandler.java
@@ -16,8 +16,8 @@
 
 package com.google.gwt.requestfactory.client;
 
+import com.google.gwt.requestfactory.shared.LoggingRequest;
 import com.google.gwt.requestfactory.shared.Receiver;
-import com.google.gwt.requestfactory.shared.RequestFactory;
 import com.google.gwt.requestfactory.shared.SyncResult;
 
 import java.util.Set;
@@ -30,7 +30,15 @@
  * A Handler that does remote logging for applications using RequestFactory.
  */
 public class RequestFactoryLogHandler extends Handler {
-  class LoggingReceiver implements Receiver<Long> {
+  
+  /** 
+   * Provides a logging request
+   */
+  public static interface LoggingRequestProvider {
+    LoggingRequest getLoggingRequest();
+  }
+  
+  private class LoggingReceiver implements Receiver<Long> {
     public void onSuccess(Long response, Set<SyncResult> syncResults) {
       if (response > 0) {
         logger.finest("Remote logging successful");
@@ -44,7 +52,7 @@
     Logger.getLogger(RequestFactoryLogHandler.class.getName());
   
   private boolean closed;
-  private RequestFactory requestFactory;
+  private LoggingRequestProvider requestProvider;
   private String ignoredLoggerSubstring;
   
   /**
@@ -56,9 +64,9 @@
    * activity going accross the wire. If we did not exclude these loggers, an
    * infinite loop would occur.
    */
-  public RequestFactoryLogHandler(RequestFactory requestFactory, Level level,
-      String ignoredLoggerSubstring) {
-    this.requestFactory = requestFactory;
+  public RequestFactoryLogHandler(LoggingRequestProvider requestProvider,
+      Level level, String ignoredLoggerSubstring) {
+    this.requestProvider = requestProvider;
     this.ignoredLoggerSubstring = ignoredLoggerSubstring;
     closed = false;
     setLevel(level);
@@ -85,7 +93,7 @@
     }
     
     Receiver<Long> loggingReceiver = new LoggingReceiver();
-    requestFactory.loggingRequest().logMessage(
+    requestProvider.getLoggingRequest().logMessage(
         record.getLevel().toString(),
         record.getLoggerName(),
         record.getMessage()).fire(loggingReceiver);
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
index c78d733..e399084 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
@@ -22,7 +22,6 @@
 import com.google.gwt.http.client.RequestCallback;
 import com.google.gwt.http.client.RequestException;
 import com.google.gwt.http.client.Response;
-import com.google.gwt.requestfactory.client.RequestFactoryLogHandler;
 import com.google.gwt.requestfactory.shared.EntityProxy;
 import com.google.gwt.requestfactory.shared.EntityProxyId;
 import com.google.gwt.requestfactory.shared.RequestEvent;
@@ -165,8 +164,6 @@
   public void init(EventBus eventBus) {
     this.valueStore = new ValueStoreJsonImpl();
     this.eventBus = eventBus;
-    Logger.getLogger("").addHandler(
-        new RequestFactoryLogHandler(this, Level.WARNING, wireLogger.getName()));
     logger.fine("Successfully initialized RequestFactory");
   }
 
diff --git a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
index ec8611c..3158f18 100644
--- a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
+++ b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
@@ -317,17 +317,6 @@
       requestSelectors.add(method);
     }
 
-    // In addition to the request selectors in the generated interface, there
-    // are a few which are in RequestFactory which also need to have
-    // implementations generated. Hard coding the addition of these here for now
-    JClassType t = generatorContext.getTypeOracle().findType(
-        RequestFactory.class.getName());
-    try {
-      requestSelectors.add(t.getMethod("loggingRequest", new JType[0]));
-    } catch (NotFoundException e) {
-      e.printStackTrace();
-    }
-
     JClassType proxyToTypeInterface = generatorContext.getTypeOracle().findType(
         ProxyToTypeMap.class.getName());
     // TODO: note, this seems like a bug. What if you have 2 RequestFactories?
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
index 9d40015..b9cb34e 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
@@ -85,10 +85,5 @@
    */
   void init(EventBus eventBus);
 
-  // The following methods match the format for the generated sub-interfaces
-  // and implementations are generated using the same code we use to generate
-  // those. In order to ensure this happens, each of the request selectors
-  // needs to be manually added to the requestSelectors list in
-  // RequestFactoryGenerator.java
-  LoggingRequest loggingRequest();
+
 }