Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 

README.md

Commons

Ad-hoc collection of re-usable Java classes.

Argument

Reads configuration parameters from environment variables and Java system properties.

Usage

String javaHome = Argument.resolver()
        .firstTry("javaHome", Argument.Type.PROPERTY) // -DjavaHome="..."
        .thenTry("JAVA_HOME", Argument.Type.ENVIRONMENT_VARIABLE) // export JAVA_HOME=...
        .orElse("/usr/lib/jvm/openjdk-8-jdk/")
        .resolve();

BackOffPolicy

Back-off policy for anything web.

Usage

BackOffPolicy backOffPolicy = new ExponentialBackOffPolicy.Builder()
        .setInitialInterval(1, TimeUnit.SECONDS)
        .setMaxInterval(1, TimeUnit.MINUTES)
        .setMultiplier(1.5)
        .setMaxElapsedTime(15, TimeUnit.MINUTES)
        .setRandomizationFactor(0.5)
        .build();

// Pseudo code, won't compile
while (true) {
	try {
    	String response = url.fetch();
        backOffPolicy.reset();
    } catch (IOException ioe) {
    	long interval = backOffPolicy.nextIntervalMillis();
        if (interval != BackOffPolicy.STOP) {
        	Thread.sleep(interval);
        } else {
        	throw e;
        }
    }
}

DirectoryWatcher

Watches one or more directories for changes using Java 7's WatchService API.

Usage

DirectoryWatcher watcher = new DirectoryWatcher.Builder()
        .addDirectories("/home/hindol/")
        .setPreExistingAsCreated(true)
        .build(new DirectoryWatcher.Listener() {
            public void onEvent(DirectoryWatcher.Event event, Path path) {
                switch (event) {
                    case ENTRY_CREATE:
                        System.out.println(path + " created.");
                        break;

                    case ENTRY_MODIFY:
                        ...

                    case ENTRY_DELETE:
                        ...
                }
            }
        });

try {
    watcher.start(); // Actual watching starts here
    TimeUnit.SECONDS.sleep(30);
    watcher.stop(); // Stop watching
} catch (Exception e) {
    // Do something
}

URL

URL encoding/decoding and parser/builder. Definitely not as standards compliant as other libraries but it works!

Usage

assertEquals(
    URL.timesEncoded("namshi%253A%252F%252Fn%252Ftarget%252F%253Futm_source%253Dtestng"),
    2
);

assertEquals(
    URL.decode("namshi%253A%252F%252Fn%252Ftarget%252F%253Futm_source%253Dtestng", 2),
    "namshi://n/target/?utm_source=testng"
);

assertEquals(
    URL.encode("namshi%3A%2F%2Fn%2Ftarget%2F%3Futm_source%3Dtestng", 0),
    "namshi%3A%2F%2Fn%2Ftarget%2F%3Futm_source%3Dtestng"
);

assertEquals(
    URL.ensureProtocol("www.vizury.com", "https"),
    "https://www.vizury.com"
);
assertEquals(
    URL.ensureProtocol("http://www.vizury.com", "https"),
    "http://www.vizury.com"
);

assertTrue(URL.isDeepLink("mmyt://htl/listing/?checkin=05192016&checkout=05212016&city=GOI"));

assertEquals(
    URL.safeDecode("http://www.google.com?q=Guy+Ritchie"),
    "http://www.google.com?q=Guy+Ritchie"
);

URL.Parser parser = URL.parse("mmyt://htl/listing/?checkin=05192016&checkout=05212016&city=GOI");

assertEquals(parser.protocol(), "mmyt");
assertEquals(parser.host(), "htl");
assertEquals(parser.path(), "/listing/");
assertEquals(parser.query(), "checkin=05192016&checkout=05212016&city=GOI");

URL.QueryParser query = parser.queryParser();

assertEquals(query.parameter("checkin"), "05192016");
assertEquals(query.parameter("checkout"), "05212016");
assertEquals(query.parameter("city"), "GOI");

assertEquals(
    URL.builder().setProtocol("https").setHost("www.vizury.com").toUrl(),
    "https://www.vizury.com/"
);

XML

DSL like XML creation.

Usage

String xml = Xml.createWriter()
                    .beginElement("VAST")
                        .attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
                        .attribute("xsi:noNamespaceSchemaLocation", "vast.xsd")
                        .attribute("version", "3.0")
                        .beginElement("Ad")
                            .attribute("id", "xyz")
                            .beginElement("Wrapper")
                                .element("AdSystem", "Vizury")
                                .element("VASTAdTagURI", Xml.wrapInCdata("https://www.vizury.com/"))
                                .element("Error", Xml.wrapInCdata("https://www.vizury.com/"))
                                .element("Impression", Xml.wrapInCdata("https://www.vizury.com/"))
                                .beginElement("Creatives")
                                    .beginElement("Creative")
                                        .attribute("AdID", "xyz")
                                    .endElement()
                                .endElement()
                            .endElement()
                        .endElement()
                    .endElement().toXml();

The above code creates the following XML (minus the indentation of course),

<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="vast.xsd"
      version="3.0">
    <Ad id="xyz">
        <Wrapper>
            <AdSystem>Vizury</AdSystem>
            <VASTAdTagURI><![CDATA[https://www.vizury.com/]]></VASTAdTagURI>
            <Error><![CDATA[https://www.vizury.com/]]></Error>
            <Impression><![CDATA[https://www.vizury.com/]]></Impression>
            <Creatives><Creative AdID="xyz" /></Creatives>
        </Wrapper>
    </Ad>
</VAST>

Template

Simple string templates.

Usage

// Use '{{' and '}}' as marker (default).
Template template = Template.compile("To {{verb}} or not to {{verb}}.");
String sentence = template.format("verb", "be");
    
// Use '__' instead.
Template template = Template.createEngine("__", "__").compile("I tried to __verb__ your __noun__.");
String sentence = template.format("verb", "roast", "noun", "toast");
You can’t perform that action at this time.