mbeckerle commented on a change in pull request #651:
URL: https://github.com/apache/daffodil/pull/651#discussion_r725361996



##########
File path: 
daffodil-runtime1/src/main/scala/org/apache/daffodil/layers/LayerTransformer.scala
##########
@@ -40,102 +42,41 @@ import 
org.apache.daffodil.schema.annotation.props.gen.BitOrder
 import org.apache.daffodil.processors.parsers.PState
 import org.apache.daffodil.processors.unparsers.UState
 import org.apache.daffodil.io.DirectOrBufferedDataOutputStream
+import org.apache.daffodil.processors.Evaluatable
+import org.apache.daffodil.processors.RuntimeData
 import passera.unsigned.ULong
 import org.apache.daffodil.processors.SequenceRuntimeData
+import org.apache.daffodil.processors.SuspendableOperation
+import org.apache.daffodil.processors.VariableRuntimeData
+import org.apache.daffodil.processors.charset.BitsCharsetJava
+import org.apache.daffodil.util.ByteBufferOutputStream
 
+import java.io.ByteArrayInputStream
+import java.io.EOFException
 import java.io.InputStream
 import java.io.OutputStream
-
-/**
- * Factory for a layer transformer.
- *
- * Responsible for digesting the various args, erroring if the wrong ones
- * are specified, and ultimately constructing the LayerTransformer
- * of the correct type with the parameters it needs.
- */
-abstract class LayerTransformerFactory(nom: String)
-  extends Serializable {
-
-  val name = nom.toUpperCase()
-
-  def newInstance(
-    maybeLayerCharsetEv: Maybe[LayerCharsetEv],
-    maybeLayerLengthKind: Maybe[LayerLengthKind],
-    maybeLayerLengthEv: Maybe[LayerLengthEv],
-    maybeLayerLengthUnits: Maybe[LayerLengthUnits],
-    maybeLayerBoundaryMarkEv: Maybe[LayerBoundaryMarkEv],
-    srd: SequenceRuntimeData): LayerTransformer
-}
-
-/**
- * Transformers have factories. This lets you find the transformer factory
- * by the name obtained from dfdlx:layerTransform.
- */
-object LayerTransformerFactory {
-
-  private lazy val transformerMap = new NonAllocatingMap(new HashMap[String, 
LayerTransformerFactory])
-
-  def register(factory: LayerTransformerFactory): Unit = {
-    transformerMap.put(factory.name, factory)
-  }
-  /**
-   * Given name, finds the factory for the transformer. SDE otherwise.
-   *
-   * The state is passed in order to provide diagnostic context if not found.
-   */
-  def find(name: String, state: ParseOrUnparseState): LayerTransformerFactory 
= {
-    val maybeFactory = transformerMap.get(name)
-    if (maybeFactory.isEmpty) {
-      val choices = transformerMap.keySet.mkString(", ")
-      state.SDE("The dfdlx:layerTransform '%s' was not found. Available 
choices are: %s", name, choices)
-    } else {
-      maybeFactory.get
-    }
-  }
-
-  /**
-   * All transformers must be registered so they are available by name.
-   *
-   * It is possible to package a transformer in a separate jar also, but then
-   * someone has to register it by calling the register method.
-   *
-   * Transformers built into the primary Daffodil jars/packages should be
-   * registered here.
-   */
-  register(Base64MIMETransformerFactory)
-  register(GZIPTransformerFactory)
-  register(IMFLineFoldedTransformerFactory)
-  register(ICalendarLineFoldedTransformerFactory)
-
-  /**
-   * Arguably the above could be bundled with Daffodil.
-   *
-   * The transformers below really should be plugins defined
-   * outside Daffodil, per DAFFODIL-1927.
-   */
-  register(AISPayloadArmoringTransformerFactory)
-  register(FourByteSwapTransformerFactory)
-}
+import java.nio.ByteBuffer
+import java.nio.charset.Charset
 
 /**
  * Shared functionality of all LayerTransformers.
  *
  * A layer transformer is created at runtime as part of a single parse/unparse 
call.
  * Hence, they can be stateful without causing thread-safety issues.
  */
-abstract class LayerTransformer() {
+abstract class LayerTransformer(layerName: String, layerRuntimeInfo: 
LayerRuntimeInfo) {
 
   protected def wrapLayerDecoder(jis: InputStream): InputStream
 
-  protected def wrapLimitingStream(jis: InputStream, state: PState): 
InputStream
+  protected def wrapLimitingStream(jis: InputStream): InputStream
 
   def wrapJavaInputStream(s: InputSourceDataInputStream, fInfo: FormatInfo): 
InputStream = {

Review comment:
       yes

##########
File path: 
daffodil-runtime1/src/main/scala/org/apache/daffodil/layers/LayerTransformer.scala
##########
@@ -40,102 +42,41 @@ import 
org.apache.daffodil.schema.annotation.props.gen.BitOrder
 import org.apache.daffodil.processors.parsers.PState
 import org.apache.daffodil.processors.unparsers.UState
 import org.apache.daffodil.io.DirectOrBufferedDataOutputStream
+import org.apache.daffodil.processors.Evaluatable
+import org.apache.daffodil.processors.RuntimeData
 import passera.unsigned.ULong
 import org.apache.daffodil.processors.SequenceRuntimeData
+import org.apache.daffodil.processors.SuspendableOperation
+import org.apache.daffodil.processors.VariableRuntimeData
+import org.apache.daffodil.processors.charset.BitsCharsetJava
+import org.apache.daffodil.util.ByteBufferOutputStream
 
+import java.io.ByteArrayInputStream
+import java.io.EOFException
 import java.io.InputStream
 import java.io.OutputStream
-
-/**
- * Factory for a layer transformer.
- *
- * Responsible for digesting the various args, erroring if the wrong ones
- * are specified, and ultimately constructing the LayerTransformer
- * of the correct type with the parameters it needs.
- */
-abstract class LayerTransformerFactory(nom: String)
-  extends Serializable {
-
-  val name = nom.toUpperCase()
-
-  def newInstance(
-    maybeLayerCharsetEv: Maybe[LayerCharsetEv],
-    maybeLayerLengthKind: Maybe[LayerLengthKind],
-    maybeLayerLengthEv: Maybe[LayerLengthEv],
-    maybeLayerLengthUnits: Maybe[LayerLengthUnits],
-    maybeLayerBoundaryMarkEv: Maybe[LayerBoundaryMarkEv],
-    srd: SequenceRuntimeData): LayerTransformer
-}
-
-/**
- * Transformers have factories. This lets you find the transformer factory
- * by the name obtained from dfdlx:layerTransform.
- */
-object LayerTransformerFactory {
-
-  private lazy val transformerMap = new NonAllocatingMap(new HashMap[String, 
LayerTransformerFactory])
-
-  def register(factory: LayerTransformerFactory): Unit = {
-    transformerMap.put(factory.name, factory)
-  }
-  /**
-   * Given name, finds the factory for the transformer. SDE otherwise.
-   *
-   * The state is passed in order to provide diagnostic context if not found.
-   */
-  def find(name: String, state: ParseOrUnparseState): LayerTransformerFactory 
= {
-    val maybeFactory = transformerMap.get(name)
-    if (maybeFactory.isEmpty) {
-      val choices = transformerMap.keySet.mkString(", ")
-      state.SDE("The dfdlx:layerTransform '%s' was not found. Available 
choices are: %s", name, choices)
-    } else {
-      maybeFactory.get
-    }
-  }
-
-  /**
-   * All transformers must be registered so they are available by name.
-   *
-   * It is possible to package a transformer in a separate jar also, but then
-   * someone has to register it by calling the register method.
-   *
-   * Transformers built into the primary Daffodil jars/packages should be
-   * registered here.
-   */
-  register(Base64MIMETransformerFactory)
-  register(GZIPTransformerFactory)
-  register(IMFLineFoldedTransformerFactory)
-  register(ICalendarLineFoldedTransformerFactory)
-
-  /**
-   * Arguably the above could be bundled with Daffodil.
-   *
-   * The transformers below really should be plugins defined
-   * outside Daffodil, per DAFFODIL-1927.
-   */
-  register(AISPayloadArmoringTransformerFactory)
-  register(FourByteSwapTransformerFactory)
-}
+import java.nio.ByteBuffer
+import java.nio.charset.Charset
 
 /**
  * Shared functionality of all LayerTransformers.
  *
  * A layer transformer is created at runtime as part of a single parse/unparse 
call.
  * Hence, they can be stateful without causing thread-safety issues.
  */
-abstract class LayerTransformer() {
+abstract class LayerTransformer(layerName: String, layerRuntimeInfo: 
LayerRuntimeInfo) {
 
   protected def wrapLayerDecoder(jis: InputStream): InputStream
 
-  protected def wrapLimitingStream(jis: InputStream, state: PState): 
InputStream
+  protected def wrapLimitingStream(jis: InputStream): InputStream
 
   def wrapJavaInputStream(s: InputSourceDataInputStream, fInfo: FormatInfo): 
InputStream = {
     new JavaIOInputStream(s, fInfo)
   }
 
   protected def wrapLayerEncoder(jos: OutputStream): OutputStream
 
-  protected def wrapLimitingStream(jis: OutputStream, state: UState): 
OutputStream
+  protected def wrapLimitingStream(jis: OutputStream): OutputStream
 
   def wrapJavaOutputStream(s: DataOutputStream, fInfo: FormatInfo): 
OutputStream = {

Review comment:
       yes




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to