From: zapata Date: Mon, 11 Nov 2002 17:32:22 +0000 (+0000) Subject: fixes + a (not yet tested) writer to logger adapter X-Git-Tag: BEFORE_MERGE_1_1~481 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=62f2f914058c39865ff038e6281b045b05f598cb;p=mir.git fixes + a (not yet tested) writer to logger adapter --- diff --git a/source/mir/entity/adapter/EntityAdapter.java b/source/mir/entity/adapter/EntityAdapter.java index 38978602..e5ad90e2 100755 --- a/source/mir/entity/adapter/EntityAdapter.java +++ b/source/mir/entity/adapter/EntityAdapter.java @@ -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 diff --git a/source/mir/log/LoggerWrapper.java b/source/mir/log/LoggerWrapper.java index 7912c50b..842c6980 100755 --- a/source/mir/log/LoggerWrapper.java +++ b/source/mir/log/LoggerWrapper.java @@ -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 index 00000000..67b13d1f --- /dev/null +++ b/source/mir/log/WriterToLoggerAdapter.java @@ -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 diff --git a/source/mir/producer/LoggingProducerNode.java b/source/mir/producer/LoggingProducerNode.java index 73031171..ded152a0 100755 --- a/source/mir/producer/LoggingProducerNode.java +++ b/source/mir/producer/LoggingProducerNode.java @@ -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 diff --git a/source/mir/util/ParameterExpander.java b/source/mir/util/ParameterExpander.java index b58fa4aa..2418ae30 100755 --- a/source/mir/util/ParameterExpander.java +++ b/source/mir/util/ParameterExpander.java @@ -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) { diff --git a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java index 5f56520c..d65cd234 100755 --- a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java @@ -139,7 +139,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer { protected class CommentToContentField implements EntityAdapterDefinition.CalculatedField { public Object getValue(EntityAdapter anEntityAdapter) { try { - return anEntityAdapter.getRelation( + return anEntityAdapter.getToOneRelation( "id="+anEntityAdapter.get("to_media"), "id", "content" ); @@ -201,7 +201,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer { protected class ContentToLanguageField implements EntityAdapterDefinition.CalculatedField { public Object getValue(EntityAdapter anEntityAdapter) { try { - return anEntityAdapter.getRelation( + return anEntityAdapter.getToOneRelation( "id="+anEntityAdapter.get("to_language"), "id", "language" );