Skip to content

rustbyshabari/interoperability-sdk-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

BHILANI Interoperability by kantini, chanchali

Run SDK

java --enable-preview --enable-native-access=ALL-UNNAMED -Djava.library.path=. src/bhilani/interoperability/jvm/JVMSDKit.java

Basic Usage

package bhilani.interoperability.jvm;

public class JVMSDKit {

    public native String fetchInteroperability(String url, String paramsJson);

    static {
        System.loadLibrary("interoperability_wrapper_robusta");
    }

    public void runDemo() {
        String url = "";
        String params = "{\"page\": \"1\"}"; 
        
        System.out.println("Java SDK");
        
        String response = fetchInteroperability(url, params);
        
        System.out.println(response);
    }

    public static void main(String[] args) {
        new JVMSDKit().runDemo();
    }
}

Dynamic Usage

package bhilani.interoperability.jvm;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JVMSDKit {

    public native String fetchInteroperability(String url, String paramsJson);

    static {
        System.loadLibrary("interoperability_wrapper_robusta");
    }

    public String fetchPage(String url, int page) {
        String params = String.format("{\"page\": \"%d\"}", page);
        return fetchInteroperability(url, params);
    }

    public static void main(String[] args) {
        JVMSDKit sdk = new JVMSDKit();
        String url = "";

        System.out.println("--- Bhilani Interop SDK ---");

        for (int pageNum = 1; pageNum <= 5; pageNum++) {
            try {
                String response = sdk.fetchPage(url, pageNum);
                
                // Manual Parsing logic to replace kotlinx.serialization
                int totalPages = parseTotalPages(response);
                var titles = parseTitles(response);

                if (titles.isEmpty() || pageNum > totalPages) {
                    System.out.printf("Page %d: Success (No Data - Server has %d pages)%n", pageNum, totalPages);
                } else {
                    System.out.printf("Page %d: Success%n", pageNum);
                    for (String title : titles) {
                        System.out.println("  - Title: " + title);
                    }
                }
            } catch (Exception e) {
                System.out.printf("Page %d: Failed (Error: %s)%n", pageNum, e.getMessage());
            }
        }
    }

    private static int parseTotalPages(String json) {
        Pattern pattern = Pattern.compile("\"total_pages\"\\s*:\\s*(\\d+)");
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? Integer.parseInt(matcher.group(1)) : 0;
    }

    private static java.util.List<String> parseTitles(String json) {
        java.util.List<String> titles = new java.util.ArrayList<>();
        Pattern pattern = Pattern.compile("\"title\"\\s*:\\s*\"([^\"]+)\"");
        Matcher matcher = pattern.matcher(json);
        while (matcher.find()) {
            titles.add(matcher.group(1));
        }
        return titles;
    }
}

Concurrent Usage

package bhilani.interoperability.jvm;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class JVMSDKit {

    private native String fetchInteroperability(String url, String paramsJson);

    static {
        System.loadLibrary("interoperability_wrapper_robusta");
    }

    public List<CompletableFuture<String>> fetchPages(String url, int start, int end) {
        ExecutorService executor = Executors.newCachedThreadPool();
        Random random = new Random();

        return IntStream.rangeClosed(start, end)
            .mapToObj(page -> CompletableFuture.supplyAsync(() -> {
                try {
                    Thread.sleep(random.nextInt(201) + 50);

                    return CompletableFuture.supplyAsync(() -> 
                        fetchInteroperability(url, String.format("{\"page\": \"%d\"}", page))
                    ).get(5, TimeUnit.SECONDS);

                } catch (Exception e) {
                    throw new CompletionException(e);
                }
            }, executor))
            .collect(Collectors.toList());
    }

    public static void main(String[] args) {
        JVMSDKit sdk = new JVMSDKit();
        String url = "";

        System.out.println("--- Bhilani Interop SDK (Java Concurrency) ---");

        List<CompletableFuture<String>> futures = sdk.fetchPages(url, 1, 5);

        for (int i = 0; i < futures.size(); i++) {
            int pageNum = i + 1;
            try {
                String response = futures.get(i).join();
                
                int totalPages = parseTotalPages(response);
                List<String> titles = parseTitles(response);

                if (titles.isEmpty() || pageNum > totalPages) {
                    System.out.printf("Page %d: Success (No Data - Server has %d pages)%n", pageNum, totalPages);
                } else {
                    System.out.printf("Page %d: Success%n", pageNum);
                    titles.forEach(t -> System.out.println("  - Title: " + t));
                }
            } catch (Exception e) {
                System.out.printf("Page %d: Failed (%s)%n", pageNum, e.getCause().getMessage());
            }
        }
    }

    private static int parseTotalPages(String json) {
        Matcher m = Pattern.compile("\"total_pages\"\\s*:\\s*(\\d+)").matcher(json);
        return m.find() ? Integer.parseInt(m.group(1)) : 0;
    }

    private static List<String> parseTitles(String json) {
        List<String> titles = new ArrayList<>();
        Matcher m = Pattern.compile("\"title\"\\s*:\\s*\"([^\"]+)\"").matcher(json);
        while (m.find()) titles.add(m.group(1));
        return titles;
    }
}

Fist time java1

Second time java2

Third time java3

@AIAmitSuri, Co-creator/Co-founder (🙏 Mata Shabri 🙏)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages