main
Michal 2024-05-23 15:18:59 +02:00
commit b3fe8e732a
63 changed files with 5551 additions and 0 deletions

BIN
jguard_client/app/putty.exe Normal file

Binary file not shown.

Binary file not shown.

73
jguard_client/build.xml Normal file
View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="jGuardClient" default="default" basedir=".">
<description>Builds, tests, and runs the project jGuardClient.</description>
<import file="nbproject/build-impl.xml"/>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar: JAR building
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="jGuardClient-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
</project>

10
jguard_client/config Normal file
View File

@ -0,0 +1,10 @@
#Sun Oct 25 22:01:12 CET 2020
autoconnect=1
debug=1
port=1225
server=localhost
user=michal
volume=50
start_minimized=0
password=123555
sound=1

BIN
jguard_client/img/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
jguard_client/img/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
jguard_client/img/arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

BIN
jguard_client/img/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

BIN
jguard_client/img/log.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
jguard_client/img/ping.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
jguard_client/img/ssh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

BIN
jguard_client/img/trash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 B

75
jguard_client/log.txt Normal file
View File

@ -0,0 +1,75 @@
01.11.20 18:27:18 I Client start
01.11.20 18:27:18 I Loading config ...
01.11.20 18:27:18 I successfully
01.11.20 18:27:18 I Automaticke pripojovani
01.11.20 18:27:18 I Pripojuji ....
01.11.20 18:27:20 I Automaticke pripojovani ukonceno
01.11.20 18:27:20 D -> Message type: 1
01.11.20 18:27:20 D -> Message type: 2
01.11.20 18:27:20 D -> Message type: 4
01.11.20 18:27:20 I Pripojeno
01.11.20 18:27:20 D -> Message type: 6
01.11.20 18:27:20 D -> Message type: 8
01.11.20 18:27:20 D -> Message type: 9
01.11.20 18:27:20 D -> Message type: 100
01.11.20 18:27:20 D Prijata infomace o mape
01.11.20 18:27:20 D -> Message type: 100
01.11.20 18:27:20 D Prijata infomace o mape
01.11.20 18:27:20 D -> Message type: 100
01.11.20 18:27:20 D Prijata infomace o mape
01.11.20 18:27:20 D -> Message type: 100
01.11.20 18:27:20 D Prijata infomace o mape
01.11.20 18:27:20 D -> Message type: 100
01.11.20 18:27:20 D Prijata infomace o mape
01.11.20 18:27:20 D -> Message type: 206
01.11.20 18:28:18 D -> Message type: 204
01.11.20 18:28:18 D -> Message type: 204
01.11.20 18:28:26 I Server nedostupny: Stávající připojení bylo vynuceně ukončeno vzdáleným hostitelem
01.11.20 18:28:26 I Automaticke pripojovani
01.11.20 18:28:26 I Pripojuji ....
01.11.20 18:28:28 E Client exception: Connection refused: no further information: localhost/127.0.0.1:1225
01.11.20 18:28:28 I Odpojeno
01.11.20 18:28:31 I Pripojuji ....
01.11.20 18:28:33 E Client exception: Connection refused: no further information: localhost/127.0.0.1:1225
01.11.20 18:28:33 I Odpojeno
01.11.20 18:28:36 I Pripojuji ....
01.11.20 18:28:36 I Automaticke pripojovani ukonceno
01.11.20 18:28:36 I Odpojeno
01.11.20 18:28:36 D -> Message type: 1
01.11.20 18:28:36 D -> Message type: 2
01.11.20 18:28:36 D -> Message type: 4
01.11.20 18:28:36 I Pripojeno
01.11.20 18:28:36 D -> Message type: 6
01.11.20 18:28:36 D -> Message type: 8
01.11.20 18:28:36 D -> Message type: 9
01.11.20 18:28:36 D -> Message type: 100
01.11.20 18:28:36 D Prijata infomace o mape
01.11.20 18:28:36 D -> Message type: 100
01.11.20 18:28:36 D Prijata infomace o mape
01.11.20 18:28:36 D -> Message type: 100
01.11.20 18:28:36 D Prijata infomace o mape
01.11.20 18:28:36 D -> Message type: 100
01.11.20 18:28:36 D Prijata infomace o mape
01.11.20 18:28:36 D -> Message type: 100
01.11.20 18:28:36 D Prijata infomace o mape
01.11.20 18:28:37 D -> Message type: 206
01.11.20 18:28:38 D -> Message type: 204
01.11.20 18:28:39 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204
01.11.20 18:28:40 D -> Message type: 204

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
build.xml.data.CRC32=0d9d7eb9
build.xml.script.CRC32=9dc7d76a
build.xml.stylesheet.CRC32=8064a381@1.80.1.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=0d9d7eb9
nbproject/build-impl.xml.script.CRC32=393f3f72
nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48

View File

@ -0,0 +1,85 @@
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
annotation.processing.processors.list=
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=jGuardClient
application.vendor=Michal
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
build.dir=build
build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket
debug.classpath=\
${run.classpath}
debug.test.classpath=\
${run.test.classpath}
# Files in build.classes.dir which should be excluded from distribution jar
dist.archive.excludes=
# This directory is removed when the project is cleaned:
dist.dir=dist
dist.jar=${dist.dir}/jGuardClient.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.commons-io-2.6.jar=C:\\Users\\Michal\\Documents\\NetBeansProjects\\JAR lib\\commons-io-2.6.jar
file.reference.netty-all-4.1.33.Final.jar=C:\\Users\\Michal\\Documents\\NetBeansProjects\\JAR lib\\netty-all-4.1.33.Final.jar
file.reference.snmp4j-2.3.4.jar=C:\\Users\\Michal\\Documents\\NetBeansProjects\\JAR lib\\snmp4j-2.3.4.jar
includes=**
jar.compress=false
javac.classpath=\
${reference.jGuard.jar}:\
${file.reference.netty-all-4.1.33.Final.jar}:\
${file.reference.snmp4j-2.3.4.jar}:\
${file.reference.commons-io-2.6.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.external.vm=true
javac.processorpath=\
${javac.classpath}
javac.source=1.8
javac.target=1.8
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
javadoc.author=false
javadoc.encoding=${source.encoding}
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
main.class=jguard.client.Client
manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false
platform.active=default_platform
project.jGuard=../jGuard
reference.jGuard.jar=${project.jGuard}/dist/jGuard.jar
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
# Space-separated list of JVM arguments used when running the project.
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
# To set system properties for unit tests define test-sys-prop.name=value:
run.jvmargs=
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
source.encoding=UTF-8
src.dir=src
test.src.dir=test

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.java.j2seproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>jGuardClient</name>
<source-roots>
<root id="src.dir"/>
</source-roots>
<test-roots>
<root id="test.src.dir"/>
</test-roots>
</data>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
<reference>
<foreign-project>jGuard</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
</references>
</configuration>
</project>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,69 @@
package jguard.client;
import java.awt.Desktop;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class AppLauncher {
public static void winbox(String ip, String port, String user, String password) {
if (port.equals("8291")) {
runApp(new String[]{"app/winbox.exe", ip, user, password});
} else {
runApp(new String[]{"app/winbox.exe", ip + ":" + port, user, password});
}
}
public static void openWebpage(String address, String port, int verze) {
String urlString = "http://"+address+":"+port;
if (verze == 1) {
urlString = "https://"+address+":"+port;
}
try {
Desktop.getDesktop().browse(new URL(urlString).toURI());
} catch (URISyntaxException | IOException e) {
e.printStackTrace();
}
}
public static void ssh(String address, String username, String password, int port){
runPutty("-ssh", address, username, password, port);
}
private static void runPutty(String versionParam, String address, String username, String password, Integer port) {
List<String> params = new ArrayList();
params.add("app/putty.exe");
params.add(versionParam);
if (port != null) {
params.add("-P");
params.add(port.toString());
}
if (username.equals("")) {
params.add(address);
} else {
params.add(username + "@" + address);
if (!password.equals("")) {
params.add("-pw");
params.add(password);
}
}
String[] aParams = new String[params.size()];
runApp((String[]) params.toArray(aParams));
}
private static void runApp(String[] run) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
Process p = Runtime.getRuntime().exec(run);
} catch (Exception ex) {
}
}
});
t.start();
}
}

View File

@ -0,0 +1,35 @@
package jguard.client;
import cucky.jGuard.lib.LogFile;
import java.util.logging.Level;
import java.util.logging.Logger;
import jguard.client.network.NetworkClient;
public class AutoConnect extends Thread {
private boolean exit = false;
@Override
public void run() {
super.run();
LogFile.printInfo("Automaticke pripojovani");
while (!exit) {
Client.client = new NetworkClient(Client.config.getProperty("server"), Integer.valueOf(Client.config.getProperty("port")));
Client.client.start();
if (Client.client.isConnected()) {
exit = true;
} else {
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
Logger.getLogger(AutoConnect.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
LogFile.printInfo("Automaticke pripojovani ukonceno");
}
}

View File

@ -0,0 +1,123 @@
package jguard.client;
import jguard.client.gui.Window;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.object.ObjectType;
import cucky.jGuard.lib.object.Log;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.OnlineClients;
import cucky.jGuard.lib.object.ServerSettings;
import cucky.jGuard.lib.object.User;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;
import javax.imageio.ImageIO;
import jguard.client.gui.Tray;
import jguard.client.gui.dialog.LoginDialog;
import jguard.client.network.NetworkClient;
public class Client {
// TODO nazev aplikace jNet
public static final String APP_NAME = "jGuard Client";
public static final int VERSION = 26;
public static Properties config;
// nastaveni serveru
public static ServerSettings serverSettings;
// podrobnosti o uzivateli, např opravnění
public static User user;
// seznam map
public static ArrayList<Map> map = new ArrayList<Map>();
// seznam pripojenych klientu
public static ArrayList<OnlineClients> onlineClients = new ArrayList<OnlineClients>();
// log
public static ArrayList<Log> log = new ArrayList<Log>();
// pocet offline zarizeni
public static int offline = 0;
// seznam typu zarizeni
public static ArrayList<ObjectType> deviceType;
public static NetworkClient client = new NetworkClient("", 0);
public static Window okno = new Window();
public static void main(String[] args) {
LogFile.clear();
LogFile.printInfo("Client start");
LogFile.printInfo("Loading config ...");
config = new Config().loadAll(); // TODO toto postrada vyznam kdyz se pak pri dotazu znovu otevira soubor
if (config != null) {
LogFile.printInfo(" successfully");
} else {
LogFile.printInfo(" fail");
System.exit(0);
}
///
/// tray icon
///
new Tray().createAndShowTray();
///
/// okno
///
okno.setSize(1024, 800);
okno.setLocationRelativeTo(null);
///
/// nastavit ikonu
///
try {
okno.setIconImage(ImageIO.read(new File("img/app.png")));
} catch (IOException ex) {
LogFile.printErr("APP icon exception");
}
///
/// spustit minimalozovane ?
///
if (config.getProperty("start_minimized").equals("1")) {
okno.setVisible(false);
} else {
okno.setVisible(true);
}
///
/// automatické připojení
///
if (config.getProperty("autoconnect").equals("1")) {
Thread t = new AutoConnect();
t.run();
/*
Thread t = new Thread(){
@Override
public void run() {
super.run();
LogFile.printInfo("Automaticke pripojovani");
client = new NetworkClient(config.getProperty("server"), Integer.valueOf(config.getProperty("port")));
client.start();
}
};
t.run();
*/
} else {
new LoginDialog().setVisible(true);
}
}
}

View File

@ -0,0 +1,210 @@
package jguard.client;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.Message;
import cucky.jGuard.lib.Status;
import cucky.jGuard.lib.object.ObjectType;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.MapObject;
import cucky.jGuard.lib.object.ObjectConnection;
import cucky.jGuard.lib.object.OnlineClients;
import cucky.jGuard.lib.object.ServerSettings;
import cucky.jGuard.lib.object.User;
import java.io.IOException;
import java.util.ArrayList;
import static jguard.client.Client.config;
import jguard.client.gui.MapTree;
import jguard.client.gui.MapView;
import jguard.client.gui.Tray;
import jguard.client.gui.Window;
import jguard.client.gui.dialog.LoginDialog;
public class ClientMessageParser {
Map map;
MapObject mo;
public void parse(Message msg) {
LogFile.printDebug("-> Message type: " + msg.getType());
switch (msg.getType()) {
case Message.CLIENT_VERSION:
Client.client.send(Message.CLIENT_VERSION, Client.VERSION);
break;
case Message.UPDATE:
LogFile.printInfo("Přijat požadavek na aktualizaci");
String[] run = {"java", "-jar", "Updater.jar"};
// TODO po přijetí pozadavku dialogove okno s informaci ze dojde k aktualizace a odpoctem k jejimu provedeni
try {
// odpoji se
Client.client.disconnect();
// spusti updater
Runtime.getRuntime().exec(run);
// vypne program
System.exit(0);
} catch (IOException ex) {
LogFile.printErr("Client update exception: " + ex.getMessage());
}
break;
case Message.AUTH_REQUEST:
Window.setStatusBarMessage("Přihlašuji ...");
String[] userPass = {config.getProperty("user"), config.getProperty("password"), String.valueOf(OnlineClients.PLATFORM_PC)};
Client.client.send(Message.AUTH, userPass);
break;
case Message.AUTH_SUCEFULL:
Window.setStatusBarMessage("Připojeno");
LogFile.printInfo("Pripojeno");
// smazání seznamu map
Client.map.clear();
break;
case Message.AUTH_FAIL:
Window.setStatusBarMessage("Chyba autorizace");
new LoginDialog().setVisible(true);
break;
case Message.SERVER_MESSAGE:
Window.showMessage((String) msg.getMsg());
break;
case Message.MAP:
map = (Map) msg.getMsg();
LogFile.printDebug("Prijata infomace o mape");
// pridani do arraylistu
Client.map.add(map);
// pridani do stromu
MapTree.add();
// spocitani offline zarizeni
for (MapObject obj : map.getObjects()) {
if (obj.getStatus() == Status.OFFLINE) {
Client.offline++;
}
}
// aktualizace tray icon
Tray.setState();
break;
case Message.ONLINE_CLIENTS:
// TODO pri kompilaci zpusobuje chybu uses unchecked or unsafe operations. ale nevim proc
Client.onlineClients = (ArrayList<OnlineClients>) msg.getMsg();
Window.reloadOnlineClinets();
break;
case Message.SERVER_SETTINGS:
Client.serverSettings = (ServerSettings) msg.getMsg();
break;
case Message.USER_INFO:
Client.user = (User) msg.getMsg();
break;
case Message.SET_MAP_LOCK:
int[] data_lock = (int[]) msg.getMsg();
MapManager.setLock(data_lock[0], data_lock[1]);
break;
case Message.REMOVE_MAP:
int map_deleted = (int) msg.getMsg();
// odebrani z lokalniho seznamu
for (Map m : Client.map) {
if (m.getId() == map_deleted) {
Client.map.remove(m);
break;
}
}
// aktualizace stromu map
break;
case Message.UPDATE_OBJECT:
mo = (MapObject) msg.getMsg();
// aktualizace v lokalnim seznamu
for (Map map : Client.map) {
map.updateObject(mo);
}
break;
case Message.STATE_UPDATE:
int[] data = (int[]) msg.getMsg();
// aktualizace stavu u objektu
MapManager.setObjectStatus(data[0], data[1], data[2]);
// aktualizace stromu map
MapTree.reload();
// aktualizace poctu offline zarizeni
if (data[2] == Status.OFFLINE) {
Client.offline++;
} else if (Client.offline < 1) {
Client.offline--;
}
// aktualizace tray icon
Tray.setState();
break;
case Message.ADD_OBJECT_TYPE:
Client.deviceType.add((ObjectType) msg.getMsg());
System.out.println("jguard.client.ClientMessageParser.parse()");
break;
case Message.ADD_OBJECT:
mo = (MapObject) msg.getMsg();
// prida do lokalniho seznamu
for (Map m : Client.map) {
if (m.getId() == mo.getMap()) {
m.addObject(mo);
break;
}
}
// je-li mapa otevrena prida ji i tam
if (Client.map.get(Window.currentMapIndex).getId() == mo.getMap()) {
MapView.addObject(mo);
}
break;
case Message.LIST_OBJECT_TYPE:
Client.deviceType = (ArrayList<ObjectType>) msg.getMsg();
break;
case Message.NEW_CONNECTION:
ObjectConnection oc = (ObjectConnection) msg.getMsg();
for (Map map : Client.map) {
if (map.getId() == oc.getMap()) {
// pridani do arraylistu
map.addObjectConnection(oc);
break;
}
}
// je-li mapa otevrena prida propojeni i tam
if (Client.map.get(Window.currentMapIndex).getId() == oc.getMap()) {
MapView.addObjectConnection(oc);
}
break;
default:
LogFile.printErr("Neznamy typ zpravy");
}
}
}

View File

@ -0,0 +1,137 @@
package jguard.client;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.OSValidator;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class Config {
private Properties prop = new Properties();
private String configFile = "config";
private OutputStream output = null;
private InputStream input = null;
public static Map<String, String> conf = new HashMap<String, String>();
public Config() {
}
private InputStream getFile(String configFile) throws Exception{
if (OSValidator.isWindows()) {
return new FileInputStream(configFile);
} else if (OSValidator.isUnix()) {
return new FileInputStream("/jGuard/"+configFile);
}
return null;
}
public String get(String name) {
try {
input = getFile(configFile);
// load a properties file
prop.load(input);
return prop.getProperty(name);
} catch (Exception ex) {
LogFile.printErr("Config file exception: " + ex.getLocalizedMessage());
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
LogFile.printErr("Config file exception: " + e.getLocalizedMessage());
}
}
}
return "";
}
public void set(String name, String value) {
try {
output = new FileOutputStream(configFile);
// set the properties value
prop.setProperty(name, value);
// save properties to project root folder
prop.store(output, null);
} catch (IOException io) {
LogFile.printErr("Config file exception: " + io.getLocalizedMessage());
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
LogFile.printErr("Config file exception: " + e.getLocalizedMessage());
}
}
}
}
public Properties loadAll(){
try {
input = getFile(configFile);
if (input == null) {
LogFile.printErr("Config file error: input is null");
return null;
}
prop.load(input);
return prop;
} catch (Exception ex) {
LogFile.printErr("Config file exception: " + ex.getLocalizedMessage());
return null;
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
LogFile.printErr("Config file exception: " + e.getLocalizedMessage());
}
}
}
}
public void StoreLogin(){
}
public void store(Properties prop){
try {
output = new FileOutputStream(configFile);
// save properties to project root folder
prop.store(output, null);
} catch (IOException io) {
System.err.println("Config file exception: " + io.getLocalizedMessage());
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
System.err.println("Config file exception: " + e.getLocalizedMessage());
}
}
}
}
}

View File

@ -0,0 +1,53 @@
package jguard.client;
import cucky.jGuard.lib.Status;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.MapObject;
import jguard.client.gui.MapTree;
import jguard.client.gui.Tray;
public class MapManager {
private static Map getMapById(int id){
for (Map map : Client.map) {
if (map.getId() == id) {
return map;
}
}
return null;
}
public static void addMap(Map m) {
// pridani do seznamu
Client.map.add(m);
// pridání do stromu map
MapTree.add();
}
public static void setLock(int map, int state) {
for (Map mp : Client.map) {
if (mp.getId() == map) {
mp.setLock((state == 1));
}
}
}
public static void setObjectStatus(int mapId, int objId, int status) {
for (Map map : Client.map) {
for (MapObject obj : map.getObjects()) {
// aktualizace stavu u objektu
if (obj.getId() == objId) {
obj.setStatus(status);
break;
}
}
}
}
}

View File

@ -0,0 +1,131 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.MapComparator;
import cucky.jGuard.lib.Status;
import cucky.jGuard.lib.object.Map;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Collections;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.border.EmptyBorder;
import javax.swing.tree.*;
import jguard.client.Client;
public class MapTree extends JTree {
static DefaultTreeModel model;
static DefaultMutableTreeNode root = new DefaultMutableTreeNode("Mapy");
public MapTree() {
// neni videt root element
this.setRootVisible(false);
// povoli pouze jeden vybrany radek
this.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
model = new DefaultTreeModel(root);
this.setModel(model);
this.setCellRenderer(new MapTreeCellRenderer());
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) getLastSelectedPathComponent();
if (!node.isRoot()) {
if (e.getClickCount() == 1) { // jednoduchy klik
} else if (e.getClickCount() == 2) { // dvojklik
Window.setMapView(node.getParent().getIndex(node));
}
}
}
};
addMouseListener(ml);
}
public static void add() {
root.removeAllChildren();
Collections.sort(Client.map, new MapComparator());
for (Map map : Client.map) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(map);
root.add(node);
}
try {
model.reload();
} catch (Exception e) {
LogFile.printErr("Map tree error: " +e);
}
}
public static void clear(){
root.removeAllChildren();
model.reload();
}
public static void reload(){
model.reload();
}
private class MapTreeCellRenderer extends DefaultTreeCellRenderer {
private JLabel label;
private BufferedImage image;
public MapTreeCellRenderer() {
label = new JLabel();
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
label=(JLabel)super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof Map) {
try {
Map m = (Map) o;
switch (m.getMapStatus()) {
case Status.OK: // online
image = ImageIO.read(new File("img/flag_green.png"));
break;
case Status.WARNING: // warning
image = ImageIO.read(new File("img/flag_orange.png"));
break;
case Status.OFFLINE: // offline
image = ImageIO.read(new File("img/flag_red.png"));
break;
default: // other
image = ImageIO.read(new File("img/flag_gray.png"));
}
if (image != null) {
label.setIcon(new ImageIcon(image));
}
label.setText(m.getName());
} catch (Exception ex) {
System.err.println("Error tree icon: " + ex.getMessage());
}
} else {
label.setIcon(null);
label.setText(String.valueOf(value));
}
// EmptyBorder(int top, int left, int bottom, int right)
EmptyBorder border = new EmptyBorder(7, 25, 3, 3);
label.setBorder(border);
return label;
}
}
}

View File

@ -0,0 +1,112 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.object.MapObject;
import cucky.jGuard.lib.object.ObjectConnection;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.Timer;
import jguard.client.Client;
public class MapView extends JPanel{
public static List<PaintObject> items;
private static List<PaintConnection> connection;
public void prekreslit() {
repaint();
}
public MapView() {
this.setBackground(Color.white);
addMouseMotionListener(new MapViewAction());
addMouseListener(new MapViewAction());
// nacteni objektů
items = new ArrayList<>();
for (MapObject obj : Client.map.get(Window.currentMapIndex).getObjects()) {
items.add(new PaintObject(obj.getId()));
}
// nacteni propojeni
connection = new ArrayList<>();
for (ObjectConnection c : Client.map.get(Window.currentMapIndex).getConnection()) {
connection.add(new PaintConnection(c.getId()));
}
// periodicke prekreslovani
Timer timer = new Timer(100, (ActionEvent ae) -> {
repaint();
});
timer.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
// vykresleni lock/unlock mapy
try {
BufferedImage image;
if (Client.map.get(Window.currentMapIndex).isLock()) {
image = ImageIO.read(new File("img/lock.png"));
} else {
image = ImageIO.read(new File("img/unlock.png"));
}
g.drawImage(image, 0, 0, this);
} catch (IOException ex) {
LogFile.printErr("File not found: " + ex);
}
// kreslení nového propojeni
if (MapViewAction.createConnection && MapViewAction.startConMapObject != null) {
g2.draw(new Line2D.Double(MapViewAction.startConMapObject.getPoint(), MapViewAction.endConnPoint));
}
// vykresleni stavajicich propojeni
for (PaintConnection c : connection) {
c.paint(g2);
}
// vykresleni objektu
for (PaintObject i : items) {
i.paint(g2);
}
g2.dispose();
}
public static void addObject(MapObject mo) {
items.add(new PaintObject(mo.getId()));
}
static void removeObject(int id) {
for (PaintObject i : items) {
if (i.getId() == id) {
items.remove(i);
break;
}
}
}
public static void addObjectConnection(ObjectConnection oc) {
connection.add(new PaintConnection(oc.getId()));
}
}

View File

@ -0,0 +1,289 @@
package jguard.client.gui;
import jguard.client.gui.dialog.ObjectConnectionDialog;
import cucky.jGuard.lib.Message;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.MapObject;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import jguard.client.AppLauncher;
import jguard.client.Client;
import static jguard.client.gui.MapView.items;
import jguard.client.gui.dialog.ObjectDialog;
public class MapViewAction implements MouseListener, MouseMotionListener {
private static PaintObject selectedObject;
private static Point offset;
public static boolean createConnection = false;
public static PaintObject startConMapObject;
public static PaintObject endConMapObject;
public static Point endConnPoint;
@Override
public void mouseClicked(MouseEvent e) {
// vola se pri kliknuti v mape
}
@Override
public void mousePressed(MouseEvent e) { // vola se pri stisknuti tlacitka
// vyhledani jestli se kliklo na nejaky objekt
for (PaintObject node : items) {
// zruseni vybrani na vsech objektech
node.setSelected(false);
if (node.contains(e.getPoint())) {
if (createConnection) {
// vytvareni propojeni - startovni body
startConMapObject = node;
endConnPoint = e.getPoint();
} else {
selectedObject = node;
// nastaveni vybraneho objektu
offset = new Point(
(int) selectedObject.getBoxX() - e.getX(),
(int) selectedObject.getBoxY() - e.getY()
);
// zvyrazneni vybraneho objektu
selectedObject.setSelected(true);
}
}
}
}
@Override
public void mouseReleased(MouseEvent e) { // vola se pri uvolneni tlacitka
if (selectedObject != null) {
// presouvani objektu
if (!Client.map.get(Window.currentMapIndex).isLock()) {// povoli upravy jen kdyz neni mapa zamcena
// odeslani nove pozice objektu
// TODO doresit kontrolu souradnic aby se zbytecne neodesilala zmena kdyz k ni nedojde
int[] data = {
Client.map.get(Window.currentMapIndex).getId(),
selectedObject.getId(),
(int) selectedObject.getX(),
(int) selectedObject.getY()
};
Client.client.send(Message.MOVE_OBJECT, data);
}
// dvojklik na objekt
if (e.getClickCount() == 2) {
doubleClickOnObject(selectedObject);
}
// prave kliknuti na objekt
if (e.getButton() == MouseEvent.BUTTON3) {
rightClickOnObject(e, selectedObject);
}
} else {
// prave kliknuti do volneho mista v mape
if (e.getButton() == MouseEvent.BUTTON3) {
rigthClick(e);
}
}
selectedObject = null;
offset = null;
if (createConnection) {
for (PaintObject node : items) {
if (node.contains(e.getPoint())) {
endConMapObject = node;
if (startConMapObject.getId() != endConMapObject.getId()) {
new ObjectConnectionDialog(startConMapObject.getId(), endConMapObject.getId());
}
}
}
// zrusi vytvareni propojeni
createConnection = false;
}
}
@Override
public void mouseEntered(MouseEvent e) {
// vola se pri vstupu kurzoru
}
@Override
public void mouseExited(MouseEvent e) {
// vola se pri opusteni kurzoru
}
@Override
public void mouseDragged(MouseEvent e) {
//jen pokud neni mapa zamcena
if (!Client.map.get(Window.currentMapIndex).isLock()) {
// vytvareni propojeni
if (createConnection) {
for (PaintObject node : items) {
if (node.contains(e.getPoint())) {
endConnPoint = node.getPoint();
break;
} else {
endConnPoint = e.getPoint();
}
}
} else {
// presunovani objektu
if (this.selectedObject != null && this.offset != null) {
// ziskani novych souradnic
Point to = e.getPoint();
to.x += offset.x;
to.y += offset.y;
//nastaveni nove pozice
selectedObject.setPosition(to);
}
}
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
private void doubleClickOnObject(PaintObject selectedObject) {
int id = selectedObject.getId();
for (Map m : Client.map) {
for (MapObject ob : m.getObjects()) {
if (ob.getId() == id) {
ObjectDialog objectDialog = new ObjectDialog(ob, false);
break;
}
}
}
}
private void rigthClick(MouseEvent me) {
JPopupMenu menu = new JPopupMenu();
if (!Client.map.get(Window.currentMapIndex).isLock()) {
// polozka pridat objekt
if (Client.user.isAddObject()) {
JMenuItem itemAdd = new JMenuItem("Přidat objekt", new ImageIcon("img/add.png"));
itemAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MapObject mo = new MapObject();
mo.setX(me.getX());
mo.setY(me.getY());
mo.setMap(Client.map.get(Window.currentMapIndex).getId());
new ObjectDialog(mo, true);
}
});
menu.add(itemAdd);
}
// polozka pridani propojeni
JMenuItem itemPropoj = new JMenuItem("Přidat propojení", new ImageIcon("img/arrow.png"));
itemPropoj.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
startConMapObject = null;
endConnPoint = null;
createConnection = true;
}
});
menu.add(itemPropoj);
}
// zamek mapy
JMenuItem itemLock;
boolean currentState = Client.map.get(Window.currentMapIndex).isLock();
if (currentState) {
itemLock = new JMenuItem("Odemknout mapu", new ImageIcon("img/unlock.png"));
} else {
itemLock = new JMenuItem("Zamknout mapu", new ImageIcon("img/lock.png"));
}
itemLock.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (currentState) {
int[] d = {Client.map.get(Window.currentMapIndex).getId(), 0};
Client.client.send(Message.SET_MAP_LOCK, d);
} else {
int[] d = {Client.map.get(Window.currentMapIndex).getId(), 1};
Client.client.send(Message.SET_MAP_LOCK, d);
}
}
});
menu.add(itemLock);
menu.show(me.getComponent(), me.getX(), me.getY());
}
private void rightClickOnObject(MouseEvent e, PaintObject obj) {
JPopupMenu menu = new JPopupMenu();
if (obj.getObject().getService().isWinbox()) {
JMenuItem itemWinbox = new JMenuItem("Winbox", new ImageIcon("img/winbox.png"));
itemWinbox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppLauncher.winbox(obj.getObject().getIp(), obj.getObject().getService().getPortWinbox(), obj.getObject().getUser(), obj.getObject().getPassword());
}
});
menu.add(itemWinbox);
}
if (obj.getObject().getService().isWeb()) {
JMenuItem itemWeb = new JMenuItem("Otevřít v prohlížeči", new ImageIcon("img/browser.png"));
itemWeb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppLauncher.openWebpage(obj.getObject().getIp(), obj.getObject().getService().getPortWeb(), obj.getObject().getService().getVerzeWeb());
}
});
menu.add(itemWeb);
}
if (obj.getObject().getService().isSsh()) {
JMenuItem itemSsh = new JMenuItem("SSH", new ImageIcon("img/ssh.png"));
itemSsh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppLauncher.ssh(obj.getObject().getIp(), obj.getObject().getUser(), obj.getObject().getPassword(), Integer.parseInt(obj.getObject().getService().getPortSsh()));
}
});
menu.add(itemSsh);
}
/*
JMenuItem itemWalk = new JMenuItem("SNMP walk");
itemWalk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
menu.add(itemWalk);
*/
// ping na objekt
JMenuItem itemPing = new JMenuItem("Ping", new ImageIcon("img/ping.png"));
itemPing.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
menu.add(itemPing);
// odebrani objektu
if (!Client.map.get(Window.currentMapIndex).isLock() && Client.user.isRemoveMap()) {
JMenuItem itemRemove = new JMenuItem("Odebrat", new ImageIcon("img/trash.png"));
itemRemove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Main.client.send(Message.TYPE_REMOVE_OBJECT, obj.getId());
}
});
menu.add(itemRemove);
}
// zobrazeni menu
menu.show(e.getComponent(), e.getX(), e.getY());
}
}

View File

@ -0,0 +1,111 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import jguard.client.Client;
import jguard.client.gui.dialog.LoginDialog;
class MenuPanel extends JPanel {
public MenuPanel() {
setPreferredSize(new Dimension(50, 50));
setLayout(new FlowLayout(FlowLayout.LEFT));
// tlacitko pripojit
// TODO pokud je pripojeno změnit tlacítko na odpojit
try {
BufferedImage buttonIcon = ImageIO.read(new File("img/connect.png"));
JButton bLogin = new JButton(new ImageIcon(buttonIcon));
bLogin.setFocusPainted(false);
bLogin.setContentAreaFilled(false);
bLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Client.client.isConnected()) {
int reply = JOptionPane.showConfirmDialog(null, "Odpojit od serveru ?", "Odpojit", JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.YES_OPTION) {
// odpojeni od serveru
Client.client.disconnect();
}
} else {
new LoginDialog().setVisible(true);
}
}
});
add(bLogin);
} catch (IOException ex) {
LogFile.printErr("File not found: image connect.png");
}
// tlacitko nastaveni serveru
try {
BufferedImage buttonIcon = ImageIO.read(new File("img/server.png"));
JButton bSettings = new JButton(new ImageIcon(buttonIcon));
bSettings.setFocusPainted(false);
bSettings.setContentAreaFilled(false);
bSettings.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Client.client.isConnected()) {
if (Client.user.isSetServer()) {
Window.showServerSettings();
} else {
JOptionPane.showMessageDialog(null, "Nedostatečné oprávnění");
}
} else {
JOptionPane.showMessageDialog(null, "Odpojeno od serveru");
}
}
});
add(bSettings);
} catch (IOException ex) {
LogFile.printErr("File not found: image server.png");
}
// tlacitko nastaveni
try {
BufferedImage buttonIcon = ImageIO.read(new File("img/settings.png"));
JButton bSettings = new JButton(new ImageIcon(buttonIcon));
bSettings.setFocusPainted(false);
bSettings.setContentAreaFilled(false);
bSettings.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Window.showSettings();
}
});
add(bSettings);
} catch (IOException ex) {
LogFile.printErr("File not found: image settings.png");
}
// tlacitko log
try {
BufferedImage buttonIcon = ImageIO.read(new File("img/log.png"));
JButton bLogin = new JButton(new ImageIcon(buttonIcon));
bLogin.setFocusPainted(false);
bLogin.setContentAreaFilled(false);
bLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
add(bLogin);
} catch (IOException ex) {
LogFile.printErr("File not found: image log.png");
}
}
}

View File

@ -0,0 +1,193 @@
package jguard.client.gui;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.ObjectConnection;
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.geom.RoundRectangle2D;
import java.text.DecimalFormat;
import jguard.client.Client;
public class PaintConnection extends Rectangle {
private Point from = null;
private Point to = null;
private Font font = new Font("Helvetica", Font.PLAIN, 10);
private int idConnection;
private ObjectConnection connection;
private boolean selected = true;
private int xObdelnik, x2Obdelnik, yObdelnik, y2Obdelnik;
public PaintConnection(int idConnection) {
this.idConnection = idConnection;
refresh_data();
}
private void refresh_data() {
// ziskani objektu
for (Map map : Client.map) {
for (ObjectConnection c : map.getConnection()) {
if (c.getId() == this.idConnection) {
// nastaveni objektu
this.connection = c;
// nasteveni souradnic
for (PaintObject i : MapView.items) {
if (i.getId() == c.getFrom()) {
this.from = i.getPoint();
}
if (i.getId() == c.getTo()) {
this.to = i.getPoint();
}
}
}
}
}
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
refresh_data();
// vykresli line
// TODO typ cary podle typu spojeni (1000, 100, 10, vlan, ...)
switch (connection.getType()) {
case ObjectConnection.TYPE_WIRELLES:
float[] dashingPattern = {2f, 2f};
g2.setStroke(new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, dashingPattern, 2.0f));
break;
case ObjectConnection.TYPE_GE:
g2.setStroke(new BasicStroke(5));
break;
case ObjectConnection.TYPE_FE:
g2.setStroke(new BasicStroke(3));
break;
case ObjectConnection.TYPE_E:
g2.setStroke(new BasicStroke(1));
break;
case ObjectConnection.TYPE_10G_FIBER:
g2.setStroke(new BasicStroke(5)); // TODO doresit tvar cary
break;
case ObjectConnection.TYPE_1G_FIBER:
g2.setStroke(new BasicStroke(5)); // TODO doresit tvar cary
break;
case ObjectConnection.TYPE_100M_FIBER:
g2.setStroke(new BasicStroke(5)); // TODO doresit tvar cary
break;
}
if (selected) {
// TODO zvyrazneni cary pri vybrani propojeni
}
g2.draw(new Line2D.Double(this.from, this.to));
// vypocita stred cary
Point centerPoint = midpoint(this.from.getX(), this.to.getX(), this.from.getY(), this.to.getY());
// zmeni na sedou barvu
g2.setPaint(new Color(170, 170, 170));
if (connection.isRead()) {
// vyska, sirka
int sirka = 80;
int vyska = 30;
// vypocitani pocatecnich bodu
int x = centerPoint.x - sirka / 2;
int y = centerPoint.y - vyska / 2;
// TODO az bude vyresni detekce kliku na caru tak tyto promenen uplne zrusit
xObdelnik = x;
x2Obdelnik = x + sirka;
yObdelnik = y;
y2Obdelnik = y + vyska;
// vykresli oblast pro rx, tx
RoundRectangle2D.Double box = new RoundRectangle2D.Double(x, y, sirka, vyska, 10, 10);
g2.fill(box);
// zmeni barvu na cernou
g2.setPaint(new Color(0, 0, 0));
// nastavi font
g2.setFont(font);
// vypise TX
String tx = "Tx: " + formatFileSize(connection.getTx());
g2.drawString(tx, x + (int) (box.getWidth() / 2) - (getStringWidth(tx) / 2), y + 12);
// vypise RX
String rx = "Rx: " + formatFileSize(connection.getRx());
g2.drawString(rx, x + (int) (box.getWidth() / 2) - (getStringWidth(rx) / 2), y + 24);
}
}
private Point midpoint(double x1, double x2, double y1, double y2) {
Point p = new Point((int) (x1 + x2) / 2, (int) (y1 + y2) / 2);
return p;
}
private int getStringWidth(String text) {
//return g.getFontMetrics().stringWidth(text);
Canvas c = new Canvas();
FontMetrics fm = c.getFontMetrics(font);
return fm.stringWidth(text);
}
public void setSelected(Boolean value) {
this.selected = value;
}
public ObjectConnection getObjectConnection() {
return connection;
}
@Override
public boolean contains(Point p) {
if ((xObdelnik < p.getX() && p.getX() < x2Obdelnik) && (yObdelnik < p.getY() && p.getY() < y2Obdelnik)) {
return true;
} else {
return false;
}
}
public static String formatFileSize(long size) {
String hrSize = null;
double b = size;
double k = size / 1024.0;
double m = ((size / 1024.0) / 1024.0);
double g = (((size / 1024.0) / 1024.0) / 1024.0);
double t = ((((size / 1024.0) / 1024.0) / 1024.0) / 1024.0);
DecimalFormat dec = new DecimalFormat("0.00");
if (t > 1) {
hrSize = dec.format(t).concat(" TB");
} else if (g > 1) {
hrSize = dec.format(g).concat(" GB");
} else if (m > 1) {
hrSize = dec.format(m).concat(" MB");
} else if (k > 1) {
hrSize = dec.format(k).concat(" KB");
} else {
hrSize = dec.format(b).concat(" Bytes");
}
return hrSize;
}
}

View File

@ -0,0 +1,274 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.MapObject;
import cucky.jGuard.lib.object.ObjectType;
import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import javax.imageio.ImageIO;
import jguard.client.Client;
public class PaintObject extends Rectangle {
private int objId;
private MapObject obj;
private Image icon;
private int x;
private int y;
private int boxX;
private int boxY;
private int paddingBoxu = 20;
private int sirka;
private int vyska;
private RoundRectangle2D box;
private Graphics2D g2;
private Boolean selected = false;
private Font fontNormal12 = new Font("Arial", Font.PLAIN, 12);
private Font fontBold12 = new Font("Arial", Font.BOLD, 12);
private Font fontNormalSmall = new Font("Arial", Font.PLAIN, 10);
public PaintObject(int objId) {
this.objId = objId;
refresh_data();
prepocitat_rozmery();
}
private void refresh_data() {
// ziskani objektu
for (Map map : Client.map) {
for (MapObject object : map.getObjects()) {
if (object.getId() == objId) {
this.obj = object;
}
}
}
}
private void prepocitat_rozmery() {
// vyska boxu
vyska = 5; // padding top
if (this.icon != null) {
vyska += this.icon.getHeight(null); // vyska obrazku
}
vyska += getStringHeight(fontBold12); // vyska prvniho radku
if (!obj.getIp().equals("")) {
vyska += 5; // mezera mezi radky
vyska += getStringHeight(fontNormal12); // vyska druhyho radku
}
/*
for (SnmpProbe snmpProbe : obj.getSnmpProbe()) {
if (snmpProbe.isView()) {
vyska += 5; // mezera mezi radky
vyska += getStringHeight(fontNormalSmall);
}
}
*/
vyska += 5; // padding bottom
//sirka boxu
List<Integer> sList = new ArrayList<Integer>();
sList.add(getStringWidth(obj.getName(), fontBold12) + paddingBoxu);
sList.add(getStringWidth(obj.getIp(), fontNormal12) + paddingBoxu);
/*
for (SnmpProbe snmpProbe : obj.getSnmpProbe()) {
if (snmpProbe.isView()) {
sList.add(getStringWidth(snmpProbe.getName() + "+ " + snmpProbe.getValue(), fontNormal12) + paddingBoxu);
}
}
*/
sirka = Collections.max(sList);
}
public void paint(Graphics g) {
g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// nastaveni pozice x, y objektu
this.x = obj.getX();
this.y = obj.getY();
refresh_data();
// nastaveni ikony objektu
try {
for (ObjectType objectType : Client.deviceType) {
if (objectType.getId() == obj.getType()) {
byte[] decodedBytes = Base64.getDecoder().decode(objectType.getImgStr());
ByteArrayInputStream bis = new ByteArrayInputStream(decodedBytes);
this.icon = ImageIO.read(bis);
break;
}
}
} catch (IOException ex) {
LogFile.printErr("Object icon exception: " + ex.getMessage());
}
prepocitat_rozmery();
/* TODO box gradient
GradientPaint redtowhite = new GradientPaint(x, y, Color.red, 200, y,Color.blue);
g2.setPaint(redtowhite);
*/
// status objektu
switch (obj.getStatus()) {
case 1: // online
g2.setPaint(new Color(83, 241, 83));
break;
case 2: // warning
g2.setPaint(new Color(255, 131, 0));
break;
case 3: // offline
g2.setPaint(new Color(221, 63, 63));
break;
default: // other
g2.setPaint(new Color(172, 172, 172));
}
// vypocitani pocatecnich souradnic
boxX = x - (sirka / 2);
boxY = y - (vyska / 2);
// vykresleni boxu
box = new RoundRectangle2D.Double(boxX, boxY, sirka, vyska, 10, 10);
g2.fill(box);
if (selected) {
g2.setStroke(new BasicStroke(1.5f));
g2.setColor(Color.BLACK);
g2.draw(box);
}
//
// nacteni ikonka zarizeni
if (icon != null) {
int imgX = boxX + sirka / 2 - (icon.getWidth(null) / 2);
int imgY = boxY + 5;
g.drawImage(icon, imgX, imgY, null);
boxY += icon.getHeight(null); // pricte vysku ikonky
} else {
}
// vypsani nazvu prvku
g2.setPaint(Color.BLACK);
g2.setFont(fontBold12);
g2.drawString(obj.getName(), boxX + (int) (box.getWidth() / 2) - (getStringWidth(obj.getName(), g2.getFont()) / 2), boxY + getStringHeight(g2.getFont()));
// vypsani ip prvku
boxY += 20;
g2.setFont(fontNormal12);
g2.drawString(obj.getIp(), boxX + (int) (box.getWidth() / 2) - (getStringWidth(obj.getIp(), g2.getFont()) / 2), boxY + getStringHeight(g2.getFont()));
// vypsani snmp sond
g2.setFont(fontNormalSmall);
/*
for (SnmpProbe snmpProbe : obj.getSnmpProbe()) {
if (snmpProbe.isView()) {
boxY += 20;
String str = snmpProbe.getName() + ": " + snmpProbe.getValue();
g2.drawString(str, boxX + (int) (box.getWidth() / 2) - (getStringWidth(str, g2.getFont()) / 2), boxY + getStringHeight(g2.getFont()));
}
}
*/
this.setBounds(boxX, boxY, sirka, vyska);
}
public int getBoxX() {
return (int) box.getX();
}
public int getBoxY() {
return (int) box.getY();
}
@Override
public double getX() {
return x;
}
@Override
public double getY() {
return y;
}
public int getBoxWidth() {
return sirka;
}
public int getBoxHeight() {
return vyska;
}
public void setSelected(Boolean value) {
this.selected = value;
}
private int getStringWidth(String text, Font font) {
Canvas c = new Canvas();
FontMetrics fm = c.getFontMetrics(font);
return fm.stringWidth(text);
}
private int getStringHeight(Font font) {
Canvas c = new Canvas();
FontMetrics fm = c.getFontMetrics(font);
return fm.getHeight();
}
@Override
public boolean contains(Point p) {
if ((box.getMinX() < p.getX() && p.getX() < box.getMaxX()) && (box.getMinY() < p.getY() && p.getY() < box.getMaxY())) {
return true;
} else {
return false;
}
}
public void setPosition(Point p) {
obj.setX(p.x + sirka / 2);
obj.setY(p.y + vyska / 2);
}
public int getId() {
return obj.getId();
}
public MapObject getObject() {
return obj;
}
public Point getPoint() {
Point p = new Point();
p.x = this.x;
p.y = this.y;
return p;
}
}

View File

@ -0,0 +1,161 @@
package jguard.client.gui;
import cucky.jGuard.lib.object.ObjectType;
import cucky.jGuard.lib.object.SnmpProfile;
import cucky.jGuard.lib.object.User;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import jguard.client.Client;
import jguard.client.gui.dialog.AddDeviceType;
public class ServerSettingsPanel extends JTabbedPane {
public static Component zarizeni;
public ServerSettingsPanel() {
this.addTab("Základní", tabZakladni());
this.addTab("Typy zařízení", tabZarizeni());
this.addTab("SNMP", tabSnmpProfile());
this.addTab("Uživatelé", tabUsers());
// vola se pri zmene zalozky
/*
this.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("Tab: " + tabbedPane.getSelectedIndex());
}
});
*/
}
private Component tabZakladni() {
JPanel panel = new JPanel();
panel.setLayout(null);
JLabel nestLabel = new JLabel("Úroveň nestability (ms)");
nestLabel.setBounds(20, 20, 150, 25);
panel.add(nestLabel);
JTextField nestField = new JTextField();
nestField.setBounds(170, 20, 80, 25);
panel.add(nestField);
JLabel timeoutLabel = new JLabel("Úroveň timeout (ms)");
timeoutLabel.setBounds(20, 60, 150, 25);
panel.add(timeoutLabel);
JTextField timeoutField = new JTextField();
timeoutField.setBounds(170, 60, 80, 25);
panel.add(timeoutField);
return new JScrollPane(panel);
}
private Component tabZarizeni() {
JButton button = new JButton("Přidat typ");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new AddDeviceType().show();
}
});
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JTable tableDeviceType = new TableDeviceType();
panel.add(new JScrollPane(tableDeviceType), BorderLayout.CENTER);
panel.add(button, BorderLayout.PAGE_END);
return panel;
}
private Component tabUsers() {
JTable table = new JTable(new TableModelUsers());
return new JScrollPane(table);
}
private Component tabSnmpProfile() {
JTable table = new JTable(new TableModelSnmpProfile());
return new JScrollPane(table);
}
private static class TableModelSnmpProfile extends DefaultTableModel {
public TableModelSnmpProfile() {
// sloupce
addColumn("Nazev");
addColumn("Verze");
addColumn("Community");
addColumn("Port");
// radky
for (SnmpProfile sp : Client.serverSettings.getSnmp()) {
addRow(new Object[]{
sp.getName(),
sp.getVersion(),
sp.getCommunity(),
sp.getPort()});
}
}
}
private static class TableModelUsers extends DefaultTableModel {
public TableModelUsers() {
// sloupce
addColumn("Jméno");
addColumn("Nastaveni serveru");
addColumn("Přidat mapu");
addColumn("Odebrat mapu");
// radky
for (User sp : Client.serverSettings.getUsers()) {
addRow(new Object[]{
sp.getUsername(),
sp.isSetServer(),
sp.isAddMap(),
sp.isRemoveMap()
});
}
}
}
private static class TableModelDeviceType extends DefaultTableModel {
public TableModelDeviceType() {
// sloupce
addColumn("Jméno");
addColumn("Ikona");
// radky
for (ObjectType ot : Client.deviceType) {
addRow(new Object[]{
ot.getName(),
ot.getImgStr()
});
}
}
}
}

View File

@ -0,0 +1,178 @@
package jguard.client.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Properties;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import jguard.client.Config;
public class SettingsPanel extends JPanel {
private JTextField serverText = new JTextField();
private JTextField portText = new JTextField();
private JTextField userText = new JTextField();
private JPasswordField passwordText = new JPasswordField();
private JCheckBox autoConnect = new JCheckBox("Automaticky přihlasit při spuštění");
private JCheckBox runMinimalized = new JCheckBox("Spouštět minimalizovaně");
private JCheckBox enableDebug = new JCheckBox("Debug režim");
private JCheckBox enableSounds = new JCheckBox("Povolit zvuky");
private JSlider volumeSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);
public SettingsPanel() {
try {
serverText.setText(new Config().get("server"));
portText.setText(new Config().get("port"));
userText.setText(new Config().get("user"));
passwordText.setText(new Config().get("password"));
autoConnect.setSelected((new Config().get("autoconnect").equals("1")? true : false));
runMinimalized.setSelected((new Config().get("start_minimized").equals("1")? true : false));
enableDebug.setSelected((new Config().get("debug").equals("1")? true : false));
enableSounds.setSelected((new Config().get("sound").equals("1")? true : false));
volumeSlider.setValue(Integer.valueOf(new Config().get("volume")));
} catch(Exception e){
System.err.println("Nepodařilo se nahrat nastaveni");
}
this.setLayout(null);
JPanel p1 = loginSettings();
p1.setBounds(20, 10, 400, 170);
this.add(p1);
JPanel p2 = settings();
p2.setBounds(20, getNextY(p1), 400, 150);
this.add(p2);
JPanel p3 = soundSettings();
p3.setBounds(20, getNextY(p2), 400, 100);
this.add(p3);
JButton b = new JButton("Uložit");
b.setBounds(20, getNextY(p3), 100, 30);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Properties prop = new Properties();
prop.setProperty("server", serverText.getText());
prop.setProperty("port", portText.getText());
prop.setProperty("user", userText.getText());
prop.setProperty("password", new String(passwordText.getPassword()));
prop.setProperty("autoconnect", (autoConnect.isSelected() ? "1" : "0"));
prop.setProperty("start_minimized", (runMinimalized.isSelected() ? "1" : "0"));
prop.setProperty("debug", (enableDebug.isSelected() ? "1" : "0"));
prop.setProperty("sound", (enableSounds.isSelected() ? "1" : "0"));
prop.setProperty("volume", String.valueOf(volumeSlider.getValue()));
new Config().store(prop);
}
});
this.add(b);
}
private int getNextY(JPanel p){
return p.getY() + p.getHeight() + 30;
}
private JPanel loginSettings(){
JPanel panel = new JPanel(null);
JLabel nadpisLabel = new JLabel("Server");
nadpisLabel.setBounds(0, 0, 80, 25);
nadpisLabel.setFont(nadpisLabel.getFont().deriveFont(20f));
panel.add(nadpisLabel);
JLabel serverLabel = new JLabel("Adresa");
serverLabel.setBounds(0, 40, 80, 25);
panel.add(serverLabel);
serverText.setBounds(110, 40, 160, 25);
panel.add(serverText);
JLabel portLabel = new JLabel("Port");
portLabel.setBounds(0, 70, 80, 25);
panel.add(portLabel);
portText.setBounds(110, 70, 160, 25);
panel.add(portText);
JLabel userLabel = new JLabel("Uživatel");
userLabel.setBounds(0, 100, 80, 25);
panel.add(userLabel);
userText.setBounds(110, 100, 160, 25);
panel.add(userText);
JLabel passwordLabel = new JLabel("Heslo");
passwordLabel.setBounds(0, 130, 80, 25);
panel.add(passwordLabel);
passwordText.setBounds(110, 130, 160, 25);
panel.add(passwordText);
return panel;
}
private JPanel settings(){
JPanel panel = new JPanel(null);
JLabel nadpisLabel = new JLabel("Obecné nastavení");
nadpisLabel.setBounds(0, 0, 400, 25);
nadpisLabel.setFont(nadpisLabel.getFont().deriveFont(20f));
panel.add(nadpisLabel);
autoConnect.setBounds(0, 40, 400, 25);
panel.add(autoConnect);
runMinimalized.setBounds(0, 70, 400, 25);
panel.add(runMinimalized);
enableDebug.setBounds(0, 100, 400, 25);
panel.add(enableDebug);
return panel;
}
private JPanel soundSettings(){
JPanel panel = new JPanel(null);
JLabel nadpisLabel = new JLabel("Zvuky");
nadpisLabel.setBounds(0, 0, 400, 25);
nadpisLabel.setFont(nadpisLabel.getFont().deriveFont(20f));
panel.add(nadpisLabel);
enableSounds.setBounds(0, 40, 400, 25);
panel.add(enableSounds);
JLabel hlasLabel = new JLabel("Hlasitost");
hlasLabel.setBounds(0, 70, 80, 25);
panel.add(hlasLabel);
JLabel sliderValue = new JLabel(volumeSlider.getValue() + " %");
sliderValue.setBounds(240, 70, 50, 25);
panel.add(sliderValue);
volumeSlider.setBounds(110, 70, 110, 25);
volumeSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
sliderValue.setText(volumeSlider.getValue() + " %");
}
});
panel.add(volumeSlider);
return panel;
}
}

View File

@ -0,0 +1,66 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import jguard.client.Client;
import jguard.client.gui.dialog.OnlineClientsDialog;
public class StatusBar extends JPanel {
private JLabel message;
private JLabel online;
private JButton btnOnline;
public StatusBar() {
super();
super.setPreferredSize(new Dimension(100, 35));
setLayout(null);
message = new JLabel("Odpojeno");
message.setBounds(10, 0, 100, 30);
add(message);
online = new JLabel("");
online.setBounds(250, 0, 100, 30);
add(online);
// tlacitko zobrazujici klienty
try {
BufferedImage buttonIcon = ImageIO.read(new File("img/online_clients.png"));
btnOnline = new JButton(new ImageIcon(buttonIcon));
btnOnline.setFocusPainted(false);
btnOnline.setContentAreaFilled(false);
btnOnline.setBorderPainted(false);
btnOnline.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
new OnlineClientsDialog();
}
});
btnOnline.setBounds(200, 0, 32, 32);
add(btnOnline);
} catch (IOException ex) {
LogFile.printErr("File not found: image online_clinets.png");
}
}
public void setMessage(String text) {
message.setText(text);
}
public void setOnlineCount(){
online.setText("Klientu online: " + Client.onlineClients.size());
}
}

View File

@ -0,0 +1,81 @@
package jguard.client.gui;
import cucky.jGuard.lib.object.ObjectType;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import jguard.client.Client;
public class TableDeviceType extends JTable {
private static final String[] COLUMN_NAMES = {
"Ikona",
"Název zařízení"};
public TableDeviceType() {
tableSetup();
}
@Override
public Class<?> getColumnClass(int column) {
if (column == 0) {
return ImageIcon.class;
} else {
return String.class;
}
}
private void tableSetup() {
DefaultTableModel model = new DefaultTableModel(COLUMN_NAMES, Client.deviceType.size()) {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
this.setModel(model);
DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
dtcr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
this.setDefaultRenderer(String.class, dtcr);
int row = 0;
for (ObjectType obj : Client.deviceType) {
try {
byte[] decodedBytes = Base64.getDecoder().decode(obj.getImgStr());
ByteArrayInputStream bis = new ByteArrayInputStream(decodedBytes);
ImageIcon icon = new ImageIcon(ImageIO.read(bis));
this.setValueAt(icon, row, 0);
this.setValueAt(obj.getName(), row, 1);
row++;
} catch (IOException ex) {
Logger.getLogger(TableDeviceType.class.getName()).log(Level.SEVERE, null, ex);
}
}
// nastavení vysky radku
for (int i = 0; i < Client.deviceType.size(); i++) {
this.setRowHeight(i, this.getRowHeight(i) + 40);
}
// nastavení sirky sloupce
for (int i = 0; i < COLUMN_NAMES.length; i++) {
TableColumn column = this.getColumnModel().getColumn(i);
column.setPreferredWidth(column.getPreferredWidth() + 80);
}
this.setVisible(true);
}
}

View File

@ -0,0 +1,103 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jguard.client.Client;
import jguard.client.network.NetworkClient;
public class Tray {
private SystemTray tray = SystemTray.getSystemTray();
private static TrayIcon trayIcon;
private static PopupMenu menu = new PopupMenu();
public void createAndShowTray() {
try {
//Check the SystemTray is supported
if (!SystemTray.isSupported()) {
LogFile.printErr("SystemTray is not supported");
return;
}
// tray menu
MenuItem exitItem = new MenuItem("Ukončit");
exitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LogFile.printInfo("Exit appliaction from tray icon");
System.exit(0);
}
});
menu.add(exitItem);
trayIcon = new TrayIcon(ImageIO.read(new File("img/flag_gray.png")), Client.APP_NAME, menu);
trayIcon.addActionListener(new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
//Double click - obnovit/minimalizovat
if (Client.okno.isVisible()) {
Client.okno.setVisible(false);
} else {
Client.okno.setVisible(true);
}
}}
);
tray = SystemTray.getSystemTray();
tray.add(trayIcon);
} catch (IOException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage());
} catch (AWTException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage());
}
}
public static void setIcon(String icon) {
try {
BufferedImage image = ImageIO.read(new File("img/"+icon));
trayIcon.setImage(image);
} catch (IOException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage());
}
}
public static void setStatusOffline() {
setIcon("flag_red.png");
}
public static void setStatusOnline() {
setIcon("flag_green.png");
}
public static void setStatusWarning() {
setIcon("flag_orange.png");
}
public static void setStatusDisconnected() {
setIcon("flag_gray.png");
}
public static void setState() {
if (Client.offline > 0) {
setStatusOffline();
} else {
setStatusOnline();
}
}
}

View File

@ -0,0 +1,152 @@
package jguard.client.gui;
import cucky.jGuard.lib.LogFile;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import jguard.client.Client;
import jguard.client.gui.dialog.NewMapDialog;
public class Window extends JFrame {
public static int currentMapIndex;
private static StatusBar statusBar;
private static JSplitPane jsp;
private static JTabbedPane serverSettings;
public Window() {
super(Client.APP_NAME); //titulek okna
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
// vola se pri zavreni okna krizkem
Object[] options = {
"Ukončit",
"Minimalizovat"
};
int n = JOptionPane.showOptionDialog(windowEvent.getWindow(),
"Ukončit nebo minimalozovat do lišty ?",
"Ukončit",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, //do not use a custom Icon
options, //the titles of buttons
options[1]); //default button title
if (n == 0) {
LogFile.printInfo("Ukončit");
System.exit(0);
}
}
@Override
public void windowDeiconified(WindowEvent e) {
// vola se pri obnoveni z listy
}
@Override
public void windowIconified(WindowEvent e) {
// pri minimalizaci
setVisible(false);
}
});
this.setLayout(new BorderLayout());
this.add(new MenuPanel(), BorderLayout.NORTH);
// oddelovac leve a prave strany
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
jsp.setDividerSize(5);
// levy panel
JPanel leftPanel = new JPanel();
leftPanel.setBackground(Color.WHITE);
leftPanel.setPreferredSize(new Dimension(200, 250));
leftPanel.setLayout(new BorderLayout());
leftPanel.add(new MapTree(), BorderLayout.PAGE_START);
//leftPanel.add(new MapList(), BorderLayout.PAGE_START);
JButton buttonAddMap = new JButton("Přidat mapu");
buttonAddMap.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new NewMapDialog().setVisible(true);
}
});
leftPanel.add(buttonAddMap, BorderLayout.PAGE_END);
jsp.add(leftPanel, JSplitPane.LEFT);
jsp.add(new JPanel(), JSplitPane.RIGHT);
this.add(jsp, BorderLayout.CENTER);
statusBar = new StatusBar();
this.add(statusBar, BorderLayout.SOUTH);
this.pack();
}
public void blinkTaskBar() {
toFront();
}
public static void setStatusBarMessage(String message) {
statusBar.setMessage(message);
}
public static void reloadOnlineClinets() {
statusBar.setOnlineCount();
}
// prepnuti mapy
public static void setMapView(int index) {
// nastaveni map id
currentMapIndex = index;
MapView mv = new MapView();
JScrollPane scroll = new JScrollPane(mv);
jsp.add(scroll, JSplitPane.RIGHT);
}
// prepnuti na stranku nastaveni
public static void showSettings() {
jsp.add(new SettingsPanel(), JSplitPane.RIGHT);
}
// prepnuti na stranku s nastavenim serveru
public static void showServerSettings() {
serverSettings = new ServerSettingsPanel();
JPanel serverSet = new JPanel(new BorderLayout());
serverSet.add(serverSettings, BorderLayout.CENTER);
jsp.add(serverSet, JSplitPane.RIGHT);
}
public static void reloadServerSettings() {
serverSettings = new ServerSettingsPanel();
}
public static void showMessage(String text){
// TODO co s tim ? nechat nebo vytvořit dialog ?
//new ServerMessageDialog(text);
JOptionPane.showMessageDialog(null, text);
}
}

View File

@ -0,0 +1,146 @@
package jguard.client.gui.dialog;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.Message;
import cucky.jGuard.lib.object.ObjectType;
import java.awt.Color;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.util.Base64;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;
import jguard.client.Client;
import jguard.client.gui.ServerSettingsPanel;
import jguard.client.gui.Window;
import jguard.client.network.NetworkClient;
import org.apache.commons.io.FilenameUtils;
public class AddDeviceType extends JDialog {
private JLabel info = new JLabel("PNG obrazek o šířce 32px");
private JTextField nazevText = new JTextField();
private String img_str = "";
public AddDeviceType() {
setTitle("Přidat typ zařízení");
setSize(300, 180);
setLocationRelativeTo(null);
setAlwaysOnTop(false);
JPanel panel = new JPanel();
add(panel);
placeComponents(panel);
}
private void placeComponents(JPanel panel) {
panel.setLayout(null);
JLabel serverLabel = new JLabel("Název:");
serverLabel.setBounds(20, 10, 80, 25);
panel.add(serverLabel);
nazevText.setBounds(110, 10, 160, 25);
panel.add(nazevText);
JLabel portLabel = new JLabel("Obrázek");
portLabel.setBounds(20, 40, 80, 25);
panel.add(portLabel);
JButton btnBrowse = new JButton("Browse");
btnBrowse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
browseButtonActionPerformed(e);
}
});
btnBrowse.setBounds(110, 40, 160, 25);
panel.add(btnBrowse);
info.setBounds(20, 70, 200, 25);
panel.add(info);
JButton addButton = new JButton("Přidat");
addButton.setBounds(20, 100, 90, 25);
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (nazevText.getText().length() > 3) {
ObjectType ot = new ObjectType(nazevText.getText(), img_str);
Client.client.send(Message.ADD_OBJECT_TYPE, ot);
// refresh tabulky
//TODO
Window.showServerSettings();
System.out.println(".actionPerformed()");
// zavreni dialogu
dispose();
} else {
info.setForeground(Color.RED);
info.setText("Název je moc krátký");
}
}
});
panel.add(addButton);
JButton closeButton = new JButton("Storno");
closeButton.setBounds(185, 100, 80, 25);
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
panel.add(closeButton);
}
private void browseButtonActionPerformed(ActionEvent evt) {
JFileChooser fc = new JFileChooser(".");
fc.addChoosableFileFilter(new FileNameExtensionFilter("Image Files PNG", "png"));
int res = fc.showOpenDialog(null);
try {
if (res == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
String ext = "png";
// TODO doresit overeni správného typu souboru
//String ext = FilenameUtils.getExtension("C:\\Users\\Michal\\Documents\\NetBeansProjects\\jGuardClient\\img\\app.png"); // returns "exe"
if (ext.equals("png")) {
Image image = ImageIO.read(file);
BufferedImage bimg = ImageIO.read(file);
if (bimg.getWidth() == 32) {
info.setText("");
img_str = encodeFileToBase64Binary(file);
} else {
info.setForeground(Color.RED);
info.setText("Chybný rozměr obrázku");
}
} else {
info.setForeground(Color.RED);
info.setText("Chybný formát obrázku");
}
}
} catch (Exception e) {
LogFile.printErr("File choose exception: " + e.getMessage());
}
}
private static String encodeFileToBase64Binary(File file) throws Exception {
FileInputStream fileInputStreamReader = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
fileInputStreamReader.read(bytes);
return new String(Base64.getEncoder().encode(bytes), "UTF-8");
}
}

View File

@ -0,0 +1,102 @@
package jguard.client.gui.dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import jguard.client.Config;
import jguard.client.Client;
import static jguard.client.Client.config;
import jguard.client.network.NetworkClient;
public class LoginDialog extends JDialog{
public LoginDialog() {
setTitle("Přihlásit");
setSize(300,250);
setLocationRelativeTo(null);
setAlwaysOnTop(true);
JPanel panel = new JPanel();
add(panel);
placeComponents(panel);
}
@Override
public void setVisible(boolean b) {
super.setVisible(b);
}
private void placeComponents(JPanel panel) {
panel.setLayout(null);
JLabel serverLabel = new JLabel("Server");
serverLabel.setBounds(20, 10, 80, 25);
panel.add(serverLabel);
JTextField serverText = new JTextField(new Config().get("server"));
serverText.setBounds(110, 10, 160, 25);
panel.add(serverText);
JLabel portLabel = new JLabel("Port");
portLabel.setBounds(20, 40, 80, 25);
panel.add(portLabel);
JTextField portText = new JTextField(new Config().get("port"));
portText.setBounds(110, 40, 160, 25);
panel.add(portText);
JLabel userLabel = new JLabel("Uživatel");
userLabel.setBounds(20, 70, 80, 25);
panel.add(userLabel);
JTextField userText = new JTextField(new Config().get("user"));
userText.setBounds(110, 70, 160, 25);
panel.add(userText);
JLabel passwordLabel = new JLabel("Heslo");
passwordLabel.setBounds(20, 100, 80, 25);
panel.add(passwordLabel);
JPasswordField passwordText = new JPasswordField(new Config().get("password"));
passwordText.setBounds(110, 100, 160, 25);
panel.add(passwordText);
JButton loginButton = new JButton("Přihlásit");
loginButton.setBounds(20, 155, 90, 25);
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// pripojeni klienta
Client.client = new NetworkClient(serverText.getText(), Integer.parseInt(portText.getText()));
Client.client.start();
// ulozeni prihlasovacich udaju
config.setProperty("server", serverText.getText());
config.setProperty("port", new String(portText.getText()));
config.setProperty("user", userText.getText());
config.setProperty("password", new String(passwordText.getPassword()));
new Config().store(config);
// zavreni dialogu
dispose();
}
});
panel.add(loginButton);
JButton closeButton = new JButton("Storno");
closeButton.setBounds(185, 155, 80, 25);
closeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dispose();
}
});
panel.add(closeButton);
}
}

View File

@ -0,0 +1,73 @@
package jguard.client.gui.dialog;
import cucky.jGuard.lib.Message;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import jguard.client.Client;
public class NewMapDialog extends JDialog {
public NewMapDialog() {
setTitle("Přidat mapu");
setSize(320,180);
setLocationRelativeTo(null);
setAlwaysOnTop(true);
setResizable(false);
JPanel panel = new JPanel();
add(panel);
placeComponents(panel);
}
@Override
public void setVisible(boolean b) {
super.setVisible(b);
}
private JPanel placeComponents(JPanel panel) {
panel.setLayout(null);
JLabel serverLabel = new JLabel("Název");
serverLabel.setBounds(20, 20, 80, 25);
panel.add(serverLabel);
JTextField nameText = new JTextField();
nameText.setBounds(110, 20, 160, 25);
panel.add(nameText);
JLabel error = new JLabel("");
error.setBounds(110, 45, 160, 25);
error.setForeground(Color.red);
panel.add(error);
JButton button = new JButton("Přidat");
button.setBounds(120, 80, 80, 25);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!nameText.getText().equals("")) {
Client.client.send(Message.ADD_MAP, nameText.getText());
dispose();
} else {
error.setText("Název nesmí být prázdný");
}
}
});
panel.add(button);
return panel;
}
}

View File

@ -0,0 +1,211 @@
package jguard.client.gui.dialog;
import cucky.jGuard.lib.Message;
import cucky.jGuard.lib.object.Map;
import cucky.jGuard.lib.object.MapObject;
import cucky.jGuard.lib.object.ObjectConnection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import jguard.client.Client;
public class ObjectConnectionDialog extends JDialog {
private static ObjectConnection connection;
private MapObject sObj;
private MapObject eObj;
private JComboBox<String> typComboBox = new JComboBox<String>(new DefaultComboBoxModel(new String[]{"Neznámé", "1000 Mbit/s", "100 Mbit/s", "10 Mbit/s", "VLAN", "Bezdrát", "10G Optic", "1G Optic", "100M Optic" }));
private static JComboBox<String> zdrojComboBox = new JComboBox<String>();
private static int zdrojSelectedIndex = 0;
private static JComboBox<String> rozhraniComboBox = new JComboBox<String>();
private JCheckBox read = new JCheckBox("", false);
private boolean edit = false;
public ObjectConnectionDialog(ObjectConnection c) {
this.edit = true;
this.connection = c;
// nastavani hodnot do polí
typComboBox.setSelectedIndex(this.connection.getType());
if (this.connection.isRead()) {
read.setSelected(true);
zdrojComboBox.setEnabled(true);
rozhraniComboBox.setEnabled(true);
} else {
read.setSelected(false);
zdrojComboBox.setEnabled(false);
rozhraniComboBox.setEnabled(false);
}
getPanel();
}
public ObjectConnectionDialog(int startObjId, int endObjId) {
this.connection = new ObjectConnection();
this.connection.setFrom(startObjId);
this.connection.setTo(endObjId);
zdrojComboBox.setEnabled(false);
rozhraniComboBox.setEnabled(false);
getPanel();
}
private void getPanel() {
setTitle("Vlastnosti propojení");
setSize(450, 400);
setResizable(false);
setLocationRelativeTo(null);
// ziskani informaci o objektech
for (Map map : Client.map) {
for (MapObject object : map.getObjects()) {
if (object.getId() == this.connection.getFrom()) {
sObj = object;
if (object.getId() == this.connection.getSourceObjectId()) {
zdrojSelectedIndex = 0;
// Main.client.send(Message.TYPE_SNMP_INTERFACE, sObj);
}
}
if (object.getId() == this.connection.getTo()) {
eObj = object;
if (object.getId() == this.connection.getSourceObjectId()) {
zdrojSelectedIndex = 1;
// Main.client.send(Message.TYPE_SNMP_INTERFACE, eObj);
}
}
}
}
JPanel panel = new JPanel();
panel.setLayout(null);
int stred = getWidth() / 2;
JLabel firstLabel = new JLabel("1: " + sObj.getName());
firstLabel.setBounds(20, 10, 500, 25);
panel.add(firstLabel);
JLabel secondLabel = new JLabel("2: " + eObj.getName());
secondLabel.setBounds(20, 40, 500, 25);
panel.add(secondLabel);
JLabel typLabel = new JLabel("Typ spojení");
typLabel.setBounds(20, 100, 140, 25);
panel.add(typLabel);
typComboBox.setBounds(200, 100, 200, 25);
panel.add(typComboBox);
JLabel cistLabel = new JLabel("Čtení dat");
cistLabel.setBounds(20, 170, 200, 25);
panel.add(cistLabel);
read.setBounds(200, 170, 50, 25);
read.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (read.isSelected()) {
zdrojComboBox.setEnabled(true);
rozhraniComboBox.setEnabled(true);
} else {
zdrojComboBox.setEnabled(false);
rozhraniComboBox.setEnabled(false);
}
}
});
panel.add(read);
JLabel zdrojLabel = new JLabel("Zdrojové zařízení");
zdrojLabel.setBounds(20, 200, 200, 25);
panel.add(zdrojLabel);
zdrojComboBox.setModel(new DefaultComboBoxModel(new String[]{sObj.getName(), eObj.getName()}));
zdrojComboBox.setSelectedIndex(zdrojSelectedIndex);
zdrojComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (zdrojComboBox.getSelectedIndex() == 0) {
// Main.client.send(Message.TYPE_SNMP_INTERFACE, sObj);
} else {
// Main.client.send(Message.TYPE_SNMP_INTERFACE, eObj);
}
// dokud se nenactou hodnoty vypne combobox
rozhraniComboBox.setEnabled(false);
}
});
zdrojComboBox.setBounds(200, 200, 200, 25);
panel.add(zdrojComboBox);
JLabel rozhraniLabel = new JLabel("Rozhraní");
rozhraniLabel.setBounds(20, 230, 200, 25);
panel.add(rozhraniLabel);
rozhraniComboBox.setModel(new DefaultComboBoxModel(new String[]{" "}));
rozhraniComboBox.setBounds(200, 230, 200, 25);
panel.add(rozhraniComboBox);
JButton saveButton = new JButton("Uložit");
saveButton.setBounds(stred - 120, 300, 90, 25);
saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (zdrojComboBox.getSelectedIndex() == 0) {
connection.setSourceObjectId(sObj.getId());
} else {
connection.setSourceObjectId(sObj.getId());
}
connection.setType(typComboBox.getSelectedIndex());
connection.setRead(read.isSelected());
connection.setMap(sObj.getMap());
connection.setFrom(sObj.getId());
connection.setTo(eObj.getId());
connection.setIface(rozhraniComboBox.getSelectedIndex());
if (edit) {
// Main.client.send(Message.TYPE_EDIT_CONNECTION, connection);
} else {
Client.client.send(Message.NEW_CONNECTION, connection);
}
dispose();
}
});
panel.add(saveButton);
JButton closeButton = new JButton("Storno");
closeButton.setBounds(stred + 30, 300, 90, 25);
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
panel.add(closeButton);
add(panel);
setVisible(true);
setAlwaysOnTop(true);
}
public static void reloadInterfaceList(ArrayList<String> list) {
rozhraniComboBox.removeAllItems();
for (String string : list) {
rozhraniComboBox.addItem(string);
}
if (zdrojComboBox.getSelectedIndex() == zdrojSelectedIndex && !list.isEmpty()) {
rozhraniComboBox.setSelectedIndex(connection.getIface());
}
rozhraniComboBox.setEnabled(true);
}
}

View File

@ -0,0 +1,587 @@
package jguard.client.gui.dialog;
import cucky.jGuard.lib.LogComparator;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.Message;
import cucky.jGuard.lib.Status;
import cucky.jGuard.lib.object.Log;
import cucky.jGuard.lib.object.MapObject;
import cucky.jGuard.lib.object.ObjectServices;
import cucky.jGuard.lib.object.ObjectType;
import cucky.jGuard.lib.object.SnmpProbe;
import cucky.jGuard.lib.object.SnmpProfile;
import cucky.jGuard.snmp.SNMPManager;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import jguard.client.Client;
import org.snmp4j.smi.OID;
public class ObjectDialog extends JDialog {
private MapObject obj;
private Boolean newObject;
private JTextField nazevText = new JTextField();
private JLabel nazevWarning = new JLabel("Název musi mit min. 3 znaky");
private JTextField ipText = new JTextField();
private JLabel ipWarning = new JLabel("Neplatná IP adresa");
private JComboBox<String> typeComboBox = new JComboBox<String>();
private JTextField userText = new JTextField();
private JPasswordField hesloText = new JPasswordField();
private DefaultComboBoxModel<String> snmpmodel = new DefaultComboBoxModel<String>();
private JCheckBox disableCheBox = new JCheckBox();
private JTextField locationText = new JTextField();
private JTextArea descriptionText = new JTextArea();
private JCheckBox winboxBox = new JCheckBox("Winbox");
private JTextField portWinbox = new JTextField("8291");
private JCheckBox sshBox = new JCheckBox("SSH");
private JTextField portSsh = new JTextField("22");
private JCheckBox wwwBox = new JCheckBox("Web");
private JTextField portWww = new JTextField("80");
private JComboBox<String> wwwVerzeComboBox = new JComboBox<String>();
private JCheckBox telnetBox = new JCheckBox("Telnet");
private JTextField portTelnet = new JTextField("23");
private JCheckBox smstBox = new JCheckBox("SMS");
private JTextField portSms = new JTextField("5020");
private JComboBox<String> smsVerzeComboBox = new JComboBox<String>();
private JComboBox<String> snmpProfileComboBox = new JComboBox<String>();
public ObjectDialog(MapObject obj, boolean newObject) {
this.obj = obj;
this.newObject = newObject;
setTitle("Vlastnosti objektu");
setSize(600, 520);
setLocationRelativeTo(null);
setVisible(true);
setAlwaysOnTop(true);
setLayout(new BorderLayout());
JTabbedPane tabbedPane = new JTabbedPane();
JScrollPane tabNastaveni = new JScrollPane(tabNastaveni(),
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
tabbedPane.addTab("Informace", tabInfo());
tabbedPane.addTab("Nastaveni", tabNastaveni);
tabbedPane.addTab("Služby", tabSluzby());
tabbedPane.addTab("Události", tabUdalosti());
tabbedPane.addTab("Sondy", tabSondy());
// pokud se jedna o novy objekt
if (newObject) {
tabbedPane.setSelectedIndex(1); // prepne na kartu nastaveni
tabbedPane.setEnabledAt(0, false); // vypne kartu informace
tabbedPane.setEnabledAt(3, false); // vypne kartu udalosti
}
add(tabbedPane, BorderLayout.CENTER);
JPanel pane = new JPanel();
JButton save = new JButton("Ulozit");
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// kontrola chyb
if (nazevText.getText().length() < 3) {
nazevWarning.setVisible(true);
return;
}
nazevWarning.setVisible(false);
if (!validateIp(ipText.getText())) {
ipWarning.setVisible(true);
return;
}
ipWarning.setVisible(false);
// ulozeni do objektu
obj.setName(nazevText.getText());
obj.setIp(ipText.getText());
obj.setUser(userText.getText());
obj.setPassword(new String(hesloText.getPassword()));
for (int i = 0; i < Client.deviceType.size(); i++) {
if (typeComboBox.getSelectedIndex() == i) {
obj.setType(Client.deviceType.get(i).getId());
}
}
obj.setSnmpProfile(Client.serverSettings.getSnmp().get(snmpProfileComboBox.getSelectedIndex()).getId());
obj.setActive(disableCheBox.isSelected());
obj.setDescription(descriptionText.getText());
obj.setLocation(locationText.getText());
ObjectServices service = new ObjectServices();
service.setWinbox(winboxBox.isSelected());
service.setPortWinbox(portWinbox.getText());
service.setSsh(sshBox.isSelected());
service.setPortSsh(portSsh.getText());
service.setWeb(wwwBox.isSelected());
service.setPortWeb(portWww.getText());
service.setVerzeWeb(wwwVerzeComboBox.getSelectedIndex());
service.setTelnet(telnetBox.isSelected());
service.setPortTelnet(portTelnet.getText());
service.setSms(smstBox.isSelected());
service.setPortSms(portSms.getText());
service.setVerzeSms(smsVerzeComboBox.getSelectedIndex());
obj.setService(service);
ArrayList<SnmpProbe> probe = new ArrayList<>();
if (!newObject) {
probe.addAll(obj.getSnmpProbe());
}
obj.setSnmpProbe(probe);
if (newObject) {
Client.client.send(Message.ADD_OBJECT, obj);
} else {
Client.client.send(Message.UPDATE_OBJECT, obj);
}
// zavreni dialogu
dispose();
}
});
pane.add(save);
JButton cancel = new JButton("Zrusit");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
pane.add(cancel);
add(pane, BorderLayout.PAGE_END);
// nacteni snmp profilu
for (SnmpProfile sp : Client.serverSettings.getSnmp()) {
snmpmodel.addElement(sp.getName());
}
// doplneni poli dialogu podle vybraneho objektu
if (!newObject) {
nazevText.setText(obj.getName());
ipText.setText(obj.getIp());
userText.setText(obj.getUser());
hesloText.setText(obj.getPassword());
for (int i = 0; i < Client.deviceType.size(); i++) {
if (obj.getType() == Client.deviceType.get(i).getId()) {
typeComboBox.setSelectedIndex(i);
}
}
for (int i = 0; i < Client.serverSettings.getSnmp().size(); i++) {
if (Client.serverSettings.getSnmp().get(i).getId() == obj.getSnmpProfile()) {
snmpProfileComboBox.setSelectedIndex(i);
}
}
disableCheBox.setSelected(obj.isActive());
descriptionText.setText(obj.getDescription());
locationText.setText(obj.getLocation());
winboxBox.setSelected(obj.getService().isWinbox());
portWinbox.setText(String.valueOf(obj.getService().getPortWinbox()));
sshBox.setSelected(obj.getService().isSsh());
portSsh.setText(String.valueOf(obj.getService().getPortSsh()));
wwwBox.setSelected(obj.getService().isWeb());
portWww.setText(String.valueOf(obj.getService().getPortWeb()));
wwwVerzeComboBox.setSelectedIndex(obj.getService().getVerzeWeb());
telnetBox.setSelected(obj.getService().isTelnet());
portTelnet.setText(String.valueOf(obj.getService().getPortTelnet()));
smstBox.setSelected(obj.getService().isSms());
portSms.setText(String.valueOf(obj.getService().getPortSms()));
smsVerzeComboBox.setSelectedIndex(obj.getService().getVerzeSms());
} else {
disableCheBox.setSelected(true);
}
}
private JPanel tabInfo() {
JPanel p = new JPanel(null);
Map<String, String> label = new HashMap<String, String>();
label.put("Popis", "1.3.6.1.2.1.1.1.0");
label.put("Uptime", "1.3.6.1.2.1.1.3.0");
label.put("Contact", "1.3.6.1.2.1.1.4.0");
label.put("Name", "1.3.6.1.2.1.1.5.0");
if(!newObject){ /// TODO u objektu u kterych neni snmp protokol povolen vraci system err null
Thread ti = new Thread() {
@Override
public void run() {
super.run();
// nacteni snmp profilu
String port = "161";
String community = "public";
int version = SNMPManager.version1;
for (SnmpProfile sp : Client.serverSettings.getSnmp()) {
if (obj.getSnmpProfile() == sp.getId()) {
port = sp.getPort();
community = sp.getCommunity();
version = sp.getVersion();
break;
}
}
SNMPManager mngr = new SNMPManager(obj.getIp(), port, community, version);
try {
mngr.start();
} catch (Exception e) {
}
int y = 30;
for (Entry<String, String> entry : label.entrySet()) {
try {
JLabel label = new JLabel(entry.getKey());
label.setBounds(20, y, 90, 25);
JLabel value = new JLabel(mngr.getAsString(new OID(entry.getValue())));
value.setBounds(100, y, 200, 25);
p.add(label);
p.add(value);
y += 30;
p.revalidate();
p.repaint();
} catch (Exception e) {
LogFile.printErr("Object dialog - SNMP error: " + e);
}
}
}
};
ti.start();
}
return p;
}
private JPanel tabNastaveni() {
JPanel p = new JPanel();
p.setLayout(null);
JLabel nazevLabel = new JLabel("Název");
nazevLabel.setBounds(20, 30, 80, 25);
p.add(nazevLabel);
nazevText.setBounds(110, 30, 160, 25);
p.add(nazevText);
nazevWarning.setForeground(Color.red);
nazevWarning.setBounds(110, 55, 160, 25);
nazevWarning.setVisible(false);
p.add(nazevWarning);
JLabel ipLabel = new JLabel("IP adresa");
ipLabel.setBounds(300, 30, 80, 25);
p.add(ipLabel);
ipText.setBounds(390, 30, 160, 25);
p.add(ipText);
ipWarning.setForeground(Color.red);
ipWarning.setBounds(390, 55, 160, 25);
ipWarning.setVisible(false);
p.add(ipWarning);
JLabel typLabel = new JLabel("Typ");
typLabel.setBounds(20, 130, 80, 25);
p.add(typLabel);
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
for (ObjectType obj : Client.deviceType) {
model.addElement(obj.getName());
}
typeComboBox.setModel(model);
typeComboBox.setBounds(110, 130, 160, 25);
p.add(typeComboBox);
JLabel userLabel = new JLabel("Uživatel");
userLabel.setBounds(20, 80, 80, 25);
p.add(userLabel);
userText.setBounds(110, 80, 160, 25);
p.add(userText);
JLabel hesloLabel = new JLabel("Heslo");
hesloLabel.setBounds(300, 80, 80, 25);
p.add(hesloLabel);
hesloText.setBounds(390, 80, 160, 25);
p.add(hesloText);
JLabel snmpLabel = new JLabel("SNMP profil");
snmpLabel.setBounds(300, 130, 80, 25);
p.add(snmpLabel);
snmpProfileComboBox.setModel(snmpmodel);
snmpProfileComboBox.setBounds(390, 130, 160, 25);
p.add(snmpProfileComboBox);
JLabel disableLabel = new JLabel("Aktivní");
disableLabel.setBounds(20, 180, 80, 25);
p.add(disableLabel);
disableCheBox.setBounds(110, 180, 160, 25);
p.add(disableCheBox);
JButton snmpTest = new JButton("Test SNMP");
snmpTest.setBounds(390, 180, 160, 25);
snmpTest.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/* TODO
Thread testSnmp = new Thread() {
@Override
public void run() {
try {
// nacteni snmp profilu
String port = "161";
String community = "public";
int version = SNMPManager.version1;
for (int i = 0; i < Client.serverSettings.getSnmp().size(); i++) {
if (snmpProfileComboBox.getSelectedIndex() == i) {
port = Client.serverSettings.getSnmp().get(i).getPort();
community = Client.serverSettings.getSnmp().get(i).getCommunity();
version = Client.serverSettings.getSnmp().get(i).getVersion();
break;
}
}
SNMPManager mngr = new SNMPManager(ipText.getText(), port, community, version);
mngr.start();
String desc = mngr.getSysDescr();
JOptionPane.showMessageDialog(ObjectDialog.this, "Odpoved: " + desc, "SNMP test", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
JOptionPane.showMessageDialog(ObjectDialog.this, "SNMP se nepodařilo načíst", "SNMP test", JOptionPane.ERROR_MESSAGE);
System.err.println("SNMP test error: " + ex.getMessage());
}
}
};
testSnmp.start();
*/
}
});
p.add(snmpTest);
JLabel locLabel = new JLabel("Umístění");
locLabel.setBounds(20, 230, 80, 25);
p.add(locLabel);
locationText.setBounds(110, 230, 440, 25);
p.add(locationText);
JLabel descLabel = new JLabel("Poznámka");
descLabel.setBounds(20, 280, 80, 25);
p.add(descLabel);
descriptionText.setBounds(110, 280, 440, 100);
descriptionText.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK), BorderFactory.createEmptyBorder(10, 10, 10, 10)));
p.add(descriptionText);
return p;
}
private JPanel tabSluzby() {
JPanel p = new JPanel();
p.setLayout(null);
winboxBox.setBounds(20, 30, 80, 25);
p.add(winboxBox);
JLabel winbox_port = new JLabel("port:");
winbox_port.setBounds(130, 30, 60, 25);
p.add(winbox_port);
portWinbox.setBounds(180, 30, 60, 25);
p.add(portWinbox);
sshBox.setBounds(20, 60, 80, 25);
p.add(sshBox);
JLabel ssh_port = new JLabel("port:");
ssh_port.setBounds(130, 60, 60, 25);
p.add(ssh_port);
portSsh.setBounds(180, 60, 60, 25);
p.add(portSsh);
wwwBox.setBounds(20, 90, 80, 25);
p.add(wwwBox);
JLabel www_port = new JLabel("port:");
www_port.setBounds(130, 90, 60, 25);
p.add(www_port);
portWww.setBounds(180, 90, 60, 25);
p.add(portWww);
JLabel www_verze = new JLabel("verze:");
www_verze.setBounds(260, 90, 60, 25);
p.add(www_verze);
wwwVerzeComboBox.setModel(new DefaultComboBoxModel(new String[]{"HTTP", "HTTPS"}));
wwwVerzeComboBox.setBounds(320, 90, 80, 25);
p.add(wwwVerzeComboBox);
telnetBox.setBounds(20, 120, 80, 25);
p.add(telnetBox);
JLabel telnet_port = new JLabel("port:");
telnet_port.setBounds(130, 120, 60, 25);
p.add(telnet_port);
portTelnet.setBounds(180, 120, 60, 25);
p.add(portTelnet);
smstBox.setBounds(20, 150, 80, 25);
p.add(smstBox);
JLabel sms_port = new JLabel("port:");
sms_port.setBounds(130, 150, 60, 25);
p.add(sms_port);
portSms.setBounds(180, 150, 60, 25);
p.add(portSms);
JLabel sms_verze = new JLabel("verze:");
sms_verze.setBounds(260, 150, 60, 25);
p.add(sms_verze);
smsVerzeComboBox.setModel(new DefaultComboBoxModel(new String[]{"SDV", "BT"}));
smsVerzeComboBox.setBounds(320, 150, 80, 25);
p.add(smsVerzeComboBox);
return p;
}
private JScrollPane tabUdalosti() {
String column[] = {"Začátek", "Konec", "Stav"};
DefaultTableModel tableModel = new DefaultTableModel(column, 0) {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
try {
// TODO pri vytvareni noveho objektu to vyhodi chybu
Collections.sort(Client.log, new LogComparator());
Collections.reverse(Client.log);
if (!newObject) {
for (Log l : Client.log) {
if (l.getDevice() == obj.getId()) {
Object[] d = {
getDate(l.getFrom()),
getDate(l.getTo()),
getStatus(l.getStatus())};
tableModel.addRow(d);
}
}
}
} catch (Exception e) {
LogFile.printErr("Object log error: " + e.getMessage());
}
JTable table = new JTable(tableModel);
return new JScrollPane(table);
}
private JPanel tabSondy() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
String column[] = {"Popis", "OID", "Aktivni", "Zobrazit"};
DefaultTableModel tableModel = new DefaultTableModel(column, 0);
if (!newObject) {
try {
for (SnmpProbe p : obj.getSnmpProbe()) {
Object[] d = {p.getName(), p.getOid(), "", ""};
tableModel.addRow(d);
}
} catch (Exception e) {
LogFile.printErr("Probe list " + e.getMessage());
}
}
JScrollPane table = new JScrollPane();
table.add(new JTable(tableModel));
panel.add(new JTable(tableModel), BorderLayout.CENTER);
JPanel jp = new JPanel();
jp.add(new JLabel("Přidat: "));
panel.add(jp, BorderLayout.PAGE_END);
return panel;
}
public boolean validateIp(String ip) {
Pattern pattern = Pattern.compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
Matcher matcher = pattern.matcher(ip);
return matcher.matches();
}
public boolean validatePort(String port) {
try {
int pNum = Integer.parseInt(port);
if ((pNum > 0) && (pNum < 65536)) {
return true;
}
} catch (NumberFormatException e) {
}
return false;
}
private String getDate(long date) {
if (date != 0) {
SimpleDateFormat ft = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
return ft.format(new Date(date));
}
return "";
}
private String getStatus(int status) {
switch (status) {
case Status.OK: // online
return "online";
case Status.WARNING: // warning
return "varování";
case Status.OFFLINE: // offline
return "offline";
default: // other
return "n/a";
}
}
}

View File

@ -0,0 +1,57 @@
package jguard.client.gui.dialog;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.object.OnlineClients;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import jguard.client.Client;
public class OnlineClientsDialog extends JDialog {
public OnlineClientsDialog() {
setTitle("Online klienti");
setLocationRelativeTo(null);
setAlwaysOnTop(true);
setLayout(new FlowLayout(FlowLayout.CENTER));
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.setBorder(new EmptyBorder(10, 25, 10, 25));
if (Client.onlineClients.size() > 0) {
for (OnlineClients oc : Client.onlineClients) {
try {
JLabel line = new JLabel(" " + oc.getUsername() + " (" + oc.getIp() + ")");
switch (oc.getPlatform()) {
case OnlineClients.PLATFORM_MOBILE:
line.setIcon(new ImageIcon(ImageIO.read(new File("img/platform_android.png"))));
break;
case OnlineClients.PLATFORM_PC:
line.setIcon(new ImageIcon(ImageIO.read(new File("img/platform_pc.png"))));
break;
}
panel.add(line);
panel.add(Box.createRigidArea(new Dimension(5, 10)));
} catch (IOException ex) {
LogFile.printErr("Online Clients dialog exception: " + ex.getMessage());
}
}
}
add(panel);
pack();
setVisible(true);
}
}

View File

@ -0,0 +1,43 @@
package jguard.client.gui.dialog;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ServerMessageDialog extends JDialog {
private String text;
public ServerMessageDialog(String text) {
this.text = text;
placeComponents();
}
private void placeComponents() {
setTitle("Zpráva serveru");
setSize(400,300);
setLocationRelativeTo(null);
setAlwaysOnTop(true);
JPanel panel = new JPanel();
JLabel l = new JLabel(text);
panel.add(l);
this.add(panel);
this.setVisible(true);
}
}

View File

@ -0,0 +1,45 @@
package jguard.client.network;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.Message;
import jguard.client.AutoConnect;
import jguard.client.Client;
import jguard.client.ClientMessageParser;
import jguard.client.gui.Window;
public class ClientAdapterHandler extends SimpleChannelInboundHandler<Message> {
@Override
protected void channelRead0(ChannelHandlerContext chc, Message msg) throws Exception {
Channel currentChannel = chc.channel();
new ClientMessageParser().parse(msg);
}
@Override
public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
super.channelRegistered(ctx);
Channel currentChannel = ctx.channel();
}
@Override
public void channelUnregistered(ChannelHandlerContext chc) throws Exception {
super.channelUnregistered(chc);
LogFile.printInfo("Odpojeno");
Window.setStatusBarMessage("Odpojeno");
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
super.channelInactive(ctx);
}
@Override
public void exceptionCaught(ChannelHandlerContext chc, Throwable cause) throws Exception {
LogFile.printInfo("Server nedostupny: " + cause.getMessage());
new AutoConnect().run();
}
}

View File

@ -0,0 +1,94 @@
package jguard.client.network;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.serialization.ClassResolvers;
import io.netty.handler.codec.serialization.ObjectDecoder;
import io.netty.handler.codec.serialization.ObjectEncoder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import cucky.jGuard.lib.LogFile;
import cucky.jGuard.lib.Message;
import io.netty.channel.ChannelOption;
import jguard.client.gui.Window;
public class NetworkClient {
private String server;
private int port;
private Channel channel;
public NetworkClient(String server, int port) {
this.server = server;
this.port = port;
}
public void start() {
LogFile.printInfo("Pripojuji ....");
Window.setStatusBarMessage("Připojuji ...");
EventLoopGroup group = new NioEventLoopGroup();
try {
SslContext sslCtx = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
Bootstrap bootstrap = new Bootstrap().group(group)
.option(ChannelOption.SO_KEEPALIVE, true)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer() {
@Override
protected void initChannel(Channel channel) throws Exception {
ChannelPipeline pipeline = channel.pipeline();
// pro zabezpecene pripojeni
pipeline.addLast("ssl", sslCtx.newHandler(channel.alloc(), NetworkClient.this.server, NetworkClient.this.port));
pipeline.addLast("decoder", new ObjectDecoder(ClassResolvers.weakCachingConcurrentResolver(getClass().getClassLoader())));
pipeline.addLast("encoder", new ObjectEncoder());
pipeline.addLast("handler", new ClientAdapterHandler());
}
});
channel = bootstrap.connect(server, port).sync().channel();
} catch (Exception e) {
LogFile.printErr("Client exception: " + e.getMessage());
} finally {
//group.shutdownGracefully(); // pokud se odkomentuje nejde se připojit k serveru
}
}
public void send(int type, Object obj) {
channel.writeAndFlush(new Message(type, obj));
}
public Channel getChannel() {
return channel;
}
public void disconnect() {
if (channel != null) {
channel.disconnect();
channel.close();
}
}
public boolean isConnected() {
try {
return channel.isRegistered();
} catch (Exception e) {
return false;
}
}
}