Added matchRegEx operation to StringServices
git-svn-id: https://brutex.net/svn/xservices/trunk@93 e7e49efb-446e-492e-b9ec-fcafc1997a86tag-20130205r
parent
1b4345c5e9
commit
b5eedf6c38
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 );
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue