1 /**
2  *  ServingXML
3  *
4  *  Copyright (C) 2006  Daniel Parker
5  *    daniel.parker@servingxml.com
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  **/
20 
21 package com.servingxml.components.flatfile.options;
22 
23 import com.servingxml.app.ServiceContext;
24 import com.servingxml.app.Flow;
25 import com.servingxml.expr.substitution.SubstitutionExpr;
26 import com.servingxml.expr.substitution.LiteralSubstitutionExpr;
27 
28 public class DefaultSeparatorFactory implements SeparatorFactory {
29   private final SubstitutionExpr valueExpr;
30   private final SubstitutionExpr escapedByExpr;
31   private final SubstitutionExpr continuationSequenceExpr;
32 
DefaultSeparatorFactory(SubstitutionExpr valueExpr, SubstitutionExpr escapedByExpr, SubstitutionExpr continuationSequenceExpr)33   public DefaultSeparatorFactory(SubstitutionExpr valueExpr,
34                                  SubstitutionExpr escapedByExpr,
35                                  SubstitutionExpr continuationSequenceExpr) {
36     this.valueExpr = valueExpr;
37     this.escapedByExpr = escapedByExpr;
38     this.continuationSequenceExpr = continuationSequenceExpr;
39   }
40 
DefaultSeparatorFactory(SubstitutionExpr valueExpr, SubstitutionExpr escapedByExpr)41   public DefaultSeparatorFactory(SubstitutionExpr valueExpr,
42                                  SubstitutionExpr escapedByExpr) {
43     this.valueExpr = valueExpr;
44     this.escapedByExpr = escapedByExpr;
45     this.continuationSequenceExpr = SubstitutionExpr.EMPTY;
46   }
47 
DefaultSeparatorFactory(SubstitutionExpr valueExpr)48   public DefaultSeparatorFactory(SubstitutionExpr valueExpr) {
49     this.valueExpr = valueExpr;
50     this.escapedByExpr = SubstitutionExpr.EMPTY;
51     this.continuationSequenceExpr = SubstitutionExpr.EMPTY;
52   }
53 
DefaultSeparatorFactory(String separator)54   public DefaultSeparatorFactory(String separator) {
55     this.valueExpr = new LiteralSubstitutionExpr(separator);
56     this.escapedByExpr = SubstitutionExpr.EMPTY;
57     this.continuationSequenceExpr = SubstitutionExpr.EMPTY;
58   }
59 
createSeparator(ServiceContext context, Flow flow)60   public Separator createSeparator(ServiceContext context, Flow flow) {
61     String value = valueExpr.evaluateAsString(flow.getParameters(), flow.getRecord());
62     String escapedBy = escapedByExpr.evaluateAsString(flow.getParameters(), flow.getRecord());
63     String continuationSequence = continuationSequenceExpr.evaluateAsString(flow.getParameters(), flow.getRecord());
64 
65     return new DefaultSeparator(value, escapedBy, continuationSequence);
66   }
67 }
68