CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-dropwizard--dropwizard-util

Dropwizard utility classes for data sizes, durations, enums, generics, resources, exceptions, JAR locations, and direct execution services.

Pending
Overview
Eval results
Files

duration.mddocs/

Duration Utilities

Duration management capabilities for parsing and manipulating duration values with support for various time units and conversion to standard Java types.

Duration Class

The Duration class provides helper methods for parsing human-readable duration values into a thread-safe, immutable representation.

Static Factory Methods

Create Duration instances for specific time units:

public static Duration nanoseconds(long count);
public static Duration microseconds(long count);
public static Duration milliseconds(long count);
public static Duration seconds(long count);
public static Duration minutes(long count);
public static Duration hours(long count);
public static Duration days(long count);

Parameters:

  • count - The number of time units

Returns: A new Duration instance representing the specified time period

Parsing Methods

Parse human-readable strings into Duration objects:

public static Duration parse(String duration);

Parameters:

  • duration - String representation like "30 seconds", "5 minutes", "2 hours"

Returns: A valid Duration representing the parsed input string

Supported Formats:

  • Full unit names: "30 seconds", "5 minutes", "2 hours", "1 day"
  • Abbreviated forms: "30s", "5m", "2h", "1d"
  • Plural and singular: "1 second", "2 seconds", "1 minute", "5 minutes"
  • Case variations: "SECONDS", "Minutes", "ms"

Supported Units:

  • ns, nanosecond, nanoseconds - Nanoseconds
  • us, microsecond, microseconds - Microseconds
  • ms, millisecond, milliseconds - Milliseconds
  • s, second, seconds - Seconds
  • m, min, mins, minute, minutes - Minutes
  • h, hour, hours - Hours
  • d, day, days - Days

Throws:

  • IllegalArgumentException - If the input cannot be parsed or contains invalid time units

Instance Methods

Access duration properties:

public long getQuantity();
public TimeUnit getUnit();

Convert to specific time units:

public long toNanoseconds();
public long toMicroseconds();
public long toMilliseconds();
public long toSeconds();
public long toMinutes();
public long toHours();
public long toDays();

Convert to Java standard library Duration:

public java.time.Duration toJavaDuration();

Standard object methods:

public boolean equals(Object obj);
public int hashCode();
public String toString();
public int compareTo(Duration other);

Usage Examples

Basic Creation

// Create using factory methods
Duration fiveSeconds = Duration.seconds(5);
Duration tenMinutes = Duration.minutes(10);
Duration oneHour = Duration.hours(1);
Duration threedays = Duration.days(3);

// Get quantity and unit
long quantity = fiveSeconds.getQuantity(); // 5
TimeUnit unit = fiveSeconds.getUnit();     // TimeUnit.SECONDS

Parsing Examples

// Parse various formats
Duration timeout = Duration.parse("30 seconds");
Duration interval = Duration.parse("5 minutes");
Duration delay = Duration.parse("2 hours");
Duration period = Duration.parse("1 day");

// Abbreviated forms
Duration shortTimeout = Duration.parse("30s");
Duration shortInterval = Duration.parse("5m");
Duration shortDelay = Duration.parse("2h");
Duration shortPeriod = Duration.parse("1d");

// Singular and plural forms
Duration oneSecond = Duration.parse("1 second");
Duration manySeconds = Duration.parse("30 seconds");
Duration oneMinute = Duration.parse("1 minute");
Duration manyMinutes = Duration.parse("10 minutes");

// Different cases work
Duration caseInsensitive = Duration.parse("30 SECONDS");

Unit Conversion

Duration original = Duration.parse("2 hours");

// Convert to different units
long nanoseconds = original.toNanoseconds();  // 7,200,000,000,000
long microseconds = original.toMicroseconds(); // 7,200,000,000
long milliseconds = original.toMilliseconds(); // 7,200,000
long seconds = original.toSeconds();           // 7,200
long minutes = original.toMinutes();           // 120
long hours = original.toHours();               // 2
long days = original.toDays();                 // 0 (truncated)

Java Integration

// Convert to java.time.Duration for integration with modern Java APIs
Duration dropwizardDuration = Duration.parse("30 seconds");
java.time.Duration javaDuration = dropwizardDuration.toJavaDuration();

// Use with modern Java APIs
CompletableFuture.delayedExecutor(javaDuration.toMillis(), TimeUnit.MILLISECONDS);

// Convert back from java.time.Duration if needed
java.time.Duration javaTimeout = java.time.Duration.ofMinutes(5);
Duration dropwizardTimeout = Duration.milliseconds(javaTimeout.toMillis());

Comparison and Sorting

Duration short = Duration.seconds(30);
Duration long = Duration.minutes(2);

// Comparison (compares based on nanosecond values)
int comparison = short.compareTo(long); // negative (30s < 2min)

// Equality (compares quantity and unit exactly)
Duration seconds30a = Duration.seconds(30);
Duration seconds30b = Duration.seconds(30);
boolean equal = seconds30a.equals(seconds30b); // true

// Note: Different units with same time value are NOT equal
Duration millis30000 = Duration.milliseconds(30000);
Duration seconds30 = Duration.seconds(30);
boolean equalTime = millis30000.equals(seconds30); // false (different units)
boolean equalComparison = millis30000.compareTo(seconds30) == 0; // true (same time value)

String Representation

Duration duration = Duration.minutes(5);
String str = duration.toString(); // "5 minutes"

Duration singleUnit = Duration.minutes(1);
String singleStr = singleUnit.toString(); // "1 minute" (singular)

Duration multipleUnits = Duration.hours(2);
String multipleStr = multipleUnits.toString(); // "2 hours" (plural)

Configuration Usage

Common pattern for configuration timeouts and intervals:

// In configuration classes
public class DatabaseConfiguration {
    private Duration connectionTimeout = Duration.seconds(30);
    private Duration queryTimeout = Duration.minutes(5);
    private Duration healthCheckInterval = Duration.seconds(10);
    
    // Configuration parsing from YAML/properties
    public void setConnectionTimeout(String timeout) {
        this.connectionTimeout = Duration.parse(timeout);
    }
    
    // Usage in application code
    public Connection getConnection() {
        return dataSource.getConnection(connectionTimeout.toMilliseconds());
    }
}

Thread and Executor Usage

// Use with thread operations
Duration sleepTime = Duration.parse("500ms");
Thread.sleep(sleepTime.toMilliseconds());

// Use with ScheduledExecutorService
Duration delay = Duration.parse("10 seconds");
Duration period = Duration.parse("1 minute");
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(
    task, 
    delay.toMilliseconds(), 
    period.toMilliseconds(), 
    TimeUnit.MILLISECONDS
);

Error Handling

The parsing method throws IllegalArgumentException for invalid input:

try {
    Duration.parse("invalid duration"); // Throws IllegalArgumentException
} catch (IllegalArgumentException e) {
    // Handle parsing error
}

try {
    Duration.parse("30 invalid-unit"); // Throws IllegalArgumentException (unknown unit)
} catch (IllegalArgumentException e) {
    // Handle unknown unit error
}

try {
    Duration.parse("not-a-number seconds"); // Throws IllegalArgumentException (invalid number)
} catch (IllegalArgumentException e) {
    // Handle number parsing error
}

Integration with Java Time API

The Duration class provides seamless integration with Java's modern time APIs:

// Convert to java.time.Duration for use with modern APIs
Duration dropwizardTimeout = Duration.parse("30 seconds");
java.time.Duration javaTimeout = dropwizardTimeout.toJavaDuration();

// Use with CompletableFuture
CompletableFuture<String> future = CompletableFuture
    .supplyAsync(() -> performOperation())
    .orTimeout(javaTimeout.toMillis(), TimeUnit.MILLISECONDS);

// Use with reactive streams (if using reactive libraries)
Flux.interval(javaTimeout).subscribe(tick -> performPeriodicTask());

Install with Tessl CLI

npx tessl i tessl/maven-io-dropwizard--dropwizard-util

docs

data-size.md

duration.md

enum-generics.md

index.md

jar-executor.md

resource-exception.md

tile.json