Rev 177 | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/*
* Copyright 2013 Brian Rosenberger (Brutex Network)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.brutex.xservices.ws.impl;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.jws.WebService;
import net.brutex.xservices.types.StringMatchType;
import net.brutex.xservices.types.StringReplaceType;
import net.brutex.xservices.types.StringSplitType;
import net.brutex.xservices.ws.StringService;
import net.brutex.xservices.ws.XServicesFault;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.text.translate.CharSequenceTranslator;
import org.apache.commons.lang3.text.translate.NumericEntityEscaper;
/**
* @author Brian Rosenberger, bru(at)brutex.de
*
*/
@WebService(targetNamespace="http://ws.xservices.brutex.net", endpointInterface="net.brutex.xservices.ws.StringService", serviceName="StringService")
public class StringServiceImpl
implements StringService
{
public StringReplaceType replaceRegEx(String res, String search, String replace, String flags)
throws XServicesFault
{
try
{
int allflags = getFlags(flags);
Pattern pattern = Pattern.compile(search, allflags);
Matcher matcher = pattern.matcher(res);
int count = 0;
while (matcher.find()) {
count++;
}
if (flags.contains("g")) {
return new StringReplaceType(matcher.replaceAll(replace), count);
}
if (count > 1)
count = 1;
return new StringReplaceType(matcher.replaceFirst(replace),
count);
}
catch (Exception e) {
throw new XServicesFault(e);
}
}
public StringMatchType matchRegEx(String res, String search, String flags)
throws XServicesFault
{
int allflags = getFlags(flags);
Pattern pattern = Pattern.compile(search, allflags);
Matcher matcher = pattern.matcher(res);
StringMatchType rm = new StringMatchType();
for (int i=0; i <= matcher.groupCount(); i++) {
while(matcher.find()) {
rm.addStringMatch(matcher.start(i), matcher.end(i), "group-"+i, matcher.group(i));
}
matcher.reset();
}
return rm;
}
public String encodeToXMLEntities(String res)
throws XServicesFault
{
StringEscapeUtils fac = new StringEscapeUtils();
StringEscapeUtils.ESCAPE_XML.with(new CharSequenceTranslator[] { NumericEntityEscaper.between(128, 2147483647) });
return StringEscapeUtils.escapeXml(res);
}
public StringSplitType splitString(String paramString, String delimiter) throws XServicesFault {
StringTokenizer tk = new StringTokenizer(paramString, delimiter);
StringSplitType result = new StringSplitType();
while(tk.hasMoreTokens()) {
result.addStringMatch( tk.nextToken() );
}
return result;
}
@Override
public String removeCRLF(String paramString) throws XServicesFault {
String value = paramString.replaceAll("[\r\n]", "");
return value;
}
private int getFlags(String flags) {
int allflags = 0;
if (flags.contains("i")) {
allflags += 2;
}
if (flags.contains("m")) {
allflags += 8;
}
if (flags.contains("u")) {
allflags += 64;
}
if (flags.contains("s")) {
allflags += 32;
}
if (flags.contains("d")) {
allflags++;
}
if (flags.contains("x")) {
allflags += 4;
}
return allflags;
}
}