Skip to main content

Java SDK

The Java SDK is currently in development. This page shows the planned implementation.
The official Gumnut Java SDK will provide a robust, type-safe interface to the Gumnut API for Java applications and Android development.

Planned Features

Core Capabilities

  • Java 11+ Support: Compatible with modern Java versions
  • Gradle and Maven Support: Easy integration with popular build tools
  • Reactive Streams: Built-in support with Project Reactor
  • Builder Pattern: Intuitive API construction
  • Comprehensive JavaDoc: Complete documentation for all methods

Advanced Features

  • Async Operations: Non-blocking API calls
  • Automatic Retries: Configurable retry policies
  • Connection Pooling: Optimized HTTP client performance
  • Type Safety: Strong typing for all API responses
  • Android Compatibility: Works seamlessly in Android apps

Expected Usage

Installation

Gradle:
dependencies {
    implementation 'ai.gumnut:gumnut-sdk:1.0.0'
}
Maven:
<dependency>
    <groupId>ai.gumnut</groupId>
    <artifactId>gumnut-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

Basic Usage

import ai.gumnut.GumnutClient;
import ai.gumnut.models.*;

// Initialize client
GumnutClient client = GumnutClient.builder()
    .apiKey(System.getenv("GUMNUT_API_KEY"))
    .build();

// Upload an asset
Asset asset = client.assets().create()
    .assetData(new File("photo.jpg"))
    .deviceAssetId("photo_001")
    .deviceId("my_device")
    .fileCreatedAt(Instant.now())
    .fileModifiedAt(Instant.now())
    .execute();

// Create an album
Album album = client.albums().create()
    .albumName("Vacation 2024")
    .description("Summer vacation photos")
    .execute();

// Add asset to album
client.albums().addAssets(album.getId())
    .assetIds(List.of(asset.getId()))
    .execute();

Async Operations

import ai.gumnut.AsyncGumnutClient;
import java.util.concurrent.CompletableFuture;

AsyncGumnutClient asyncClient = AsyncGumnutClient.builder()
    .apiKey(System.getenv("GUMNUT_API_KEY"))
    .build();

// Async asset upload
CompletableFuture<Asset> assetFuture = asyncClient.assets().create()
    .assetData(new File("photo.jpg"))
    .deviceAssetId("photo_001")
    .deviceId("my_device")
    .executeAsync();

assetFuture.thenAccept(asset -> {
    System.out.println("Uploaded asset: " + asset.getId());
});

Reactive Streams

import reactor.core.publisher.Flux;

// Stream all assets
Flux<Asset> assetsStream = client.assets().listStream();

assetsStream
    .filter(asset -> asset.getType() == AssetType.IMAGE)
    .take(100)
    .subscribe(asset -> processAsset(asset));

Android Usage

// Android-specific configuration
GumnutClient client = GumnutClient.builder()
    .apiKey(getApiKey())
    .httpClient(OkHttpClient.Builder()
        .connectTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .build())
    .build();

// Upload from Android URI
ContentResolver resolver = getContentResolver();
InputStream inputStream = resolver.openInputStream(imageUri);

Asset asset = client.assets().create()
    .assetData(inputStream)
    .deviceAssetId("android_" + System.currentTimeMillis())
    .deviceId("android_device")
    .execute();

Planned Repository

GitHub Repository: github.com/gumnut-ai/photos-sdk-java (Coming Soon) The repository will include:
  • Complete source code
  • Comprehensive examples
  • Android sample app
  • JavaDoc documentation
  • Migration guides

Use Cases

Spring Boot Integration

@Service
public class PhotoService {
    
    private final GumnutClient gumnutClient;
    
    public PhotoService(@Value("${gumnut.api-key}") String apiKey) {
        this.gumnutClient = GumnutClient.builder()
            .apiKey(apiKey)
            .build();
    }
    
    public Asset uploadPhoto(MultipartFile file) {
        return gumnutClient.assets().create()
            .assetData(file.getInputStream())
            .deviceAssetId(UUID.randomUUID().toString())
            .deviceId("spring_app")
            .execute();
    }
}
public class GalleryActivity extends AppCompatActivity {
    
    private GumnutClient gumnutClient;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        gumnutClient = GumnutClient.builder()
            .apiKey(BuildConfig.GUMNUT_API_KEY)
            .build();
            
        loadPhotos();
    }
    
    private void loadPhotos() {
        gumnutClient.assets().listAsync()
            .thenAccept(assets -> {
                runOnUiThread(() -> updateGallery(assets));
            });
    }
}

Development Timeline

  1. Q2 2024: Initial development begins
  2. Q3 2024: Alpha release for testing
  3. Q4 2024: Beta release with documentation
  4. Q1 2025: Stable 1.0 release

Stay Updated

To be notified when the Java SDK is available:
  • Star the repository: github.com/gumnut-ai/photos-sdk-java
  • Follow our updates at www.gumnut.ai/blog
  • Join our community Discord (coming soon)

Alternative Options

While the Java SDK is in development:

Direct API Usage

Use any HTTP client to call the REST API directly:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.gumnut.ai/api/assets"))
    .header("Authorization", "Bearer " + apiKey)
    .build();

HttpResponse<String> response = client.send(request, 
    HttpResponse.BodyHandlers.ofString());

OpenAPI Generator

Generate your own Java client using our OpenAPI spec:
# Install OpenAPI Generator
npm install -g @openapitools/openapi-generator-cli

# Generate Java client
openapi-generator-cli generate \
  -i https://api.gumnut.ai/openapi.json \
  -g java \
  -o ./gumnut-java-client

Next Steps

  • Check back for updates on the Java SDK development
  • Use the REST API directly for immediate integration
  • See other SDK options for different languages
  • Review Authentication for API setup
I