summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2019-01-31 16:22:50 +0100
committerJonathan Bauer2019-01-31 16:22:50 +0100
commite025340c3e3056ca050b52ad05271a43846a2642 (patch)
tree733ca7ea725a84f5870827f7e89e3f9c08b59680
parent[*] Fix accidental use of Boolean.getBoolean. (-> .parseBoolean()) (diff)
downloadtutor-module-e025340c3e3056ca050b52ad05271a43846a2642.tar.gz
tutor-module-e025340c3e3056ca050b52ad05271a43846a2642.tar.xz
tutor-module-e025340c3e3056ca050b52ad05271a43846a2642.zip
[client] introduce branding, --dump and --pack
Application name, service name, master server endpoints, documentation websites needed to be configurable to allow for an easy rebranding of the suite. Two new options allow this: use '--dump <folder>' to dump the jar's configurable files into that folder. Aside from text templates in 'txt', logos and icons in 'img', the 'branding.properties' file contains: * masterserver.address : self-explanatory * application.name : name to be shown on graphical elements like the main window * service.name : name to be used as a prefix for formulation like 'bwLehrpool-Team' or 'bwLehrpool-System' etc * service.faq.website : link to FAQ website * service.email : support contact address Once edited, the whole folder can be integrated into the Suite with '--pack <folder> <new_jar>'. The path to the new jar is then the rebranded version of the suite.
-rw-r--r--dozentenmodul/output.xml41
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/App.java44
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/Branding.java182
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/Config.java41
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/authentication/ShibbolethEcp.java9
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java9
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java2
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java3
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/gui/window/DisclaimerWindow.java46
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java5
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/gui/window/PrivacyNoticeWindow.java98
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java3
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java7
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtualizerNoticeWindowLayout.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java6
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/DesktopEnvironment.java9
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ResourceLoader.java1
-rw-r--r--dozentenmodul/src/main/properties/branding.properties5
-rw-r--r--dozentenmodul/src/main/resources/img/service-logo.pngbin0 -> 22802 bytes
-rw-r--r--dozentenmodul/src/main/resources/txt/disclaimer_notice14
-rw-r--r--dozentenmodul/src/main/resources/txt/privacy_notice32
28 files changed, 424 insertions, 164 deletions
diff --git a/dozentenmodul/output.xml b/dozentenmodul/output.xml
new file mode 100644
index 00000000..66cb5848
--- /dev/null
+++ b/dozentenmodul/output.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><VirtualBox xmlns="http://www.virtualbox.org/" version="1.15-linux">
+ <Machine OSType="Windows10_64" lastStateChange="2017-10-24T11:09:54Z" name="winzer" snapshotFolder="Snapshots" uuid="{1e2b82a9-37be-43a8-82e0-0eba49f48cf4}">
+ <MediaRegistry>
+ <HardDisks>
+ <HardDisk format="VDI" location="winzer.vdi" type="Normal" uuid="{d75f26fd-58f1-4ed1-8119-004b3b10f3c0}"/>
+ </HardDisks>
+ </MediaRegistry>
+ <Hardware>
+ <CPU count="1">
+ <PAE enabled="false"/>
+ <LongMode enabled="true"/>
+ <HardwareVirtExLargePages enabled="false"/>
+ </CPU>
+ <Memory RAMSize="6844"/>
+ <HID Pointing="USBTablet"/>
+ <Paravirt provider="Default"/>
+ <Display VRAMSize="128"/>
+ <RemoteDisplay enabled="false"/>
+ <BIOS>
+ <IOAPIC enabled="true"/>
+ </BIOS>
+ <USB>
+ <Controllers>
+ <Controller name="OHCI" type="OHCI"/>
+ </Controllers>
+ </USB>
+ <Network>
+ <Adapter MACAddress="08002720CDD4" cable="true" enabled="true" slot="0" type="82540EM">
+ <NAT/></Adapter>
+ </Network>
+ <AudioAdapter controller="ABC" driver="Pulse" enabled="true"/>
+ </Hardware>
+ <StorageControllers>
+ <StorageController Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3" PortCount="2" name="SATA" type="AHCI" useHostIOCache="false">
+ <AttachedDevice device="0" hotpluggable="false" port="0" type="HardDisk">
+ <Image uuid="{d75f26fd-58f1-4ed1-8119-004b3b10f3c0}"/>
+ </AttachedDevice>
+ </StorageController>
+ </StorageControllers>
+ </Machine>
+</VirtualBox> \ No newline at end of file
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java
index ee3f6e7d..33b6526b 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java
@@ -40,8 +40,6 @@ public class App {
// Logger
private final static Logger LOGGER = Logger.getLogger(App.class);
- private static final String MASTER_SERVER_ADDRESS = "bwlp-masterserver.ruf.uni-freiburg.de";
-
public static final int THRIFT_PORT = 9090;
public static final int THRIFT_SSL_PORT = THRIFT_PORT + 1;
@@ -57,7 +55,7 @@ public class App {
private static void setupLogger() {
// path to the log file
- final String logFilePath = Config.getPath() + File.separator + "bwSuite.log";
+ final String logFilePath = Config.getPath() + File.separator + Branding.getServiceName() + ".log";
// check if we had an old log file
final File logFile = new File(logFilePath);
@@ -122,22 +120,34 @@ public class App {
};
BasicConfigurator.configure(ap);
- LOGGER.info("Starting logging to: " + logFilePath);
- LOGGER.info("bwLehrpool-Suite Version: " + ClientVersion.getLocalRevision());
- LOGGER.info(" " + FormatHelper.longDate(ClientVersion.getLocalRevTimestamp()));
- LOGGER.info("os.name: " + System.getProperty("os.name"));
- LOGGER.info("java.specification.vendor: " + System.getProperty("java.specification.vendor"));
- LOGGER.info("java.specification.name: " + System.getProperty("java.specification.name"));
- LOGGER.info("java.specification.version: " + System.getProperty("java.specification.version"));
- LOGGER.info("java.version: " + System.getProperty("java.version"));
- LOGGER.info("java.vm.version: " + System.getProperty("java.vm.version"));
- LOGGER.info("java.runtime.version: " + System.getProperty("java.runtime.version"));
+ LOGGER.info("Starting logging to: " + logFilePath);
+ LOGGER.info(Branding.getApplicationName() + " Version: " + ClientVersion.getLocalRevision());
+ LOGGER.info(" " + FormatHelper.longDate(ClientVersion.getLocalRevTimestamp()));
+ LOGGER.info("os.name: " + System.getProperty("os.name"));
+ LOGGER.info("java.specification.vendor: " + System.getProperty("java.specification.vendor"));
+ LOGGER.info("java.specification.name: " + System.getProperty("java.specification.name"));
+ LOGGER.info("java.specification.version: " + System.getProperty("java.specification.version"));
+ LOGGER.info("java.version: " + System.getProperty("java.version"));
+ LOGGER.info("java.vm.version: " + System.getProperty("java.vm.version"));
+ LOGGER.info("java.runtime.version: " + System.getProperty("java.runtime.version"));
}
public static void main(final String[] args) throws InvocationTargetException, InterruptedException {
- if (args.length >= 2 && args[0].equals("--json")) {
- writeJsonUpdateFile(args[1]);
- return;
+ if (args.length >= 2) {
+ if (args[0].equals("--json")) {
+ writeJsonUpdateFile(args[1]);
+ return;
+ }
+ if (args[0].equals("--dump")) {
+ Branding.dump(args[1]);
+ return;
+ }
+ }
+ if (args.length >= 3) {
+ if (args[0].equals("--pack")) {
+ Branding.pack(args[1], args[2]);
+ return;
+ }
}
try {
Config.init();
@@ -185,7 +195,7 @@ public class App {
port = Util.parseInt(args[1], -1);
useSsl = Boolean.parseBoolean(args[2]);
} else {
- host = MASTER_SERVER_ADDRESS;
+ host = Branding.getMasterServerAddress();
port = THRIFT_SSL_PORT;
useSsl = true;
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/Branding.java b/dozentenmodul/src/main/java/org/openslx/dozmod/Branding.java
new file mode 100644
index 00000000..2eda03e1
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/Branding.java
@@ -0,0 +1,182 @@
+package org.openslx.dozmod;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.security.CodeSource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+
+public final class Branding {
+
+ private final static Logger LOGGER = Logger.getLogger(Branding.class);
+
+ private final static String PROPERTIES_FILE = "branding.properties";
+ private final static Properties PROPERTIES = new Properties();
+ private final static List<Path> RESOURCES = new ArrayList<Path>();
+
+ static {
+ try (InputStream in = App.class.getClassLoader().getResourceAsStream(PROPERTIES_FILE)) {
+ PROPERTIES.load(in);
+ } catch (Exception e) {
+ LOGGER.error("Failed to read '" + PROPERTIES_FILE + "': ", e);
+ }
+ RESOURCES.add(Paths.get(PROPERTIES_FILE));
+ RESOURCES.add(Paths.get("img"));
+ RESOURCES.add(Paths.get("txt"));
+ }
+
+ public final static String getMasterServerAddress() {
+ return PROPERTIES.getProperty("masterserver.address", "bwlp-masterserver.ruf.uni-freiburg.de");
+ }
+
+ public final static String getApplicationName() {
+ return PROPERTIES.getProperty("application.name", "bwLehrpool-Suite");
+ }
+
+ public final static String getServiceFAQWebsite() {
+ return PROPERTIES.getProperty("service.faq.website", "https://www.bwLehrpool.de");
+ }
+
+ public final static String getServiceName() {
+ return PROPERTIES.getProperty("service.name", "bwLehrpool");
+ }
+
+ public final static String getServiceEmail() {
+ return PROPERTIES.getProperty("service.email", "bwlehrpool@hs-offenburg.de");
+ }
+
+ public static void dump(final String localDir) {
+ if (localDir == null || localDir.isEmpty())
+ return;
+ final Path dumpDir = Paths.get(localDir);
+ if (!Files.isDirectory(dumpDir)) {
+ try {
+ Files.createDirectories(dumpDir);
+ } catch (IOException e) {
+ LOGGER.error("Failed to create missing dump directory: ", e);
+ return;
+ }
+ }
+ final URI jarUri = getRunningJarURI();
+ if (jarUri == null || jarUri.getPath() == null || jarUri.getPath().isEmpty())
+ return;
+ copyBranding(jarUri, dumpDir.toString(), false);
+
+ }
+
+ public static void pack(final String localDir, final String outputJar) {
+ final URI jarUri = getRunningJarURI();
+ if (jarUri == null || jarUri.getPath() == null || jarUri.getPath().isEmpty())
+ return;
+
+ final File brandingDir = new File(localDir);
+ if (!brandingDir.isDirectory()) {
+ LOGGER.error("Given path is not a directory: " + localDir);
+ return;
+ }
+ final Path newJarPath = Paths.get(outputJar);
+ try {
+ Files.copy(Paths.get(jarUri), newJarPath);
+ } catch (Exception e) {
+ LOGGER.error("Failed to copy jar file at location '" + jarUri.getPath() + "' to '" + newJarPath
+ + "': ", e);
+ try {
+ Files.delete(newJarPath);
+ } catch (IOException e1) {
+ LOGGER.error("Failed to cleanup '" + newJarPath + ": ", e1);
+ }
+ }
+ // copied jar successfully, now insert the contents from the directory
+ copyBranding(newJarPath.toUri(), localDir, true);
+ }
+
+ private static void copyBranding(final URI jarUri, final String localDir, final boolean pack) {
+ try (FileSystem fs = FileSystems.newFileSystem(URI.create("jar:" + jarUri),
+ new HashMap<String, String>() {
+ {
+ put("create", "true");
+ put("encoding", "UTF-8");
+ }
+ })) {
+ // hacky default using the fs' separator as root directory
+ Path rootPathJar = fs.getPath(fs.getSeparator());
+ Iterator<Path> it = fs.getRootDirectories().iterator();
+ if (it.hasNext()) {
+ rootPathJar = it.next();
+ if (it.hasNext()) {
+ // there should only be one ... TODO handle multiples?
+ LOGGER.debug("Multiple root directories within the JAR found? Trying with first one '"
+ + rootPathJar + "'...");
+ }
+ }
+ Path rootPathLocal = Paths.get(localDir);
+ for (Path res : RESOURCES) {
+ final Path src, dst;
+ if (pack) {
+ src = rootPathLocal.resolve(res);
+ dst = rootPathJar.resolve(rootPathLocal.relativize(res).toString());
+ } else {
+ src = rootPathJar.resolve(res.toString());
+ dst = rootPathLocal.resolve(res);
+ }
+ if (!Files.isReadable(src)) {
+ LOGGER.error("Failed to find or read '" + src + "'.");
+ return;
+ }
+
+ if (Files.isDirectory(src)) {
+ Files.walkFileTree(src, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
+ throws IOException {
+ Path cur = dst.resolve(src.relativize(file).toString());
+ if (!Files.isDirectory(cur.getParent())) {
+ Files.createDirectory(cur.getParent());
+ }
+ Files.copy(file, cur, StandardCopyOption.REPLACE_EXISTING);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ } else if (Files.isRegularFile(src)) {
+ Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
+ } else {
+ LOGGER.error("Unknown file type for '" + src + "'.");
+ }
+ }
+ } catch (Exception e) {
+ LOGGER.error("Failed to dump branding resources from JAR: ", e);
+ return;
+ }
+ }
+
+ private static URI getRunningJarURI() {
+ CodeSource cs = App.class.getProtectionDomain().getCodeSource();
+ if (cs == null) {
+ LOGGER.error("Failed to get code source of this class.");
+ return null;
+ }
+ try {
+ return cs.getLocation().toURI();
+ } catch (URISyntaxException e) {
+ LOGGER.error("Failed to get location of this JAR.");
+ }
+ return null;
+ }
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java b/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java
index b1e771b4..9c8b0b9e 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/Config.java
@@ -9,8 +9,6 @@ import java.io.InputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
-import org.openslx.dozmod.gui.window.DisclaimerWindow;
-import org.openslx.dozmod.gui.window.PrivacyNoticeWindow;
import org.openslx.dozmod.util.OsHelper;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
@@ -93,7 +91,7 @@ public class Config {
}
// Check if we got a path
- configFile = new File(configPath + File.separatorChar + "bwSuite" + File.separatorChar
+ configFile = new File(configPath + File.separatorChar + Branding.getServiceName() + File.separatorChar
+ "config.properties").getAbsoluteFile();
// Check if the directory exists.
@@ -128,7 +126,8 @@ public class Config {
private static void forceSaveInternal() throws FileNotFoundException, IOException {
synchronized (prop) {
- prop.store(new FileOutputStream(configFile), "bwLehrpool Dozentenmodul Client Config");
+ prop.store(new FileOutputStream(configFile),
+ Branding.getServiceName() + " Dozentenmodul Client Config");
}
}
@@ -192,15 +191,8 @@ public class Config {
*
* @return version of the disclaimer the user accepted, 0 otherwise.
*/
- public static int getDisclaimerAgreement() {
- int savedVersion = getInteger("disclaimer.accepted_version", 0);
- // check if we have a saved version and if it is larger than
- // the current version. If it is, reset it to 0.
- if (savedVersion != 0 && Math.abs(savedVersion - DisclaimerWindow.DISCLAIMER_VERSION) != 0) {
- setDisclaimerAgreement(0);
- return 0;
- }
- return savedVersion;
+ public static String getDisclaimerAgreement() {
+ return getString("disclaimer.accepted_version", "");
}
/**
@@ -208,8 +200,8 @@ public class Config {
*
* @return true if it succeeded, false otherwise
*/
- public static void setDisclaimerAgreement(int value) {
- setInteger("disclaimer.accepted_version", value);
+ public static void setDisclaimerAgreement(String value) {
+ setString("disclaimer.accepted_version", value);
}
/**
@@ -217,15 +209,8 @@ public class Config {
*
* @return version of the privacy notice the user accepted, 0 otherwise.
*/
- public static int getPrivacyAgreement() {
- int savedVersion = getInteger("privacy.accepted_version", 0);
- // check if we have a saved version and if it is larger than
- // the current version. If it is, reset it to 0.
- if (savedVersion != 0 && Math.abs(savedVersion - PrivacyNoticeWindow.PRIVACY_VERSION) != 0) {
- setPrivacyAgreement(0);
- return 0;
- }
- return savedVersion;
+ public static String getPrivacyAgreement() {
+ return getString("privacy.accepted_version", "");
}
/**
@@ -233,8 +218,8 @@ public class Config {
*
* @return true if it succeeded, false otherwise
*/
- public static void setPrivacyAgreement(int value) {
- setInteger("privacy.accepted_version", value);
+ public static void setPrivacyAgreement(String value) {
+ setString("privacy.accepted_version", value);
}
/**
@@ -367,8 +352,8 @@ public class Config {
* @return Saved session, or <code>null</code> if no session was saved
*/
public static SavedSession getSavedSession() {
- SavedSession session = new SavedSession(getString("session.address", ""), getString("session.token",
- ""), getString("session.mastertoken", ""));
+ SavedSession session = new SavedSession(getString("session.address", ""),
+ getString("session.token", ""), getString("session.mastertoken", ""));
if (session.token.isEmpty() || session.address.isEmpty() || session.masterToken.isEmpty())
return null;
return session;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/authentication/ShibbolethEcp.java b/dozentenmodul/src/main/java/org/openslx/dozmod/authentication/ShibbolethEcp.java
index ce8bbe95..071b92ad 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/authentication/ShibbolethEcp.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/authentication/ShibbolethEcp.java
@@ -13,6 +13,7 @@ import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.AuthorizationError;
import org.openslx.bwlp.thrift.iface.TAuthorizationException;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.util.ProxyConfigurator;
import com.google.gson.Gson;
@@ -39,7 +40,7 @@ public class ShibbolethEcp {
*/
private static ServiceProviderResponse lastResponse = null;
/**
- * URL for bwLehrpool registration
+ * URL for service registration
*/
private static URL registrationUrl = null;
@@ -51,7 +52,7 @@ public class ShibbolethEcp {
NO_ERROR(0,
"Authentication against the identity provider and request of the service provider resource worked."),
IDENTITY_PROVIDER_ERROR(1, "Authentication against the identity provider failed."),
- UNREGISTERED_ERROR(2, "User not registered to use bwLehrpool."),
+ UNREGISTERED_ERROR(2, "User not registered to use " + Branding.getServiceName() + "."),
SERVICE_PROVIDER_ERROR(3, "Invalid resource of the service provider."),
INVALID_URL_ERROR(4, "Invalid URL received from master server."),
GENERIC_ERROR(5, "Internal error.");
@@ -80,7 +81,7 @@ public class ShibbolethEcp {
static {
URI tmp;
try {
- tmp = new URI("https://bwlp-masterserver.ruf.uni-freiburg.de/webif/shib/api.php");
+ tmp = new URI("https://" + Branding.getMasterServerAddress() + "/webif/shib/api.php");
} catch (URISyntaxException e) {
// should never happen!
LOGGER.error("Bad URI syntax of the service provider, see trace: ", e);
@@ -171,7 +172,7 @@ public class ShibbolethEcp {
}
if (lastResponse.status.equals("anonymous")) {
LOGGER.error("IdP did not forward user account information to SP. Contact developer.");
- lastResponse.error = "Ihr Identity-Provider hat dem bwLehrpool-System Ihre E-Mail oder Ihren Namen nicht mitgeteilt";
+ lastResponse.error = "Ihr Identity-Provider hat dem " + Branding.getServiceName() + "-System Ihre E-Mail oder Ihren Namen nicht mitgeteilt";
return ReturnCode.GENERIC_ERROR;
}
if (lastResponse.status.equals("ok")) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
index 051def34..11b02f58 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
@@ -32,6 +32,7 @@ import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.SatelliteStatus;
import org.openslx.bwlp.thrift.iface.TransferState;
import org.openslx.dozmod.App;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.filetransfer.DownloadTask;
import org.openslx.dozmod.filetransfer.PassiveTransfer;
@@ -129,7 +130,7 @@ public abstract class MainWindow {
mainWindow = Gui.syncExec(new GuiCallable<JFrame>() {
@Override
public JFrame run() {
- return new JFrame("bwLehrpool-Suite");
+ return new JFrame(Branding.getApplicationName());
}
});
mainContainer = Gui.syncExec(new GuiCallable<JPanel>() {
@@ -166,7 +167,7 @@ public abstract class MainWindow {
});
// Set up thrift error message displaying
- ThriftManager.setMasterErrorCallback(new GuiErrorCallback(mainWindow, "dem bwLehrpool-Zentralserver"));
+ ThriftManager.setMasterErrorCallback(new GuiErrorCallback(mainWindow, "dem " + Branding.getServiceName() + "-Zentralserver"));
ThriftManager.setSatelliteErrorCallback(new GuiErrorCallback(mainWindow, "dem Satellitenserver"));
// Same for config errors
@@ -287,7 +288,7 @@ public abstract class MainWindow {
// Show main menu by default
showPage(MainMenuWindow.class);
createMenu();
- mainWindow.setTitle("bwLehrpool-Suite - " + Session.getFirstName() + " " + Session.getLastName() + " ["
+ mainWindow.setTitle(Branding.getApplicationName() + " - " + Session.getFirstName() + " " + Session.getLastName() + " ["
+ Session.getSatelliteAddress() + "]");
if (DisclaimerWindow.shouldBeShown()) {
DisclaimerWindow.open(mainWindow);
@@ -433,7 +434,7 @@ public abstract class MainWindow {
JMenuItem disclaimerItem = new JMenuItem("Nutzungsvereinbarung");
JMenuItem privacyNoticeItem = new JMenuItem("Datenschutzerklärung");
JMenuItem virtualizerNoticeItem = new JMenuItem("Virtualisierer");
- JMenuItem wikiItem = new JMenuItem("www.bwlehrpool.de");
+ JMenuItem wikiItem = new JMenuItem(Branding.getServiceFAQWebsite());
JMenuItem updateCheckItem = new JMenuItem("Software-Aktualisierung");
cascadeAboutMenu.add(disclaimerItem);
cascadeAboutMenu.add(privacyNoticeItem);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java
index ec0c9009..37abf135 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java
@@ -151,7 +151,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout {
input.auth = inputNetShareAuth;
switch (inputNetShareAuth) {
case LOGIN_USER:
- // this uses the bwLehrpool client's logged in user
+ // this uses the service client's logged in user
// we don't need to have anything
break;
case OTHER_USER:
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java
index f97f0330..d24378ab 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/BwIdmLinkWindow.java
@@ -17,6 +17,7 @@ import javax.swing.JPanel;
import javax.swing.JTextArea;
import org.apache.log4j.Logger;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.authentication.ShibbolethEcp;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.GridManager;
@@ -30,7 +31,7 @@ import org.openslx.dozmod.util.DesktopEnvironment;
public class BwIdmLinkWindow extends JDialog implements UiFeedback {
private static final String title = "Registrierung erforderlich";
private static final String infoText = "<html><body style='width:100%'>"
- + "Sie sind nicht bei bwLehrpool registriert. "
+ + "Sie sind nicht bei " + Branding.getServiceName() + " registriert. "
+ "Bitte rufen Sie die angegebene Seite auf um sich zu registrieren und versuchen Sie es erneut."
+ "</body></html>";
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/DisclaimerWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/DisclaimerWindow.java
index cc763152..5289841e 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/DisclaimerWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/DisclaimerWindow.java
@@ -3,9 +3,19 @@ package org.openslx.dozmod.gui.window;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import javax.xml.bind.DatatypeConverter;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.gui.helper.UiFeedback;
+import org.openslx.dozmod.util.ResourceLoader;
/**
* Window for showing the disclaimer.
@@ -13,40 +23,46 @@ import org.openslx.dozmod.gui.helper.UiFeedback;
@SuppressWarnings("serial")
public class DisclaimerWindow extends GenericNoticeWindow implements UiFeedback {
- /**
- * Use a version number for the disclaimer. Whenever we add/change
- * something, this will be increased
- */
- public static final int DISCLAIMER_VERSION = 1;
- protected String notice = "bwLehrpool-Suite (Dozentenmodul)\nCopyright © 2016 Universität Freiburg\n\n"
- + "Die Verwendung dieses Programms ist nur in Abstimmung mit der jeweils beteiligten Hochschulinstitution zulässig und unterliegt deren Bestimmungen und Einschränkungen. Im Rahmen des bwLehrpool-Systems erstellte und bereitgestellte Virtuelle Maschinen, die unfrei lizensierte Software enthalten, dürfen nur mit Erlaubnis bzw. Lizenzierung der betreffenden Rechteinhaber eingesetzt und weitergegeben werden.\n\n"
- + "Insbesondere wird ausdrücklich darauf hingewiesen, dass die Verantwortung in Bezug auf eventuell notwendige Lizenzierung sämtlicher Software innerhalb einer Virtuellen Maschine, regelmäßiger Aktualisierung und rechtzeitigen Einspielens von Sicherheitsupdates ausschließlich beim erstellenden Personal liegt.\n\n\n"
- + "Lizenzierung des Programms\n\n"
- + "Dieses Programm ist freie Software. Es kann unter den Bedingungen der GNU General Public License (GPL) Version 2 verändert und weitergegeben werden. Der vollständige Text der GNU General Public Licence der Version 2 (GPL2) kann hier http://www.gnu.org/licenses/old-licenses/gpl-2.0.html eingesehen werden.\n\n"
- + "Es wird, soweit gesetzlich zulässig, keinerlei Gewährleistung für dieses Programm, weder ausdrücklich noch implizit, geleistet. Der Urheberrechtsinhaber stellt das Programm „wie es ist“ zur Verfügung. Es werden einschließlich Marktreife oder Verwendbarkeit für einen bestimmten Zweck keinerlei Eigenschaften zugesichert."
- + "Das volle Risiko bezüglich Qualität, Leistungsfähigkeit oder jeglicher allgemeiner oder spezieller Schäden, Schäden durch Nebenwirkungen oder Folgeschäden, die aus Benutzung oder Unbenutzbarkeit des Programms folgen (einschließlich Datenverlusten oder fehlerhafter Verarbeitung von Daten)liegt auf Seiten des Anwenders / der Anwenderin.\n\n";
+ private final static Logger LOGGER = Logger.getLogger(PrivacyNoticeWindow.class);
final DisclaimerWindow me = this;
+ protected String DISCLAIMER_NOTICE;
+ private static String DISCLAIMER_NOTICE_MD5 = null;
+ private static String DISCLAIMER_NOTICE_CONTENT = null;
+
+ static {
+ try (InputStream noticeStream = ResourceLoader.getStream("/txt/disclaimer_notice")) {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] content = IOUtils.toByteArray(noticeStream);
+ md.update(content);
+ byte[] md5 = md.digest();
+ DISCLAIMER_NOTICE_CONTENT = new String(content, StandardCharsets.UTF_8);
+ DISCLAIMER_NOTICE_MD5 = DatatypeConverter.printHexBinary(md5);
+ } catch (IOException | NoSuchAlgorithmException e) {
+ LOGGER.error("Failed to get hash of disclaimer notice: ", e);
+ }
+ }
+
public DisclaimerWindow(Frame modalParent) {
super(modalParent, shouldBeShown());
// Set the actual text
- setNoticeText(notice);
+ setNoticeText(DISCLAIMER_NOTICE_CONTENT);
// function for continue button
btnContinue.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// save the agreement to config
- Config.setDisclaimerAgreement(DISCLAIMER_VERSION);
+ Config.setDisclaimerAgreement(DISCLAIMER_NOTICE_MD5);
me.dispose();
}
});
}
public static boolean shouldBeShown() {
- return Config.getDisclaimerAgreement() < DISCLAIMER_VERSION;
+ return !Config.getDisclaimerAgreement().equals(DISCLAIMER_NOTICE_MD5);
}
public static void open(Frame modalParent) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
index 1dacf8df..396e58a6 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
@@ -40,6 +40,7 @@ import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.bwlp.thrift.iface.Virtualizer;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.changemonitor.AbstractControlWrapper;
@@ -536,8 +537,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
// Inform user
Gui.showMessageBox(ImageDetailsWindow.this,
"Die Übertragung läuft direkt zwischen Satellitenserver und"
- + " dem Zentral-Server in Freiburg.\n"
- + "Wenn Sie die bwLehrpool-Suite schließen, wird der Transfer trotzdem"
+ + " dem " + Branding.getServiceName() + " Zentral-Server.\n"
+ + "Wenn Sie die " + Branding.getApplicationName() + " schließen, wird der Transfer trotzdem"
+ "weiterlaufen.",
MessageType.INFO, null, null);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java
index c81af1a6..b02b5cf7 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImagePublishedWindow.java
@@ -27,6 +27,7 @@ import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.Organization;
import org.openslx.bwlp.thrift.iface.UserInfo;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.control.table.ListTable.ListModel;
@@ -118,8 +119,8 @@ public class ImagePublishedWindow extends ImagePublishedWindowLayout implements
MainWindow.addPassiveTransfer(transferToken, item.imageName, false);
Gui.showMessageBox(ImagePublishedWindow.this,
"Die Übertragung läuft direkt zwischen Satellitenserver und"
- + " dem Zentral-Server in Freiburg.\n"
- + "Wenn Sie die bwLehrpool-Suite schließen, wird der Transfer trotzdem"
+ + " dem " + Branding.getServiceName() + " Zentral-Server.\n"
+ + "Wenn Sie die " + Branding.getApplicationName() + " schließen, wird der Transfer trotzdem"
+ "weiterlaufen.",
MessageType.INFO, null, null);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/PrivacyNoticeWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/PrivacyNoticeWindow.java
index 9e6ffd7d..eed17d34 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/PrivacyNoticeWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/PrivacyNoticeWindow.java
@@ -3,9 +3,19 @@ package org.openslx.dozmod.gui.window;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import javax.xml.bind.DatatypeConverter;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.gui.helper.UiFeedback;
+import org.openslx.dozmod.util.ResourceLoader;
/**
* Window for showing the privacy notice.
@@ -13,93 +23,45 @@ import org.openslx.dozmod.gui.helper.UiFeedback;
@SuppressWarnings("serial")
public class PrivacyNoticeWindow extends GenericNoticeWindow implements UiFeedback {
- /**
- * Use a version number for the privacy notice. Whenever we add/change
- * something, this will be increased
- */
- public static final int PRIVACY_VERSION = 1;
- protected String notice = "Datenschutz \n"
- + "-----------------------------------------------------\n"
- + "Wenn Sie sich an der bwLehrpool-Suite anmelden bzw. diese nutzen, werden "
- + "verschiedene Informationen über Sie erfasst und gespeichert. Die "
- + "nachfolgenden Punkte sollen Ihnen helfen zu verstehen, welche Daten zu "
- + "welchem Zweck verwendet werden und wohin Sie sich bei Fragen wenden "
- + "können.\n\n"
- + "Was wird gesammelt?\n"
- + "-----------------------------------------------------\n"
- + "Beim Login werden Name, E-Mail, Hochschule sowie Zeitpunkt des letzten "
- + "Logins gespeichert und einer eindeutigen Nutzer-ID zugeordnet. Dies "
- + "umfasst auch Informationen darüber, wann Sie sich für die Nutzung "
- + "erstmalig registriert haben. Außerdem werden Informationen über einige "
- + "Ihrer Aktivitäten innerhalb der bwLehrpool-Suite erfasst "
- + "(beispielsweise wenn Sie eine VM hochladen oder löschen).\n\n"
- + "Wozu werden diese Daten gesammelt?\n"
- + "-----------------------------------------------------\n"
- + "Die Informationen sind notwendig, um VMs und Veranstaltungen Ihnen bzw. "
- + "Ihren Kollegen eindeutig zuordnen und ggf. bei rechtlichen Verstößen "
- + "eingreifen zu können.\n\n"
- + "Wenn Sie VMs herunterladen (vom Satellitenserver oder öffentlichen "
- + "Speicher), möchten Sie sicherlich wissen, von wem eine VM erstellt "
- + "wurde und wen Sie ggf. kontaktieren können, falls die VM nicht wie "
- + "erwartet funktioniert. \n\n"
- + "Außerdem sind Nutzungsdaten für Diagnosezwecke wichtig, damit ein "
- + "Administrator Ihnen helfen kann, falls Sie z.B. Ihre VM nicht mehr "
- + "finden können und vermuten, dass diese von jemandem fälschlicherweise "
- + "gelöscht wurde.\n\n"
- + "Mit wem werden diese Daten geteilt?\n"
- + "-----------------------------------------------------\n"
- + "Die erhobenen Daten werden ausschließlich auf dem Satellitenserver "
- + "gespeichert, mit dem Sie sich während des Logins verbunden haben. "
- + "Dieser steht in der Regel unter der Kontrolle des Rechenzentrums Ihrer "
- + "Hochschule.\n\n"
- + "Bei der erstmaligen Nutzung der Suite wurden Sie aufgefordert, sich "
- + "über ein Webportal zu registrieren. Dies ist notwendig, um Ihre "
- + "Zustimmung zur Speicherung und Verarbeitung Ihrer Daten zum Zweck des "
- + "hochschulübergreifenden VM-Austauschs einzuholen. Die dort angegebenen "
- + "Informationen stehen unter der Verwaltung des bwLehrpool-Teams in "
- + "Freiburg.\n\n"
- + "Wenn Sie eine VM auf den öffentlichen Speicher hochladen, wird die VM "
- + "sowie damit verknüpfte Metadaten (Name des Besitzers/Erstellers, "
- + "Zeitpunkt der Erstellung und letzten Änderung) auf den zentralen Server "
- + "des bwLehrpool-Teams in Freiburg übertragen. Auch Nutzer anderer an "
- + "bwLehrpool teilnehmenden Hochschulen können nun Ihre VM sowie die damit "
- + "verbundenen (Kontakt-)Daten einsehen.\n\n"
- + "Wie lange werden Daten gespeichert?\n"
- + "-----------------------------------------------------\n"
- + "Informationen werden gespeichert, bis sie nicht mehr benötigt werden, "
- + "um die notwendige Funktionalität bereitzustellen. Dies hängt auch von "
- + "Faktoren wie der Art der Informationen, warum sie gesammelt und "
- + "verarbeitet werden sowie den relevanten rechtlichen oder betrieblichen "
- + "Speicherbedürfnissen ab.\n\n"
- + "Wohin kann ich mich bei Fragen wenden?\n"
- + "-----------------------------------------------------\n"
- + "Kontaktieren Sie als erstes Ihr Rechenzentrum. In der Regel wird dort "
- + "der Satellitenserver, mit dem sich Ihre bwLehrpool-Suite standardmäßig "
- + "verbindet, betrieben. Falls Sie dort keinen Ansprechpartner finden, "
- + "können Sie sich an das Entwickler-Team von bwLehrpool "
- + "(bwlehrpool@hs-offenburg.de) wenden. \n\n";
+ private final static Logger LOGGER = Logger.getLogger(PrivacyNoticeWindow.class);
final PrivacyNoticeWindow me = this;
+ private static String PRIVACY_NOTICE_MD5 = null;
+ private static String PRIVACY_NOTICE_CONTENT = null;
+
+ static {
+ try (InputStream noticeStream = ResourceLoader.getStream("/txt/privacy_notice")) {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] content = IOUtils.toByteArray(noticeStream);
+ md.update(content);
+ byte[] md5 = md.digest();
+ PRIVACY_NOTICE_CONTENT = new String(content, StandardCharsets.UTF_8);
+ PRIVACY_NOTICE_MD5 = DatatypeConverter.printHexBinary(md5);
+ } catch (IOException | NoSuchAlgorithmException e) {
+ LOGGER.error("Failed to get hash of privacy_notice: ", e);
+ }
+ }
+
public PrivacyNoticeWindow(Frame modalParent) {
super(modalParent, shouldBeShown());
// Set the actual text
- setNoticeText(notice);
+ setNoticeText(PRIVACY_NOTICE_CONTENT);
// function for continue button
btnContinue.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// save the agreement to config
- Config.setPrivacyAgreement(PRIVACY_VERSION);
+ Config.setPrivacyAgreement(PRIVACY_NOTICE_MD5);
me.dispose();
}
});
}
public static boolean shouldBeShown() {
- return Config.getPrivacyAgreement() < PRIVACY_VERSION;
+ return !Config.getPrivacyAgreement().equals(PRIVACY_NOTICE_MD5);
}
public static void open(Frame modalParent) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java
index f2f8bfbe..bf37dc42 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ConfigWindowLayout.java
@@ -18,6 +18,7 @@ import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.QLabel;
@@ -27,7 +28,7 @@ import org.openslx.dozmod.gui.helper.GridManager;
@SuppressWarnings("serial")
public class ConfigWindowLayout extends JDialog {
- private static String title = "bwLehrpool Suite - Konfiguration";
+ private static String title = Branding.getApplicationName() + " - Konfiguration";
protected final JRadioButton btnProxyNone;
protected final JRadioButton btnProxyAuto;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java
index 022950d1..bd28189a 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/GenericNoticeWindowLayout.java
@@ -13,6 +13,7 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.gui.helper.GridManager;
@@ -26,7 +27,7 @@ public abstract class GenericNoticeWindowLayout extends JDialog {
protected String checkboxText = "Ja, ich akzeptiere die Vereinbarung. Benachrichtigung nicht mehr anzeigen.";
- private static String title = "bwLehrpool-Suite";
+ private static String title = Branding.getApplicationName();
private static String noticeLabel = "Hinweis";
private static String continueButtonLabel = "Weiter";
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
index 4eae542c..0dc3cee2 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
@@ -26,6 +26,7 @@ import javax.swing.text.DateFormatter;
import org.jdatepicker.JDatePicker;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.configurator.LdapFilterConfigurator;
import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator;
@@ -317,8 +318,8 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
grdRestrictions.add(
new WordWrapLabel(
"Markieren Sie diese Veranstaltung als E-Prüfung.\n"
- + "Die Veranstaltung wird nur dann startbar sein, wenn bwLehrpool in den"
- + " Prüfungsmodus versetzt wird. Kontaktieren Sie dazu Ihren lokalen bwLehrpool-Administrator.",
+ + "Die Veranstaltung wird nur dann startbar sein, wenn " + Branding.getServiceName() + " in den"
+ + " Prüfungsmodus versetzt wird. Kontaktieren Sie dazu Ihren lokalen " + Branding.getServiceName() + "-Administrator.",
false, true), 2)
.fill(true, false)
.expand(true, false)
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
index 6705ac20..18e7133e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
@@ -19,6 +19,7 @@ import javax.swing.border.TitledBorder;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.Organization;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.ComboBox;
import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
@@ -47,7 +48,7 @@ public abstract class LoginWindowLayout extends JDialog {
// authentication method to use for login attempts
protected LOGIN_TYPE loginType = null;
- private static final String TITLE = "bwLehrpool-Suite - Login";
+ private static final String TITLE = Branding.getApplicationName() + " - Login";
private static final String AUTH_TYPE_LABEL = "Authentifizierungsart";
private static final String LOGIN_FORM_LABEL = "Zugangsdaten";
private static final String ADVANCED_LABEL = "Erweitert";
@@ -176,12 +177,12 @@ public abstract class LoginWindowLayout extends JDialog {
}
/**
- * @return ImageIcon of the standard bwLehrpool logo scaled to the login
+ * @return ImageIcon of the standard service logo scaled to the login
* window size
*/
private ImageIcon getScaledLogo() {
try {
- ImageIcon image = ResourceLoader.getIcon("/img/bwLehrpool-logo.png");
+ ImageIcon image = ResourceLoader.getIcon("/img/service-logo.png");
Rectangle screenSize = Gui.getMonitorFromRectangle(getBounds(), true)
.getDefaultConfiguration()
.getBounds();
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java
index 045ec5eb..88b49bae 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/MainMenuWindowLayout.java
@@ -4,6 +4,7 @@ import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.helper.CompositePage;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.util.ResourceLoader;
@@ -31,7 +32,7 @@ public abstract class MainMenuWindowLayout extends CompositePage {
protected final JButton btnShowLectures;
public MainMenuWindowLayout() {
- this.setBorder(BorderFactory.createTitledBorder("bwLehrpool-Suite Hauptmenü"));
+ this.setBorder(BorderFactory.createTitledBorder(Branding.getApplicationName() + " Hauptmenü"));
GridManager grid = new GridManager(this, 2);
lblVirtualMachinesLogo = new JLabel(ResourceLoader.getIcon("/img/virtualization.png", "VM-Übersicht"));
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtualizerNoticeWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtualizerNoticeWindowLayout.java
index f4ef24b2..8509eee6 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtualizerNoticeWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtualizerNoticeWindowLayout.java
@@ -11,6 +11,7 @@ import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.GridManager;
@@ -18,7 +19,7 @@ import org.openslx.dozmod.gui.helper.GridManager;
public abstract class VirtualizerNoticeWindowLayout extends JDialog {
private static final String title = "Hinweis VMWare Player";
private static final String infoText = "<html><body style='width:100%'>"
- + "Für die Arbeit mit der bwLehrpool-Suite wird zwingend der <b>VMWare Player</b> benötigt. "
+ + "Für die Arbeit mit der " + Branding.getApplicationName() + " wird zwingend der <b>VMWare Player</b> benötigt. "
+ "Diesen können Sie sich unter folgendem Link kostenfrei herunterladen. "
+ "Wenn Sie bereits den VMWare Player oder die VMWare Workstation installiert haben, können Sie diesen Hinweis ignorieren."
+ "</body></html>";
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
index 16ca257e..d0431b2e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
@@ -16,6 +16,7 @@ import javax.swing.filechooser.FileNameExtensionFilter;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.Virtualizer;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
@@ -33,7 +34,6 @@ import org.openslx.sat.thrift.version.Feature;
import org.openslx.thrifthelper.TConst;
import org.openslx.util.vm.DiskImage;
import org.openslx.util.vm.DiskImage.UnknownImageFormatException;
-import org.openslx.util.vm.UnsupportedVirtualizerFormatException;
import org.openslx.util.vm.VmMetaData;
import org.openslx.util.vm.VmMetaData.HardDisk;
import org.openslx.util.vm.VmwareMetaData;
@@ -203,7 +203,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
// Warn user about snapshot
if (diskImage.isSnapshot || state.meta.isMachineSnapshot()) {
Gui.showMessageBox("Von der ausgewählten VM wurde ein Snapshot erstellt. In diesem Zustand kann\n"
- + "die VM leider nicht ins bwLehrpool-System geladen werden. Bitte konsolidieren Sie zunächst\n"
+ + "die VM leider nicht ins " + Branding.getServiceName() + "-System geladen werden. Bitte konsolidieren Sie zunächst\n"
+ "den Snapshot und versuchen Sie es erneut.", MessageType.WARNING, null, null);
setErrorMessage("Die gewählte VM befindet sich im Snapshot-Zustand.");
setPageComplete(false);
@@ -212,7 +212,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
if (!diskImage.isStandalone) {
Gui.showMessageBox("Die zu dieser VM gehörige Virtuelle Festplatte ist im Format '"
+ diskImage.subFormat + "'.\n"
- + "Dieses Format wird von bwLehrpool nicht unterstützt. Bitte konvertieren Sie die VM\n"
+ + "Dieses Format wird von " + Branding.getApplicationName() + " nicht unterstützt. Bitte konvertieren Sie die VM\n"
+ "in das Format 'monolithicSparse'.", MessageType.WARNING, null, null);
setErrorMessage("Die VMDK Datei der VM hat ein inkompatibles Format");
setPageComplete(false);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java
index 6370e204..9bac2a17 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java
@@ -6,6 +6,7 @@ import java.awt.Window;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.TransferState;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.filetransfer.TransferEvent;
import org.openslx.dozmod.filetransfer.TransferEventListener;
import org.openslx.dozmod.gui.Gui;
@@ -14,7 +15,6 @@ import org.openslx.dozmod.gui.wizard.LectureWizard;
import org.openslx.dozmod.gui.wizard.Wizard;
import org.openslx.dozmod.gui.wizard.layout.ImageUploadSummaryPageLayout;
import org.openslx.dozmod.state.UploadWizardState;
-import org.openslx.dozmod.thrift.ThriftActions;
import org.openslx.dozmod.thrift.UploadInitiator.UploadInitState;
import org.openslx.dozmod.thrift.cache.ImageCache;
import org.openslx.util.QuickTimer;
@@ -99,7 +99,7 @@ public class ImageUploadSummaryPage extends ImageUploadSummaryPageLayout {
text = "Die Initialisierung des Uploads auf den Server ist fehlgeschlagen."
+ " Sie können versuchen, den Vorgang erneut zu starten."
+ " Falls das Problem weiterhin besteht,"
- + " kontaktieren Sie den bwLehrpool-Support Ihrer Einrichtung.";
+ + " kontaktieren Sie den " + Branding.getServiceName() + "-Support Ihrer Einrichtung.";
if (state.upload.getErrorMessage() != null) {
text += "<br><br>Weitere Informationen:<br>" + state.upload.getErrorMessage();
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
index 53e6b5ad..66f9efe9 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
@@ -36,6 +36,7 @@ import org.openslx.bwlp.thrift.iface.TransferState;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.bwlp.thrift.iface.WhoamiInfo;
import org.openslx.dozmod.App;
+import org.openslx.dozmod.Branding;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.Config.SavedSession;
import org.openslx.dozmod.authentication.Authenticator.AuthenticationData;
@@ -488,7 +489,7 @@ public class ThriftActions {
+ "Abbild.<br>Sie müssen das Abbild dekomprimieren, bevor Sie es verändern "
+ "können.<br> Die VM wird lokal voraussichtlich nicht startfähig sein!"
+ "<br><br>Bitte lesen Sie die Hinweise unter "
- + "<a href=\"https://www.bwlehrpool.de/doku.php/client/vmdk-disk-type\">"
+ + "<a href=\"" + Branding.getServiceFAQWebsite() + "\">"
+ "VMDK Disk Types</a>";
Gui.asyncMessageBox(msg, MessageType.WARNING, null,
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
index 5ed1fe5d..365d1796 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
@@ -14,6 +14,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.log4j.Logger;
import org.openslx.dozmod.App;
+import org.openslx.dozmod.Branding;
import org.openslx.sat.thrift.version.Version;
import org.openslx.util.Json;
@@ -30,7 +31,7 @@ public class ClientVersion {
static {
loadLocalVersion();
- loadRemoteVersion("https://bwlp-masterserver.ruf.uni-freiburg.de/dozmod/" + Version.VERSION + "/version.json");
+ loadRemoteVersion("https://" + Branding.getMasterServerAddress() + "/dozmod/" + Version.VERSION + "/version.json");
}
/**
@@ -80,7 +81,7 @@ public class ClientVersion {
}
/**
- * Checks if we are running latest bwLehrpool-Suite version
+ * Checks if we are running latest application version
*
* @return true if there is no newer version, false otherwise
*/
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/DesktopEnvironment.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/DesktopEnvironment.java
index 4a6528a3..f08ef14b 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/DesktopEnvironment.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/DesktopEnvironment.java
@@ -8,6 +8,8 @@ import java.net.URLEncoder;
import java.util.Arrays;
import org.apache.log4j.Logger;
+import org.openslx.dozmod.App;
+import org.openslx.dozmod.Branding;
public class DesktopEnvironment {
@@ -17,13 +19,12 @@ public class DesktopEnvironment {
private final static Logger LOGGER = Logger.getLogger(DesktopEnvironment.class);
private static final Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
-
public static enum Link {
- FAQ("https://www.bwlehrpool.de/"),
+ FAQ(Branding.getServiceFAQWebsite()),
VMWARE("https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0"),
//INTRO("http://www.hs-offenburg.de/fileadmin/Einrichtungen/hrz/Projekte/bwLehrpool/3_bwLehrpool_-_Image_einbinden_und_starten.pdf"),
- DOZMOD("https://bwlp-masterserver.ruf.uni-freiburg.de/dozmod/"),
- REGISTER_BWIDM("https://bwlp-masterserver.ruf.uni-freiburg.de/webif/");
+ DOZMOD("https://" + App.getMasterServerAddress() + "/dozmod/"),
+ REGISTER_BWIDM("https://" + App.getMasterServerAddress() + "/webif/");
public final URI uri;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ResourceLoader.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ResourceLoader.java
index 5b43c30c..d03bafb0 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ResourceLoader.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ResourceLoader.java
@@ -172,5 +172,4 @@ public class ResourceLoader
iconCache.put( icon, scaledIcon );
return scaledIcon;
}
-
}
diff --git a/dozentenmodul/src/main/properties/branding.properties b/dozentenmodul/src/main/properties/branding.properties
new file mode 100644
index 00000000..f22e8a15
--- /dev/null
+++ b/dozentenmodul/src/main/properties/branding.properties
@@ -0,0 +1,5 @@
+masterserver.address=bwlp-masterserver.ruf.uni-freiburg.de
+application.name=bwLehrpool-Suite
+service.name=bwLehrpool
+service.faq.website=https://www.bwlehrpool.de
+service.email=bwlehrpool@hs-offenburg.de \ No newline at end of file
diff --git a/dozentenmodul/src/main/resources/img/service-logo.png b/dozentenmodul/src/main/resources/img/service-logo.png
new file mode 100644
index 00000000..cdc4617e
--- /dev/null
+++ b/dozentenmodul/src/main/resources/img/service-logo.png
Binary files differ
diff --git a/dozentenmodul/src/main/resources/txt/disclaimer_notice b/dozentenmodul/src/main/resources/txt/disclaimer_notice
new file mode 100644
index 00000000..3dfb287b
--- /dev/null
+++ b/dozentenmodul/src/main/resources/txt/disclaimer_notice
@@ -0,0 +1,14 @@
+bwLehrpool-Suite (Dozentenmodul)
+Copyright © 2016 Universität Freiburg
+
+Die Verwendung dieses Programms ist nur in Abstimmung mit der jeweils beteiligten Hochschulinstitution zulässig und unterliegt deren Bestimmungen und Einschränkungen. Im Rahmen des bwLehrpool-Systems erstellte und bereitgestellte Virtuelle Maschinen, die unfrei lizensierte Software enthalten, dürfen nur mit Erlaubnis bzw. Lizenzierung der betreffenden Rechteinhaber eingesetzt und weitergegeben werden.
+
+Insbesondere wird ausdrücklich darauf hingewiesen, dass die Verantwortung in Bezug auf eventuell notwendige Lizenzierung sämtlicher Software innerhalb einer Virtuellen Maschine, regelmäßiger Aktualisierung und rechtzeitigen Einspielens von Sicherheitsupdates ausschließlich beim erstellenden Personal liegt.
+
+
+Lizenzierung des Programms
+
+Dieses Programm ist freie Software. Es kann unter den Bedingungen der GNU General Public License (GPL) Version 2 verändert und weitergegeben werden. Der vollständige Text der GNU General Public Licence der Version 2 (GPL2) kann hier http://www.gnu.org/licenses/old-licenses/gpl-2.0.html eingesehen werden.
+
+Es wird, soweit gesetzlich zulässig, keinerlei Gewährleistung für dieses Programm, weder ausdrücklich noch implizit, geleistet. Der Urheberrechtsinhaber stellt das Programm „wie es ist“ zur Verfügung. Es werden einschließlich Marktreife oder Verwendbarkeit für einen bestimmten Zweck keinerlei Eigenschaften zugesichert.Das volle Risiko bezüglich Qualität, Leistungsfähigkeit oder jeglicher allgemeiner oder spezieller Schäden, Schäden durch Nebenwirkungen oder Folgeschäden, die aus Benutzung oder Unbenutzbarkeit des Programms folgen (einschließlich Datenverlusten oder fehlerhafter Verarbeitung von Daten)liegt auf Seiten des Anwenders / der Anwenderin.
+
diff --git a/dozentenmodul/src/main/resources/txt/privacy_notice b/dozentenmodul/src/main/resources/txt/privacy_notice
new file mode 100644
index 00000000..e3387613
--- /dev/null
+++ b/dozentenmodul/src/main/resources/txt/privacy_notice
@@ -0,0 +1,32 @@
+Datenschutz
+-----------------------------------------------------
+Wenn Sie sich an der bwLehrpool-Suite anmelden bzw. diese nutzen, werden verschiedene Informationen über Sie erfasst und gespeichert. Die nachfolgenden Punkte sollen Ihnen helfen zu verstehen, welche Daten zu welchem Zweck verwendet werden und wohin Sie sich bei Fragen wenden können.
+
+Was wird gesammelt?
+-----------------------------------------------------
+Beim Login werden Name, E-Mail, Hochschule sowie Zeitpunkt des letzten Logins gespeichert und einer eindeutigen Nutzer-ID zugeordnet. Dies umfasst auch Informationen darüber, wann Sie sich für die Nutzung erstmalig registriert haben. Außerdem werden Informationen über einige Ihrer Aktivitäten innerhalb der bwLehrpool-Suite erfasst (beispielsweise wenn Sie eine VM hochladen oder löschen).
+
+Wozu werden diese Daten gesammelt?
+-----------------------------------------------------
+Die Informationen sind notwendig, um VMs und Veranstaltungen Ihnen bzw. Ihren Kollegen eindeutig zuordnen und ggf. bei rechtlichen Verstößen eingreifen zu können.
+
+Wenn Sie VMs herunterladen (vom Satellitenserver oder öffentlichen Speicher), möchten Sie sicherlich wissen, von wem eine VM erstellt wurde und wen Sie ggf. kontaktieren können, falls die VM nicht wie erwartet funktioniert.
+
+Außerdem sind Nutzungsdaten für Diagnosezwecke wichtig, damit ein Administrator Ihnen helfen kann, falls Sie z.B. Ihre VM nicht mehr finden können und vermuten, dass diese von jemandem fälschlicherweise gelöscht wurde.
+
+Mit wem werden diese Daten geteilt?
+-----------------------------------------------------
+Die erhobenen Daten werden ausschließlich auf dem Satellitenserver gespeichert, mit dem Sie sich während des Logins verbunden haben. Dieser steht in der Regel unter der Kontrolle des Rechenzentrums Ihrer Hochschule.
+
+Bei der erstmaligen Nutzung der Suite wurden Sie aufgefordert, sich über ein Webportal zu registrieren. Dies ist notwendig, um Ihre Zustimmung zur Speicherung und Verarbeitung Ihrer Daten zum Zweck des hochschulübergreifenden VM-Austauschs einzuholen. Die dort angegebenen Informationen stehen unter der Verwaltung des bwLehrpool-Teams in Freiburg.
+
+Wenn Sie eine VM auf den öffentlichen Speicher hochladen, wird die VM sowie damit verknüpfte Metadaten (Name des Besitzers/Erstellers, Zeitpunkt der Erstellung und letzten Änderung) auf den zentralen Server des bwLehrpool-Teams in Freiburg übertragen. Auch Nutzer anderer an bwLehrpool teilnehmenden Hochschulen können nun Ihre VM sowie die damit verbundenen (Kontakt-)Daten einsehen.
+
+Wie lange werden Daten gespeichert?
+-----------------------------------------------------
+Informationen werden gespeichert, bis sie nicht mehr benötigt werden, um die notwendige Funktionalität bereitzustellen. Dies hängt auch von Faktoren wie der Art der Informationen, warum sie gesammelt und verarbeitet werden sowie den relevanten rechtlichen oder betrieblichen Speicherbedürfnissen ab.
+
+Wohin kann ich mich bei Fragen wenden?
+-----------------------------------------------------
+Kontaktieren Sie als erstes Ihr Rechenzentrum. In der Regel wird dort der Satellitenserver, mit dem sich Ihre bwLehrpool-Suite standardmäßig verbindet, betrieben. Falls Sie dort keinen Ansprechpartner finden, können Sie sich an das Entwickler-Team von bwLehrpool (bwlehrpool@hs-offenburg.de) wenden.
+