001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.camel.model.language; 018 019 import javax.xml.bind.annotation.XmlAccessType; 020 import javax.xml.bind.annotation.XmlAccessorType; 021 import javax.xml.bind.annotation.XmlAttribute; 022 import javax.xml.bind.annotation.XmlRootElement; 023 024 import org.apache.camel.CamelContext; 025 import org.apache.camel.Expression; 026 import org.apache.camel.Predicate; 027 import org.apache.camel.language.tokenizer.TokenizeLanguage; 028 import org.apache.camel.util.ExpressionToPredicateAdapter; 029 030 /** 031 * For expressions and predicates using a body or header tokenizer. 032 * 033 * @see TokenizeLanguage 034 */ 035 @XmlRootElement(name = "tokenize") 036 @XmlAccessorType(XmlAccessType.FIELD) 037 public class TokenizerExpression extends ExpressionDefinition { 038 @XmlAttribute(required = true) 039 private String token; 040 @XmlAttribute 041 private String endToken; 042 @XmlAttribute 043 private String inheritNamespaceTagName; 044 @XmlAttribute 045 private String headerName; 046 @XmlAttribute 047 private Boolean regex; 048 @XmlAttribute 049 private Boolean xml; 050 @XmlAttribute 051 private Boolean includeTokens; 052 @XmlAttribute 053 private Integer group; 054 055 public TokenizerExpression() { 056 } 057 058 @Override 059 public String getLanguage() { 060 return "tokenize"; 061 } 062 063 public String getToken() { 064 return token; 065 } 066 067 public void setToken(String token) { 068 this.token = token; 069 } 070 071 public String getEndToken() { 072 return endToken; 073 } 074 075 public void setEndToken(String endToken) { 076 this.endToken = endToken; 077 } 078 079 public String getHeaderName() { 080 return headerName; 081 } 082 083 public void setHeaderName(String headerName) { 084 this.headerName = headerName; 085 } 086 087 public void setRegex(boolean regex) { 088 this.regex = regex; 089 } 090 091 public Boolean getRegex() { 092 return regex; 093 } 094 095 public String getInheritNamespaceTagName() { 096 return inheritNamespaceTagName; 097 } 098 099 public void setInheritNamespaceTagName(String inheritNamespaceTagName) { 100 this.inheritNamespaceTagName = inheritNamespaceTagName; 101 } 102 103 public Boolean getXml() { 104 return xml; 105 } 106 107 public void setXml(Boolean xml) { 108 this.xml = xml; 109 } 110 111 public Boolean getIncludeTokens() { 112 return includeTokens; 113 } 114 115 public void setIncludeTokens(Boolean includeTokens) { 116 this.includeTokens = includeTokens; 117 } 118 119 public Integer getGroup() { 120 return group; 121 } 122 123 public void setGroup(Integer group) { 124 this.group = group; 125 } 126 127 @Override 128 public Expression createExpression(CamelContext camelContext) { 129 // special for new line tokens, if defined from XML then its 2 characters, so we replace that back to a single char 130 if (token.startsWith("\\n")) { 131 token = '\n' + token.substring(2); 132 } 133 134 TokenizeLanguage language = new TokenizeLanguage(); 135 language.setToken(token); 136 language.setEndToken(endToken); 137 language.setInheritNamespaceTagName(inheritNamespaceTagName); 138 language.setHeaderName(headerName); 139 if (regex != null) { 140 language.setRegex(regex); 141 } 142 if (xml != null) { 143 language.setXml(xml); 144 } 145 if (includeTokens != null) { 146 language.setIncludeTokens(includeTokens); 147 } 148 if (group != null) { 149 if (group <= 0) { 150 throw new IllegalArgumentException("Group must be a positive number, was: " + group); 151 } 152 language.setGroup(group); 153 } 154 return language.createExpression(); 155 } 156 157 @Override 158 public Predicate createPredicate(CamelContext camelContext) { 159 Expression exp = createExpression(camelContext); 160 return ExpressionToPredicateAdapter.toPredicate(exp); 161 } 162 163 @Override 164 public String toString() { 165 if (endToken != null) { 166 return "tokenize{body() using tokens: " + token + "..." + endToken + "}"; 167 } else { 168 return "tokenize{" + (headerName != null ? "header: " + headerName : "body()") + " using token: " + token + "}"; 169 } 170 } 171 }