Updated Branches: refs/heads/master eab9c5f9f -> 200946379
KARAF-2741 Share TemplateUtils between jms and jdbc Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/20094637 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/20094637 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/20094637 Branch: refs/heads/master Commit: 200946379b9c0573a62bcf63658872a002da6c17 Parents: eab9c5f Author: Christian Schneider <[email protected]> Authored: Wed Jan 29 16:08:41 2014 +0100 Committer: Christian Schneider <[email protected]> Committed: Wed Jan 29 16:08:41 2014 +0100 ---------------------------------------------------------------------- jdbc/core/pom.xml | 7 +- .../karaf/jdbc/internal/JdbcServiceImpl.java | 88 +++++--------------- jms/core/pom.xml | 7 +- .../karaf/jms/internal/JmsServiceImpl.java | 7 +- .../apache/karaf/jms/internal/TemplateUtil.java | 87 ------------------- .../org/apache/karaf/util/TemplateUtils.java | 83 ++++++++++++++++++ 6 files changed, 124 insertions(+), 155 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/20094637/jdbc/core/pom.xml ---------------------------------------------------------------------- diff --git a/jdbc/core/pom.xml b/jdbc/core/pom.xml index f1f562d..3587f8a 100644 --- a/jdbc/core/pom.xml +++ b/jdbc/core/pom.xml @@ -43,6 +43,10 @@ <artifactId>org.osgi.core</artifactId> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.karaf</groupId> + <artifactId>org.apache.karaf.util</artifactId> + </dependency> </dependencies> <build> @@ -71,7 +75,8 @@ org.apache.karaf.jdbc </Export-Package> <Private-Package> - org.apache.karaf.jdbc.internal + org.apache.karaf.jdbc.internal, + org.apache.karaf.util </Private-Package> </instructions> </configuration> http://git-wip-us.apache.org/repos/asf/karaf/blob/20094637/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java ---------------------------------------------------------------------- diff --git a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java index 1e11938..1668116 100644 --- a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java +++ b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java @@ -17,11 +17,13 @@ package org.apache.karaf.jdbc.internal; import org.apache.karaf.jdbc.JdbcService; +import org.apache.karaf.util.TemplateUtils; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import javax.sql.DataSource; + import java.io.*; import java.sql.*; import java.util.*; @@ -52,79 +54,35 @@ public class JdbcServiceImpl implements JdbcService { } public void installBundle(BundleContext bundleContext, String version) throws Exception { - if (version != null) { - bundleContext.installBundle(this.bundleUrl + version, null).start(); - } else { - bundleContext.installBundle(this.bundleUrl + this.defaultVersion, null).start(); - } + String location = this.bundleUrl + getWithDefault(version, this.defaultVersion); + bundleContext.installBundle(location, null).start(); } - public void copyDataSourceFile(File outFile, HashMap<String, String> properties) throws Exception { - if (!outFile.exists()) { - InputStream is = JdbcServiceImpl.class.getResourceAsStream(this.templateFile); - if (is == null) { - throw new IllegalArgumentException("Resource " + this.templateFile + " doesn't exist"); - } - try { - // read it line at a time so that we can use the platform line ending when we write it out - PrintStream out = new PrintStream(new FileOutputStream(outFile)); - try { - Scanner scanner = new Scanner(is); - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - line = filter(line, properties); - out.println(line); - } - } finally { - safeClose(out); - } - } finally { - safeClose(is); - } - } else { - throw new IllegalArgumentException("File " + outFile.getPath() + " already exists. Remove it if you wish to recreate it."); - } + private String getWithDefault(String st, String defaultSt) { + return (st == null)? defaultSt : st; } - private void safeClose(InputStream is) throws IOException { - if (is == null) - return; - try { - is.close(); - } catch (Throwable ignore) { - // nothing to do + public void copyDataSourceFile(File outFile, HashMap<String, String> properties) { + InputStream is = this.getClass().getResourceAsStream(templateFile); + if (is == null) { + throw new IllegalArgumentException("Template resource " + templateFile + " doesn't exist"); } + TemplateUtils.createFromTemplate(outFile, is, properties); } - private void safeClose(OutputStream is) throws IOException { - if (is == null) - return; - try { - is.close(); - } catch (Throwable ignore) { - // nothing to do - } - } - - private String filter(String line, HashMap<String, String> props) { - for (Map.Entry<String, String> i : props.entrySet()) { - int p1 = line.indexOf(i.getKey()); - if (p1 >= 0) { - String l1 = line.substring(0, p1); - String l2 = line.substring(p1 + i.getKey().length()); - line = l1 + i.getValue() + l2; - } - } - return line; - } } private BundleContext bundleContext; @Override public void create(String name, String type, String driverClassName, String version, String url, String user, String password, boolean tryToInstallBundles) throws Exception { + if (type == null) { + throw new IllegalStateException("No database type supplied"); + } + TYPES dbType = TYPES.valueOf(type.toUpperCase()); + if (tryToInstallBundles) { - TYPES.valueOf(type.toUpperCase()).installBundle(bundleContext, version); + dbType.installBundle(bundleContext, version); } File karafBase = new File(System.getProperty("karaf.base")); @@ -132,13 +90,13 @@ public class JdbcServiceImpl implements JdbcService { File outFile = new File(deployFolder, "datasource-" + name + ".xml"); HashMap<String, String> properties = new HashMap<String, String>(); - properties.put("${name}", name); - properties.put("${driver}", driverClassName); - properties.put("${url}", url); - properties.put("${user}", user); - properties.put("${password}", password); + properties.put("name", name); + properties.put("driver", driverClassName); + properties.put("url", url); + properties.put("user", user); + properties.put("password", password); - TYPES.valueOf(type.toUpperCase()).copyDataSourceFile(outFile, properties); + dbType.copyDataSourceFile(outFile, properties); } @Override http://git-wip-us.apache.org/repos/asf/karaf/blob/20094637/jms/core/pom.xml ---------------------------------------------------------------------- diff --git a/jms/core/pom.xml b/jms/core/pom.xml index cb32295..105d8cc 100644 --- a/jms/core/pom.xml +++ b/jms/core/pom.xml @@ -54,6 +54,10 @@ <version>5.9.0</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.karaf</groupId> + <artifactId>org.apache.karaf.util</artifactId> + </dependency> </dependencies> <build> @@ -86,7 +90,8 @@ * </Import-Package> <Private-Package> - org.apache.karaf.jms.internal + org.apache.karaf.jms.internal, + org.apache.karaf.util </Private-Package> </instructions> </configuration> http://git-wip-us.apache.org/repos/asf/karaf/blob/20094637/jms/core/src/main/java/org/apache/karaf/jms/internal/JmsServiceImpl.java ---------------------------------------------------------------------- diff --git a/jms/core/src/main/java/org/apache/karaf/jms/internal/JmsServiceImpl.java b/jms/core/src/main/java/org/apache/karaf/jms/internal/JmsServiceImpl.java index b8b0f30..d51bc75 100644 --- a/jms/core/src/main/java/org/apache/karaf/jms/internal/JmsServiceImpl.java +++ b/jms/core/src/main/java/org/apache/karaf/jms/internal/JmsServiceImpl.java @@ -23,6 +23,7 @@ import org.apache.activemq.command.ActiveMQTopic; import org.apache.activemq.pool.PooledConnection; import org.apache.karaf.jms.JmsMessage; import org.apache.karaf.jms.JmsService; +import org.apache.karaf.util.TemplateUtils; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; @@ -74,7 +75,11 @@ public class JmsServiceImpl implements JmsService { properties.put("channel", splitted[3]); template = "connectionfactory-webspheremq.xml"; } - TemplateUtil.createFromTemplate(outFile, template, properties); + InputStream is = this.getClass().getResourceAsStream(template); + if (is == null) { + throw new IllegalArgumentException("Template resource " + template + " doesn't exist"); + } + TemplateUtils.createFromTemplate(outFile, is, properties); } private File getConnectionFactoryFile(String name) { http://git-wip-us.apache.org/repos/asf/karaf/blob/20094637/jms/core/src/main/java/org/apache/karaf/jms/internal/TemplateUtil.java ---------------------------------------------------------------------- diff --git a/jms/core/src/main/java/org/apache/karaf/jms/internal/TemplateUtil.java b/jms/core/src/main/java/org/apache/karaf/jms/internal/TemplateUtil.java deleted file mode 100644 index bb9cb75..0000000 --- a/jms/core/src/main/java/org/apache/karaf/jms/internal/TemplateUtil.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 org.apache.karaf.jms.internal; - -import java.io.Closeable; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.PrintStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -public class TemplateUtil { - private TemplateUtil() { - } - - public static void createFromTemplate(File outFile, String resource, HashMap<String, String> properties) { - if (outFile.exists()) { - throw new IllegalArgumentException("File " + outFile.getPath() - + " already exists. Remove it if you wish to recreate it."); - } - InputStream is = TemplateUtil.class.getResourceAsStream(resource); - if (is == null) { - throw new IllegalArgumentException("Resource " + resource + " doesn't exist"); - } - PrintStream out = null; - Scanner scanner = null; - try { - // read it line at a time so that we can use the platform line ending when we write it out - out = new PrintStream(new FileOutputStream(outFile)); - scanner = new Scanner(is); - - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - line = filter(line, properties); - out.println(line); - } - } catch (FileNotFoundException e) { - throw new RuntimeException("Can not create " + outFile, e); - } finally { - safeClose(scanner); - safeClose(out); - safeClose(is); - } - } - - private static String filter(String line, HashMap<String, String> props) { - for (Map.Entry<String, String> entry : props.entrySet()) { - String key = "${" + entry.getKey() + "}"; - int p1 = line.indexOf(key); - if (p1 >= 0) { - String l1 = line.substring(0, p1); - String l2 = line.substring(p1 + key.length()); - line = l1 + entry.getValue() + l2; - } - } - return line; - } - - private static void safeClose(Closeable cl) { - if (cl == null) { - return; - } - try { - cl.close(); - } catch (Throwable ignore) { - // nothing to do - } - } - -} http://git-wip-us.apache.org/repos/asf/karaf/blob/20094637/util/src/main/java/org/apache/karaf/util/TemplateUtils.java ---------------------------------------------------------------------- diff --git a/util/src/main/java/org/apache/karaf/util/TemplateUtils.java b/util/src/main/java/org/apache/karaf/util/TemplateUtils.java new file mode 100644 index 0000000..067c491 --- /dev/null +++ b/util/src/main/java/org/apache/karaf/util/TemplateUtils.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.karaf.util; + +import java.io.Closeable; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class TemplateUtils { + private TemplateUtils() { + } + + public static void createFromTemplate(File outFile, InputStream templateIs, HashMap<String, String> properties) { + if (outFile.exists()) { + throw new IllegalArgumentException("File " + outFile.getPath() + + " already exists. Remove it if you wish to recreate it."); + } + PrintStream out = null; + Scanner scanner = null; + try { + // read it line at a time so that we can use the platform line ending when we write it out + out = new PrintStream(new FileOutputStream(outFile)); + scanner = new Scanner(templateIs); + + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + line = filter(line, properties); + out.println(line); + } + } catch (FileNotFoundException e) { + throw new RuntimeException("Can not create " + outFile, e); + } finally { + safeClose(scanner); + safeClose(out); + safeClose(templateIs); + } + } + + private static String filter(String line, HashMap<String, String> props) { + for (Map.Entry<String, String> entry : props.entrySet()) { + String key = "${" + entry.getKey() + "}"; + int p1 = line.indexOf(key); + if (p1 >= 0) { + String l1 = line.substring(0, p1); + String l2 = line.substring(p1 + key.length()); + line = l1 + entry.getValue() + l2; + } + } + return line; + } + + private static void safeClose(Closeable cl) { + if (cl == null) { + return; + } + try { + cl.close(); + } catch (Throwable ignore) { + // nothing to do + } + } + +}
