Added matchRegEx operation to StringServices

git-svn-id: https://brutex.net/svn/xservices/trunk@93 e7e49efb-446e-492e-b9ec-fcafc1997a86
tag-20130205r
Brian Rosenberger 2012-08-16 09:59:13 +00:00
parent 1b4345c5e9
commit b5eedf6c38
4 changed files with 129 additions and 4 deletions

View File

@ -0,0 +1,32 @@
/*
* Copyright 2012 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.types;
public class StringMatchDetails {
public long startPosition;
public long endPosition;
public String content;
public StringMatchDetails() {
}
public StringMatchDetails(long start, long end, String content) {
this.startPosition = start;
this.endPosition = end;
this.content = content;
}
}

View File

@ -0,0 +1,50 @@
/*
* Copyright 2012 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.types;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlType;
import com.sun.xml.txw2.annotation.XmlElement;
/**
*
* @author Brian Rosenberger, bru@brutex.de
*/
@XmlType
public class StringMatchType {
public final List<StringMatchDetails> stringlist = new ArrayList<StringMatchDetails>();
public int size=0;
public StringMatchType() {}
public synchronized void addStringMatch(StringMatchDetails match) {
this.stringlist.add(match);
this.size++;
}
public synchronized void addStringMatch(long start, long end, String content) {
StringMatchDetails details = new StringMatchDetails(start, end, content);
this.addStringMatch( details );
}
}

View File

@ -21,6 +21,7 @@ import javax.jws.WebParam;
import javax.jws.WebService; import javax.jws.WebService;
import net.brutex.xservices.types.ReturnCode; import net.brutex.xservices.types.ReturnCode;
import net.brutex.xservices.types.StringMatchType;
import net.brutex.xservices.types.StringReplaceType; import net.brutex.xservices.types.StringReplaceType;
import net.brutex.xservices.types.TargetNodeType; import net.brutex.xservices.types.TargetNodeType;
import net.brutex.xservices.types.ant.AttachmentType; import net.brutex.xservices.types.ant.AttachmentType;
@ -42,6 +43,7 @@ public interface StringService {
public static final String SERVICE_NAME = "StringService"; public static final String SERVICE_NAME = "StringService";
final String OPERATION_REPLACEREGEX = "replaceRegEx"; final String OPERATION_REPLACEREGEX = "replaceRegEx";
final String OPERATION_MATCHREGEX = "matchRegEx";
final static String PARAM_STRING = "string"; final static String PARAM_STRING = "string";
@ -67,5 +69,12 @@ public interface StringService {
@WebParam(name = PARAM_REPLACE) String replace, @WebParam(name = PARAM_REPLACE) String replace,
@WebParam(name = PARAM_FLAGS) String flags) throws XServicesFault; @WebParam(name = PARAM_FLAGS) String flags) throws XServicesFault;
@WebMethod(operationName=OPERATION_MATCHREGEX)
@WSDLDocumentation(value="Match text based data")
public abstract StringMatchType matchRegEx(
@WebParam(name = PARAM_STRING) String res,
@WebParam(name = PARAM_SEARCH) String search,
@WebParam(name = PARAM_FLAGS) String flags) throws XServicesFault;
} }

View File

@ -20,6 +20,7 @@ import java.util.regex.Pattern;
import javax.jws.WebService; import javax.jws.WebService;
import net.brutex.xservices.types.StringMatchType;
import net.brutex.xservices.types.StringReplaceType; import net.brutex.xservices.types.StringReplaceType;
import net.brutex.xservices.util.BrutexNamespaces; import net.brutex.xservices.util.BrutexNamespaces;
import net.brutex.xservices.ws.StringService; import net.brutex.xservices.ws.StringService;
@ -36,10 +37,7 @@ public class StringServiceImpl implements StringService {
public StringReplaceType replaceRegEx(String res, String search, public StringReplaceType replaceRegEx(String res, String search,
String replace, String flags) throws XServicesFault { String replace, String flags) throws XServicesFault {
try { try {
int allflags = 0; int allflags = getFlags(flags);
if (flags.contains("i")) {
allflags = allflags + Pattern.CASE_INSENSITIVE;
}
Pattern pattern = Pattern.compile(search, allflags); Pattern pattern = Pattern.compile(search, allflags);
Matcher matcher = pattern.matcher(res); Matcher matcher = pattern.matcher(res);
int count = 0; int count = 0;
@ -60,4 +58,40 @@ public class StringServiceImpl implements StringService {
} }
@Override
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();
while (matcher.find()) {
rm.addStringMatch(matcher.start(), matcher.end(), matcher.group());
}
return rm;
}
private int getFlags(String flags) {
int allflags = 0;
if(flags.contains("i")) {
allflags = allflags + Pattern.CASE_INSENSITIVE;
}
if(flags.contains("m")) {
allflags = allflags + Pattern.MULTILINE;
}
if(flags.contains("u")) {
allflags = allflags + Pattern.UNICODE_CASE;
}
if(flags.contains("s")) {
allflags = allflags + Pattern.DOTALL;
}
if(flags.contains("d")) {
allflags = allflags + Pattern.UNIX_LINES;
}
if(flags.contains("x")) {
allflags = allflags + Pattern.COMMENTS;
}
return allflags;
}
} }