diff options
author | Nino Breuer | 2014-09-17 14:39:10 +0200 |
---|---|---|
committer | Nino Breuer | 2014-09-17 14:39:10 +0200 |
commit | 3a5b035535c65c9544d5d83e8f7a5dbd991acdf6 (patch) | |
tree | 0dabeba304cf310e5defdd35392a1f49c2ca4d33 /dozentenmodul/src/main/java | |
parent | Fixed some wording and spelling (diff) | |
parent | Revert "[client] center GUIs in the primary display only" (diff) | |
download | tutor-module-3a5b035535c65c9544d5d83e8f7a5dbd991acdf6.tar.gz tutor-module-3a5b035535c65c9544d5d83e8f7a5dbd991acdf6.tar.xz tutor-module-3a5b035535c65c9544d5d83e8f7a5dbd991acdf6.zip |
Merge branch 'master' of ssh://git.openslx.org/openslx-ng/tutor-module
Conflicts:
dozentenmodul/src/main/java/gui/intro/MainMenue_GUI.java
Diffstat (limited to 'dozentenmodul/src/main/java')
-rw-r--r-- | dozentenmodul/src/main/java/gui/intro/MainMenue_GUI.java | 605 | ||||
-rw-r--r-- | dozentenmodul/src/main/java/util/News.java | 247 |
2 files changed, 247 insertions, 605 deletions
diff --git a/dozentenmodul/src/main/java/gui/intro/MainMenue_GUI.java b/dozentenmodul/src/main/java/gui/intro/MainMenue_GUI.java deleted file mode 100644 index bad22c37..00000000 --- a/dozentenmodul/src/main/java/gui/intro/MainMenue_GUI.java +++ /dev/null @@ -1,605 +0,0 @@ -package gui.intro; - -import gui.image.CreateImageAllgemein_GUI; -import gui.image.DeleteImage_GUI; -import gui.image.SearchEditImage_GUI; -import gui.image.SearchImage_GUI; -import gui.lecture.CreateLectureAllgemein_GUI; -import gui.lecture.DeleteLecture_GUI; -import gui.lecture.EditLectureSearch_GUI; -import gui.lecture.SearchLecture_GUI; - -import java.awt.FlowLayout; -import java.awt.Font; -import java.awt.ScrollPane; -import java.awt.SystemColor; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.ButtonGroup; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JSeparator; -import javax.swing.JTextArea; -import javax.swing.JTextPane; -import javax.swing.SwingConstants; -import javax.swing.ToolTipManager; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.border.EmptyBorder; -import javax.swing.border.TitledBorder; - -import models.ImageRights; -import models.Links; -import models.SessionData; -import models.person; -import util.GuiOrganizer; -import util.ResourceLoader; -import util.OpenLinks; - -@SuppressWarnings("serial") -public class MainMenue_GUI extends JFrame { - - private final JPanel contentPanel = new JPanel(); - String[] result; - String descNewImage, descEditImage, descDeleteImage, descSearchImage, - descNewLecture, descEditLecture, descDeleteLecture, - descSearchLecture = ""; - JRadioButton rdbtnImageNew; - JRadioButton rdbtnImageEdit; - JRadioButton rdbtnImageSearchDownload; - JRadioButton rdbtnLectureNew; - JRadioButton rdbtnImageDelete; - JRadioButton rdbtnLectureEdit; - JRadioButton rdbtnLectureDelete; - JRadioButton rdbtnLectureSearch; - private final ButtonGroup buttonGroup = new ButtonGroup(); - private JMenuItem mntmAbout; - - // for testing - ImageRights imageRights = new ImageRights(); - - /** - * Create the dialog. - */ - public MainMenue_GUI() { - - // Leerzeile auf Konsole bei Rueckkehr ins Hauptmenue fuer leichteres - // Lesen - System.out.println("\n"); - - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent arg0) { - System.exit(0); - } - }); - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (ClassNotFoundException | InstantiationException - | IllegalAccessException | UnsupportedLookAndFeelException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - setTitle("bwLehrpool Suite - Connected Server: " - + SessionData.session.getServerAdress()); - setBounds(0, 0, 603, 722); - GuiOrganizer.centerGUI(this); - - getContentPane().setLayout(null); - { - JPanel panel = new JPanel(); - panel.setBackground(SystemColor.menu); - panel.setBounds(10, 11, 567, 69); - getContentPane().add(panel); - panel.setLayout(null); - { - JLabel lblNewLabel = new JLabel("Hauptmenü"); - lblNewLabel.setBounds(10, 11, 509, 22); - panel.add(lblNewLabel); - lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 18)); - } - - JTextPane txtpnBitteWhlenSie = new JTextPane(); - txtpnBitteWhlenSie.setEditable(false); - txtpnBitteWhlenSie.setBackground(SystemColor.menu); - txtpnBitteWhlenSie - .setText("Bitte wählen Sie ihre gewünschte Aktion."); - txtpnBitteWhlenSie.setBounds(10, 36, 509, 22); - panel.add(txtpnBitteWhlenSie); - } - contentPanel.setBounds(10, 104, 567, 502); - contentPanel.setBackground(SystemColor.menu); - - contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); - getContentPane().add(contentPanel); - contentPanel.setLayout(null); - - JPanel panelImage = new JPanel(); - panelImage.setBackground(SystemColor.menu); - panelImage.setBorder(new TitledBorder(null, "Image", - TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panelImage.setBounds(10, 221, 270, 133); - contentPanel.add(panelImage); - panelImage.setLayout(null); - - rdbtnImageNew = new JRadioButton("Neu"); - rdbtnImageNew - .setToolTipText("Hier können Sie eine standard Laborvorlage downloaden"); - rdbtnImageNew.setBounds(20, 22, 159, 23); - panelImage.add(rdbtnImageNew); - buttonGroup.add(rdbtnImageNew); - rdbtnImageNew.setBackground(SystemColor.menu); - - rdbtnImageEdit = new JRadioButton("Bearbeiten"); - rdbtnImageEdit - .setToolTipText("Hier können Sie ein bestehendes Labor zum verändern downloaden"); - rdbtnImageEdit.setBounds(20, 48, 185, 23); - panelImage.add(rdbtnImageEdit); - buttonGroup.add(rdbtnImageEdit); - rdbtnImageEdit.setHorizontalAlignment(SwingConstants.LEFT); - rdbtnImageEdit.setBackground(SystemColor.menu); - - rdbtnImageDelete = new JRadioButton("Löschen"); - rdbtnImageDelete.setEnabled(true); - buttonGroup.add(rdbtnImageDelete); - rdbtnImageDelete - .setToolTipText("Hier können Sie ein bestehendes Labor zum verändern downloaden"); - rdbtnImageDelete.setHorizontalAlignment(SwingConstants.LEFT); - rdbtnImageDelete.setBackground(SystemColor.menu); - rdbtnImageDelete.setBounds(20, 74, 185, 23); - panelImage.add(rdbtnImageDelete); - - rdbtnImageSearchDownload = new JRadioButton("Suche und Download"); - buttonGroup.add(rdbtnImageSearchDownload); - rdbtnImageSearchDownload - .setToolTipText("Hier können Sie ein bestehendes Labor zum verändern downloaden"); - rdbtnImageSearchDownload.setHorizontalAlignment(SwingConstants.LEFT); - rdbtnImageSearchDownload.setBackground(SystemColor.menu); - rdbtnImageSearchDownload.setBounds(20, 100, 185, 23); - panelImage.add(rdbtnImageSearchDownload); - - JPanel panelDesc = new JPanel(); - panelDesc.setLayout(null); - panelDesc.setBorder(new TitledBorder(UIManager - .getBorder("TitledBorder.border"), "Erklärung", - TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panelDesc.setBackground(SystemColor.menu); - panelDesc.setBounds(10, 364, 270, 133); - contentPanel.add(panelDesc); - - ScrollPane scrollPaneDesc = new ScrollPane(); - scrollPaneDesc.setBounds(10, 15, 250, 110); - final JTextArea txtDesc = new JTextArea(); - txtDesc.setEditable(false); - txtDesc.setBounds(280, 211, 10, 10); - txtDesc.setLineWrap(true); - txtDesc.setWrapStyleWord(true); - txtDesc.setFont(new Font("Tahoma", Font.PLAIN, 11)); - txtDesc.setBackground(SystemColor.menu); - scrollPaneDesc.add(txtDesc); - // Pro AUswahl - txtDesc.setText("Legen Sie ein neues Image an und laden Sie anschließend die passende .vmdk-Datei hoch. Ein Image (wenn auch von einem anderen Dozenten) ist die Voraussetzung für eine Veranstaltung."); - panelDesc.add(scrollPaneDesc); - - JPanel panelVeranstaltung = new JPanel(); - panelVeranstaltung.setLayout(null); - panelVeranstaltung.setBorder(new TitledBorder(UIManager - .getBorder("TitledBorder.border"), "Veranstaltung (VMChooser)", - TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panelVeranstaltung.setBackground(SystemColor.menu); - panelVeranstaltung.setBounds(290, 221, 270, 133); - contentPanel.add(panelVeranstaltung); - - rdbtnLectureNew = new JRadioButton("Neu"); - buttonGroup.add(rdbtnLectureNew); - rdbtnLectureNew - .setToolTipText("Hier können Sie Ihre Labordaten eingeben"); - rdbtnLectureNew.setBounds(20, 24, 185, 23); - panelVeranstaltung.add(rdbtnLectureNew); - rdbtnLectureNew.setBackground(SystemColor.menu); - - rdbtnLectureEdit = new JRadioButton("Bearbeiten"); - rdbtnLectureEdit - .setToolTipText("Hier können Sie einen Link auf ein bestehendes Labor erzeugen"); - rdbtnLectureEdit.setBounds(20, 50, 230, 23); - panelVeranstaltung.add(rdbtnLectureEdit); - buttonGroup.add(rdbtnLectureEdit); - rdbtnLectureEdit.setBackground(SystemColor.menu); - - rdbtnLectureDelete = new JRadioButton("Löschen"); - rdbtnLectureDelete - .setToolTipText("Hier können Sie ein Labor löschen"); - rdbtnLectureDelete.setBounds(20, 76, 175, 23); - panelVeranstaltung.add(rdbtnLectureDelete); - buttonGroup.add(rdbtnLectureDelete); - rdbtnLectureDelete.setBackground(SystemColor.menu); - - rdbtnLectureSearch = new JRadioButton("Suche"); - buttonGroup.add(rdbtnLectureSearch); - rdbtnLectureSearch - .setToolTipText("Hier können Sie ein Labor löschen"); - rdbtnLectureSearch.setBackground(SystemColor.menu); - rdbtnLectureSearch.setBounds(20, 102, 175, 23); - panelVeranstaltung.add(rdbtnLectureSearch); - - JPanel panelNews = new JPanel(); - panelNews.setLayout(null); - panelNews.setBorder(new TitledBorder(UIManager - .getBorder("TitledBorder.border"), "News", - TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panelNews.setBackground(SystemColor.menu); - panelNews.setBounds(290, 364, 270, 133); - contentPanel.add(panelNews); - - ScrollPane scrollPaneNews = new ScrollPane(); - scrollPaneNews.setBounds(10, 15, 250, 110); - JTextArea txtNews = new JTextArea(); - txtNews.setEditable(false); - txtNews.setFont(new Font("Tahoma", Font.PLAIN, 11)); - txtNews.setBackground(SystemColor.menu); - txtNews.setWrapStyleWord(true); - txtNews.setLineWrap(true); - txtNews.setText("Hier werden mal die Neuigkeiten stehen. Diese kommen direkt vom Satelliten und sind hochschulspezifisch."); - scrollPaneNews.add(txtNews); - panelNews.add(scrollPaneNews); - - /* - * Berücksichtigen der Rechte für GUI - */ - // set the rights for this user - setRoleRights(); - processRights(); - setCorrectRadioButton(); - - /* - * Funktion Texte für das Klicken der RadioButtons - */ - rdbtnImageNew.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - descNewImage = "Legen Sie ein neues Image an und laden Sie anschließend die passende .vmdk-Datei hoch. Ein Image (wenn auch von einem anderen Dozenten) ist die Voraussetzung für eine Veranstaltung."; - txtDesc.setText(descNewImage); - } - }); - rdbtnImageEdit.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descEditImage = "Bearbeiten Sie die hinterlegten Informationen zu einem Image oder laden Sie eine neue .vmdk-Datei hoch."; - txtDesc.setText(descEditImage); - } - }); - rdbtnImageDelete.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descDeleteImage = "Suchen Sie alte und nicht mehr benötigte Images und löschen Sie diese."; - txtDesc.setText(descDeleteImage); - } - }); - rdbtnImageSearchDownload.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descSearchImage = "Suchen Sie nach bestimmten Images oder verschaffen Sie sich einen überblick über alle verfügbaren Images. Sie können gewünschte Images umgehend herunterladen."; - txtDesc.setText(descSearchImage); - } - }); - rdbtnLectureNew.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descNewLecture = "Legen Sie eine neue Veranstaltung an und verknüpfen Sie diese mit einem bereits vorhandenen Image. Ihre neue Veranstaltung kann auch auf dem Image eines anderen Dozenten beruhen."; - txtDesc.setText(descNewLecture); - } - }); - rdbtnLectureEdit.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descEditLecture = "Bearbeiten Sie die hinterlegten Informationen zu einer Veranstaltung."; - txtDesc.setText(descEditLecture); - } - }); - rdbtnLectureDelete.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descDeleteLecture = "Suchen und löschen Sie eine Veranstaltung. Das hiermit verbundene Image bleibt erhalten."; - txtDesc.setText(descDeleteLecture); - } - }); - rdbtnLectureSearch.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - descSearchLecture = "Suchen Sie nach bestimmten Veranstaltungen oder verschaffen Sie sich einen Überblick über alle verfügbaren Veranstaltungen. Eventuell gibt es bereits etwas passendes für Ihre Vorlesung."; - txtDesc.setText(descSearchLecture); - } - }); - /* - * Ende der Radiobuttons - */ - - JLabel lblGrafik = new JLabel(""); - // ToolTipp fuer Grafik - lblGrafik - .setToolTipText("<html>" - + "Ein virtuelles Labor besteht immer aus den beiden Komponenten <br>" - + "Image und Veranstaltung. Ein Image ist dabei die Grundlage für <br>" - + "mehrere Veranstaltungen. Somit kann eine neue Veranstaltung <br>" - + "erstellt werden, ohne ein neues Image hochladen zu müssen. <br> <br> <br>" - + "<b>Image:</b> Das Image enthält die Software, die im <br>" - + "virtuellen Labor benötigt wird. Es wird von genau einem Dozenten <br>" - + "angelegt und besitzt einen allgemeinen Namen, z.B. \"Programmieren\". <br>" - + "Bei einem Image handelt es sich um eine Datei vom Typ VMDK. <br> <br> <br>" - + "<b>Veranstaltung:</b> Es können nun, basierend auf einem Image,<br>" - + " beliebig viele Veranstaltungen von unterschiedlichen Dozenten erstellt <br>" - + "werden. Diese könnten z.B. konkret \"Web-Entwicklung\" oder \"Künstliche <br>" - + "Intelligenz\" lauten und referenzieren dabei auf das allgemeine Image <br>" - + "\"Programmieren\".</html>"); - lblGrafik.setIcon(ResourceLoader.getIcon("/img/e4_n_imgs2_bwl_vmc_v2.png")); - - // ToolTipp lange anzeigen - 60sec - ToolTipManager.sharedInstance().setDismissDelay(60000); - ToolTipManager.sharedInstance().registerComponent(lblGrafik); - lblGrafik.setBounds(10, -12, 547, 189); - contentPanel.add(lblGrafik); - - JTextPane txtpnUmDetaillierteInformationen = new JTextPane(); - txtpnUmDetaillierteInformationen - .setText("Um detaillierte Informationen zu erhalten, fahren Sie bitte mit der Maus über die Grafik."); - txtpnUmDetaillierteInformationen.setEditable(false); - txtpnUmDetaillierteInformationen.setBackground(SystemColor.menu); - txtpnUmDetaillierteInformationen.setBounds(10, 188, 509, 22); - contentPanel.add(txtpnUmDetaillierteInformationen); - { - JPanel buttonPane = new JPanel(); - buttonPane.setBounds(0, 630, 587, 33); - buttonPane.setBackground(SystemColor.menu); - buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); - getContentPane().add(buttonPane); - { - JButton continueButton = new JButton("Weiter"); - - continueButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - - // Images - if (rdbtnImageNew.isSelected() == true) { - CreateImageAllgemein_GUI sr = new CreateImageAllgemein_GUI(); - sr.setVisible(true); - dispose(); - } else if (rdbtnImageEdit.isSelected() == true) { - SearchEditImage_GUI si = new SearchEditImage_GUI(); - si.setVisible(true); - dispose(); - } else if (rdbtnImageDelete.isSelected() == true) { - DeleteImage_GUI di = new DeleteImage_GUI(); - di.setVisible(true); - dispose(); - } else if (rdbtnImageSearchDownload.isSelected() == true) { - // SearchMethodLecture_GUI sm = new - // SearchMethodLecture_GUI(); - SearchImage_GUI si = new SearchImage_GUI(); - si.setVisible(true); - dispose(); - // Lectures - } else if (rdbtnLectureNew.isSelected() == true) { - CreateLectureAllgemein_GUI av = new CreateLectureAllgemein_GUI(); - av.setVisible(true); - dispose(); - } else if (rdbtnLectureEdit.isSelected() == true) { - EditLectureSearch_GUI el = new EditLectureSearch_GUI(); - el.setVisible(true); - dispose(); - } else if (rdbtnLectureDelete.isSelected() == true) { - DeleteLecture_GUI dl = new DeleteLecture_GUI(); - dl.setVisible(true); - dispose(); - } else if (rdbtnLectureSearch.isSelected() == true) { - SearchLecture_GUI sl = new SearchLecture_GUI(); - sl.setVisible(true); - dispose(); - } else - JOptionPane.showMessageDialog(null, - "Keine Auswahl getroffen.", - "Auswahl fehlt", JOptionPane.ERROR_MESSAGE); - } - }); - continueButton.setActionCommand("OK"); - buttonPane.add(continueButton); - getRootPane().setDefaultButton(continueButton); - } - } - { - JSeparator separator = new JSeparator(); - separator.setBounds(0, 617, 587, 2); - getContentPane().add(separator); - } - { - JSeparator separator = new JSeparator(); - separator.setBounds(0, 91, 587, 2); - getContentPane().add(separator); - } - - JMenuBar menuBar = new JMenuBar(); - setJMenuBar(menuBar); - - JMenu mnNewMenu_1 = new JMenu("Hilfe"); - menuBar.add(mnNewMenu_1); - - JMenuItem mntmFaq = new JMenuItem("FAQ"); - mntmFaq.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent arg0) { - OpenLinks open = new OpenLinks(); - URI windows; - try { - windows = new URI(Links.getFAQ()); - open.openWebpage(windows); - } catch (URISyntaxException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - }); - mnNewMenu_1.add(mntmFaq); - - JMenuItem mntmOtrs = new JMenuItem("OTRS"); - mntmOtrs.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent arg0) { - OpenLinks open = new OpenLinks(); - URI windows; - try { - windows = new URI(Links.getOTRS()); - open.openWebpage(windows); - } catch (URISyntaxException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - }); - mnNewMenu_1.add(mntmOtrs); - - mntmAbout = new JMenuItem("About"); - mntmAbout.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - About_GUI ab = new About_GUI(); - ab.setVisible(true); - } - }); - mnNewMenu_1.add(mntmAbout); - - }// end main - - private void processRights() { - - /* - * Legt anhand der Rolle fest, welche Operationen der user machen darf. - * Rolle kommt vom Masterserver - */ - - // Image - if (person.verantwortlicher.getRole().equals("Student")) { - rdbtnImageNew.setEnabled(false); - rdbtnImageEdit.setEnabled(false); - rdbtnImageDelete.setEnabled(false); - rdbtnImageSearchDownload.setEnabled(true); - } else if (person.verantwortlicher.getRole().equals("Dozent") - || person.verantwortlicher.getRole().equals("Admin")) { - rdbtnImageNew.setEnabled(true); - rdbtnImageEdit.setEnabled(true); - rdbtnImageDelete.setEnabled(true); - rdbtnImageSearchDownload.setEnabled(true); - } else { - rdbtnImageNew.setEnabled(false); - rdbtnImageEdit.setEnabled(false); - rdbtnImageDelete.setEnabled(false); - rdbtnImageSearchDownload.setEnabled(false); - } - - // Veranstaltung - if (person.verantwortlicher.getRole().equals("Student")) { - rdbtnLectureNew.setEnabled(false); - rdbtnLectureEdit.setEnabled(false); - rdbtnLectureDelete.setEnabled(false); - rdbtnLectureSearch.setEnabled(true); - } else if (person.verantwortlicher.getRole().equals("Dozent") - || person.verantwortlicher.getRole().equals("Admin")) { - rdbtnLectureNew.setEnabled(true); - rdbtnLectureEdit.setEnabled(true); - rdbtnLectureDelete.setEnabled(true); - rdbtnLectureSearch.setEnabled(true); - } else { - rdbtnLectureNew.setEnabled(false); - rdbtnLectureEdit.setEnabled(false); - rdbtnLectureDelete.setEnabled(false); - rdbtnLectureSearch.setEnabled(false); - } - - }// end processRights() - - public void setRoleRights() { - // Set rights for user, depending on the role that is returned by the - // masterserver - - System.out.println("Ihre Rolle ist nun: " - + person.verantwortlicher.getRole()); - // role==Student - if (person.verantwortlicher.getRole().equals("Student")) { - ImageRights.rights.setRead(1); - ImageRights.rights.setWrite(0); - ImageRights.rights.setChangePermission(0); - ImageRights.rights.setAdmin(0); - ImageRights.rights.setLinkAllowed(0); - System.out.println("Rechte (r,w,cp,a,la): " - + ImageRights.rights.getRead() + "," - + ImageRights.rights.getWrite() + "," - + ImageRights.rights.getChangePermission() + "," - + ImageRights.rights.getAdmin() + "," - + ImageRights.rights.getLinkAllowed()); - - } else if (person.verantwortlicher.getRole().equals("Dozent")) { // role==Dozent - ImageRights.rights.setRead(1); - ImageRights.rights.setWrite(1); - ImageRights.rights.setChangePermission(0); - ImageRights.rights.setAdmin(0); - ImageRights.rights.setLinkAllowed(1); - System.out.println("Rechte (r,w,cp,a,la): " - + ImageRights.rights.getRead() + "," - + ImageRights.rights.getWrite() + "," - + ImageRights.rights.getChangePermission() + "," - + ImageRights.rights.getAdmin() + "," - + ImageRights.rights.getLinkAllowed()); - } else if (person.verantwortlicher.getRole().equals("Admin")) { // role==Admin - ImageRights.rights.setRead(1); - ImageRights.rights.setWrite(1); - ImageRights.rights.setChangePermission(1); - ImageRights.rights.setAdmin(1); - ImageRights.rights.setLinkAllowed(1); - System.out.println("Rechte (r,w,cp,a,la): " - + ImageRights.rights.getRead() + "," - + ImageRights.rights.getWrite() + "," - + ImageRights.rights.getChangePermission() + "," - + ImageRights.rights.getAdmin() + "," - + ImageRights.rights.getLinkAllowed()); - } else { // role==Nothing - ImageRights.rights.setRead(0); - ImageRights.rights.setWrite(0); - ImageRights.rights.setChangePermission(0); - ImageRights.rights.setAdmin(0); - ImageRights.rights.setLinkAllowed(0); - System.out.println("Rechte (r,w,cp,a,la): " - + ImageRights.rights.getRead() + "," - + ImageRights.rights.getWrite() + "," - + ImageRights.rights.getChangePermission() + "," - + ImageRights.rights.getAdmin() + "," - + ImageRights.rights.getLinkAllowed()); - }// end if else - }// end setRoleRights - - public void setCorrectRadioButton() { - // get the first enabled RadioButton depending on role an rights. Start - // at top - - if (rdbtnImageNew.isEnabled() == true) { - rdbtnImageNew.setSelected(true); - } else if (rdbtnImageEdit.isEnabled() == true) { - rdbtnImageEdit.setSelected(true); - } else if (rdbtnImageDelete.isEnabled() == true) { - rdbtnImageDelete.setSelected(true); - } else if (rdbtnImageSearchDownload.isEnabled() == true) { - rdbtnImageSearchDownload.setSelected(true); - } else if (rdbtnLectureNew.isEnabled() == true) { - rdbtnLectureNew.setSelected(true); - } else if (rdbtnLectureEdit.isEnabled() == true) { - rdbtnLectureEdit.setSelected(true); - } else if (rdbtnLectureDelete.isEnabled() == true) { - rdbtnLectureDelete.setSelected(true); - } else if (rdbtnLectureSearch.isEnabled() == true) { - rdbtnLectureSearch.setSelected(true); - } - - }// end setCorrectRadioButton() -}// end class diff --git a/dozentenmodul/src/main/java/util/News.java b/dozentenmodul/src/main/java/util/News.java new file mode 100644 index 00000000..22f78c92 --- /dev/null +++ b/dozentenmodul/src/main/java/util/News.java @@ -0,0 +1,247 @@ +package util; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.sql.Date; + +import javax.swing.JOptionPane; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import models.SessionData; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * Class representing the news given by the satellite + * Makes use of the News-API of the webservice slx-admin: + * http://satellite.ip/slx-admin/api.php?do=news + * + * Access the data through the public getters: + * String newsHeadline = News.getHeadline(); + * String newsContent = News.getContent(); + * Date newsLatestDate = News.getDate(); + */ + +public class News { + + // Private members representing the news + private static String headline = null; + private static String content = null; + private static Date date = null; + + /** + * Gets the headline as String. + * + * @return String Contains the headline text. + */ + public static String getHeadline() { + if (headline != null) + return headline; + else { + init(); + // check if it is still null + if (headline != null) + return headline; + else + return null; + } + } + + /** + * Gets the content as String. + * + * @return String Contains the content text. + */ + public static String getContent() { + if (content != null) + return content; + else { + init(); + if (content != null) + return content; + else + return null; + } + } + + /** + * Gets the date of the latest news as Date. + * + * @return Date Represent last modification date. + */ + public static Date getDate() { + if (date != null) + return date; + else { + init(); + if (date != null) + return date; + else + return null; + } + } + + /** + * Private 'init' function doing the main work. + * It is called by getters if their object is null. + * Follows these steps: + * - Opens URL as stream + * - Parse stream as (XML-)Document + * - Check validity of the news format: + * <news> + * <headline>...</headline> + * <content>...</content> + * <date>...</date> + * </news> + * + * - Sets private members + */ + + private static void init(){ + // Document representing the XML + Document doc = null; + + // URL to news API + URL url = null; + try { + url = new URL("http://" + SessionData.session.getServerAdress() + "/slx-admin/api.php?do=news"); + } catch (MalformedURLException e2) { + e2.printStackTrace(); + // This shouldn't happen, but in case it does, alert user. + JOptionPane.showMessageDialog(null, + "News-URL falsch formatiert!", + "Fehler", JOptionPane.ERROR_MESSAGE); + } + + // check for argument + if (url == null) { + // no URL, alert user. + JOptionPane.showMessageDialog(null, + "Keine News-URL angegben!", + "Fehler", JOptionPane.ERROR_MESSAGE); + return; + } + + // set timeout for URLConnection + URLConnection urlCon = null; + try { + urlCon = url.openConnection(); + // 5 seconds timeout for connection + urlCon.setConnectTimeout(5000); + // 10 seconds timeout for reading the stream + urlCon.setReadTimeout(10000); + } catch (IOException e1) { + e1.printStackTrace(); + JOptionPane.showMessageDialog(null, + "Satellite antwortete auf die Anfrage der News-XML nicht!", + "Fehler", JOptionPane.ERROR_MESSAGE); + return; + } + + InputStream is = null; + try { + is = urlCon.getInputStream(); + } catch (IOException e1) { + e1.printStackTrace(); + JOptionPane.showMessageDialog(null, + "Konnte den News-URL-Stream nicht öffnen!", + "Fehler", JOptionPane.ERROR_MESSAGE); + return; + } + + // use java's DocumentBuilder engine to parse the XML + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + + try { + builder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e1) { + e1.printStackTrace(); + JOptionPane.showMessageDialog(null, + "XML-Parser falsch konfiguriert!", + "Fehler", JOptionPane.ERROR_MESSAGE); + return; + } + + // try the parsing + try { + doc = builder.parse(is); + } catch (SAXException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(null, + "Konnte die News-XML nicht parsen!", + "Fehler", JOptionPane.ERROR_MESSAGE); + return; + } catch (IOException e) { + JOptionPane.showMessageDialog(null, + "IO-Fehler!", + "Fehler", JOptionPane.ERROR_MESSAGE); + e.printStackTrace(); + return; + } + + // now that we have parsed the XML, check if it is valid + Element docRoot = doc.getDocumentElement(); + + // first element has to be name "news" + if (docRoot.getNodeName().equals("news")) { + Node headlineNode = null; + Node contentNode = null; + Node dateNode = null; + + // get list of every child + NodeList nList = docRoot.getElementsByTagName("*"); + + // fail if the list is empty + if (nList == null) return; + + // now we go through the list looking for our elements + // TODO: get definition of tags externally/through static api? + for (int i = 0; i < nList.getLength(); i++) { + Node current = nList.item(i); + if (current.getNodeType() == Node.ELEMENT_NODE) { + if (current.getNodeName().equals("headline") && + current.getFirstChild().getNodeType() == Node.TEXT_NODE) headlineNode = current.getFirstChild(); + // FIXME: temporary workaround for possibly different slx-admin versions! + if ((current.getNodeName().equals("info") || current.getNodeName().equals("content")) && + current.getFirstChild().getNodeType() == Node.TEXT_NODE) contentNode = current.getFirstChild(); + if (current.getNodeName().equals("date") && + current.getFirstChild().getNodeType() == Node.TEXT_NODE) dateNode = current.getFirstChild(); + } + } + + // set what the elements we found + if (headlineNode != null) headline = headlineNode.getNodeValue().trim(); + if (contentNode != null) content = contentNode.getNodeValue().trim(); + if (dateNode != null) { + // for the date we need a bit more stuff + Date tmpDate = null; + try { + tmpDate = new Date(Long.parseLong(dateNode.getNodeValue().trim()) * 1000); + } catch (NumberFormatException nfe) { + nfe.printStackTrace(); + JOptionPane.showMessageDialog(null, + "Zeitstempel aus der XML is invalid!", + "Fehler", JOptionPane.ERROR_MESSAGE); + // TODO: set current date. + } + // Date creation worked, save it + if (tmpDate != null) date = tmpDate; + } + } else { + JOptionPane.showMessageDialog(null, + "Invalides XML! Kein 'news' Wurzelelement. News wird leer gelassen.", + "Fehler", JOptionPane.ERROR_MESSAGE); + return; + } + } +} |