diff options
| author | Jonathan Bauer | 2016-09-02 17:29:47 +0200 |
|---|---|---|
| committer | Jonathan Bauer | 2016-09-02 17:29:47 +0200 |
| commit | b794e38b72473538461b97882f4f20ede7042ea9 (patch) | |
| tree | 7a4fad9eb687f451c6bd5e3e293f205790ac0bc3 /dozentenmodul/src/main/java | |
| parent | [client] don't use System.lineSeparator() but regular linefeed/carriage return (diff) | |
| download | tutor-module-b794e38b72473538461b97882f4f20ede7042ea9.tar.gz tutor-module-b794e38b72473538461b97882f4f20ede7042ea9.tar.xz tutor-module-b794e38b72473538461b97882f4f20ede7042ea9.zip | |
[client] splitted netrules & runscript tab/panel/w/e
Diffstat (limited to 'dozentenmodul/src/main/java')
8 files changed, 292 insertions, 204 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/AdvancedConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/NetrulesConfigurator.java index 219cdb67..c518739f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/AdvancedConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/NetrulesConfigurator.java @@ -14,7 +14,6 @@ import java.util.List; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.JTextArea; import javax.swing.JTextPane; import javax.swing.event.EventListenerList; import javax.swing.text.BadLocationException; @@ -31,16 +30,14 @@ import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.TextChangeListener; /** - * Widget for advanced configuration options for lectures. This handles - * following options - Network rules - Runscript - USB + * Widget for netrules configuration options for lectures */ -public class AdvancedConfigurator extends AdvancedConfiguratorLayout { +public class NetrulesConfigurator extends NetrulesConfiguratorLayout { private static final long serialVersionUID = -3497629601818983994L; private final static Logger LOGGER = Logger - .getLogger(AdvancedConfigurator.class); + .getLogger(NetrulesConfigurator.class); private String originalRawRuleText = null; - private String originalRunScript = null; /** * Character defining how the rules are parsed, e.g. for whitespace \\s * Example: "8.8.8.8 80 in" would be split in -hostname "8.8.8.8" -port "80" @@ -48,24 +45,23 @@ public class AdvancedConfigurator extends AdvancedConfiguratorLayout { */ private static final String FIELD_DELIMITER = "\\s"; - public AdvancedConfigurator() { + public NetrulesConfigurator() { super(); final TextChangeListener docListener = new TextChangeListener() { @Override public void changed() { - fireAdvancedConfigurationChangeEvent(new AdvancedConfigurationChangeEvent( + fireNetrulesConfigurationChangeEvent(new NetrulesConfigurationChangeEvent( new Object())); } }; tpNetworkRules.getDocument().addDocumentListener(docListener); - taRunScript.getDocument().addDocumentListener(docListener); + } public boolean hasChanged() { - return !originalRawRuleText.equalsIgnoreCase(tpNetworkRules.getText()) - || !originalRunScript.equalsIgnoreCase(taRunScript.getText()); + return !originalRawRuleText.equalsIgnoreCase(tpNetworkRules.getText()); } /** @@ -75,14 +71,14 @@ public class AdvancedConfigurator extends AdvancedConfiguratorLayout { * * @return advanced configuration object composed of the parsed network * rules as List<NetRule> and the raw runscript text as String - * @see org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfiguration + * @see org.openslx.dozmod.gui.control.NetrulesConfigurator.AdvancedConfiguration */ - public AdvancedConfiguration getState() { + public NetrulesConfiguration getState() { // cleanup the TextPane for network rules if needed String input = tpNetworkRules.getText().trim(); List<NetRule> rules = parseNetRules(input); if (rules != null) { - return new AdvancedConfiguration(rules, taRunScript.getText()); + return new NetrulesConfiguration(rules); } return null; } @@ -95,13 +91,10 @@ public class AdvancedConfigurator extends AdvancedConfiguratorLayout { * @param config * AdvancedConfiguration to set the state to */ - public void setState(final AdvancedConfiguration config) { + public void setState(final NetrulesConfiguration config) { // setText() blanks the text area if null is given, so no null checks originalRawRuleText = decodeNetRulesToText(config.netRulesList); - originalRunScript = config.runScriptText != null ? config.runScriptText - : ""; this.tpNetworkRules.setText(originalRawRuleText); - this.taRunScript.setText(originalRunScript); } /** @@ -354,14 +347,11 @@ public class AdvancedConfigurator extends AdvancedConfiguratorLayout { * has two members: the list of NetRule(s) (as List<NetRule>) and the * runScriptText (as String) */ - public static class AdvancedConfiguration { + public static class NetrulesConfiguration { public List<NetRule> netRulesList; - public String runScriptText; - public AdvancedConfiguration(List<NetRule> netRulesList, - String runScriptText) { + public NetrulesConfiguration(List<NetRule> netRulesList) { this.netRulesList = netRulesList; - this.runScriptText = runScriptText; } } @@ -371,38 +361,38 @@ public class AdvancedConfigurator extends AdvancedConfiguratorLayout { */ protected EventListenerList listenerList = new EventListenerList(); - public class AdvancedConfigurationChangeEvent extends EventObject { + public class NetrulesConfigurationChangeEvent extends EventObject { private static final long serialVersionUID = -8779550754760035845L; - public AdvancedConfigurationChangeEvent(Object source) { + public NetrulesConfigurationChangeEvent(Object source) { super(source); } } - public interface AdvancedConfigurationChangeEventListener extends + public interface NetrulesConfigurationChangeEventListener extends EventListener { - public void stateChanged(AdvancedConfigurationChangeEvent event); + public void stateChanged(NetrulesConfigurationChangeEvent event); } - public void addAdvancedConfigurationChangeEventListener( - AdvancedConfigurationChangeEventListener listener) { - listenerList.add(AdvancedConfigurationChangeEventListener.class, + public void addNetrulesConfigurationChangeEventListener( + NetrulesConfigurationChangeEventListener listener) { + listenerList.add(NetrulesConfigurationChangeEventListener.class, listener); } - public void removeAdvancedConfigurationChangeEventListener( - AdvancedConfigurationChangeEventListener listener) { - listenerList.remove(AdvancedConfigurationChangeEventListener.class, + public void removeNetrulesConfigurationChangeEventListener( + NetrulesConfigurationChangeEventListener listener) { + listenerList.remove(NetrulesConfigurationChangeEventListener.class, listener); } - void fireAdvancedConfigurationChangeEvent( - AdvancedConfigurationChangeEvent evt) { + void fireNetrulesConfigurationChangeEvent( + NetrulesConfigurationChangeEvent evt) { Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length; i++) { - if (listeners[i] == AdvancedConfigurationChangeEventListener.class) { - ((AdvancedConfigurationChangeEventListener) listeners[i + 1]) + if (listeners[i] == NetrulesConfigurationChangeEventListener.class) { + ((NetrulesConfigurationChangeEventListener) listeners[i + 1]) .stateChanged(evt); } } @@ -413,22 +403,17 @@ public class AdvancedConfigurator extends AdvancedConfiguratorLayout { * Internal layout class for the advanced configurator (to keep it clean even * for widgets) */ -class AdvancedConfiguratorLayout extends JPanel { - - private static final long serialVersionUID = 648729071828404053L; +class NetrulesConfiguratorLayout extends JPanel { + private static final long serialVersionUID = 5266120380443817325L; private final static String txtNetworkOptionsTitle = "Netzwerk Einstellungen"; private final static String txtNetworkOptionsDesc = "Wenn Sie den Internetzugriff deaktiviert haben, können Sie hier Ausnahmen definieren (Whitelist). Bitte definieren Sie Ihre Regeln im Format <host> <port> <in|out>."; private final static String txtNetworkRulesTitle = "Netzwerkregeln"; - private final static String txtRunScriptTitle = "Startskript"; - private final static String txtRunScriptDesc = "Ein hier eingetragenes Skript wird nach dem Start dieser VM automatisch ausgeführt."; - + private final JPanel pnlNetworkOptions; - private final JPanel pnlRunScript; protected final JTextPane tpNetworkRules; - protected final JTextArea taRunScript; - public AdvancedConfiguratorLayout() { + public NetrulesConfiguratorLayout() { GridManager grid = new GridManager(this, 1, true, new Insets(5, 5, 5, 5)); @@ -455,31 +440,8 @@ class AdvancedConfiguratorLayout extends JPanel { .expand(true, true); gridNetworkOptions.finish(false); - - - // second middle panel for the run script textpane - pnlRunScript = new JPanel(); - GridManager gridRunScript = new GridManager(pnlRunScript, 1, true, - new Insets(2, 2, 2, 2)); - taRunScript = new JTextArea("", 5, 20); - taRunScript.setLineWrap(true); - taRunScript.setWrapStyleWord(true); - JScrollPane scpRunScript = new JScrollPane(taRunScript, - JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - pnlRunScript.setBorder(BorderFactory - .createTitledBorder(txtRunScriptTitle)); - gridRunScript - .add(new WordWrapLabel(txtRunScriptDesc, false, true)) - .fill(true, false).expand(true, false); - gridRunScript.nextRow(); - gridRunScript.add(scpRunScript).fill(true, true).expand(true, true); - gridRunScript.finish(false); - // build the final grid grid.add(pnlNetworkOptions).fill(true, true).expand(true, true); - grid.nextRow(); - grid.add(pnlRunScript).fill(true, true).expand(true, true); grid.finish(false); } } 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 new file mode 100644 index 00000000..8a517c4f --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java @@ -0,0 +1,178 @@ +package org.openslx.dozmod.gui.control; + +import java.awt.Insets; +import java.util.EventListener; +import java.util.EventObject; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.event.EventListenerList; + +import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.TextChangeListener; + +/** + * Widget for advanced configuration options for lectures. This handles + * following options - Network rules - Runscript - USB + */ +public class RunscriptConfigurator extends RunscriptConfiguratorLayout { + + private static final long serialVersionUID = -3497629601818983994L; + private String originalRunScript = null; + + public RunscriptConfigurator() { + super(); + + final TextChangeListener docListener = new TextChangeListener() { + @Override + public void changed() { + fireRunscriptConfigurationChangeEvent(new RunscriptConfigurationChangeEvent( + new Object())); + } + }; + taRunScript.getDocument().addDocumentListener(docListener); + + } + + public boolean hasChanged() { + return !originalRunScript.equalsIgnoreCase(taRunScript.getText()); + } + + /** + * Gets the state of the widget. This will first try to parse the + * tpNetworkRules and taRunScript and build the corresponding + * AdvancedConfiguration Object returned. + * + * @return advanced configuration object composed of the parsed network + * rules as List<NetRule> and the raw runscript text as String + * @see org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfiguration + */ + public RunscriptConfiguration getState() { + // cleanup the TextPane for network rules if needed + + + String runscriptString = taRunScript.getText(); + if (runscriptString != null) { + return new RunscriptConfiguration(runscriptString); + } + return null; + } + + /** + * Sets the state of this widget to the given AdvancedConfiguration. Basicly + * this sets the content of the text areas to the corresponding network + * rules/runscript as given by the AdvancedConfiguration object + * + * @param config + * AdvancedConfiguration to set the state to + */ + public void setState(final RunscriptConfiguration config) { + // setText() blanks the text area if null is given, so no null checks + originalRunScript = config.runScriptText != null ? config.runScriptText + : ""; + this.taRunScript.setText(originalRunScript); + } + + /** + * Wrapper class for the advanced configuration information needed since we + * need to return a single object from the runAndReturn routine. This class + * has two members: the list of NetRule(s) (as List<NetRule>) and the + * runScriptText (as String) + */ + public static class RunscriptConfiguration { + public String runScriptText; + + public RunscriptConfiguration(String runScriptText) { + this.runScriptText = runScriptText; + } + } + + /** + * Custom event mechanism to detect changes to the user list (Mostly needed + * for the reactToChange() stuff in LectureDetailsWindow) + */ + protected EventListenerList listenerList = new EventListenerList(); + + public class RunscriptConfigurationChangeEvent extends EventObject { + + private static final long serialVersionUID = -8779550754760035845L; + + public RunscriptConfigurationChangeEvent(Object source) { + super(source); + } + } + + public interface RunscriptConfigurationChangeEventListener extends + EventListener { + public void stateChanged(RunscriptConfigurationChangeEvent event); + } + + public void addRunscriptConfigurationChangeEventListener( + RunscriptConfigurationChangeEventListener listener) { + listenerList.add(RunscriptConfigurationChangeEventListener.class, + listener); + } + + public void removeRunscriptConfigurationChangeEventListener( + RunscriptConfigurationChangeEventListener listener) { + listenerList.remove(RunscriptConfigurationChangeEventListener.class, + listener); + } + + void fireRunscriptConfigurationChangeEvent( + RunscriptConfigurationChangeEvent evt) { + Object[] listeners = listenerList.getListenerList(); + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] == RunscriptConfigurationChangeEventListener.class) { + ((RunscriptConfigurationChangeEventListener) listeners[i + 1]) + .stateChanged(evt); + } + } + } +} + +/** + * Internal layout class for the advanced configurator (to keep it clean even + * for widgets) + */ +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."; + + private final JPanel pnlRunScript; + protected final JTextArea taRunScript; + + public RunscriptConfiguratorLayout() { + + GridManager grid = new GridManager(this, 1, true, + new Insets(5, 5, 5, 5)); + + // middle panel for the run script textpane + pnlRunScript = new JPanel(); + GridManager gridRunScript = new GridManager(pnlRunScript, 1, true, + new Insets(2, 2, 2, 2)); + taRunScript = new JTextArea("", 5, 20); + taRunScript.setLineWrap(true); + taRunScript.setWrapStyleWord(true); + JScrollPane scpRunScript = new JScrollPane(taRunScript, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + pnlRunScript.setBorder(BorderFactory + .createTitledBorder(txtRunScriptTitle)); + gridRunScript + .add(new WordWrapLabel(txtRunScriptDesc, false, true)) + .fill(true, false).expand(true, false); + gridRunScript.nextRow(); + gridRunScript.add(scpRunScript).fill(true, true).expand(true, true); + gridRunScript.finish(false); + + // build the final grid + grid.add(pnlRunScript).fill(true, true).expand(true, true); + 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 9d6b6134..58ce9b89 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 @@ -39,13 +39,12 @@ import org.openslx.bwlp.thrift.iface.LectureWrite; import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; -import org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfiguration; -import org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfigurationChangeEvent; -import org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfigurationChangeEventListener; import org.openslx.dozmod.gui.control.JCheckBoxTree.CheckChangeEvent; import org.openslx.dozmod.gui.control.JCheckBoxTree.CheckChangeEventListener; import org.openslx.dozmod.gui.control.LectureCustomPermissionManager.UserChangeEvent; import org.openslx.dozmod.gui.control.LectureCustomPermissionManager.UserChangeEventListener; +import org.openslx.dozmod.gui.control.NetrulesConfigurator.NetrulesConfiguration; +import org.openslx.dozmod.gui.control.RunscriptConfigurator.RunscriptConfiguration; import org.openslx.dozmod.gui.helper.DateTimeHelper; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.TextChangeListener; @@ -136,7 +135,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements /** * Holder of the netrules/runscript of this lecture */ - private AdvancedConfiguration currentAdvConf = null; + private NetrulesConfiguration currentNetrules = null; + private RunscriptConfiguration currentRunscript = null; /** * Constructor @@ -258,12 +258,16 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements chkCustomPermAdmin.addActionListener(changeReacter); chkCustomPermEdit.addActionListener(changeReacter); - ctlAdvancedConfigurator.addAdvancedConfigurationChangeEventListener(new AdvancedConfigurationChangeEventListener() { + btnNetrules.addActionListener(new ActionListener() { @Override - public void stateChanged(AdvancedConfigurationChangeEvent event) { - btnSaveChanges.setEnabled(ctlAdvancedConfigurator.hasChanged()); + public void actionPerformed(ActionEvent e) { + NetrulesConfiguration newNetrules = LectureNetrulesWindow.open(me, new NetrulesConfiguration(currentNetrules.netRulesList)); + if (newNetrules != null) + currentNetrules = newNetrules; + reactToChange(); } }); + final TextChangeListener docListener = new TextChangeListener() { @Override public void changed() { @@ -369,7 +373,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements lblImageNameInfo.setText(image.getImageName()); } // remember original advanced config - currentAdvConf = new AdvancedConfiguration(lecture.networkExceptions, lecture.runscript); + currentNetrules = new NetrulesConfiguration(lecture.networkExceptions); + currentRunscript = new RunscriptConfiguration(lecture.runscript); // remember default permissions if (lecture.defaultPermissions != null) { @@ -395,10 +400,9 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements locationInfo = new LocationInfo(lecture.locationIds, lecture.limitToLocations); ctlLocationSelector.setOnlyInSelection(locationInfo.limitToLocations); ctlLocationSelector.setSelectedLocationsAsIds(locationInfo.locationList); - // advanced config stuff, save current information - currentAdvConf = new AdvancedConfiguration(lecture.networkExceptions, lecture.runscript); + // init advanced info - ctlAdvancedConfigurator.setState(new AdvancedConfiguration(lecture.networkExceptions, lecture.runscript)); + ctlRunscriptConfigurator.setState(new RunscriptConfiguration(lecture.runscript)); txtTitle.setText(lecture.getLectureName()); lblTitleInfo.setText(lecture.getLectureName()); @@ -608,8 +612,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) - || (currentAdvConf != null && lecture.networkExceptions != null && !lecture.networkExceptions.equals(currentAdvConf.netRulesList)) - || (currentAdvConf != null && lecture.runscript != null && !lecture.runscript.equals(currentAdvConf.runScriptText)) + || (currentNetrules != null && lecture.networkExceptions != null && !lecture.networkExceptions.equals(currentNetrules)) + || (currentRunscript != null && lecture.runscript != null && !lecture.runscript.equals(currentRunscript)) || imageLinkChanged; return changed; @@ -640,27 +644,27 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements : cboVersions.getItemAt(cboVersions.getSelectedIndex()).versionId; } // goto to advanced tab and check (by getting) the state of the textAreas - currentAdvConf = ctlAdvancedConfigurator.getState(); - if (currentAdvConf == null) { + currentRunscript = ctlRunscriptConfigurator.getState(); + if (currentRunscript == null) { // getState() will return null only if it couldn't parse the rules // which means that the user got informed about what was invalid // So we just return here until the parsing works. - pnlTabs.setSelectedIndex(pnlTabs.indexOfTab("Erweitert")); + pnlTabs.setSelectedIndex(pnlTabs.indexOfTab("Startskript")); return false; } - metadataChanged |= (currentAdvConf.netRulesList != lecture.networkExceptions || currentAdvConf.runScriptText != lecture.runscript); + metadataChanged |= (currentNetrules.netRulesList != lecture.networkExceptions || currentRunscript.runScriptText != lecture.runscript); // now check if we need to push a new LectureWrite if (metadataChanged) { // first build the LectureWrite from the GUI fields final LectureWrite metadata = new LectureWrite(txtTitle.getText(), txtDescription.getText(), lecture.getImageVersionId(), chkAutoUpdate.isSelected(), chkIsActive.isSelected(), DateTimeHelper.getDateFrom(dtpStartDate, spnStartTime).getTime() / 1000L, - DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime).getTime() / 1000L, currentAdvConf.runScriptText, null, + DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime).getTime() / 1000L, currentRunscript.runScriptText, null, chkIsExam.isSelected(), chkHasInternetAccess.isSelected(), // TODO USBACCESS lecture.getDefaultPermissions(), locationInfo.locationList, locationInfo.limitToLocations, // TODO: coming "false" is Location related false, chkHasUsbAccess.isSelected()); - metadata.setNetworkExceptions(currentAdvConf.netRulesList); + metadata.setNetworkExceptions(currentNetrules.netRulesList); // now trigger the actual action try { ThriftManager.getSatClient().updateLecture(Session.getSatelliteToken(), @@ -745,8 +749,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements if (pnlTabs.indexOfTab("Raumauswahl") != -1) { pnlTabs.setEnabledAt(pnlTabs.indexOfTab("Raumauswahl"), editable); } - if (pnlTabs.indexOfTab("Erweitert") != -1) { - pnlTabs.setEnabledAt(pnlTabs.indexOfTab("Erweitert"), editable); + if (pnlTabs.indexOfTab("Startskript") != -1) { + pnlTabs.setEnabledAt(pnlTabs.indexOfTab("Startskript"), editable); } btnChangeOwner.setEnabled(LecturePerms.canAdmin(lecture)); btnDownloadImage.setEnabled(ImagePerms.canDownload(image)); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureAdvancedSettingsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java index 844f464b..c497701b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureAdvancedSettingsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java @@ -7,27 +7,27 @@ import java.awt.event.ActionListener; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.Gui.GuiCallable; -import org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfiguration; +import org.openslx.dozmod.gui.control.NetrulesConfigurator.NetrulesConfiguration; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; -import org.openslx.dozmod.gui.window.layout.LectureAdvancedSettingsWindowLayout; +import org.openslx.dozmod.gui.window.layout.LectureNetrulesWindowLayout; -public class LectureAdvancedSettingsWindow extends LectureAdvancedSettingsWindowLayout +public class LectureNetrulesWindow extends LectureNetrulesWindowLayout implements UiFeedback { private static final long serialVersionUID = -1970717955867180231L; private static final Logger LOGGER = Logger - .getLogger(LectureAdvancedSettingsWindow.class); + .getLogger(LectureNetrulesWindow.class); private boolean apply = false; - private AdvancedConfiguration newConfig = null; - public LectureAdvancedSettingsWindow(Window modalParent, - AdvancedConfiguration advConfig) { + private NetrulesConfiguration newConfig = null; + public LectureNetrulesWindow(Window modalParent, + NetrulesConfiguration netrules) { super(modalParent); btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - newConfig = ctlAdvancedConfigurator.getState(); + newConfig = ctlNetrulesConfigurator.getState(); if (newConfig == null) { return; } @@ -42,14 +42,14 @@ public class LectureAdvancedSettingsWindow extends LectureAdvancedSettingsWindow safeClose(); } }); - ctlAdvancedConfigurator.setState(advConfig); + ctlNetrulesConfigurator.setState(netrules); } /** * @return list of ids of the selected locations. Will be either a new list * if the user clicked apply or the list received from the sat. */ - public AdvancedConfiguration runAndReturn() { + public NetrulesConfiguration runAndReturn() { setVisible(true); if (!apply) return null; @@ -66,12 +66,12 @@ public class LectureAdvancedSettingsWindow extends LectureAdvancedSettingsWindow * @return forwards the return value of the window itself: list of ids of * the selected locations */ - public static AdvancedConfiguration open(final Window modalParent, - final AdvancedConfiguration advConfig) { - return Gui.syncExec(new GuiCallable<AdvancedConfiguration>() { + public static NetrulesConfiguration open(final Window modalParent, + final NetrulesConfiguration netrules) { + return Gui.syncExec(new GuiCallable<NetrulesConfiguration>() { @Override - public AdvancedConfiguration run() { - return new LectureAdvancedSettingsWindow(modalParent, advConfig) + public NetrulesConfiguration run() { + return new LectureNetrulesWindow(modalParent, netrules) .runAndReturn(); } }); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureAdvancedSettingsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureAdvancedSettingsWindowLayout.java deleted file mode 100644 index 6769b862..00000000 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureAdvancedSettingsWindowLayout.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.openslx.dozmod.gui.window.layout; - -import java.awt.BorderLayout; -import java.awt.Window; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JButton; -import javax.swing.JDialog; -import javax.swing.JPanel; - -import org.openslx.dozmod.gui.Gui; -import org.openslx.dozmod.gui.control.AdvancedConfigurator; - -public class LectureAdvancedSettingsWindowLayout extends JDialog { - - private static final long serialVersionUID = 5565439063675405598L; - - private final static String txtTitle = "Erweiterte Einstellungen"; - private final static String txtButtonClose = "Abbrechen"; - private final static String txtButtonSave = "Übernehmen"; - - protected final AdvancedConfigurator ctlAdvancedConfigurator; - - private final JPanel pnlBottomButtons; - protected final JButton btnSave; - protected final JButton btnClose; - - public LectureAdvancedSettingsWindowLayout(Window modalParent) { - super(modalParent, txtTitle, modalParent != null ? ModalityType.APPLICATION_MODAL - : ModalityType.MODELESS); - - // the main content widget - ctlAdvancedConfigurator = new AdvancedConfigurator(); - - // init the layout - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(ctlAdvancedConfigurator, BorderLayout.CENTER); - - // bottom panel for controls - pnlBottomButtons = new JPanel(); - pnlBottomButtons.setLayout(new BoxLayout(pnlBottomButtons, BoxLayout.LINE_AXIS)); - pnlBottomButtons.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - btnClose = new JButton(txtButtonClose); - btnSave = new JButton(txtButtonSave); - pnlBottomButtons.add(Box.createHorizontalGlue()); - pnlBottomButtons.add(btnClose); - pnlBottomButtons.add(btnSave); - getContentPane().add(pnlBottomButtons, BorderLayout.PAGE_END); - - setPreferredSize(Gui.getScaledDimension(500, 400)); - pack(); - Gui.centerShellOverShell(modalParent, this); - } -} 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 2b9727db..048061df 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 @@ -32,7 +32,6 @@ import org.jdatepicker.impl.JDatePickerImpl; import org.jdatepicker.impl.UtilDateModel; import org.openslx.bwlp.thrift.iface.ImageVersionDetails; import org.openslx.dozmod.gui.Gui; -import org.openslx.dozmod.gui.control.AdvancedConfigurator; import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.LectureCustomPermissionManager; @@ -40,6 +39,7 @@ import org.openslx.dozmod.gui.control.LocationSelector; import org.openslx.dozmod.gui.control.PersonLabel; import org.openslx.dozmod.gui.control.QDatePickerImpl; import org.openslx.dozmod.gui.control.QLabel; +import org.openslx.dozmod.gui.control.RunscriptConfigurator; import org.openslx.dozmod.gui.control.WordWrapLabel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.thrift.Session; @@ -78,6 +78,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { protected final QLabel lblUseCount; protected final JButton btnPermissions; + protected final JButton btnNetrules; protected final QLabel lblError; protected final JButton btnSaveChanges; @@ -94,7 +95,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { protected JTabbedPane pnlTabs; protected final LectureCustomPermissionManager ctlPermissionManager; protected final LocationSelector ctlLocationSelector; - protected final AdvancedConfigurator ctlAdvancedConfigurator; + protected final RunscriptConfigurator ctlRunscriptConfigurator; private static final Properties pickerStrings = new Properties(); @@ -105,7 +106,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { protected JPanel pnlTabRestrictions; protected JPanel pnlTabPermissions; protected JPanel pnlTabLocations; - protected JPanel pnlTabAdvanced; + protected JPanel pnlTabRunscript; static { pickerStrings.put("text.today", "Heute"); @@ -295,33 +296,34 @@ public abstract class LectureDetailsWindowLayout extends JDialog { grdGeneral.finish(true); pnlTabRestrictions = new JPanel(); - GridManager grdRestrictions = new GridManager(pnlTabRestrictions, 2, true, + GridManager grdRestrictions = new GridManager(pnlTabRestrictions, 3, true, new Insets(3, 3, 3, 3)); // "restrictions": internet access / usb access / exam grdRestrictions.add(new JLabel("Internetzugriff")); + btnNetrules = new JButton("Ausnahmen"); chkHasInternetAccess = new JCheckBox("zulassen"); - grdRestrictions.add(new WordWrapLabel("Legen Sie hier fest, ob die Veranstaltung Zugriff zum Internet haben soll", false, true)).fill(true, false).expand(true, false); + grdRestrictions.add(new WordWrapLabel("Legen Sie hier fest, ob die Veranstaltung Zugriff zum Internet haben soll", false, true), 2).fill(true, false).expand(true, false); grdRestrictions.nextRow(); grdRestrictions.skip(); grdRestrictions.add(chkHasInternetAccess).fill(true, false).expand(true, false); - // TODO add netrules button here + grdRestrictions.add(btnNetrules).fill(true, false).expand(true, false); grdRestrictions.nextRow(); grdRestrictions.add(new JLabel("Speichermedium-Zugriff")); chkHasUsbAccess = new JCheckBox("zulassen"); - grdRestrictions.add(new WordWrapLabel("Legen Sie hier fest, ob die Veranstaltung den Zugriff auf Speichermedien (CD, USB, ...) erlauben soll", false, true)).fill(true, false).expand(true, false); + grdRestrictions.add(new WordWrapLabel("Legen Sie hier fest, ob die Veranstaltung den Zugriff auf Speichermedien (CD, USB, ...) erlauben soll", false, true), 2).fill(true, false).expand(true, false); grdRestrictions.nextRow(); grdRestrictions.skip(); - grdRestrictions.add(chkHasUsbAccess); + grdRestrictions.add(chkHasUsbAccess, 2); grdRestrictions.nextRow(); grdRestrictions.add(new JLabel("E-Prüfung")); chkIsExam = new JCheckBox("aktiv"); - grdRestrictions.add(new WordWrapLabel("Markieren Sie diese Veranstaltung als E-Prüfung", false, true)).fill(true, false).expand(true, false); + grdRestrictions.add(new WordWrapLabel("Markieren Sie diese Veranstaltung als E-Prüfung", false, true), 2).fill(true, false).expand(true, false); grdRestrictions.nextRow(); grdRestrictions.skip(); - grdRestrictions.add(chkIsExam); + grdRestrictions.add(chkIsExam, 2); btnPermissions = new JButton("Ändern"); grdRestrictions.finish(true); @@ -357,13 +359,13 @@ public abstract class LectureDetailsWindowLayout extends JDialog { /* ******************************************************************************* * - * Tab "Advanced" + * Tab "Runscript" * ********************************************************************************/ - ctlAdvancedConfigurator = new AdvancedConfigurator(); - pnlTabAdvanced = new JPanel(); - GridManager grdAdvanced = new GridManager(pnlTabAdvanced, 1, false); - grdAdvanced.add(ctlAdvancedConfigurator).fill(true, true).expand(true, true); + ctlRunscriptConfigurator = new RunscriptConfigurator(); + pnlTabRunscript = new JPanel(); + GridManager grdAdvanced = new GridManager(pnlTabRunscript, 1, false); + grdAdvanced.add(ctlRunscriptConfigurator).fill(true, true).expand(true, true); grdAdvanced.finish(false); /* ******************************************************************************* @@ -382,7 +384,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog { pnlTabs.addTab("Raumauswahl", pnlTabLocations); } if (Session.isLectureRestrictionsSupported()) { - pnlTabs.addTab("Erweitert", pnlTabAdvanced); + pnlTabs.addTab("Startskript", pnlTabRunscript); } pnlTabs.addTab("Berechtigungen", pnlTabPermissions); add(pnlTabs, BorderLayout.CENTER); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java index 6dc9e85c..c1f3ca3f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureOptionsPageLayout.java @@ -20,7 +20,7 @@ public abstract class LectureOptionsPageLayout extends WizardPage { protected final JCheckBox chkIsExam; protected final JCheckBox chkAutoUpdate; protected final JCheckBox chkIsActive; - protected final JButton btnAdvanced; + protected final JButton btnNetrules; /** * Page for additional options of lecture @@ -28,46 +28,41 @@ public abstract class LectureOptionsPageLayout extends WizardPage { public LectureOptionsPageLayout(Wizard wizard) { super(wizard, title); setDescription("Bitte wählen Sie aus folgenden Optionen aus:"); - GridManager grid = new GridManager(this, 2); + GridManager grid = new GridManager(this, 3); // first column for labels hopefully clearing up some of the mess... // first category for general options JLabel lblGeneral = new JLabel("Allgemeines"); grid.add(lblGeneral); chkAutoUpdate = new JCheckBox("Immer auf aktuellste VM-Version updaten", true); - grid.add(chkAutoUpdate); + grid.add(chkAutoUpdate, 2); grid.nextRow(); chkIsActive = new JCheckBox("Veranstaltung ist aktiv", true); grid.skip(); - grid.add(chkIsActive); + grid.add(chkIsActive, 2); grid.nextRow(); chkIsExam = new JCheckBox("Veranstaltung ist eine Prüfung", false); grid.skip(); - grid.add(chkIsExam); + grid.add(chkIsExam, 2); grid.nextRow(); - grid.add(Box.createVerticalStrut(10), 2); + grid.add(Box.createVerticalStrut(10), 3); grid.nextRow(); // second category for restrictions options JLabel lblRestriction = new JLabel("Beschränkungen"); grid.add(lblRestriction); chkInternetEnabled = new JCheckBox("Internet verfügbar", true); - grid.add(chkInternetEnabled); + btnNetrules = new JButton("Ausnahmen"); + grid.add(chkInternetEnabled).fill(true, false).expand(true, false); + grid.add(btnNetrules); grid.nextRow(); chkUsbEnabled = new JCheckBox("USB-Geräte zulassen", true); grid.skip(); - grid.add(chkUsbEnabled); - grid.nextRow(); - - btnAdvanced = new JButton("Erweiterte Einstellung"); - grid.add(Box.createVerticalStrut(10), 2); - grid.nextRow(); - grid.skip(); - grid.add(btnAdvanced); + grid.add(chkUsbEnabled, 2); grid.nextRow(); grid.finish(true); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java index a100ab05..3ab7bf45 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/LectureOptionsPage.java @@ -5,8 +5,9 @@ import java.awt.event.ActionListener; import javax.swing.SwingUtilities; -import org.openslx.dozmod.gui.control.AdvancedConfigurator.AdvancedConfiguration; -import org.openslx.dozmod.gui.window.LectureAdvancedSettingsWindow; +import org.openslx.dozmod.gui.control.NetrulesConfigurator.NetrulesConfiguration; +import org.openslx.dozmod.gui.control.RunscriptConfigurator.RunscriptConfiguration; +import org.openslx.dozmod.gui.window.LectureNetrulesWindow; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.LectureOptionsPageLayout; import org.openslx.dozmod.state.LectureWizardState; @@ -17,7 +18,8 @@ public class LectureOptionsPage extends LectureOptionsPageLayout { private LectureOptionsPage me = this; private LectureWizardState state = null; - private AdvancedConfiguration currentConf = new AdvancedConfiguration(null, null); + private NetrulesConfiguration currentNetrules = new NetrulesConfiguration(null); + private RunscriptConfiguration currentRunscript = new RunscriptConfiguration(null); /** * Page for lecture options @@ -25,16 +27,17 @@ public class LectureOptionsPage extends LectureOptionsPageLayout { public LectureOptionsPage(final Wizard wizard, LectureWizardState state) { super(wizard); this.state = state; - this.currentConf = new AdvancedConfiguration(state.netRules, state.runScriptText); + this.currentNetrules = new NetrulesConfiguration(state.netRules); + this.currentRunscript = new RunscriptConfiguration(state.runScriptText); setPageComplete(true); - btnAdvanced.addActionListener(new ActionListener() { + btnNetrules.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - AdvancedConfiguration newConf = LectureAdvancedSettingsWindow.open( - SwingUtilities.getWindowAncestor(me), currentConf); - if (newConf != null) { - currentConf = newConf; + NetrulesConfiguration newNetrules = LectureNetrulesWindow.open( + SwingUtilities.getWindowAncestor(me), currentNetrules); + if (newNetrules != null) { + currentNetrules = newNetrules; updateState(); } } @@ -43,7 +46,7 @@ public class LectureOptionsPage extends LectureOptionsPageLayout { chkIsExam.setEnabled(false); chkInternetEnabled.setEnabled(false); chkUsbEnabled.setEnabled(false); - btnAdvanced.setEnabled(false); + btnNetrules.setEnabled(false); } } @@ -61,8 +64,8 @@ public class LectureOptionsPage extends LectureOptionsPageLayout { state.internetAccess = chkInternetEnabled.isSelected(); state.isEnabled = chkIsActive.isSelected(); state.usbAllowed = chkUsbEnabled.isSelected(); - state.netRules = currentConf.netRulesList; - state.runScriptText = currentConf.runScriptText; + state.netRules = currentNetrules.netRulesList; + state.runScriptText = currentRunscript.runScriptText; setDescription("Klicken Sie auf 'Weiter' für Berechtigungen oder 'Fertigstellen'."); return true; |
