fixes + a (not yet tested) writer to logger adapter
authorzapata <zapata>
Mon, 11 Nov 2002 17:32:22 +0000 (17:32 +0000)
committerzapata <zapata>
Mon, 11 Nov 2002 17:32:22 +0000 (17:32 +0000)
source/mir/entity/adapter/EntityAdapter.java
source/mir/log/LoggerWrapper.java
source/mir/log/WriterToLoggerAdapter.java [new file with mode: 0755]
source/mir/producer/LoggingProducerNode.java
source/mir/util/ParameterExpander.java
source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java

index 3897860..e5ad90e 100755 (executable)
@@ -150,4 +150,17 @@ public class EntityAdapter implements Map {
     }
   }
 
+  public Object getToOneRelation(String aWhereClause, String anOrderByClause, String aDefinition) {
+    try {
+      Iterator i = new EntityIteratorAdapter(aWhereClause, anOrderByClause, -1, getModel(), aDefinition);
+
+      if (i.hasNext())
+        return i.next();
+      else
+        return null;
+    }
+    catch (Throwable t) {
+      throw new RuntimeException(t.getMessage());
+    }
+  }
 }
\ No newline at end of file
index 7912c50..842c698 100755 (executable)
@@ -2,6 +2,11 @@ package mir.log;
 
 public class LoggerWrapper {
   private Object object;
+  public final static int DEBUG_MESSAGE = 1;
+  public final static int INFO_MESSAGE = 2;
+  public final static int WARN_MESSAGE = 3;
+  public final static int ERROR_MESSAGE = 4;
+  public final static int FATAL_MESSAGE = 5;
 
   public LoggerWrapper( Object anObject ) {
     object = anObject;
@@ -19,7 +24,6 @@ public class LoggerWrapper {
     Log.warn(object, aMessage);
   };
 
-
   public void error( String aMessage ) {
     Log.error(object, aMessage);
   };
@@ -27,4 +31,27 @@ public class LoggerWrapper {
   public void fatal( String aMessage ) {
     Log.fatal(object, aMessage);
   };
-}
\ No newline at end of file
+
+  public void message( int aType, String aMessage) {
+    switch(aType) {
+      case DEBUG_MESSAGE:
+        debug(aMessage);
+        break;
+      case INFO_MESSAGE:
+        info(aMessage);
+        break;
+      case WARN_MESSAGE:
+        warn(aMessage);
+        break;
+      case ERROR_MESSAGE:
+        error(aMessage);
+        break;
+      case FATAL_MESSAGE:
+        fatal(aMessage);
+        break;
+      default:
+        warn("LoggerWrapper.message: Unknown message type ("+aType+") for message '" + aMessage + "'");
+    }
+  }
+}
+
diff --git a/source/mir/log/WriterToLoggerAdapter.java b/source/mir/log/WriterToLoggerAdapter.java
new file mode 100755 (executable)
index 0000000..67b13d1
--- /dev/null
@@ -0,0 +1,52 @@
+package mir.log;
+
+import java.io.*;
+import java.util.*;
+
+public class WriterToLoggerAdapter extends Writer {
+  private LoggerWrapper logger;
+  private int messageType;
+  private StringBuffer lineBuffer;
+  private String lineSeparator;
+
+  public WriterToLoggerAdapter(LoggerWrapper aLogger, int aMessageType) {
+    lineBuffer = new StringBuffer();
+    logger = aLogger;
+    messageType = aMessageType;
+    lineSeparator = System.getProperty("line.separator");
+  }
+
+  public WriterToLoggerAdapter(Logger aLogger, int aMessageType) {
+    this(new LoggerWrapper(aLogger), aMessageType);
+  }
+
+  public void close() {
+    flush();
+  }
+
+  public void flush() {
+    if (lineBuffer.length()>0) {
+      logger.message(messageType, lineBuffer.toString());
+      lineBuffer.delete(0, lineBuffer.length());
+    }
+  }
+
+  protected void checkBuffer() {
+    int from = 0;
+    int until = lineBuffer.toString().indexOf(lineSeparator, from);
+
+    while (until>-1) {
+      String line = lineBuffer.substring(from, until);
+      logger.message(messageType, line);
+      from = until + lineSeparator.length();
+      until = lineBuffer.toString().indexOf(lineSeparator, from);
+    }
+
+    lineBuffer.delete(0, from);
+  };
+
+  public void write(char[] aBuffer, int anOffset, int aLength)  {
+    lineBuffer.append(aBuffer, anOffset, aLength);
+    checkBuffer();
+  }
+}
\ No newline at end of file
index 7303117..ded152a 100755 (executable)
@@ -51,7 +51,11 @@ public class LoggingProducerNode implements ProducerNode {
       aLogger.println(text);
     }
     catch (Throwable t) {
-      throw new ProducerFailure(t.getMessage(), t);
+      try {
+        aLogger.println("Exception while logging message '"+expression+"': " + t.getMessage());
+      }
+      catch (Throwable s) {
+      }
     }
   }
 }
\ No newline at end of file
index b58fa4a..2418ae3 100755 (executable)
@@ -593,7 +593,7 @@ public class ParameterExpander {
             currentValue = ((Map) currentValue).get(qualifier);
           }
           else {
-            throw new RuntimeException("cannot reference into anything other than a map");
+            throw new RuntimeException("cannot reference into anything other than a map ('"+qualifier+"')");
           }
         }
         else if (token instanceof IdentifierToken) {
@@ -604,7 +604,7 @@ public class ParameterExpander {
             currentValue = ((Map) currentValue).get(qualifier);
           }
           else {
-            throw new RuntimeException("cannot reference into anything other than a map");
+            throw new RuntimeException("cannot reference into anything other than a map ('"+qualifier+"')");
           }
         }
         else if (token instanceof LeftParenthesisToken) {
index 5f56520..d65cd23 100755 (executable)
@@ -139,7 +139,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
   protected class CommentToContentField implements EntityAdapterDefinition.CalculatedField {\r
     public Object getValue(EntityAdapter anEntityAdapter) {\r
       try {\r
-        return anEntityAdapter.getRelation(\r
+        return anEntityAdapter.getToOneRelation(\r
                     "id="+anEntityAdapter.get("to_media"),\r
                     "id",\r
                     "content" );\r
@@ -201,7 +201,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
   protected class ContentToLanguageField implements EntityAdapterDefinition.CalculatedField {\r
     public Object getValue(EntityAdapter anEntityAdapter) {\r
       try {\r
-        return anEntityAdapter.getRelation(\r
+        return anEntityAdapter.getToOneRelation(\r
                     "id="+anEntityAdapter.get("to_language"),\r
                     "id",\r
                     "language" );\r