/* * 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.ws.impl; 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.util.BrutexNamespaces; import net.brutex.xservices.ws.StringService; import net.brutex.xservices.ws.XServicesFault; /** * @author Brian Rosenberger * @since 0.5.0 * */ @WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES, endpointInterface = "net.brutex.xservices.ws.StringService", serviceName = StringService.SERVICE_NAME) 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); } else { if (count > 1) count = 1; return new StringReplaceType(matcher.replaceFirst(replace), count); } } catch (Exception e) { throw new XServicesFault(e); } } @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()) { for(int i=0; i<=matcher.groupCount();i++){ rm.addStringMatch(matcher.start(), matcher.end(), matcher.group(i)); } } 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; } }