From 2b6134e50801f9fc66a27a2d565340f5773f251f Mon Sep 17 00:00:00 2001
From: ulrich
Date: Sun, 04 Apr 2021 11:24:49 +0000
Subject: [PATCH] ResourceBundle eingebaut
---
src/de/uhilger/mediaz/App.java | 39 ++++++++----
src/mediaz_de_DE.properties | 25 ++++++++
src/de/uhilger/mediaz/Server.java | 23 ++++---
src/de/uhilger/mediaz/api/StopServerHandler.java | 16 ++++-
src/de/uhilger/mediaz/api/FileHandler.java | 38 +++++++-----
5 files changed, 98 insertions(+), 43 deletions(-)
diff --git a/src/de/uhilger/mediaz/App.java b/src/de/uhilger/mediaz/App.java
index c20cba3..63d8cbb 100644
--- a/src/de/uhilger/mediaz/App.java
+++ b/src/de/uhilger/mediaz/App.java
@@ -20,6 +20,7 @@
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
+import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -31,12 +32,20 @@
private static final Logger logger = Logger.getLogger(App.class.getName());
- public static final String IP_PORT = "port";
- public static final String IP_WWW_DATA = "www-data";
- public static final String IP_CTX = "ctx";
- public static final String IP_CONF = "conf";
-
private static HashMap initParams;
+
+ /* ResourceBundle dieser App */
+ private static ResourceBundle rb;
+
+ /* Name des ResourceBundles dieser App */
+ private static final String RB_NAME = "mediaz";
+
+ /* ResourceBundle-Kennungen */
+ public static final String RB_PARAM_FEHLT = "msgParamFehlt";
+ public static final String RB_AP_PORT = "appParamPort";
+ public static final String RB_AP_CONF = "appParamConf";
+ public static final String RB_AP_WWW_DATA = "appParamWWWData";
+ public static final String RB_AP_CTX = "appParamCtx";
/**
* <p>Start-Methode dieser Anwendung</p>
@@ -44,7 +53,7 @@
* @param args Kommandozeilenparameter
*/
public static void main(String[] args) {
-
+ rb = ResourceBundle.getBundle(RB_NAME);
logger.info(new File(".").getAbsolutePath());
initParams = new HashMap();
@@ -53,29 +62,29 @@
initParams.put(argParts[0], argParts[1]);
}
- String portStr = getInitParameter(IP_PORT);
+ String portStr = getInitParameter(getRs(RB_AP_PORT));
if (portStr != null) {
Server server = new Server(Integer.parseInt(portStr));
try {
- String ctxName = getInitParameter(IP_CTX);
+ String ctxName = getInitParameter(getRs(RB_AP_CTX));
if (ctxName != null) {
server.setContextName(ctxName);
server.start();
} else {
- logger.severe("Der Parameter " + IP_CTX + " muss angegeben werden.");
+ logger.log(Level.INFO, getRs(RB_PARAM_FEHLT), getRs(RB_AP_CTX));
}
- String conf = getInitParameter(IP_CONF);
+ String conf = getInitParameter(getRs(RB_AP_CONF));
if(conf != null) {
File confDir = new File(conf);
confDir.mkdirs();
} else {
-
+ logger.log(Level.INFO, App.getRs(RB_PARAM_FEHLT), getRs(RB_AP_CONF));
}
} catch (IOException ex) {
- Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
+ logger.log(Level.SEVERE, null, ex);
}
} else {
- logger.severe("Der Parameter " + IP_PORT + " muss angegeben werden.");
+ logger.log(Level.INFO, App.getRs(RB_PARAM_FEHLT), getRs(RB_AP_PORT));
}
}
@@ -101,5 +110,9 @@
}
return param;
}
+
+ public static String getRs(String key) {
+ return rb.getString(key);
+ }
}
diff --git a/src/de/uhilger/mediaz/Server.java b/src/de/uhilger/mediaz/Server.java
index ebaf91d..2ec1044 100644
--- a/src/de/uhilger/mediaz/Server.java
+++ b/src/de/uhilger/mediaz/Server.java
@@ -18,12 +18,14 @@
package de.uhilger.mediaz;
import com.sun.net.httpserver.HttpServer;
-import de.uhilger.mediaz.handler.FileHandler;
-import de.uhilger.mediaz.handler.StopServerHandler;
+import de.uhilger.mediaz.api.FileHandler;
+import de.uhilger.mediaz.api.StopServerHandler;
import java.io.IOException;
import java.util.logging.Logger;
import java.net.InetSocketAddress;
+import java.util.ResourceBundle;
import java.util.concurrent.Executors;
+import java.util.logging.Level;
/**
* Die Klasse Server stellt Methoden zur Ausführung eines
@@ -36,8 +38,10 @@
private static final Logger logger = Logger.getLogger(Server.class.getName());
- public static final String STR_SLASH = "/";
- public static final String CMD_SERVER_STOP = "/server/stop";
+ public static final String RB_SERVER_START_MSG = "msgServerStart";
+ public static final String RB_WEBROOT = "webroot";
+ public static final String RB_STOP_SERVER = "stopServer";
+ public static final String RB_SLASH = "slash";
private int port;
@@ -66,8 +70,9 @@
* @param ctxName Name des Kontexts, unter dem der Server aufrufbar sein soll
*/
public void setContextName(String ctxName) {
- if(!ctxName.startsWith(STR_SLASH)) {
- this.ctx = STR_SLASH + ctxName;
+ String slash = App.getRs(RB_SLASH);
+ if(!ctxName.startsWith(slash)) {
+ this.ctx = slash + ctxName;
} else {
this.ctx = ctxName;
}
@@ -81,11 +86,11 @@
* in diesem Objekt
*/
public void start() throws IOException {
- logger.info("Server starting on port " + port);
+ logger.log(Level.INFO, App.getRs(RB_SERVER_START_MSG), Integer.toString(port));
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
- server.createContext(ctx + STR_SLASH, new FileHandler(App.getInitParameter(App.IP_WWW_DATA)));
- server.createContext(ctx + CMD_SERVER_STOP, new StopServerHandler());
+ server.createContext(ctx + App.getRs(RB_WEBROOT), new FileHandler(App.getInitParameter(App.getRs(App.RB_AP_WWW_DATA))));
+ server.createContext(ctx + App.getRs(RB_STOP_SERVER), new StopServerHandler());
server.setExecutor(Executors.newFixedThreadPool(20));
server.start();
}
diff --git a/src/de/uhilger/mediaz/handler/FileHandler.java b/src/de/uhilger/mediaz/api/FileHandler.java
similarity index 92%
rename from src/de/uhilger/mediaz/handler/FileHandler.java
rename to src/de/uhilger/mediaz/api/FileHandler.java
index 4835e05..ab20120 100644
--- a/src/de/uhilger/mediaz/handler/FileHandler.java
+++ b/src/de/uhilger/mediaz/api/FileHandler.java
@@ -15,12 +15,14 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package de.uhilger.mediaz.handler;
+package de.uhilger.mediaz.api;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
+import de.uhilger.mediaz.App;
import de.uhilger.mediaz.Server;
+import static de.uhilger.mediaz.Server.RB_SLASH;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -68,15 +70,17 @@
public static final String HTTP_GET = "GET";
/* String Konstanten */
- public static final String STR_BYTES = "bytes";
public static final String STR_BLANK = " ";
- public static final String STR_DASH = "-";
public static final String STR_COMMA = ",";
public static final String STR_DOT = ".";
- public static final String STR_NOT_FOUND = " not found.";
- public static final String LM_PATTERN = "EEE, dd MMM yyyy HH:mm:ss zzz";
- public static final String RANGE_PATTERN = "[^\\d-,]";
- public static final String WELCOME_FILE = "index.html";
+
+ /* ResourceBundle-Kennungen */
+ public static final String RB_BYTES = "bytes";
+ public static final String RB_DASH = "dash";
+ public static final String RB_NOT_FOUND = "notFound";
+ public static final String RB_LM_PATTERN = "lmPattern";
+ public static final String RB_RANGE_PATTERN = "rangePattern";
+ public static final String RB_WELCOME_FILE = "welcomeFile";
/* Ablageort fuer Webinhalte */
private final String fileBase;
@@ -111,8 +115,8 @@
if (headers.containsKey(RANGE_HEADER)) {
serveFileParts(e, new File(fileBase, fName));
} else {
- if (fName.length() < 1 || fName.endsWith(Server.STR_SLASH)) {
- fName += WELCOME_FILE;
+ if (fName.length() < 1 || fName.endsWith(App.getRs(RB_SLASH))) {
+ fName += App.getRs(RB_WELCOME_FILE);
}
serveFile(e, new File(fileBase, fName));
}
@@ -254,7 +258,7 @@
Der regulaere Ausdruck "[^\\d-,]" bezeichnet alle Zeichen, die keine
Ziffern 0-9, Bindestrich oder Komma sind.
*/
- rangeHeader = rangeHeader.replaceAll(RANGE_PATTERN, "");
+ rangeHeader = rangeHeader.replaceAll(App.getRs(RB_RANGE_PATTERN), "");
/*
Die Ranges ermitteln.
@@ -277,7 +281,7 @@
String[] rangeArray = rangeHeader.split(STR_COMMA);
for (String rangeStr : rangeArray) {
Range range = new Range();
- String[] values = rangeStr.split(STR_DASH);
+ String[] values = rangeStr.split(App.getRs(RB_DASH));
if (values.length < 2) {
// Fall 3
range.setStart(Long.parseLong(values[0]));
@@ -308,12 +312,12 @@
*/
protected String contentRangeHdr(Range range, File file) {
StringBuilder sb = new StringBuilder();
- sb.append(STR_BYTES);
+ sb.append(App.getRs(RB_BYTES));
sb.append(STR_BLANK);
sb.append(range.getStart());
- sb.append(STR_DASH);
+ sb.append(App.getRs(RB_DASH));
sb.append(range.getEnd());
- sb.append(Server.STR_SLASH);
+ sb.append(App.getRs(RB_SLASH));
sb.append(file.length());
return sb.toString();
}
@@ -330,12 +334,12 @@
*/
protected void setHeaders(HttpExchange e, File file) throws IOException {
Headers resHeaders = e.getResponseHeaders();
- resHeaders.add(ACCEPT_RANGES_HEADER, STR_BYTES);
+ resHeaders.add(ACCEPT_RANGES_HEADER, App.getRs(RB_BYTES));
String mimeType = Files.probeContentType(file.toPath());
if (mimeType != null) {
resHeaders.add(CONTENT_TYPE, mimeType);
}
- SimpleDateFormat sdf = new SimpleDateFormat(LM_PATTERN);
+ SimpleDateFormat sdf = new SimpleDateFormat(App.getRs(RB_LM_PATTERN));
Date date = new Date(file.lastModified());
resHeaders.add(LAST_MODIFIED_DATE_HEADER, sdf.format(date));
}
@@ -350,7 +354,7 @@
*/
protected void sendNotFound(HttpExchange e, String fname) throws IOException {
OutputStream os = e.getResponseBody();
- String response = fname + STR_NOT_FOUND;
+ String response = fname + STR_BLANK + App.getRs(RB_NOT_FOUND);
byte[] bytes = response.getBytes(StandardCharsets.UTF_8);
e.sendResponseHeaders(SC_NOT_FOUND, bytes.length);
os.write(bytes);
diff --git a/src/de/uhilger/mediaz/handler/StopServerHandler.java b/src/de/uhilger/mediaz/api/StopServerHandler.java
similarity index 79%
rename from src/de/uhilger/mediaz/handler/StopServerHandler.java
rename to src/de/uhilger/mediaz/api/StopServerHandler.java
index d910470..78826d7 100644
--- a/src/de/uhilger/mediaz/handler/StopServerHandler.java
+++ b/src/de/uhilger/mediaz/api/StopServerHandler.java
@@ -15,7 +15,7 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package de.uhilger.mediaz.handler;
+package de.uhilger.mediaz.api;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
@@ -32,6 +32,14 @@
* @author Ulrich Hilger
*/
public class StopServerHandler implements HttpHandler {
+
+ /* Der Logger fuer diesen StopServerHandler */
+ private static final Logger logger = Logger.getLogger(StopServerHandler.class.getName());
+
+ /* ResourceBundle-Kennungen */
+ public static final String RB_STOPPING_SERVER = "stoppingServer";
+ public static final String RB_SERVER_STOPPED = "serverStopped";
+ public static final String RB_MEDIAZ_END = "mediazEnd";
/**
* Den Server geordnet herunterfahren und
@@ -44,13 +52,13 @@
@Override
public void handle(HttpExchange e) throws IOException {
Logger.getLogger(StopServerHandler.class.getName()).info(e.getRequestURI().toString());
- String response = "Server stopped";
+ String response = App.getRs(RB_SERVER_STOPPED);
e.sendResponseHeaders(200, response.length());
OutputStream os = e.getResponseBody();
os.write(response.getBytes());
os.flush();
os.close();
- Logger.getLogger(StopServerHandler.class.getName()).info("stopping server.");
+ logger.info(App.getRs(RB_STOPPING_SERVER));
e.getHttpContext().getServer().stop(1);
Timer timer = new Timer();
timer.schedule(new AppStopper(), 2000);
@@ -64,7 +72,7 @@
@Override
public void run() {
- Logger.getLogger(StopServerHandler.class.getName()).info("Mediazentrale beendet.");
+ logger.info(App.getRs(RB_MEDIAZ_END));
App.stop();
}
}
diff --git a/src/mediaz_de_DE.properties b/src/mediaz_de_DE.properties
new file mode 100644
index 0000000..11f491f
--- /dev/null
+++ b/src/mediaz_de_DE.properties
@@ -0,0 +1,25 @@
+
+# App-Parameter
+appParamPort=port
+appParamConf=conf
+appParamWWWData=www-data
+appParamCtx=ctx
+
+# API-Endpunkte
+webroot=/
+stopServer=/server/stop
+
+slash=/
+dash=-
+bytes=bytes
+notFound=not found.
+lmPattern=EEE, dd MMM yyyy HH:mm:ss zzz
+rangePattern=[^\\d-,]
+welcomeFile=index.html
+stoppingServer=stopping server.
+serverStopped=Server stopped.
+mediazEnd=Mediazentrale beendet.
+
+# Mitteilungen
+msgServerStart=Server starting on port {0}
+msgParamFehlt=Der Parameter {0} muss angegeben werden.
--
Gitblit v1.9.3