Panaragan 1.0.0

Documentation

Panaragan is a lightweight Java framework for web apps, APIs, templates, sessions, validation, database access, scheduled jobs, email, and static assets inside one JAR.

Maven dependency

<dependency>
    <groupId>com.panaragan</groupId>
    <artifactId>panaragan</artifactId>
    <version>1.0.0</version>
</dependency>

Minimal .env

app.name=Panaragan
app.version=1.0.0
app.port=8005
app.base_url=https://your-domain.example/
template.path=views
template.minify=true
session.mode=MEMORY

Quick Start

Use the starter generator on the home page, or create the minimal structure manually.

your-app/
|-- pom.xml
|-- src/main/java/app/App.java
|-- src/main/java/app/controllers/Home.java
`-- src/main/resources/
    |-- .env
    `-- views/frontend/home.html

App.java

package app;

import app.controllers.Home;
import com.panaragan.*;

public class App extends Server {
    public static void main(final String[] args) { new App().run(); }
    public void boot(final Routers routers) {
        routers.get("/", Home::index);
        routers.get("/json", Home::json);
    }
}

Home.java

package app.controllers;

import com.panaragan.*;

public class Home {
    public static void index(final Request request, final Response response) {
        response.send("Hello World");
    }
    public static void json(final Request request, final Response response) {
        final PJsonObject json = new PJsonObject()
                .set("username", request.getQuery("username"))
                .set("password", request.getQuery("password"));
        response.send(json);
    }
}
mvn -q package
java -jar target/*.jar
curl https://your-domain.example/
curl "https://your-domain.example/json?username=imam&password=secret"

Features

Fast routing
Static, dynamic, grouped, and authority-aware routes are registered once during boot.
Templates
Blade-like views, layouts, components, CSRF directive, minification, and asset helpers.
Database
JDBC pool, CRUD helpers, batch writes, query builder, and coalesced SELECT cache for repeated reads.
Security
Session, cookies, CSRF, validation, upload checks, and response security headers.
Utilities
Cache, jobs, language files, email templates, URL helper, JSON objects, and datatable output.
Deploy
Templates, assets, and starterkit downloads are packaged into the executable JAR.

Core

Application entrypoint extends Server. Panaragan calls these methods in order: boot at startup, then accept, route authorization, controller, respond, and error only on failures.

public class App extends Server {
    public void boot(final Routers routers) { routers.get("/", Home::index); }
    public void accept(final Request request, final Response response) {
        final String user = request.getSession("user");
        if(user!=null) { request.setPayload("user", PJsonObject.parse(user)); }
    }
    public boolean authorize(final Request request, final Response response, final String authority) {
        final Object user = request.getPayload("user");
        if("guest".equals(authority)&&user!=null) { response.redirect("dashboard"); }
        if(!"guest".equals(authority)&&user==null) { response.redirect("login", "callback_url", request.getFullUrl()); }
        return true;
    }
    public void respond(final Request request, final Response response) {
        response.addHeader("X-Frame-Options", "DENY");
        response.addHeader("X-Content-Type-Options", "nosniff");
    }
    public void error(final Request request, final Response response, final String reason) {
        response.renderView("error", new ParamsObject().set("error_reason", reason));
    }
}

Cache

Use cache for hot values and repeated expensive work. QueryBuilder read methods also use framework-level coalescing so concurrent identical SELECT calls can share one database execution.

Cache.set("profile:1", user, 30000);
final Object user = Cache.get("profile:1");
Cache.delete("profile:1");
Cache.clear();

For large request bursts, place the cache check before slow IO and invalidate cache when writes change the related data.

Config

Configuration is loaded from .env. Keep runtime values there and read them through Config so the same JAR can run in local, staging, and production.

app.name=Panaragan
app.version=1.0.0
app.port=8005
app.base_url=https://your-domain.example/
template.path=views
template.minify=true
final String appName = Config.get("app.name");
final int port = Config.get("app.port", 8005);
final boolean gzip = Config.get("response.gzip", false);

Cookies

Cookies are read from the request and written through response headers. Keep secure flags consistent with your deployed domain and protocol.

final String theme = request.getCookie("theme", "light");
response.setCookie("theme=dark; Path=/; Max-Age=31536000; SameSite=Lax");
response.setCookie("token=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax");

CSRF

Use @csrf in POST forms. Validation methods check the token before processing field rules.

<form method="post" action="{{ url('profile/update') }}">
    @csrf
    <input name="name">
    <button type="submit">Save</button>
</form>
csrf.name=csrf-token
csrf.expired=3600

Router

Register routes in boot. Dynamic params use {id}. Authority strings are passed to authorize.

routers.get("/", Home::index);
routers.post("/login-submit", Login::submit, "guest");
routers.getOrPost("/api/users/list", Users::list, "user");
routers.get("/users/edit/{id}", Users::edit, "users_edit");
routers.group("/admin", "dashboard", admin -> {
    admin.get("/", Dashboard::index);
    admin.get("users", Users::index, "users_list");
});

Read route params with request.getParam("id"). Use response.redirect, response.send, response.renderView, or response.empty as terminal responses.

Request / Response

final String q = request.getQuery("q", "");
final int page = request.getPostOrQuery("page", 1);
final String token = request.getHeader("Authorization", "");
final UploadFile file = request.getFile("avatar");
final String user = request.getSession("user");
response.send("Hello World");
response.send(new PJsonObject().set("ok", true));
response.renderView("frontend.home", data);
response.redirect("login");
response.empty(204, "No Content");
response.send(file, "report.pdf", "application/pdf");

Database

Enable one JDBC URL in .env. Panaragan supports MySQL, PostgreSQL, SQL Server, and Oracle through the JDBC driver on the classpath.

db.max_pool_size=10
db.reconnect=5
db.url=jdbc:postgresql://db.example.internal:5432/app
db.username=postgres
db.password=secret
final ParamsObject data = new ParamsObject()
        .set("username", request.getPost("username"))
        .set("email", request.getPost("email"))
        .set("name", request.getPost("name"));

final Object id = Database.insert("users", data);
final boolean updated = Database.update("users", data, "id = ?", id);
final boolean deleted = Database.delete("users", "id = ?", id);

Datatable

Datatable builds server-side JSON for DataTables-style requests. Select explicit columns, add filters, and render computed action columns without exposing raw SQL to the browser.

final Datatable datatable = new Datatable("SELECT id, username, email, status FROM users")
        .where("status = ?", "ACTIVE")
        .addNumbering("no")
        .add("edit_url", (column, value, row) -> Url.to("users/edit/"+row.get("id")));

response.send(datatable.results(request));

Use where, orWhere, like, whereIn, between, add, edit, and sum to shape the response.

Query Builder

Use QueryBuilder for SELECT and pagination. Repeated identical SELECT queries are coalesced/cached by the framework path that serves query results.

final QueryBuilder qb = new QueryBuilder()
        .select("id", "name", "username", "email")
        .from("users")
        .where("status = ?", "ACTIVE")
        .orderBy("id", "DESC")
        .limit(50, 0);

final PJsonArray rows = qb.results();
final PJsonObject row = qb.row();
final int total = qb.count();
response.send(new PJsonObject().set("data", rows).set("total", total));

Template

Views live in src/main/resources/views. Dotted names map to folders, for example frontend.home maps to views/frontend/home.html.

final ParamsObject data = new ParamsObject()
        .set("page_title", "Home")
        .set("username", "imam");
response.renderView("frontend.home", data);
@extends('layouts.frontend')
@section('body')
    <h1>{{ page_title }}</h1>
    <p>Welcome, {{ username }}</p>
@endsection

Session

Session can run in memory, storage, database, custom store, or disabled. Use it for authenticated user context, flash messages, and CSRF storage.

session.key=SESSION_ID
session.expired=3600
session.path=/
session.same_site=Lax
session.mode=MEMORY
csrf.name=csrf-token
csrf.expired=3600
response.setSession("user", user.toString());
final String user = request.getSession("user");
response.deleteSession("user");

<form method="post" action="/profile/update">
    @csrf
    <input name="name">
</form>

Validation

final ParamsString rules = new ParamsString()
        .set("username", "required")
        .set("email", "required|email")
        .set("avatar", "uploaded");

if(!request.validatePost(rules)) { response.redirectBack(request.getPosts()); }

final UploadFile avatar = request.getFile("avatar");
if(avatar!=null) {
    final boolean saved = avatar.saveIfContentTypeMatch("avatars/user.jpg", new String[] { "image/jpeg", "image/png" });
    if(!saved) { response.send(new PJsonObject().set("error", avatar.getError())); }
}

Set app.path_upload, app.slug_upload, and request.max_size_on_mb before accepting large multipart requests.

Upload File

Uploaded files are exposed through UploadFile. Always validate size/type and save to a path relative to app.path_upload.

<form method="post" action="/profile/avatar" enctype="multipart/form-data">
    @csrf
    <input type="file" name="avatar">
</form>
final UploadFile avatar = request.getFile("avatar");
if(avatar==null) { response.redirectBack(request.getPosts()); }
final boolean saved = avatar.saveIfContentTypeMatch("avatars/user.jpg", new String[] { "image/jpeg", "image/png" });
if(!saved) { response.send(new PJsonObject().set("error", avatar.getError())); }

Email

Configure SMTP in .env, render an HTML view, and send it through Email.

smtp.host=smtp.example.com
smtp.port=587
smtp.username=user@example.com
smtp.password=secret
smtp.starttls=true
final ParamsObject data = new ParamsObject().set("activation_url", Url.to("activation/token"));
final String html = Template.render("email.activation-account", data);
Email.send("user@example.com", "Activation", html);

Job

Use jobs for background cleanup, warmup, and scheduled tasks that should not run inside request handlers.

Job.everyMinute(() -> {
    Database.delete("sessions", "expired_at < NOW()");
});

Job.everyHour(() -> {
    Cache.clear();
});

Language

Language files are stored in resources and resolved through Language. Use this for repeatable UI labels and messages.

final String title = Language.get("auth.login");
final String message = Language.get("validation.required");

Url

Generate app links consistently in controllers and templates. Keep asset, redirect, email, and JSON action URLs based on app.base_url.

final String profileUrl = Url.to("profile");
final String editUrl = Url.to("users/edit/"+id);
response.redirect("login", "callback_url", request.getFullUrl());
<a href="{{ url('docs') }}">Documentation</a>
<link rel="stylesheet" href="{{ url('css/frontend.css') }}">

Build & Deploy

# Maven
mvn -q clean package
java -jar target/*.jar

# Generated Gradle starter
gradle shadowJar
java -jar build/libs/*-all.jar

For production, run behind Nginx/Caddy/Traefik for TLS, size JVM memory to the server/container, keep database pool size measured against workload, and ship assets/templates inside the JAR for immutable deployment.

Troubleshooting

Template not found:verify template.path=views, the view name, and that resources are packaged in the JAR.
CSRF mismatch:include @csrf in every POST form and keep session cookie settings aligned with the domain/protocol.
Database disabled:leave JDBC config commented for starterkits without DB, and enable exactly one JDBC URL when DB routes are used.
Port already used:change app.port in .env or stop the process using that port.
Uploaded file 404:verify app.path_upload, app.slug_upload, save target, and file permissions.
Reference

Panaragan Framework Classes

Generated from the Panaragan framework artifact used by this website. Total documented classes: 37.

HTTP Core

Server

abstract class - com.panaragan

Application bootstrap, configuration loader, static asset server, selector loop, and lifecycle hooks.

Constructors

Server()

Methods

void accept(Request, Response) boolean authorize(Request, Response, String) void boot(Routers) void error(Request, Response, String) void respond(Request, Response) void run()

Nested Types

No public nested types.
HTTP Core

Request

final class - com.panaragan

HTTP request context: headers, query/post data, files, sessions, payloads, auth helpers, and validation shortcuts.

Constructors

No public constructors.

Methods

String[] getBasicAuth() String getBearerToken() String getBody() String getBody(Charset) String getCSRFTokenName() String getCSRFTokenValue() String getContentType() String getCookie(String) long getCookie(String, long) float getCookie(String, float) boolean getCookie(String, boolean) int getCookie(String, int) String getCookie(String, String) double getCookie(String, double) Cookies getCookies() String getErrorField(String) UploadFile getFile(String) ParamsUploadFiles getFiles() String getFlash(String) String getFlash(String, String) String getFullPath() String getFullUrl() ParamsString getGet() String getGet(String) boolean getGet(String, boolean) long getGet(String, long) float getGet(String, float) double getGet(String, double) String getGet(String, String) int getGet(String, int) ListString getGetListString(String) String getHeader(String) float getHeader(String, float) double getHeader(String, double) boolean getHeader(String, boolean) int getHeader(String, int) String getHeader(String, String) long getHeader(String, long) ParamsHeader getHeaders() String getIP() PJsonArray getJsonArray() PJsonObject getJsonObject() Language getLanguage() String getMethod() String getOld(String) String getParam(String) boolean getParam(String, boolean) long getParam(String, long) float getParam(String, float) double getParam(String, double) String getParam(String, String) int getParam(String, int) ParamsString getParams() String getPath() Object getPayload() Object getPayload(String) String getPost(String) String getPost(String, String) double getPost(String, double) int getPost(String, int) long getPost(String, long) float getPost(String, float) boolean getPost(String, boolean) ListString getPostListString(String) String getPostOrQuery(String) double getPostOrQuery(String, double) float getPostOrQuery(String, float) boolean getPostOrQuery(String, boolean) int getPostOrQuery(String, int) String getPostOrQuery(String, String) long getPostOrQuery(String, long) ParamsString getPosts() ParamsString getQuery() String getQuery(String) double getQuery(String, double) boolean getQuery(String, boolean) int getQuery(String, int) String getQuery(String, String) long getQuery(String, long) float getQuery(String, float) ListString getQueryListString(String) String getSession(String) long getSession(String, long) boolean getSession(String, boolean) float getSession(String, float) int getSession(String, int) double getSession(String, double) String getSession(String, String) Session getSessions() ParamsString getSlug() String getSlug(String) double getSlug(String, double) int getSlug(String, int) boolean getSlug(String, boolean) long getSlug(String, long) float getSlug(String, float) String getSlug(String, String) String getUrl() String getUserAgent() boolean hasFiles() boolean hasPosts() boolean isAjax() boolean isMobile() boolean isPathContain(String) boolean isPathEndWith(String) boolean isPathStartWith(String) boolean isSecure() void setPayload(Object) void setPayload(String, Object) String translate(String) String translate(String, String) boolean validatePost(ParamsString) boolean validatePost(ParamsString, ParamsString) boolean validatePost(ParamsString, ParamsString, ParamsParamsString)

Nested Types

No public nested types.
HTTP Core

Response

final class - com.panaragan

HTTP response writer for text, JSON, files, redirects, views, cookies, sessions, and error pages.

Constructors

No public constructors.

Methods

void addHeader(String, String) void deleteCookie() void deleteSession(String) void destroySession() void empty() void empty(int, String) int getCode() String getMessage() void permanentRedirect(String) void redirect(String) void redirect(String, ParamsString) void redirect(String, String, String) void redirectBack() void redirectBack(ParamsString) void redirectBack(String, String) void redirectBackWithInput() void redirectBackWithInput(ParamsString) void redirectBackWithInput(String, String) void removeHeader(String) void renderView(String) void renderView(String, ParamsObject) void renderView(int, String, String) void renderView(int, String, String, ParamsObject) void send(String) void send(Datatable) void send(File) void send(PJsonObject) void send(PJsonArray) void send(File, String) void send(int, String, String) void send(File, String, String) void send(int, String, PJsonObject) void send(int, String, PJsonArray) void sendError(int, String, String) void setCode(int) void setContentType(String) void setCookie(String) void setCookie(String, String) void setCookie(String, String, long) void setCookie(String, String, long, String) void setCookie(String, String, long, String, String) void setCookie(String, String, long, String, String, String) void setCookie(String, String, long, String, String, String, boolean) void setCookie(String, String, long, String, String, String, boolean, boolean) void setMessage(String) void setSession(String, String) void setSession(String, int) void setSession(String, float) void setSession(String, double) void setSession(String, boolean) void setSession(String, long) void temporaryRedirect(String)

Nested Types

No public nested types.
HTTP Core

Routers

final class - com.panaragan

Route registry for HTTP verbs, grouped routes, route parameters, authority mapping, and route lookup.

Constructors

Routers()

Methods

void all(String, Boot) void all(String, Boot, String) void all(String, Boot, String, Boolean) void delete(String, Boot) void delete(String, Boot, String) void delete(String, Boot, String, Boolean) void get(String, Boot) void get(String, Boot, String) void get(String, Boot, String, Boolean) static ListString getAuthorities() void getOrPost(String, Boot) void getOrPost(String, Boot, String) void getOrPost(String, Boot, String, Boolean) void group(String, Group) void group(String, String, Group) void group(String, String, Boolean, Group) void head(String, Boot) void head(String, Boot, String) void head(String, Boot, String, Boolean) void options(String, Boot) void options(String, Boot, String) void options(String, Boot, String, Boolean) void path(String, Boot) void path(String, Boot, String) void path(String, Boot, String, Boolean) void post(String, Boot) void post(String, Boot, String) void post(String, Boot, String, Boolean) void put(String, Boot) void put(String, Boot, String) void put(String, Boot, String, Boolean)

Nested Types

interface Boot interface Group
Database

Database

final class - com.panaragan

Connection pool, transactions, prepared statements, insert/update/delete helpers, and batch write helpers.

Constructors

No public constructors.

Methods

static void beginTransaction() static void beginTransaction(int) static void commitTransaction() static boolean delete(String, ParamsObject) static boolean delete(String, String, Object...) static DatabaseMetaData getMetaData() static DatabaseMetaData getMetaData(int) static PreparedStatement getPrepareStatement(String) static PreparedStatement getPrepareStatement(int, String) static PreparedStatement getPrepareStatement(String, int) static PreparedStatement getPrepareStatement(int, String, int) static boolean insert(String, ParamsObject) static boolean insert(String, PJsonObject) static boolean insertBatch(String, List) static int insertGetInt(String, PJsonObject) static int insertGetInt(String, ParamsObject) static String insertGetString(String, ParamsObject) static String insertGetString(String, PJsonObject) static void rollbackTransaction() static boolean update(String, PJsonObject, ParamsObject) static boolean update(String, ParamsObject, ParamsObject) static boolean update(String, ParamsObject, String, Object...) static boolean updateBatch(String, List, String)

Nested Types

No public nested types.
Database

QueryBuilder

class - com.panaragan

Fluent SQL builder for select/from/join/where/order/limit plus row, results, count, and request coalescing cache.

Constructors

QueryBuilder()

Methods

QueryBuilder between(String, Object, Object) int count() int countForce() QueryBuilder from(String...) ListObject getParameters() String getQuery() String getQueryCount() String getQueryRaw() String getQuerySum(String) QueryBuilder groupBy(String...) QueryBuilder groupWhere(String, Object...) QueryBuilder having(String, Object...) QueryBuilder join(String, String) QueryBuilder leftJoin(String, String) QueryBuilder like(String, String) QueryBuilder limit(int, int) QueryBuilder orLike(String, String) QueryBuilder orWhere(String, ParamsObject) QueryBuilder orWhere(String, Object...) QueryBuilder orderBy(String, String) void reset() PJsonArray results() PJsonArray resultsForce() PJsonArray resultsWithNumber(String) PJsonArray resultsWithNumberForce(String) QueryBuilder rightJoin(String, String) PJsonObject row() PJsonObject rowForce() QueryBuilder select(String...) double sum(String) double sumForce(String) QueryBuilder where(String, ParamsObject) QueryBuilder where(String, Object...) QueryBuilder whereIn(String, String) QueryBuilder whereIn(String, ListObject) QueryBuilder whereNotIn(String, ListObject) QueryBuilder whereNotIn(String, String)

Nested Types

No public nested types.
Database

Datatable

class - com.panaragan

Server-side DataTables helper with filtering, searching, custom column renderers, numbering, and sums.

Constructors

Datatable(String) Datatable(QueryBuilder)

Methods

Datatable add(String, ColumnsListener) Datatable addNumbering(String) Datatable between(String, Object, Object) Datatable edit(String, ColumnsListener) Datatable groupWhere(String, Object...) Datatable like(String, String) Datatable onGlobalSearch(String, OnSearchListener) Datatable onSearch(String, OnSearchListener) Datatable orLike(String, String) Datatable orWhere(String, Object...) PJsonObject results(Request) Datatable sum(String, SumListener) String toJsonString(Request) Datatable where(String, Object...) Datatable whereIn(String, ListObject) Datatable whereIn(String, String) Datatable whereNotIn(String, ListObject) Datatable whereNotIn(String, String)

Nested Types

interface ColumnsListener class Filter interface OnSearchListener interface SumListener
Web Utilities

Template

final class - com.panaragan

Blade-like template renderer with sections, conditions, loops, functions, CSRF injection, and minification.

Constructors

No public constructors.

Methods

static void registerRequestFunction(String, RequestFunction) static void registerSimpleFunction(String, SimpleFunction) static String render(String) static String render(String, ParamsObject) static String render(String, ParamsObject, Request)

Nested Types

interface RequestFunction interface SimpleFunction
Web Utilities

Session

final class - com.panaragan

Session read/write/destroy support with memory, storage, database, and custom backing stores.

Constructors

No public constructors.

Methods

void delete(String) void destroy() ParamsString get() String get(String) boolean get(String, boolean) String get(String, String) long get(String, long) float get(String, float) double get(String, double) int get(String, int) String getDomain() String getPath() String getSameSite() String id() boolean isHttpOnly() boolean isSecure() void set(String, boolean) void set(String, float) void set(String, long) void set(String, int) void set(String, String) void set(String, double) void setDomain(String) void setHttpOnly(boolean) void setPath(String) void setSameSite(String) void setSecure(boolean)

Nested Types

interface Store
Web Utilities

CSRF

final class - com.panaragan

CSRF token generation and request validation for form submissions.

Constructors

CSRF()

Methods

static String HTML(Request) static String getTokenName() static String getTokenValue(Request) static boolean validateRequest(Request)

Nested Types

No public nested types.
Web Utilities

Validation

final class - com.panaragan

Input and upload validation engine for required, email, size, type, and custom rule messages.

Constructors

Validation()

Methods

static ParamsListString input(ParamsString, ParamsString) static ParamsListString input(ParamsString, String) static ParamsListString input(ParamsString, String, String) static ParamsListString input(ParamsString, ParamsString, ParamsString) static ParamsListString input(ParamsString, String, String, String) static ParamsListString input(ParamsString, ParamsString, ParamsString, ParamsParamsString) static ParamsListString inputFile(ParamsUploadFiles, ParamsString) static ParamsListString inputFile(ParamsUploadFiles, String) static ParamsListString inputFile(ParamsUploadFiles, String, String) static ParamsListString inputFile(ParamsUploadFiles, ParamsString, ParamsString) static ParamsListString inputFile(ParamsUploadFiles, String, String, String) static ParamsListString inputFile(ParamsUploadFiles, ParamsString, ParamsString, ParamsParamsString)

Nested Types

No public nested types.
Web Utilities

Password

final class - com.panaragan

Password hashing and verification utilities using the configured encryption settings.

Constructors

Password()

Methods

static String hash(String) static String hashCodeigniter(String) static String hashLaravel(String) static boolean needsRehash(String, int) static boolean verify(String, String) static boolean verifyCodeigniter(String, String) static boolean verifyLaravel(String, String)

Nested Types

No public nested types.
Web Utilities

PJWT

final class - com.panaragan

JWT creation, validation, decoding, and payload extraction.

Constructors

PJWT()

Methods

static String createToken(PJsonObject) static String createToken(PJsonObject, long) static String createToken(PJsonObject, String) static String createToken(PJsonObject, String, long) static PJsonObject getDecoded(String) static PJsonObject getDecoded(String, String) static PJsonObject getPayload(String) static PJsonObject getPayload(String, String) static PJsonObject getValidDecoded(String) static PJsonObject getValidDecoded(String, String) static PJsonObject getValidPayload(String) static PJsonObject getValidPayload(String, String) static void init(String, int) static boolean isValid(String) static boolean isValid(String, String)

Nested Types

No public nested types.
Data Structures

PJsonObject

class - com.panaragan

Fast JSON object builder/parser with typed getters and byte serialization.

Constructors

PJsonObject()

Methods

PJsonArray getArray(String) PJsonArray getArray(String, PJsonArray) boolean getBoolean(String) boolean getBoolean(String, boolean) double getDouble(String) double getDouble(String, double) float getFloat(String) float getFloat(String, float) int getInt(String) int getInt(String, int) long getLong(String) long getLong(String, long) PJsonObject getObject(String) PJsonObject getObject(String, PJsonObject) String getString(String) String getString(String, String) boolean isExist(String) static PJsonObject parse(String) void remove(String) PJsonObject set(String, String) PJsonObject set(String, double) PJsonObject set(String, int) PJsonObject set(String, PJsonArray) PJsonObject set(String, PJsonObject) PJsonObject set(String, boolean) PJsonObject set(String, long) PJsonObject set(String, float) byte[] toBytes() String toString() void write(OutputStream)

Nested Types

No public nested types.
Data Structures

PJsonArray

class - com.panaragan

Fast JSON array builder/parser with typed getters and byte serialization.

Constructors

PJsonArray()

Methods

PJsonArray add(int) PJsonArray add(String) PJsonArray add(float) PJsonArray add(double) PJsonArray add(long) PJsonArray add(boolean) PJsonArray add(PJsonArray) PJsonArray add(PJsonObject) PJsonArray getArray(int) PJsonArray getArray(int, PJsonArray) boolean getBoolean(int) boolean getBoolean(int, boolean) double getDouble(int) double getDouble(int, double) float getFloat(int) float getFloat(int, float) int getInt(int) int getInt(int, int) long getLong(int) long getLong(int, long) PJsonObject getObject(int) PJsonObject getObject(int, PJsonObject) String getString(int) String getString(int, String) boolean isExist(int) Iterator iterator() static PJsonArray parse(String) PJsonArray remove(int) int size() byte[] toBytes() String toString()

Nested Types

No public nested types.
Data Structures

PJsonValue

class - com.panaragan

Internal typed JSON value wrapper used by Panaragan JSON structures.

Constructors

No public constructors.

Methods

PJsonArray getArray() PJsonArray getArray(PJsonArray) boolean getBoolean() boolean getBoolean(boolean) double getDouble() double getDouble(double) float getFloat() float getFloat(float) int getInt() int getInt(int) long getLong() long getLong(long) PJsonObject getObject() PJsonObject getObject(PJsonObject) String getString() String getString(String)

Nested Types

No public nested types.
Data Structures

ParamsObject

class - com.panaragan

Fast string-to-object map used for template context and structured runtime data.

Constructors

ParamsObject()

Methods

ParamsObject clear() Object get(String) boolean isEmpty() Iterator iterator() ParamsObject remove(String) ParamsObject set(String, Object) int size()

Nested Types

No public nested types.
Data Structures

ParamsString

class - com.panaragan

Fast string-to-string map used for request parameters, validation rules, and simple config data.

Constructors

ParamsString()

Methods

ParamsString clear() String get(String) boolean isEmpty() Iterator iterator() ParamsString remove(String) ParamsString set(String, String) int size()

Nested Types

No public nested types.
Data Structures

ParamsListString

class - com.panaragan

Fast string-to-list-of-string map used for validation errors and grouped string values.

Constructors

ParamsListString()

Methods

ParamsListString clear() ListString get(String) boolean isEmpty() Iterator iterator() ParamsListString remove(String) ParamsListString set(String, ListString) int size()

Nested Types

No public nested types.
Data Structures

ParamsListObject

class - com.panaragan

Fast string-to-list-of-object map for grouped object values.

Constructors

ParamsListObject()

Methods

ParamsListObject clear() ListObject get(String) boolean isEmpty() Iterator iterator() ParamsListObject remove(String) ParamsListObject set(String, ListObject) int size()

Nested Types

No public nested types.
Data Structures

ParamsParamsString

class - com.panaragan

Fast string-to-ParamsString map for nested message/rule structures.

Constructors

ParamsParamsString()

Methods

ParamsParamsString clear() ParamsString get(String) boolean isEmpty() Iterator iterator() ParamsParamsString remove(String) ParamsParamsString set(String, ParamsString) int size()

Nested Types

No public nested types.
Data Structures

ParamsHeader

class - com.panaragan

HTTP header map with common header constants and case-oriented access.

Constructors

No public constructors.

Methods

void forEach(BiConsumer) String get(String) float get(String, float) int get(String, int) String get(String, String) long get(String, long) double get(String, double) boolean get(String, boolean) Iterator iterator()

Nested Types

No public nested types.
Data Structures

ParamsFile

class - com.panaragan

String-to-file map for simple file parameter collections.

Constructors

ParamsFile()

Methods

ParamsFile clear() File get(String) boolean isEmpty() Iterator iterator() ParamsFile remove(String) ParamsFile set(String, File) int size()

Nested Types

No public nested types.
Data Structures

ParamsUploadFiles

class - com.panaragan

String-to-upload-file map for multipart upload handling.

Constructors

No public constructors.

Methods

UploadFile get(String) boolean isEmpty() Iterator iterator()

Nested Types

No public nested types.
Data Structures

ListString

class - com.panaragan

Compact mutable string list with add/remove/join/iterator helpers.

Constructors

ListString()

Methods

ListString add(String) void addAll(ListString) ListString addFirst(String) void clear() boolean contains(String) String get(int) boolean isEmpty() Iterator iterator() String join(String) ListString remove(String) ListString remove(int) void replace(int, String) int size()

Nested Types

No public nested types.
Data Structures

ListObject

class - com.panaragan

Compact mutable object list with add/remove/join/iterator helpers.

Constructors

ListObject()

Methods

ListObject add(Object) ListObject addAll(ListObject) ListObject addFirst(Object) void clear() boolean contains(Object) Object get(int) boolean isEmpty() Iterator iterator() String join(String) ListObject remove(Object) ListObject remove(int) void replace(int, Object) int size()

Nested Types

No public nested types.
Web Utilities

UploadFile

final class - com.panaragan

Uploaded file metadata and safe save helpers with content-type checks.

Constructors

No public constructors.

Methods

String getError() String getUploadFilename() boolean isExist() boolean save() boolean save(String) boolean saveIfContentTypeMatch(String) boolean saveIfContentTypeMatch(String[]) boolean saveIfContentTypeMatch(String, String) boolean saveIfContentTypeMatch(String, String[])

Nested Types

No public nested types.
HTTP Core

Cookies

class - com.panaragan

Cookie parser with typed getters.

Constructors

No public constructors.

Methods

String get(String) boolean get(String, boolean) long get(String, long) float get(String, float) double get(String, double) int get(String, int) String get(String, String)

Nested Types

No public nested types.
Support

Cache

final class - com.panaragan

In-memory key/value cache with expiration support.

Constructors

No public constructors.

Methods

static void delete(String) static Object get(String) static Object getFromExpired(String) static void set(String, Object) static void set(String, Object, int) static void setMaxExpired(int)

Nested Types

No public nested types.
Support

Config

final class - com.panaragan

Typed access to normalized runtime configuration values.

Constructors

Config()

Methods

static String get(String) static boolean get(String, boolean) static float get(String, float) static double get(String, double) static int get(String, int) static String get(String, String)

Nested Types

No public nested types.
HTTP Core

Url

class - com.panaragan

Base URL, upload URL, path encoding/decoding, and query composition helpers.

Constructors

Url()

Methods

static String baseUrl() static String decodeParam(String) static String decodePath(String) static String encodeParam(String) static String encodePath(String) static String secure(String) static String to(String) static String to(String, ParamsString) static String upload(String) static String withQuery(String, String...)

Nested Types

No public nested types.
Support

Helper

final class - com.panaragan

General utilities for conversion, escaping, files, slugging, encryption, compression, and stack traces.

Constructors

Helper()

Methods

static String appStackTrace(Throwable) static String compressString(String) static String decompressString(String) static String decryptString(String) static String encryptString(PJsonObject) static String encryptString(byte[]) static String encryptString(String) static String escHtml(String) static String escHtmlAttr(String) static String fullStackTrace(Throwable) static String randomString(int) static String readFile(String) static String slugging(String) static String slugging(String, String) static boolean strContain(CharSequence, String, char) static boolean strIsNotNullAndNotEmpty(String) static boolean strToBoolean(String, boolean) static double strToDouble(String, double) static float strToFloat(String, float) static int strToInt(String, int) static long strToLong(String, long) static String uglifying(String) static String uglifying(String, String) static File writeFile(String, String)

Nested Types

No public nested types.
Support

Http

class - com.panaragan

Small HTTP client for GET/POST/raw/multipart requests.

Constructors

Http()

Methods

void addBinary(File) void addField(String, String) void addFile(String, File) void addHeader(String, String) void addParam(String, String) void addRawHTML(String) void addRawJSON(String) void addRawJavaScript(String) void addRawText(String) void addRawXML(String) Response response(String) void setMethod(String)

Nested Types

class Response
Support

Job

final class - com.panaragan

Scheduled job helper for fixed millisecond, second, minute, hour, and daily intervals.

Constructors

Job()

Methods

static void everyDay(Runnable) static void everyDay(Runnable, int) static void everyHour(Runnable) static void everyHour(Runnable, int) static void everyHoursOfDay(Runnable, int...) static void everyMilliSeconds(Runnable, int) static void everyMinute(Runnable) static void everyMinute(Runnable, int) static void everySecond(Runnable) static void everySecond(Runnable, int)

Nested Types

No public nested types.
Support

Email

final class - com.panaragan

SMTP mail sender with optional attachment and TLS support.

Constructors

No public constructors.

Methods

static void send(String, String, String) static void send(String, String, String, List) static void send(int, String, String, String) static void send(int, String, String, String, List) static void send(String, String, String, String, List) static void send(int, String, String, String, String, List) static void send(String, int, String, String, String, String, String, String, List, boolean)

Nested Types

No public nested types.
Support

Language

final class - com.panaragan

Translation/i18n loader and runtime language resolver.

Constructors

No public constructors.

Methods

String getCode() boolean isAvailable(String) ListString list() void setCode(String) String translate(String) String translate(String, String)

Nested Types

No public nested types.
Support

XXH64

class - com.panaragan

Fast hashing helpers used by internal maps and cache keys.

Constructors

XXH64()

Methods

static long hash64(byte[], int, int) static long hash64Ascii(String)

Nested Types

No public nested types.