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();
}
}
Android Photo Gallery
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
- Q2 2024: Initial development begins
- Q3 2024: Alpha release for testing
- Q4 2024: Beta release with documentation
- 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