diff --git a/src/example/configurations/jdbc-example/build.xml b/src/example/configurations/jdbc-example/build.xml new file mode 100644 index 00000000..3dfd3bb3 --- /dev/null +++ b/src/example/configurations/jdbc-example/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/example/configurations/jdbc-example/ivy.xml b/src/example/configurations/jdbc-example/ivy.xml new file mode 100644 index 00000000..1bcab253 --- /dev/null +++ b/src/example/configurations/jdbc-example/ivy.xml @@ -0,0 +1,26 @@ + + + + + This is an example project that aims to demonstrate the usage of the configuration in ivy. + This project provide 4 configurations. Each configurations describe the requirement to build or run the project + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/example/configurations/jdbc-example/src/dev.properties b/src/example/configurations/jdbc-example/src/dev.properties new file mode 100644 index 00000000..11b36df8 --- /dev/null +++ b/src/example/configurations/jdbc-example/src/dev.properties @@ -0,0 +1 @@ +driver.class=com.mckoi.JDBCDriver \ No newline at end of file diff --git a/src/example/configurations/jdbc-example/src/example/ConfigurationsExample.java b/src/example/configurations/jdbc-example/src/example/ConfigurationsExample.java new file mode 100644 index 00000000..73b2baba --- /dev/null +++ b/src/example/configurations/jdbc-example/src/example/ConfigurationsExample.java @@ -0,0 +1,44 @@ +package example; + +import java.io.IOException; +import java.util.Properties; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; +import org.apache.commons.cli.PosixParser; + +public class ConfigurationsExample { + + public static void main(String[] args) { + String jdbcPropToLoad = "prod.properties"; + CommandLineParser parser = new PosixParser(); + Options options = new Options(); + options.addOption("d", "dev", false, "Dev tag to launch app in dev mode. Means that app will launch embedded mckoi db."); + try { + CommandLine line = parser.parse( options, args ); + if(line.hasOption("d")) { + System.err.println("App is in DEV mode"); + jdbcPropToLoad = "dev.properties"; + } + } + catch( ParseException exp ) { + System.err.println( "Parsing failed. Reason: " + exp.getMessage() ); + } + Properties p = new Properties(); + try { + p.load(ConfigurationsExample.class.getResourceAsStream("/"+jdbcPropToLoad)); + } catch (IOException e) { + System.err.println( "Properties loading failed. Reason: " + e.getMessage()); + } + try { + String clazz = p.getProperty("driver.class"); + Class.forName(clazz); + System.out.println(" Jdbc driver loaded :"+clazz); + } catch (ClassNotFoundException e) { + System.err.println( "Jdbc Driver class loading failed. Reason: " + e.getMessage()); + e.printStackTrace(); + } + + } +} diff --git a/src/example/configurations/jdbc-example/src/prod.properties b/src/example/configurations/jdbc-example/src/prod.properties new file mode 100644 index 00000000..3dfc5d5a --- /dev/null +++ b/src/example/configurations/jdbc-example/src/prod.properties @@ -0,0 +1 @@ +driver.class=org.gjt.mm.mysql.Driver \ No newline at end of file diff --git a/src/example/configurations/multi-projects/filter-framework/build.xml b/src/example/configurations/multi-projects/filter-framework/build.xml new file mode 100644 index 00000000..ff0d92db --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/build.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/example/configurations/multi-projects/filter-framework/ivy.xml b/src/example/configurations/multi-projects/filter-framework/ivy.xml new file mode 100644 index 00000000..dc55aaa6 --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/ivy.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/example/configurations/multi-projects/filter-framework/src/filter/FilterProvider.java b/src/example/configurations/multi-projects/filter-framework/src/filter/FilterProvider.java new file mode 100644 index 00000000..c0c21c15 --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/src/filter/FilterProvider.java @@ -0,0 +1,20 @@ +package filter; + + +public class FilterProvider { + + public static IFilter getFilter() { + try { + Class clazz = Class.forName("filter.ccimpl.CCFilter"); + return (IFilter) clazz.newInstance(); + } catch (Exception e) { + try { + Class clazz = Class.forName("filter.hmimpl.HMFilter"); + return (IFilter) clazz.newInstance(); + } catch (Exception e1) { + System.err.println("No filter implementation found in classpath !"); + } + return null; + } + } +} diff --git a/src/example/configurations/multi-projects/filter-framework/src/filter/IFilter.java b/src/example/configurations/multi-projects/filter-framework/src/filter/IFilter.java new file mode 100644 index 00000000..ff03f2a8 --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/src/filter/IFilter.java @@ -0,0 +1,5 @@ +package filter; + +public interface IFilter { + String[] filter(String[] values, String prefix); +} diff --git a/src/example/configurations/multi-projects/filter-framework/src/filter/ccimpl/CCFilter.java b/src/example/configurations/multi-projects/filter-framework/src/filter/ccimpl/CCFilter.java new file mode 100644 index 00000000..2a0742cd --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/src/filter/ccimpl/CCFilter.java @@ -0,0 +1,28 @@ +package filter.ccimpl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.Predicate; +import filter.IFilter; + +public class CCFilter implements IFilter { + + public String[] filter(String[] values, final String prefix) { + if(values == null) { + return null; + } + if(prefix == null) { + return values; + } + + List result = new ArrayList(Arrays.asList(values)); + CollectionUtils.filter(result, new Predicate() { + public boolean evaluate(Object o) { + return o!= null && o.toString().startsWith(prefix); + } + }); + return (String[]) result.toArray(new String[result.size()]); + } +} diff --git a/src/example/configurations/multi-projects/filter-framework/src/filter/hmimpl/HMFilter.java b/src/example/configurations/multi-projects/filter-framework/src/filter/hmimpl/HMFilter.java new file mode 100644 index 00000000..a3d62169 --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/src/filter/hmimpl/HMFilter.java @@ -0,0 +1,25 @@ +package filter.hmimpl; + +import java.util.ArrayList; +import java.util.List; +import filter.IFilter; + +public class HMFilter implements IFilter { + + public String[] filter(String[] values, String prefix) { + if(values == null) { + return null; + } + if(prefix == null) { + return values; + } + List result = new ArrayList(); + for (int i = 0; i < values.length; i++) { + String string = values[i]; + if(string != null && string.startsWith(prefix)) { + result.add(string); + } + } + return (String[]) result.toArray(new String[result.size()]); + } +} diff --git a/src/example/configurations/multi-projects/filter-framework/test/filter/AbstractTestFilter.java b/src/example/configurations/multi-projects/filter-framework/test/filter/AbstractTestFilter.java new file mode 100644 index 00000000..3182d25a --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/test/filter/AbstractTestFilter.java @@ -0,0 +1,53 @@ +package filter; + +import junit.framework.TestCase; + +public abstract class AbstractTestFilter extends TestCase { + + public void testFilterNull() { + Exception err = null; + try { + getIFilter().filter(null, null); + } catch (NullPointerException npe) { + err = npe; + } + assertNull(err); + } + + /** + * @return + */ + public abstract IFilter getIFilter() ; + + public void testFilterNullValues() { + Exception err = null; + try { + getIFilter().filter(null, "test"); + } catch (NullPointerException npe) { + err = npe; + } + assertNull(err); + } + + public void testFilterNullPrefix() { + Exception err = null; + try { + getIFilter().filter(new String[]{"test"}, null); + } catch (NullPointerException npe) { + err = npe; + } + assertNull(err); + } + + public void testFilter() { + String[] result = getIFilter().filter(new String[]{"test", "nogood", "mustbe filtered"}, "t"); + assertNotNull(result); + assertEquals(result.length, 1); + } + + public void testFilterWithNullValues() { + String[] result = getIFilter().filter(new String[]{"test", null, "mustbe filtered"}, "t"); + assertNotNull(result); + assertEquals(result.length, 1); + } +} diff --git a/src/example/configurations/multi-projects/filter-framework/test/filter/ccimpl/CCFilterTest.java b/src/example/configurations/multi-projects/filter-framework/test/filter/ccimpl/CCFilterTest.java new file mode 100644 index 00000000..9f56ecbd --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/test/filter/ccimpl/CCFilterTest.java @@ -0,0 +1,10 @@ +package filter.ccimpl; + +import filter.AbstractTestFilter; +import filter.IFilter; + +public class CCFilterTest extends AbstractTestFilter { + public IFilter getIFilter() { + return new CCFilter(); + } +} diff --git a/src/example/configurations/multi-projects/filter-framework/test/filter/hmimpl/HMFilterTest.java b/src/example/configurations/multi-projects/filter-framework/test/filter/hmimpl/HMFilterTest.java new file mode 100644 index 00000000..bf0ec739 --- /dev/null +++ b/src/example/configurations/multi-projects/filter-framework/test/filter/hmimpl/HMFilterTest.java @@ -0,0 +1,10 @@ +package filter.hmimpl; + +import filter.AbstractTestFilter; +import filter.IFilter; + +public class HMFilterTest extends AbstractTestFilter { + public IFilter getIFilter() { + return new HMFilter(); + } +} diff --git a/src/example/configurations/multi-projects/myapp/build.xml b/src/example/configurations/multi-projects/myapp/build.xml new file mode 100644 index 00000000..d232f15b --- /dev/null +++ b/src/example/configurations/multi-projects/myapp/build.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/example/configurations/multi-projects/myapp/ivy.xml b/src/example/configurations/multi-projects/myapp/ivy.xml new file mode 100644 index 00000000..9c9e2575 --- /dev/null +++ b/src/example/configurations/multi-projects/myapp/ivy.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/example/configurations/multi-projects/myapp/src/myapp/Main.java b/src/example/configurations/multi-projects/myapp/src/myapp/Main.java new file mode 100644 index 00000000..a21c8003 --- /dev/null +++ b/src/example/configurations/multi-projects/myapp/src/myapp/Main.java @@ -0,0 +1,16 @@ +package myapp; + +import java.util.Arrays; +import filter.FilterProvider; +import filter.IFilter; + +public class Main { + + public static void main(String[] args) { + String toFilter[] = new String[]{"one", "two", "tree", "four"}; + IFilter filter = FilterProvider.getFilter(); + System.out.println("Filtering with:"+filter.getClass()); + String filtered[] = filter.filter(toFilter, "t"); + System.out.println("Result :"+Arrays.asList(filtered)); + } +}