From 10a2ca711db50c5d40e5be39b07a06d33403ce68 Mon Sep 17 00:00:00 2001 From: Brian Rosenberger Date: Tue, 3 May 2011 14:10:04 +0000 Subject: [PATCH] Update FileServices with new operation "replace in file" git-svn-id: https://brutex.net/svn/xservices/trunk@63 e7e49efb-446e-492e-b9ec-fcafc1997a86 --- .../xservices/types/ReplacePattern.java | 75 +++++++++++++++++++ .../net/brutex/xservices/ws/FileService.java | 22 +++++- .../xservices/ws/impl/FileServiceImpl.java | 56 ++++++++++++++ 3 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 src/java/net/brutex/xservices/types/ReplacePattern.java 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) *