diff --git a/src/java/net/brutex/xservices/types/ReplacePattern.java b/src/java/net/brutex/xservices/types/ReplacePattern.java new file mode 100644 index 0000000..8ddbe03 --- /dev/null +++ b/src/java/net/brutex/xservices/types/ReplacePattern.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 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.util.ArrayList; +import java.util.List; +import java.util.Map; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Generic key/ value pairs. + * + * @author Brian Rosenberger + */ +@XmlRootElement +public class ReplacePattern { + + /** + * Search string. + */ + @XmlElement(required=true) + public String search =""; + + /** + * Replace string. + */ + @XmlElement(required=true) + public String replace=""; + + /** + * Converts a Map<String, String> into a list of + * ReplacePattern. + * @param map The map to convert + * @return A list of key/value pairs + */ + public static List createAntPropertyList(Map map) { + List list = new ArrayList(); + for(Map.Entry e : map.entrySet()) { + list.add(new ReplacePattern(e.getKey(), e.getValue())); + } + return list; + } + + /** + * Creates a new ReplacePattern. + * @param name + * @param value + */ + public ReplacePattern(String search, String replace) { + this.search = search; + this.replace = replace; + } + + /** + * Creates a new ReplacePattern. + */ + public ReplacePattern() { + } + + +} diff --git a/src/java/net/brutex/xservices/ws/FileService.java b/src/java/net/brutex/xservices/ws/FileService.java index 2c141c4..0420edd 100644 --- a/src/java/net/brutex/xservices/ws/FileService.java +++ b/src/java/net/brutex/xservices/ws/FileService.java @@ -1,5 +1,7 @@ package net.brutex.xservices.ws; +import java.util.List; + import javax.activation.DataHandler; import javax.jws.WebMethod; import javax.jws.WebParam; @@ -9,6 +11,7 @@ import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.AttachmentType; import net.brutex.xservices.types.FileResource; import net.brutex.xservices.types.FileSetResource; +import net.brutex.xservices.types.ReplacePattern; import net.brutex.xservices.types.ReturnCode; import net.brutex.xservices.util.BrutexNamespaces; @WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES) @@ -66,5 +69,22 @@ public interface FileService { public abstract ReturnCode changeMode( @WebParam(name = "fileset") FileSetResource res, @WebParam(name = "permissions") String perm); - + + @WebMethod(operationName = "replaceInFile") + public abstract ReturnCode replaceInFile( + @WebParam(name = "file") FileResource res, + @WebParam(name = "search") String search, + @WebParam(name = "replace") String replace); + + @WebMethod(operationName = "replaceInFile2") + public abstract ReturnCode replaceInFile2( + @WebParam(name = "file") FileResource res, + @WebParam(name = "patternList") List patternList); + + @WebMethod(operationName = "replaceInFileRegEx") + public abstract ReturnCode replaceInFileRegEx( + @WebParam(name = "file") FileResource res, + @WebParam(name = "search") String search, + @WebParam(name = "replace") String replace, + @WebParam(name = "flags") String flags); } \ No newline at end of file diff --git a/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java b/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java index cfc584b..ed16297 100644 --- a/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java +++ b/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java @@ -15,6 +15,7 @@ */ package net.brutex.xservices.ws.impl; +import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -34,6 +35,7 @@ import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.AttachmentType; import net.brutex.xservices.types.FileResource; import net.brutex.xservices.types.FileSetResource; +import net.brutex.xservices.types.ReplacePattern; import net.brutex.xservices.types.ResourceInterface; import net.brutex.xservices.types.ReturnCode; import net.brutex.xservices.util.BrutexNamespaces; @@ -50,6 +52,8 @@ import org.apache.tools.ant.taskdefs.Chmod; import org.apache.tools.ant.taskdefs.Copy; import org.apache.tools.ant.taskdefs.Echo; import org.apache.tools.ant.taskdefs.LoadResource; +import org.apache.tools.ant.taskdefs.Replace; +import org.apache.tools.ant.taskdefs.optional.ReplaceRegExp; import org.apache.tools.ant.taskdefs.optional.unix.Chgrp; import org.apache.tools.ant.taskdefs.optional.unix.Chown; import org.apache.tools.ant.types.FileSet; @@ -74,6 +78,58 @@ public class FileServiceImpl implements FileService { return basename(new File(filename), suffix); } + @WebMethod(operationName = "replaceInFile") + public ReturnCode replaceInFile( + @WebParam(name = "file") FileResource res, + @WebParam(name = "search") String search, + @WebParam(name = "replace") String replace) { + ReturnCode r = null; + Replace rep = new Replace(); + rep.setTaskName("Replace"); + RunTask runner = new RunTask(rep); + rep.addConfigured(res.getAntResource(rep.getProject())); + rep.setToken(search); + rep.setValue(replace); + r = runner.postTask(); + return r; + } + + @WebMethod(operationName = "replaceInFile2") + public ReturnCode replaceInFile2( + @WebParam(name = "file") FileResource res, + @WebParam(name = "patternList") List patternList) { + ReturnCode r = null; + for (ReplacePattern pat : patternList) { + Replace rep = new Replace(); + rep.setTaskName("Replace"); + RunTask runner = new RunTask(rep); + rep.addConfigured(res.getAntResource(rep.getProject())); + rep.setToken(pat.search); + rep.setValue(pat.replace); + r = runner.postTask(); + } + return r; + } + + @WebMethod(operationName = "replaceInFileRegEx") + public ReturnCode replaceInFileRegEx( + @WebParam(name = "file") FileResource res, + @WebParam(name = "search") String search, + @WebParam(name = "replace") String replace, + @WebParam(name = "flags") String flags) { + ReplaceRegExp rep = new ReplaceRegExp(); + rep.setTaskName("ReplaceRegExp"); + RunTask runner = new RunTask(rep); + File infile = new File(res.uri); + rep.setFile(infile); + rep.setMatch(search); + rep.setReplace(replace); + rep.setFlags(flags); + ReturnCode r = runner.postTask(); + return r; + } + + /* * (non-Javadoc) *