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 net.brutex.xservices.types.ReturnCode;
|
||||
import net.brutex.xservices.types.StringMatchType;
|
||||
import net.brutex.xservices.types.StringReplaceType;
|
||||
import net.brutex.xservices.types.TargetNodeType;
|
||||
import net.brutex.xservices.types.ant.AttachmentType;
|
||||
|
@ -42,6 +43,7 @@ public interface StringService {
|
|||
public static final String SERVICE_NAME = "StringService";
|
||||
|
||||
final String OPERATION_REPLACEREGEX = "replaceRegEx";
|
||||
final String OPERATION_MATCHREGEX = "matchRegEx";
|
||||
|
||||
|
||||
final static String PARAM_STRING = "string";
|
||||
|
@ -67,5 +69,12 @@ public interface StringService {
|
|||
@WebParam(name = PARAM_REPLACE) String replace,
|
||||
@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 net.brutex.xservices.types.StringMatchType;
|
||||
import net.brutex.xservices.types.StringReplaceType;
|
||||
import net.brutex.xservices.util.BrutexNamespaces;
|
||||
import net.brutex.xservices.ws.StringService;
|
||||
|
@ -36,10 +37,7 @@ public class StringServiceImpl implements StringService {
|
|||
public StringReplaceType replaceRegEx(String res, String search,
|
||||
String replace, String flags) throws XServicesFault {
|
||||
try {
|
||||
int allflags = 0;
|
||||
if (flags.contains("i")) {
|
||||
allflags = allflags + Pattern.CASE_INSENSITIVE;
|
||||
}
|
||||
int allflags = getFlags(flags);
|
||||
Pattern pattern = Pattern.compile(search, allflags);
|
||||
Matcher matcher = pattern.matcher(res);
|
||||
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