summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java
diff options
context:
space:
mode:
authorJonathan Bauer2016-09-07 17:09:16 +0200
committerJonathan Bauer2016-09-07 17:09:16 +0200
commit54c0a813587a33a41da49e320548f2ce5bdd8b0c (patch)
treef862a7ad71c810d64a25766654d7c62971ff5a4d /dozentenmodul/src/main/java
parent[client] reformulate "interpreter" to "extension" (diff)
downloadtutor-module-54c0a813587a33a41da49e320548f2ce5bdd8b0c.tar.gz
tutor-module-54c0a813587a33a41da49e320548f2ce5bdd8b0c.tar.xz
tutor-module-54c0a813587a33a41da49e320548f2ce5bdd8b0c.zip
[client] fix the save button for the first time ever!!!
Diffstat (limited to 'dozentenmodul/src/main/java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java94
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java26
2 files changed, 68 insertions, 52 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java
index ac0f282a..d3935b62 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java
@@ -1,5 +1,6 @@
package org.openslx.dozmod.gui.control;
+import java.awt.Color;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -11,7 +12,7 @@ import java.io.StringReader;
import java.util.EventListener;
import java.util.EventObject;
-import javax.swing.BorderFactory;
+import javax.swing.Box;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
@@ -75,31 +76,38 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
});
}
+ private void setError(final String msg) {
+ lblError.setText(msg);
+ }
/**
* Gets the runscript as String. The chosen interpreter will get encoded as
* the first line of the script.
*
- * @return runscript as String. If not text was entered, returns a empty
+ * @return runscript as String. If no text was entered, returns a empty
* string.
*/
public String getState() {
- String input = taRunScript.getText();
- if (input == null)
- return "";
-
+ setError(""); // fill remove any prior errors, we'll reset them if needed
// handle user input, this is tricky since
// * either an item has been selected -> editorContent will be of our enum type
// * user typed its own interpreter into the box -> editorContent will be a castable String
- String interpreter = "";
- Object editorContent = cboRunscriptType.getEditor().getItem();
- if (editorContent instanceof RunscriptType)
- interpreter = ((RunscriptType) editorContent).extension;
- else if (input instanceof String)
- interpreter = (String) editorContent;
- else
+ String extension = null;
+ Object cboContent = cboRunscriptType.getEditor().getItem();
+ if (cboContent instanceof RunscriptType) {
+ extension = ((RunscriptType) cboContent).extension;
+ } else if (cboContent instanceof String) {
+ extension = (String) cboContent;
+ }
+ String taInputText = taRunScript.getText();
+ if (taInputText.isEmpty())
return "";
-
- return "ext=" + interpreter + "\n" + input;
+ if (extension == null || extension.isEmpty()) {
+ // this should never happen, so return null to report this invalid state
+ setError("Fehlende Dateinamenerweiterung!");
+ return null;
+ }
+ setError("");
+ return "ext=" + extension + "\n" + taInputText;
}
/**
@@ -111,33 +119,34 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
* AdvancedConfiguration to set the state to
*/
public void setState(final String config) {
- String shebang = null;
- if (config == null) {
+ if (config == null || config.isEmpty()) {
cboRunscriptType.setSelectedItem(null);
taRunScript.setText("");
+ return;
}
+ String extensionHeader = null;
try {
BufferedReader reader = new BufferedReader(new StringReader(config));
- shebang = reader.readLine();
+ extensionHeader = reader.readLine();
reader.close();
} catch (IOException e) {
// swallow ...
}
- if (shebang != null) {
+ if (extensionHeader != null) {
// we should have following format: ext=<interpreter>
// e.g. ext=sh
- shebang = shebang.replace("ext=", "");
+ extensionHeader = extensionHeader.replace("ext=", "");
for (RunscriptType type : RunscriptType.values()) {
- if (type.extension.equals(shebang)) {
+ if (type.extension.equals(extensionHeader)) {
cboRunscriptType.setSelectedItem(type);
// mark that we found it by nulling the shebang...
- shebang = null;
+ extensionHeader = null;
continue;
}
}
- if (shebang != null) {
+ if (extensionHeader != null) {
// user specific shebang, so just write the text to the cbo
- cboRunscriptType.getEditor().setItem(shebang);
+ cboRunscriptType.getEditor().setItem(extensionHeader);
}
}
// finished with the interpreter, remove that line from the given config
@@ -197,31 +206,23 @@ class RunscriptConfiguratorLayout extends JPanel {
private static final long serialVersionUID = 648729071828404053L;
- private final static String txtRunScriptTitle = "Startskript";
private final static String txtRunScriptDesc = "Ein hier eingetragenes Skript wird nach dem Start dieser VM automatisch ausgeführt.";
-
+ protected final QLabel lblError;
protected final JTextArea taRunScript;
protected final ComboBox<RunscriptType> cboRunscriptType;
public RunscriptConfiguratorLayout() {
- GridManager grid = new GridManager(this, 1, true,
- new Insets(5, 5, 5, 5));
- JPanel pnlRunScript = new JPanel();
+ GridManager grid = new GridManager(this, 2, true, new Insets(5, 5, 5, 5));
taRunScript = new JTextArea("", 5, 20);
JScrollPane scpRunScript = new JScrollPane(taRunScript,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
- pnlRunScript.setBorder(BorderFactory
- .createTitledBorder(txtRunScriptTitle));
-
- GridManager gridRunScript = new GridManager(pnlRunScript, 2, true,
- new Insets(2, 2, 2, 2));
taRunScript.setLineWrap(true);
taRunScript.setWrapStyleWord(true);
- gridRunScript.add(new WordWrapLabel(txtRunScriptDesc, false, true), 2)
+ grid.add(new WordWrapLabel(txtRunScriptDesc, false, true), 2)
.fill(true, false).expand(true, false);
- gridRunScript.nextRow();
+ grid.nextRow();
cboRunscriptType = new ComboBox<RunscriptType>(
new ComboBoxRenderer<RunscriptType>() {
@Override
@@ -235,16 +236,21 @@ class RunscriptConfiguratorLayout extends JPanel {
RunscriptType.values()));
;
cboRunscriptType.setEditable(true);
- gridRunScript.add(new QLabel("Dateinamenserweiterung: ")).fill(false, false)
+ grid.add(new QLabel("Dateinamenserweiterung: ")).fill(false, false)
.expand(false, false);
- gridRunScript.add(cboRunscriptType).fill(true, false)
+ grid.add(cboRunscriptType).fill(true, false)
.expand(true, false);
- gridRunScript.nextRow();
- gridRunScript.add(scpRunScript, 2).fill(true, true).expand(true, true);
- gridRunScript.finish(false);
-
- // build the final grid
- grid.add(pnlRunScript).fill(true, true).expand(true, true);
+ grid.nextRow();
+ grid.add(scpRunScript, 2).fill(true, true).expand(true, true);
+ grid.nextRow();
+ lblError = new QLabel("");
+ lblError.setForeground(Color.RED);
+ JPanel pnlError = new JPanel();
+ pnlError.add(Box.createGlue());
+ pnlError.add(lblError);
+ pnlError.add(Box.createGlue());
+ grid.add(pnlError, 2).fill(true, false).expand(true, false);
grid.finish(false);
+
}
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
index 750a4c0e..2918428f 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
@@ -137,7 +137,9 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
* Holder of the netrules/runscript of this lecture
*/
private List<NetRule> currentNetrules = null;
+ private List<NetRule> originalNetrules = null;
private String currentRunscript = null;
+ private String originalRunscript = null;
/**
* Constructor
@@ -281,7 +283,6 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
ctlRunscriptConfigurator.addRunscriptConfigurationChangeEventListener(new RunscriptConfigurationChangeEventListener() {
@Override
public void stateChanged(RunscriptConfigurationChangeEvent event) {
- currentRunscript = ctlRunscriptConfigurator.getState();
reactToChange();
}
@@ -380,9 +381,12 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
txtImageName.setText(image.getImageName());
lblImageNameInfo.setText(image.getImageName());
}
- // remember original advanced config
- currentNetrules = lecture.networkExceptions;
- currentRunscript = lecture.runscript;
+ // remember original netrules and runscript
+ originalNetrules = lecture.networkExceptions != null ? lecture.networkExceptions : new ArrayList<NetRule>();
+ originalRunscript = lecture.runscript != null ? lecture.runscript : new String("");
+
+ currentNetrules = originalNetrules;
+ currentRunscript = originalRunscript;
// remember default permissions
if (lecture.defaultPermissions != null) {
@@ -598,11 +602,17 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
Date start = DateTimeHelper.getDateFrom(dtpStartDate, spnStartTime);
Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime);
if (!isPeriodValid(start, end, false) && dateHasChanged()) {
- pnlTabs.setSelectedIndex(pnlTabs.indexOfTab("Allgemein"));
lblError.setText("Ungültiger Zeitraum!");
return false;
}
-
+ // runscript stuff
+ String newState = ctlRunscriptConfigurator.getState();
+ if (newState == null) {
+ // marker for error, switch to tab
+ return false;
+ } else {
+ currentRunscript = newState;
+ }
// done with mandatory checks, remove error message
lblError.setText(null);
@@ -620,8 +630,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
|| !lecture.defaultPermissions.equals(originalDefaultPermissions)
|| (locationInfo != null && lecture.locationIds != null && !lecture.locationIds.equals(locationInfo.locationList))
|| (locationInfo != null && lecture.limitToLocations != locationInfo.limitToLocations)
- || (currentNetrules != null && lecture.networkExceptions != null && !lecture.networkExceptions.equals(currentNetrules))
- || (currentRunscript != null && lecture.runscript != null && !lecture.runscript.equals(currentRunscript))
+ || (currentNetrules != null && !currentNetrules.equals(originalNetrules))
+ || (currentRunscript != null && !currentRunscript.equals(originalRunscript))
|| imageLinkChanged;
return changed;