From 58b935794ee0e4abdc5590799a93f74866b70ef1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 22 Sep 2011 19:26:56 +0200 Subject: [PATCH] added getResultFromScript to HgUtil --- .../sonia/scm/repository/HgBlameViewer.java | 36 +--------- .../scm/repository/HgRepositoryBrowser.java | 37 +--------- .../src/main/java/sonia/scm/web/HgUtil.java | 67 +++++++++++++++++++ 3 files changed, 73 insertions(+), 67 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgBlameViewer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgBlameViewer.java index c3b651c7ec..ad0efc8edc 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgBlameViewer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgBlameViewer.java @@ -101,39 +101,9 @@ public class HgBlameViewer implements BlameViewer { AssertUtil.assertIsNotEmpty(path); - Process p = HgUtil.createPythonProcess(handler, repository, revision, path); - BlameResult result = null; - InputStream resource = null; - InputStream input = null; - OutputStream output = null; - - try - { - resource = HgBlameViewer.class.getResourceAsStream(RESOURCE_BLAME); - output = p.getOutputStream(); - IOUtil.copy(resource, output); - output.close(); - - // IOUtil.copy(p.getErrorStream(), System.err); - input = p.getInputStream(); - result = - (BlameResult) blameResultContext.createUnmarshaller().unmarshal(input); - - // IOUtil.copy(input, System.out); - input.close(); - } - catch (JAXBException ex) - { - logger.error("could not parse result", ex); - } - finally - { - IOUtil.close(resource); - IOUtil.close(input); - IOUtil.close(output); - } - - return result; + return HgUtil.getResultFromScript(BlameResult.class, blameResultContext, + RESOURCE_BLAME, handler, repository, + revision, path); } //~--- fields --------------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryBrowser.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryBrowser.java index 8daafe6c01..3cda3f9952 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryBrowser.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryBrowser.java @@ -170,40 +170,9 @@ public class HgRepositoryBrowser implements RepositoryBrowser public BrowserResult getResult(String revision, String path) throws IOException, RepositoryException { - Process p = HgUtil.createPythonProcess(handler, repository, revision, path); - BrowserResult result = null; - InputStream resource = null; - InputStream input = null; - OutputStream output = null; - - try - { - resource = HgRepositoryBrowser.class.getResourceAsStream(RESOURCE_BROWSE); - output = p.getOutputStream(); - IOUtil.copy(resource, output); - output.close(); - - // IOUtil.copy(p.getErrorStream(), System.err); - input = p.getInputStream(); - result = - (BrowserResult) browserResultContext.createUnmarshaller().unmarshal( - input); - - // IOUtil.copy(input, System.out); - input.close(); - } - catch (JAXBException ex) - { - logger.error("could not parse result", ex); - } - finally - { - IOUtil.close(resource); - IOUtil.close(input); - IOUtil.close(output); - } - - return result; + return HgUtil.getResultFromScript(BrowserResult.class, + browserResultContext, RESOURCE_BROWSE, + handler, repository, revision, path); } //~--- fields --------------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java index 4c8e2f0ee1..47d5cf426b 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java @@ -35,19 +35,29 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import sonia.scm.SCMContext; +import sonia.scm.repository.BrowserResult; import sonia.scm.repository.HgConfig; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; +import sonia.scm.util.IOUtil; import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.Map; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; + /** * * @author Sebastian Sdorra @@ -76,6 +86,9 @@ public class HgUtil /** Field description */ public static final String REVISION_TIP = "tip"; + /** the logger for HgUtil */ + private static final Logger logger = LoggerFactory.getLogger(HgUtil.class); + //~--- methods -------------------------------------------------------------- /** @@ -146,4 +159,58 @@ public class HgUtil ? REVISION_TIP : revision; } + + /** + * Method description + * + * + * @param resultType + * @param context + * @param scriptResource + * @param handler + * @param repository + * @param revision + * @param path + * @param + * + * @return + * + * @throws IOException + */ + public static T getResultFromScript(Class resultType, JAXBContext context, + String scriptResource, + HgRepositoryHandler handler, + Repository repository, String revision, + String path) + throws IOException + { + Process p = createPythonProcess(handler, repository, revision, path); + T result = null; + InputStream resource = null; + InputStream input = null; + OutputStream output = null; + + try + { + resource = HgUtil.class.getResourceAsStream(scriptResource); + output = p.getOutputStream(); + IOUtil.copy(resource, output); + output.close(); + input = p.getInputStream(); + result = (T) context.createUnmarshaller().unmarshal(input); + input.close(); + } + catch (JAXBException ex) + { + logger.error("could not parse result", ex); + } + finally + { + IOUtil.close(resource); + IOUtil.close(input); + IOUtil.close(output); + } + + return result; + } }