Moved classic to own classic branch

This commit is contained in:
Finn
2025-12-11 13:24:59 +01:00
parent 82b59ccc0d
commit 6f154bbf69
18 changed files with 1639 additions and 2 deletions

138
pom.xml
View File

@@ -6,7 +6,7 @@
<groupId>org.openautonomousconnection</groupId>
<artifactId>WebClient</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.0-CLASSIC</version>
<organization>
<name>Open Autonomous Connection</name>
<url>https://open-autonomous-connection.org/</url>
@@ -18,6 +18,7 @@
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.10.0</junit.version>
</properties>
<developers>
@@ -56,6 +57,43 @@
</license>
</licenses>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>
org.openautonomousconnection.browser/org.openautonomousconnection.browser.ViewApplication
</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
<noManPages>true</noManPages>
<stripDebug>true</stripDebug>
<noHeaderFiles>true</noHeaderFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>oac</id>
@@ -70,7 +108,7 @@
<dependency>
<groupId>org.openautonomousconnection</groupId>
<artifactId>protocol</artifactId>
<version>1.0.0-BETA.1</version>
<version>1.0.0-CLASSIC</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
@@ -78,5 +116,101 @@
<version>1.18.38</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-media</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.controlsfx</groupId>
<artifactId>controlsfx</artifactId>
<version>11.1.2</version>
</dependency>
<dependency>
<groupId>com.dlsc.formsfx</groupId>
<artifactId>formsfx-core</artifactId>
<version>11.6.0</version>
<exclusions>
<exclusion>
<groupId>org.openjfx</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.synedra</groupId>
<artifactId>validatorfx</artifactId>
<version>0.4.0</version>
<exclusions>
<exclusion>
<groupId>org.openjfx</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-javafx</artifactId>
<version>12.3.1</version>
</dependency>
<dependency>
<groupId>org.kordamp.bootstrapfx</groupId>
<artifactId>bootstrapfx-core</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>eu.hansolo</groupId>
<artifactId>tilesfx</artifactId>
<version>11.48</version>
<exclusions>
<exclusion>
<groupId>org.openjfx</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.almasb</groupId>
<artifactId>fxgl</artifactId>
<version>17.3</version>
<exclusions>
<exclusion>
<groupId>org.openjfx</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,22 @@
module me.openautonomousconnection.browser {
requires javafx.controls;
requires javafx.fxml;
requires javafx.web;
requires org.controlsfx.controls;
requires com.dlsc.formsfx;
requires net.synedra.validatorfx;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.bootstrapfx.core;
requires eu.hansolo.tilesfx;
requires com.almasb.fxgl.all;
requires java.desktop;
requires java.sql;
requires protocol;
requires unlegitlibrary;
exports org.openautonomousconnection.browser;
opens org.openautonomousconnection.browser to javafx.fxml;
exports org.openautonomousconnection.browser.controller;
opens org.openautonomousconnection.browser.controller to javafx.fxml;
}

View File

@@ -0,0 +1,26 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser;
import org.openautonomousconnection.browser.controller.Browser;
import org.openautonomousconnection.protocol.domain.Domain;
import org.openautonomousconnection.protocol.side.ProtocolClient;
import org.openautonomousconnection.protocol.utils.SiteType;
public class Client extends ProtocolClient {
@Override
public void handleHTMLContent(SiteType siteType, Domain domain, String htmlContent) {
Browser.getInstance().loadHtml(siteType, domain, htmlContent);
}
@Override
public void handleMessage(String message) {
MessageDialog.show(message);
}
}

View File

@@ -0,0 +1,87 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser;
import dev.unlegitdqrk.unlegitlibrary.file.ConfigurationManager;
import org.openautonomousconnection.protocol.utils.APIInformation;
import java.io.File;
import java.io.IOException;
public class Config {
private static File configFile = new File("./config.txt");
private static ConfigurationManager config;
private static APIInformation apiInformation;
public static void init() throws IOException {
if (!configFile.exists()) configFile.createNewFile();
config = new ConfigurationManager(configFile);
config.loadProperties();
if (!config.isSet("dns.host")) config.set("dns.host", "45.155.173.50");
if (!config.isSet("dns.port")) config.set("dns.port", 9382);
if (!config.isSet("api.username")) config.set("api.username", "");
if (!config.isSet("api.application")) config.set("api.application", "");
if (!config.isSet("api.key")) config.set("api.key", "");
config.saveProperties();
apiInformation = new APIInformation(getAPIUsername(), getAPIApplication(), getAPIKey());
}
public static APIInformation getApiInformation() {
return apiInformation;
}
public static String getDNSHost() {
return config.getString("dns.host");
}
public static void setDNSHost(String host) throws IOException {
config.set("dns.host", host);
config.saveProperties();
}
public static int getDNSPort() {
return config.getInt("dns.port");
}
public static void setDNSPort(int port) throws IOException {
config.set("dns.port", port);
config.saveProperties();
}
public static String getAPIUsername() {
return config.getString("api.username");
}
public static void setAPIUsername(String username) throws IOException {
config.set("api.username", username);
config.saveProperties();
}
public static String getAPIApplication() {
return config.getString("api.application");
}
public static void setAPIApplication(String application) throws IOException {
config.set("api.application", application);
config.saveProperties();
}
public static String getAPIKey() {
return config.getString("api.key");
}
public static void setAPIKey(String key) throws IOException {
config.set("api.key", key);
config.saveProperties();
}
}

View File

@@ -0,0 +1,114 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.openautonomousconnection.browser.controller.Browser;
import org.openautonomousconnection.browser.history.HistoryManager;
import org.openautonomousconnection.protocol.ProtocolBridge;
import org.openautonomousconnection.protocol.ProtocolSettings;
import org.openautonomousconnection.protocol.ProtocolVersion;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
public class Main extends Application {
public static ProtocolBridge protocolBridge;
private static final Thread shutdownThread = new Thread(shutdown());
private static Runnable shutdown() {
return () -> {
try {
if (protocolBridge == null) return;
protocolBridge.getProtocolClient().disconnectClient();
} catch (IOException exception) {
exception.printStackTrace();
}
};
}
public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
try {
Config.init();
} catch (IOException exception) {
exception.printStackTrace();
return;
}
HistoryManager.loadHistory();
String host = Config.getDNSHost();
int port = Config.getDNSPort();
final ProtocolSettings protocolSettings = new ProtocolSettings();
protocolSettings.host = host;
protocolSettings.port = port;
protocolBridge = new ProtocolBridge(ProtocolVersion.PV_1_0_0, protocolSettings, new Client());
protocolBridge.getProtocolClient().setProtocolBridge(protocolBridge);
Runtime.getRuntime().addShutdownHook(shutdownThread);
try {
protocolBridge.getProtocolClient().startClient();
} catch (Exception exception) {
exception.printStackTrace();
Platform.runLater(() -> {
try {
Parent root2 = FXMLLoader.load(MessageDialog.class.getResource("MessageDialog.fxml"));
Stage stage2 = new Stage();
stage2.setTitle("Open Autonomous Connection - DNS Message Dialog");
stage2.setScene(new Scene(root2));
stage2.setResizable(false);
stage2.requestFocus();
stage2.show();
MessageDialog.getInstance().txtServer.setText("Failed to connect to DNS-Server! Please try again later.\n" + exception.getMessage());
} catch (IOException exception2) {
exception2.printStackTrace();
return;
}
});
launch(args);
return;
}
}
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Browser.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Open Autonomous Connection");
stage.setScene(scene);
stage.show();
stage.setOnCloseRequest(event -> shutdownThread.start());
Browser.getInstance().setStage(stage);
Platform.runLater(() -> {
try {
Parent root2 = FXMLLoader.load(MessageDialog.class.getResource("MessageDialog.fxml"));
Stage stage2 = new Stage();
stage2.setTitle("Open Autonomous Connection - DNS Message Dialog");
stage2.setScene(new Scene(root2));
stage2.setResizable(false);
stage2.requestFocus();
stage2.show();
MessageDialog.getInstance().txtServer.setText("Please close this window now!");
stage2.close();
} catch (IOException exception) {
exception.printStackTrace();
}
});
}
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class MessageDialog implements Initializable {
private static MessageDialog instance;
public Label txtServer;
public static MessageDialog getInstance() {
return instance;
}
public static void show(String text) {
Platform.runLater(() -> {
try {
Parent root = FXMLLoader.load(MessageDialog.class.getResource("MessageDialog.fxml"));
Stage stage = new Stage();
stage.setTitle("Open Autonomous Connection - DNS Message Dialog");
stage.setScene(new Scene(root));
stage.setResizable(false);
stage.requestFocus();
stage.show();
MessageDialog.getInstance().txtServer.setText(text);
} catch (IOException exception) {
exception.printStackTrace();
}
});
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
instance = this;
}
}

View File

@@ -0,0 +1,318 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser.controller;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.openautonomousconnection.browser.Main;
import org.openautonomousconnection.browser.MessageDialog;
import org.openautonomousconnection.browser.history.HistoryManager;
import org.openautonomousconnection.protocol.domain.Domain;
import org.openautonomousconnection.protocol.domain.LocalDomain;
import org.openautonomousconnection.protocol.domain.RequestDomain;
import org.openautonomousconnection.protocol.utils.DomainUtils;
import org.openautonomousconnection.protocol.utils.SiteType;
import org.openautonomousconnection.protocol.utils.WebsitesContent;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.EventTarget;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ResourceBundle;
public class Browser implements Initializable {
public static Browser instance;
public Button btnHome;
public Button btnBackward;
public Button btnReload;
public Button btnGo;
public Button btnForward;
public Button btnSettings;
public TextField domainInput;
public Button btnHistory;
public WebView webView;
public static Browser getInstance() {
return instance;
}
public void onHistoryClick(ActionEvent actionEvent) {
Platform.runLater(() -> {
try {
Parent root = FXMLLoader.load(getClass().getResource("History.fxml"));
Stage stage = new Stage();
stage.setTitle("Open Autonomous Connection - Settings");
stage.setScene(new Scene(root));
stage.setResizable(false);
stage.requestFocus();
stage.show();
} catch (IOException exception) {
exception.printStackTrace();
}
});
}
public void onForwardClick(ActionEvent actionEvent) {
try {
navigate(HistoryManager.navigateForward());
} catch (URISyntaxException | IOException | ClassNotFoundException exception) {
exception.printStackTrace();
}
}
public void onBackwardClick(ActionEvent actionEvent) {
try {
navigate(HistoryManager.navigateBack());
} catch (URISyntaxException | IOException | ClassNotFoundException exception) {
exception.printStackTrace();
}
}
public void onHomeClick(ActionEvent actionEvent) {
try {
navigate(SiteType.PUBLIC.name + "://browser-start.root/");
} catch (IOException | URISyntaxException | ClassNotFoundException exception) {
exception.printStackTrace();
}
}
public void onReloadClick(ActionEvent actionEvent) {
try {
navigate(domainInput.getText());
} catch (URISyntaxException | IOException | ClassNotFoundException exception) {
exception.printStackTrace();
}
}
public void onGoClick(ActionEvent actionEvent) {
try {
navigate(domainInput.getText());
HistoryManager.addHistoryItem(domainInput.getText());
} catch (URISyntaxException | IOException | ClassNotFoundException exception) {
exception.printStackTrace();
}
}
public void navigate(String url) throws IOException, URISyntaxException, ClassNotFoundException {
if (url == null) return;
if (url.isEmpty()) return;
if (url.isBlank()) return;
if (url.startsWith(SiteType.LOCAL.name)) {
loadLocalDomain(url);
return;
}
if (url.startsWith("http://")) url = url.substring("http://".length());
if (url.startsWith("https://")) url = url.substring("https://".length());
if (url.startsWith("www.")) url = url.substring("www.".length());
if (!url.startsWith(SiteType.PUBLIC.name)) url = SiteType.PUBLIC.name + "://" + url;
String tld = DomainUtils.getTopLevelDomain(url);
String name = DomainUtils.getDomainName(url);
String path = DomainUtils.getPath(url);
// TODO: Navigate
Main.protocolBridge.getProtocolClient().resolveSite(new RequestDomain(name, tld, path));
}
private void loadLocalDomain(String url) throws IOException, URISyntaxException, ClassNotFoundException {
if (url == null) return;
if (url.isEmpty()) return;
if (url.isBlank()) return;
if (url.startsWith(SiteType.PUBLIC.name) || url.startsWith("http://") || url.startsWith("Https://") || url.startsWith("www.")) {
navigate(url);
return;
}
if (!url.startsWith(SiteType.LOCAL.name)) url = SiteType.LOCAL.name + "://" + url;
File file = new File(url.substring((SiteType.LOCAL.name + "://").length()));
if (!file.exists()) {
loadHtml(SiteType.PROTOCOL, new LocalDomain("file-not-found", "html", ""), WebsitesContent.FILE_NOT_FOUND);
return;
}
loadFile(file);
}
public void onSettingsClick(ActionEvent actionEvent) {
Platform.runLater(() -> {
try {
Parent root = FXMLLoader.load(getClass().getResource("Settings.fxml"));
Stage stage = new Stage();
stage.setTitle("Open Autonomous Connection - Settings");
stage.setScene(new Scene(root));
stage.setResizable(false);
stage.requestFocus();
stage.show();
} catch (IOException exception) {
exception.printStackTrace();
}
});
}
private Stage stage;
public final void setStage(Stage stage) {
this.stage = stage;
stage.setTitle("Open Autonomous Connection - " + getTitle(webView.getEngine()));
}
private String getTitle(WebEngine webEngine) {
Document doc = webEngine.getDocument();
if (doc == null) return domainInput.getText();
NodeList heads = doc.getElementsByTagName("head");
String titleText = webEngine.getLocation() ; // use location if page does not define a title
if (heads.getLength() > 0) {
Element head = (Element)heads.item(0);
NodeList titles = head.getElementsByTagName("title");
if (titles.getLength() > 0) {
Node title = titles.item(0);
titleText = title.getTextContent();
}
}
return titleText ;
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
instance = this;
btnGo.fire();
try {
URL oracle = new URL("https://raw.githubusercontent.com/Open-Autonomous-Connection/browser/master/src/resources/version.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));
String version = "";
String inputLine;
while ((inputLine = in.readLine()) != null) version += inputLine;
if (!version.equalsIgnoreCase(Files.readString(Path.of(Main.class.getResource("../../../version.txt").toURI())))) {
System.out.println();
System.out.println("===============================================");
System.out.println("IMPORTANT: A NEW VERSION IS PUBLISHED ON GITHUB");
System.out.println("===============================================");
System.out.println();
MessageDialog.show("A new version is published on GitHub:\nhttps://github.com/Open-Autonomous-Connection/");
}
} catch (IOException | URISyntaxException exception) {
System.out.println();
System.out.println("===============================================");
System.out.println("IMPORTANT: VERSION CHECK COULD NOT COMPLETED! VISIT OUR GITHUB");
System.out.println("https://github.com/Open-Autonomous-Connection");
System.out.println("===============================================");
System.out.println();
MessageDialog.show("Version check could not completed! Visit our GitHub:\nhttps://github.com/Open-Autonomous-Connection/");
}
webView.getEngine().getLoadWorker().stateProperty().addListener((observableValue, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
EventListener eventListener = evt -> {
String type = evt.getType();
if (type.equalsIgnoreCase("click")) {
String href = ((Element) evt.getTarget()).getAttribute("href");
try {
if (href.startsWith("http") || href.startsWith("https://")) {
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) Desktop.getDesktop().browse(new URI(href));
else MessageDialog.show("Failed to load Website " + href);
return;
}
if (href.startsWith(SiteType.PUBLIC.name + "://")) navigate(href);
else {
String base = "oac://" + DomainUtils.getDomainName(domainInput.getText()) + "." + DomainUtils.getTopLevelDomain(domainInput.getText()) + "/";
navigate(base + (href.startsWith("/") ? href.substring("/".length()) : href));
}
} catch (IOException | URISyntaxException | ClassNotFoundException exception) {
loadHtml(SiteType.PROTOCOL, new LocalDomain("error-occurred", "html", ""), WebsitesContent.ERROR_OCCURRED(exception.getMessage()));
}
}
};
Document doc = webView.getEngine().getDocument();
NodeList nodeList = doc.getElementsByTagName("a");
for (int i = 0; i < nodeList.getLength(); i++) {
((EventTarget) nodeList.item(i)).addEventListener("click", eventListener, false);
//((EventTarget) nodeList.item(i)).addEventListener(EVENT_TYPE_MOUSEOVER, listener, false);
//((EventTarget) nodeList.item(i)).addEventListener(EVENT_TYPE_MOUSEOVER, listener, false);
}
}
});
// TODO: Crash on header redirect. Fixing later
// webView.getEngine().locationProperty().addListener((obs, oldLocation, newLocation) -> {
// try {
// if (newLocation.startsWith("http") || newLocation.startsWith("https://")) {
// if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) Desktop.getDesktop().browse(new URI(newLocation));
// else MessageDialog.show("Failed to load Website " + newLocation);
//
// return;
// }
//
// if (newLocation.startsWith(SiteType.PUBLIC.name + "://")) navigate(newLocation);
// else {
// String base = "oac://" + DomainUtils.getDomainName(domainInput.getText()) + "." + DomainUtils.getTopLevelDomain(domainInput.getText()) + "/";
// navigate(base + (newLocation.startsWith("/") ? newLocation.substring("/".length()) : newLocation));
// }
// } catch (IOException | URISyntaxException | ClassNotFoundException exception) {
// loadHtml(SiteType.PROTOCOL, new LocalDomain("error-occurred", "html", ""), WebsitesContent.ERROR_OCCURRED(exception.getMessage()));
// }
// });
}
public void loadFile(File file) {
domainInput.setText(SiteType.LOCAL.name + "://" + file.getAbsolutePath());
Platform.runLater(() -> {
webView.getEngine().load(file.toURI().toString());
if (stage != null) stage.setTitle("Open Autonomous Connection - " + getTitle(webView.getEngine()));
});
}
public void loadHtml(SiteType siteType, Domain domain, String htmlContent) {
domainInput.setText(siteType.name + "://" + domain.name + "." + domain.topLevelDomain + "/" + domain.getPath());
Platform.runLater(() -> {
webView.getEngine().loadContent(htmlContent);
if (stage != null) stage.setTitle("Open Autonomous Connection - " + getTitle(webView.getEngine()));
});
}
}

View File

@@ -0,0 +1,61 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser.controller;
import javafx.event.ActionEvent;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import org.openautonomousconnection.browser.Config;
import org.openautonomousconnection.browser.MessageDialog;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class Settings implements Initializable {
public TextField hostInput;
public TextField portInput;
public Button btnSave;
public TextField usernameInput;
public TextField applicationInput;
public TextField apiKeyInput;
public void onSaveClick(ActionEvent actionEvent) {
try {
Integer.parseInt(portInput.getText());
} catch (NumberFormatException ignored) {
MessageDialog.show("Please enter a valid port number");
return;
}
try {
Config.setDNSHost(hostInput.getText());
Config.setDNSPort(Integer.parseInt(portInput.getText()));
Config.setAPIApplication(applicationInput.getText());
Config.setAPIUsername(usernameInput.getText());
Config.setAPIKey(apiKeyInput.getText());
} catch (IOException exception) {
MessageDialog.show("Failed to save settings:\n" + exception.getMessage());
return;
}
MessageDialog.show("Browser need a restart");
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
hostInput.setText(Config.getDNSHost());
portInput.setText(String.valueOf(Config.getDNSPort()));
usernameInput.setText(Config.getAPIUsername());
applicationInput.setText(Config.getAPIApplication());
apiKeyInput.setText(Config.getAPIKey());
}
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser.history;
import java.io.Serializable;
import java.text.SimpleDateFormat;
public class HistoryItem implements Serializable {
private String url;
private SimpleDateFormat dateFormat;
public HistoryItem(String url, SimpleDateFormat dateFormat) {
this.url = url;
this.dateFormat = dateFormat;
}
public final String getUrl() {
return url;
}
public final SimpleDateFormat getDateFormat() {
return dateFormat;
}
}

View File

@@ -0,0 +1,98 @@
/*
* Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
*
* You are unauthorized to remove this copyright.
* You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
* See LICENSE-File if exists
*/
package org.openautonomousconnection.browser.history;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
public class HistoryManager {
private static final File historyFile = new File("history.txt");
private static List<HistoryItem> historyItems = new ArrayList<>();
private static int currentPosition = -1;
public static List<HistoryItem> getHistoryItems() {
return historyItems;
}
public static void addHistoryItem(String url) {
if (currentPosition < historyItems.size() - 1)
historyItems.subList(currentPosition + 1, historyItems.size()).clear();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
historyItems.add(new HistoryItem(url, dateFormat));
currentPosition++;
saveHistory();
}
public static void saveHistory() {
if (!historyFile.exists()) {
try {
historyFile.createNewFile();
} catch (IOException exception) {
exception.printStackTrace();
return;
}
}
if (historyFile.length() == 0) return;
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(historyFile))) {
oos.writeObject(historyItems);
} catch (IOException exception) {
exception.printStackTrace();
}
}
public static void loadHistory() {
if (!historyFile.exists()) {
try {
historyFile.createNewFile();
} catch (IOException exception) {
exception.printStackTrace();
return;
}
}
if (historyFile.length() == 0) return;
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(historyFile))) {
historyItems = (List<HistoryItem>) ois.readObject();
currentPosition = historyItems.size() - 1;
} catch (IOException | ClassNotFoundException exception) {
exception.printStackTrace();
}
}
public static String navigateBack() {
if (currentPosition > 0) {
currentPosition--;
return historyItems.get(currentPosition).getUrl();
}
return null;
}
public static String navigateForward() {
if (currentPosition < historyItems.size() - 1) {
currentPosition++;
return historyItems.get(currentPosition).getUrl();
}
return null;
}
public static void clear() {
historyItems.clear();
currentPosition = -1;
}
}

View File

@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: org.openautonomousconnection.browser.Main

View File

@@ -0,0 +1,15 @@
Name: Java™ libraries for 3D Graphics, Multimedia and Processing
Short Name: jogamp
URL: http://jogamp.org/
Version: 2.2.4 (master@78f641de80d1c37cd61e5300eeba369c6aa9b1a1)
License: Mixed (see LICENSE.txt files)
Description:
This library is used to provide OpenGL bindings. Download
jogamp-all-platforms.7z and copy files from the jar/ directory.
See http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL for
related documentation.
Local Modifications:
None.

View File

@@ -0,0 +1,133 @@
The GlueGen source code is mostly licensed under the New BSD 2-clause license,
however it contains other licensed material as well.
Below you find a detailed list of licenses used in this project.
+++
The content of folder 'make/lib' contains build-time only
Java binaries (JAR) to ease the build setup.
Each JAR file has it's corresponding LICENSE file containing the
source location and license text. None of these binaries are contained in any way
by the generated and deployed GlueGen binaries.
+++
L.1) The GlueGen source tree contains code from the JogAmp Community
which is covered by the Simplified BSD 2-clause license:
Copyright 2010 JogAmp Community. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the
authors and should not be interpreted as representing official policies, either expressed
or implied, of JogAmp Community.
You can address the JogAmp Community via:
Web http://jogamp.org/
Forum/Mailinglist http://jogamp.762907.n3.nabble.com/
Chatrooms
IRC irc.freenode.net #jogamp
Jabber conference.jabber.org room: jogamp (deprecated!)
Repository http://jogamp.org/git/
Email mediastream _at_ jogamp _dot_ org
L.2) The GlueGen source tree contains code from Sun Microsystems, Inc.
which is covered by the New BSD 3-clause license:
Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistribution of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistribution in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of Sun Microsystems, Inc. or the names of
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
This software is provided "AS IS," without a warranty of any kind. ALL
EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
You acknowledge that this software is not designed or intended for use
in the design, construction, operation or maintenance of any nuclear
facility.
L.3) The GlueGen source tree contains CGRAM http://www.antlr.org/grammar/cgram/,
a ANSI-C parser implementation using ANTLR, which is being used
in the compile time part only.
It is covered by the Original BSD 4-clause license:
Copyright (c) 1998-2000, Non, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright
notice, this list of conditions, and the following disclaimer.
Redistributions in binary form must reproduce the above copyright
notice, this list of conditions, and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
All advertising materials mentioning features or use of this
software must display the following acknowledgement:
This product includes software developed by Non, Inc. and
its contributors.
Neither name of the company nor the names of its contributors
may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COMPANY OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,430 @@
The JOGL source code is mostly licensed under the 'New BSD 2-Clause License',
however it contains other licensed material as well.
Other licensed material is compatible with the 'New BSD 2-Clause License',
if not stated otherwise.
'New BSD 2-Clause License' incompatible materials are optional, they are:
A.7) The JOGL source tree _may_ contain code from Oculus VR, Inc.
which is covered by it's own permissive Oculus VR Rift SDK Software License.
(Optional, see A.7 below for details)
Below you find a detailed list of licenses used in this project.
+++
The content of folder 'make/lib' contains build- and test-time only
Java binaries (JAR) to ease the build setup.
Each JAR file has it's corresponding LICENSE file containing the
source location and license text. None of these binaries are contained in any way
by the generated and deployed JOGL binaries.
+++
L.1) The JOGL source tree contains code from the JogAmp Community
which is covered by the Simplified BSD 2-clause license:
Copyright 2010 JogAmp Community. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the
authors and should not be interpreted as representing official policies, either expressed
or implied, of JogAmp Community.
You can address the JogAmp Community via:
Web http://jogamp.org/
Forum/Mailinglist http://forum.jogamp.org
Chatrooms
IRC irc.freenode.net #jogamp
Jabber conference.jabber.org room: jogamp (deprecated!)
Repository http://jogamp.org/git/
Email mediastream _at_ jogamp _dot_ org
L.2) The JOGL source tree contains code from Sun Microsystems, Inc.
which is covered by the New BSD 3-clause license:
Copyright (c) 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistribution of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistribution in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of Sun Microsystems, Inc. or the names of
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
This software is provided "AS IS," without a warranty of any kind. ALL
EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
You acknowledge that this software is not designed or intended for use
in the design, construction, operation or maintenance of any nuclear
facility.
L.3) The JOGL source tree contains code ported from the OpenGL sample
implementation by Silicon Graphics, Inc. This code is licensed under
the SGI Free Software License B, Version 2.0
License Applicability. Except to the extent portions of this file are
made subject to an alternative license as permitted in the SGI Free
Software License B, Version 2.0 (the "License"), the contents of this
file are subject only to the provisions of the License. You may not use
this file except in compliance with the License. You may obtain a copy
of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
http://oss.sgi.com/projects/FreeB
http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.2.0.pdf
Or within this repository: doc/licenses/SGIFreeSWLicB.2.0.pdf
Note that, as provided in the License, the Software is distributed on an
"AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
L.4) The JOGL source tree contains code from the LWJGL project which is
similarly covered by the New BSD 3-clause license:
Copyright (c) 2002-2004 LWJGL Project
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of 'LWJGL' nor the names of
its contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
L.5) The JOGL source tree also contains a Java port of Brian Paul's Tile
Rendering library, used with permission of the author under the
New BSD 3-clause license instead of the original LGPL:
Copyright (c) 1997-2005 Brian Paul. All Rights Reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistribution of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistribution in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of Brian Paul or the names of contributors may be
used to endorse or promote products derived from this software
without specific prior written permission.
This software is provided "AS IS," without a warranty of any
kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
EXCLUDED. THE COPYRIGHT HOLDERS AND CONTRIBUTORS SHALL NOT BE
LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO
EVENT WILL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
INABILITY TO USE THIS SOFTWARE, EVEN IF THE COPYRIGHT HOLDERS OR
CONTRIBUTORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
A.1) The JOGL source tree also contains header files from Khronos,
reflecting OpenKODE, EGL, OpenGL ES1, OpenGL ES2 and OpenGL.
http://www.khronos.org/legal/license/
Files:
make/stub_includes/opengl/**
make/stub_includes/egl/**
make/stub_includes/khr/**
make/stub_includes/openmax/**
Copyright (c) 2007-2010 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.
THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
A.2) The JOGL source tree contains code from The Apache Software Foundation
which is covered by the Apache License Version 2.0
Apache Harmony - Open Source Java SE
=====================================
<http://harmony.apache.org/>
Author: The Apache Software Foundation (http://www.apache.org/).
Copyright 2006, 2010 The Apache Software Foundation.
Apache License Version 2.0, January 2004
http://www.apache.org/licenses/LICENSE-2.0
Or within this repository: doc/licenses/Apache.LICENSE-2.0
Files:
src/jogamp/graph/geom/plane/AffineTransform.java
src/jogamp/graph/geom/plane/IllegalPathStateException.java
src/jogamp/graph/geom/plane/NoninvertibleTransformException.java
src/jogamp/graph/geom/plane/PathIterator.java
src/jogamp/graph/geom/plane/Path2D.java
src/jogamp/graph/math/plane/Crossing.java
src/org/apache/harmony/misc/HashCode.java
A.3) The JOGL source tree contains code from David Schweinsberg
which is covered by the Apache License Version 1.1 and Version 2.0
Typecast
========
Typecast is a font development environment for OpenType font technology.
<https://java.net/projects/typecast>
Author: David Schweinsberg
Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
Apache Licenses
http://www.apache.org/licenses/
Apache License Version 1.1
http://www.apache.org/licenses/LICENSE-1.1
Or within this repository: doc/licenses/Apache.LICENSE-1.1
Files:
src/jogl/classes/jogamp/graph/font/typecast/ot/*
src/jogl/classes/jogamp/graph/font/typecast/ot/table/*
Apache License Version 2.0
http://www.apache.org/licenses/LICENSE-2.0
Or within this repository: doc/licenses/Apache.LICENSE-2.0
src/jogl/classes/jogamp/graph/font/typecast/ot/*
src/jogl/classes/jogamp/graph/font/typecast/ot/mac/*
src/jogl/classes/jogamp/graph/font/typecast/ot/table/*
src/jogl/classes/jogamp/graph/font/typecast/tt/engine/*
A.4) The JOGL source tree contains fonts from Ubuntu
which is covered by the UBUNTU FONT LICENCE Version 1.0
Ubuntu Font Family
==================
The Ubuntu Font Family are libre fonts funded by Canonical Ltd on behalf of the Ubuntu project.
<http://font.ubuntu.com/>
Copyright 2010 Canonical Ltd.
Licensed under the Ubuntu Font Licence 1.0
Author: Canonical Ltd., Dalton Maag
UBUNTU FONT LICENCE
Version 1.0
http://font.ubuntu.com/ufl/ubuntu-font-licence-1.0.txt
Or within this repository: doc/licenses/ubuntu-font-licence-1.0.txt
Files:
src/jogamp/graph/font/fonts/ubuntu/*
A.5) The JOGL source tree also contains header files from NVIDIA,
reflecting Cg.
Files:
make/stub_includes/cg/CG/**
Copyright (c) 2002, NVIDIA Corporation
NVIDIA Corporation("NVIDIA") supplies this software to you in consideration
of your agreement to the following terms, and your use, installation,
modification or redistribution of this NVIDIA software constitutes
acceptance of these terms. If you do not agree with these terms, please do
not use, install, modify or redistribute this NVIDIA software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, NVIDIA grants you a personal, non-exclusive license,
under NVIDIA's copyrights in this original NVIDIA software (the "NVIDIA
Software"), to use, reproduce, modify and redistribute the NVIDIA
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the NVIDIA Software, you must retain the
copyright notice of NVIDIA, this notice and the following text and
disclaimers in all such redistributions of the NVIDIA Software. Neither the
name, trademarks, service marks nor logos of NVIDIA Corporation may be used
to endorse or promote products derived from the NVIDIA Software without
specific prior written permission from NVIDIA. Except as expressly stated
in this notice, no other rights or licenses express or implied, are granted
by NVIDIA herein, including but not limited to any patent rights that may be
infringed by your derivative works or by other works in which the NVIDIA
Software may be incorporated. No hardware is licensed hereunder.
THE NVIDIA SOFTWARE IS BEING PROVIDED ON AN "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR ITS USE AND OPERATION
EITHER ALONE OR IN COMBINATION WITH OTHER PRODUCTS.
IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
EXEMPLARY, CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOST
PROFITS; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) OR ARISING IN ANY WAY OUT OF THE USE,
REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE NVIDIA SOFTWARE,
HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING
NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
A.6) The JOGL source tree contains code from Hernan J. Gonzalez and Shawn Hartsock
which is covered by the Apache License Version 2.0
PNGJ
====
PNGJ: Java library for reading and writing PNG images.
Version 1.12 (3 Dec 2012)
<http://code.google.com/p/pngj/>
Author: Hernan J. Gonzalez and Shawn Hartsock
Copyright (C) 2004 The Apache Software Foundation. All rights reserved.
Apache Licenses
http://www.apache.org/licenses/
Apache License Version 2.0
http://www.apache.org/licenses/LICENSE-2.0
Or within this repository: doc/licenses/Apache.LICENSE-2.0
src/jogl/classes/jogamp/opengl/util/pngj/**
A.7) The JOGL source tree _may_ contain code from Oculus VR, Inc.
which is covered by it's own permissive Oculus VR Rift SDK Software License.
This code _can_ be included to produce a binding
and hence support for the Oculus VR Rift.
The code is included _and_ it's build artifacts will be released,
if the git sub-module oculusvr-sdk is included in the jogl source repository
as true for current official JogAmp builds and releases!
If using JogAmp JOGL builds with oculusvr-sdk support,
but the user prefers to _not_ use it for license or other reasons,
the user can simply remove the artifacts 'jar/atomics/oculusvr*jar'.
No other produced artifact is affected.
While the Oculus VR Rift SDK Software License is permissive,
it's differences to the New BSD license shall be mentioned, see below!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright © 2014 Oculus VR, Inc. All rights reserved.
Oculus VR, Inc. Software Development Kit License Agreement
Human-Readable Summary:
- You are Free to:
- Use, modify, and distribute the Oculus VR Rift SDK in source and binary
form with your applications/software.
- With the Following Restrictions:
- You can only distribute or re-distribute the source code to LibOVR in
whole, not in part.
- Modifications to the Oculus VR Rift SDK in source or binary form must
be shared with Oculus VR.
- If your applications cause health and safety issues, you may lose your
right to use the Oculus VR Rift SDK, including LibOVR.
- The Oculus VR Rift SDK may not be used to interface with unapproved commercial
virtual reality mobile or non-mobile products or hardware.
- This human-readable Summary is not a license. It is simply a convenient
reference for understanding the full Oculus VR Rift SDK License Agreement.
The Summary is written as a user-friendly interface to the full Oculus VR Rift
SDK License below. This Summary itself has no legal value, and its contents do
not appear in the actual license.
Full-length Legal Copy may be found at:
http://www.oculusvr.com/licenses/LICENSE-3.1
http://jogamp.org/git/?p=oculusvr-sdk.git;a=blob;f=LICENSE.txt;hb=HEAD
Or within this repository: oculusvr-sdk/LICENSE.txt

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.web.*?>
<!--
~ Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
~
~ You are unauthorized to remove this copyright.
~ You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
~ See LICENSE-File if exists
-->
<AnchorPane prefHeight="580.0" prefWidth="922.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.openautonomousconnection.browser.controller.Browser">
<children>
<Button fx:id="btnHome" mnemonicParsing="false" onAction="#onHomeClick" prefHeight="45.0" prefWidth="105.0" text="Home" AnchorPane.leftAnchor="15.0" AnchorPane.topAnchor="15.0" />
<Button fx:id="btnReload" mnemonicParsing="false" onAction="#onReloadClick" prefHeight="45.0" prefWidth="105.0" text="Reload" AnchorPane.leftAnchor="125.0" AnchorPane.topAnchor="15.0" />
<Button fx:id="btnGo" mnemonicParsing="false" onAction="#onGoClick" prefHeight="45.0" prefWidth="105.0" text="Go" AnchorPane.rightAnchor="230.0" AnchorPane.topAnchor="15.0" />
<Button fx:id="btnSettings" layoutX="707.0" layoutY="15.0" mnemonicParsing="false" onAction="#onSettingsClick" prefHeight="45.0" prefWidth="105.0" text="Settings" AnchorPane.rightAnchor="15.0" AnchorPane.topAnchor="15.0" />
<TextField fx:id="domainInput" prefHeight="45.0" promptText="oac://" text="oac://browser-start.root/" AnchorPane.leftAnchor="235.0" AnchorPane.rightAnchor="345.0" AnchorPane.topAnchor="15.0" />
<WebView fx:id="webView" layoutY="68.0" prefHeight="502.0" prefWidth="730.0" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0" AnchorPane.topAnchor="68.0" />
</children>
</AnchorPane>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<!--
~ Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
~
~ You are unauthorized to remove this copyright.
~ You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
~ See LICENSE-File if exists
-->
<AnchorPane maxHeight="340.0" maxWidth="600.0" prefHeight="340.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.openautonomousconnection.browser.MessageDialog">
<children>
<Label alignment="CENTER" contentDisplay="CENTER" layoutX="90.0" layoutY="15.0" prefHeight="65.0" prefWidth="420.0" text="IMPORTANT MESSAGE" textAlignment="CENTER" textFill="RED">
<font>
<Font size="25.0" />
</font>
</Label>
<Label fx:id="txtServer" alignment="TOP_LEFT" layoutX="90.0" layoutY="80.0" prefHeight="230.0" prefWidth="420.0" text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Non diam phasellus vestibulum lorem sed. Vulputate sapien nec sagittis aliquam malesuada bibendum. Purus viverra accumsan in nisl. Arcu ac tortor dignissim convallis. Mattis vulputate enim nulla aliquet porttitor lacus luctus accumsan. Risus nec feugiat in fermentum posuere urna. Tristique et egestas quis ipsum suspendisse ultrices. Id consectetur purus ut faucibus pulvinar elementum. Nisi quis eleifend quam adipiscing vitae. Sagittis purus sit amet volutpat consequat mauris." wrapText="true">
<font>
<Font size="15.0" />
</font>
</Label>
</children>
</AnchorPane>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<!--
~ Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved
~
~ You are unauthorized to remove this copyright.
~ You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection
~ See LICENSE-File if exists
-->
<AnchorPane prefHeight="255.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.openautonomousconnection.browser.controller.Settings">
<children>
<Label alignment="CENTER" contentDisplay="CENTER" layoutX="50.0" layoutY="15.0" prefHeight="55.0" prefWidth="260.0" text="DNS Settings" textAlignment="CENTER">
<font>
<Font size="25.0" />
</font>
</Label>
<Label layoutX="15.0" layoutY="85.0" prefHeight="25.0" prefWidth="35.0" text="Host">
<font>
<Font size="15.0" />
</font>
</Label>
<Label layoutX="15.0" layoutY="115.0" prefHeight="25.0" prefWidth="35.0" text="Port">
<font>
<Font size="15.0" />
</font>
</Label>
<TextField fx:id="hostInput" layoutX="95.0" layoutY="85.0" prefHeight="25.0" prefWidth="170.0" promptText="Host" text="82.197.95.202" />
<TextField fx:id="portInput" layoutX="95.0" layoutY="115.0" prefHeight="25.0" prefWidth="170.0" promptText="Port" text="9382" />
<Button fx:id="btnSave" layoutX="250.0" layoutY="180.0" mnemonicParsing="false" onAction="#onSaveClick" prefHeight="55.0" prefWidth="100.0" text="Save" />
<Label alignment="CENTER" contentDisplay="CENTER" layoutX="325.0" layoutY="15.0" prefHeight="55.0" prefWidth="260.0" text="API Settings" textAlignment="CENTER">
<font>
<Font size="25.0" />
</font>
</Label>
<Label layoutX="290.0" layoutY="85.0" prefHeight="25.0" prefWidth="100.0" text="Username">
<font>
<Font size="15.0" />
</font>
</Label>
<Label layoutX="290.0" layoutY="115.0" prefHeight="25.0" prefWidth="100.0" text="Application">
<font>
<Font size="15.0" />
</font>
</Label>
<TextField fx:id="usernameInput" editable="false" layoutX="390.0" layoutY="85.0" prefHeight="25.0" prefWidth="170.0" promptText="Username" />
<TextField fx:id="applicationInput" editable="false" layoutX="390.0" layoutY="115.0" prefHeight="25.0" prefWidth="170.0" promptText="Application" />
<Label layoutX="290.0" layoutY="145.0" prefHeight="25.0" prefWidth="100.0" text="API Key">
<font>
<Font size="15.0" />
</font>
</Label>
<TextField fx:id="apiKeyInput" editable="false" layoutX="390.0" layoutY="145.0" prefHeight="25.0" prefWidth="170.0" promptText="API Key" />
</children>
</AnchorPane>

View File

@@ -0,0 +1 @@
1.0