/* * Created on 06.03.2005 */ package swingClient; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileOutputStream; import java.rmi.RemoteException; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.Locale; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.Timer; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLFrameHyperlinkEvent; import javax.xml.rpc.handler.Handler; import javax.xml.rpc.handler.HandlerChain; import javax.xml.rpc.soap.SOAPFaultException; import jplagWsClient.jplagClient.JPlagException; import jplagWsClient.jplagClient.JPlagService_Impl; import jplagWsClient.jplagClient.JPlagTyp_Stub; import jplagWsClient.jplagClient.LanguageInfo; import jplagWsClient.jplagClient.Option; import jplagWsClient.jplagClient.ServerInfo; import jplagWsClient.jplagClient.Status; import jplagWsClient.jplagClient.Submission; import jplagWsClient.jplagClient.UserInfo; import jplagWsClient.util.JPlagClientAccessHandler; /** * @author Moritz Kroll */ public class JplagSwingClient extends JFrame { private static final long serialVersionUID = 1L; /* * -1 = invalid userid 0 = in queue -> progress=position in queue 100 = * parsing -> progress=percentage 101 =parsing with warning see report file * 200 = comparing -> progress=percentage 201 = packaging result 300 = done, * result is ready for download 400 = unknown Error or many errors occured * see Report for more Information 401 = error =Bad Language 402 = error = * No enough submissions for all states between 400 and 499 see report for * more information */ public static final int INVALID = -1; public static final int INQUEUE = 0; public static final int PARSING = 100; public static final int PARSING_WARNING = 101; public static final int COMPARING = 200; // public static final int WRITING_RESULTS=3; // public static final int PACKAGING_RESULTS=201; public static final int GENERATING_RESULT_FILES = 250; public static final int DONE = 300; public static final int ERROR = 400; public static final int ERROR_BADLANG = 401; public static final int ERROR_TOOFEWSUBS = 402; private Status curStatus = null; private Timer statusTimer = null; private javax.swing.JPanel jContentPane = null; private JLabel resultDir_label = null; // @jve:decl-index=0:visual-constraint="65,223" private JTextField jResultDir = null; private JPanel submission_panel = null; private JTextField sourceDir = null; private JPanel jPanel1 = null; private JButton getServerInfo_button = null; private JButton jButton1 = null; private JButton jButton2 = null; private JButton getResults_button = null; private JProgressBar jProgressBar = null; private JLabel submissionNumber_label = null; private JTextField jSubmissionNum = null; private JPanel jPanel4 = null; private JTextField jStatusText = null; private JLabel compareSourceDir_label = null; private JPlagTyp_Stub stub = null; private JPanel jPanel = null; private JButton showResults_Button = null; private JScrollPane jScrollPane = null; private JEditorPane jEditorPane = null; private JPlagClientAccessHandler accessHandler = null; public JPlagTyp_Stub getJplagStub() { if (stub == null) { stub = (JPlagTyp_Stub) (new JPlagService_Impl().getJPlagServicePort()); HandlerChain handlerchain = stub._getHandlerChain(); @SuppressWarnings("unchecked") Iterator<Handler> handlers = handlerchain.iterator(); while (handlers.hasNext()) { Handler handler = handlers.next(); if (handler instanceof JPlagClientAccessHandler) { accessHandler = ((JPlagClientAccessHandler) handler); break; } } } if (accessHandler != null) { accessHandler.setUserPassObjects(getJUsernameField().getText(), String.valueOf(getJPasswordField().getPassword())); } return stub; } public boolean CheckConnectException(RemoteException re) { Throwable cause = re.getCause(); if (cause != null && cause instanceof com.sun.xml.rpc.client.ClientTransportException) { cause = ((com.sun.xml.rpc.util.exception.JAXRPCExceptionBase) cause).getLinkedException(); if (cause != null) { getStatusTextfield().setText(cause.getMessage()); return true; } } return false; } private void CheckRemoteException(java.rmi.RemoteException re) { if (!CheckConnectException(re)) { getJEditorPane().setContentType("text/plain"); getJEditorPane().setText("Unexpected RemoteException: " + re.getMessage()); re.printStackTrace(); } } private void CheckException(Exception ex) { if (ex instanceof JPlagException) { JPlagException jex = (JPlagException) ex; getJEditorPane().setContentType("text/plain"); getJEditorPane().setText(jex.getExceptionType() + " at " + new Date() + "\n" + jex.getDescription() + "\n" + jex.getRepair()); getStatusTextfield().setText(jex.getExceptionType()); } else if (ex instanceof RemoteException) { CheckRemoteException((RemoteException) ex); } else if (ex instanceof SOAPFaultException) { SOAPFaultException se = (SOAPFaultException) ex; getJEditorPane().setContentType("text/plain"); getJEditorPane().setText( "Unexpected SOAPFaultException: " + se.getFaultActor() + "\n" + se.getFaultString() + "\n" + se.getMessage() + "\n" + se.getDetail()); getStatusTextfield().setText(se.getFaultActor()); } else { getStatusTextfield().setText(ex.getClass().getName() + " : " + ex.getMessage()); ex.printStackTrace(); } } /** * This is the default constructor */ public JplagSwingClient() { super(); initialize(); // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { } } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(650, 440); this.setContentPane(getJContentPane()); this.setTitle("JPlag Webservice Client"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private javax.swing.JPanel getJContentPane() { if (jContentPane == null) { resultDir_label = new JLabel(); jContentPane = new javax.swing.JPanel(); jContentPane.setLayout(new BorderLayout()); resultDir_label.setText("Result directory:"); resultDir_label.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); resultDir_label.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); resultDir_label.setName("jLabel1"); resultDir_label.setPreferredSize(new java.awt.Dimension(129, 16)); jContentPane.add(getJPanel4(), java.awt.BorderLayout.SOUTH); jContentPane.add(getJPanel(), java.awt.BorderLayout.NORTH); jContentPane.add(getJScrollPane(), java.awt.BorderLayout.CENTER); } return jContentPane; } /** * This method initializes jLanguageField * * @return javax.swing.JTextField */ private JTextField getJResultDir() { if (jResultDir == null) { jResultDir = new JTextField(); jResultDir.setColumns(15); jResultDir.setText((arguments.length >= 2) ? arguments[1] : "i:\\blub\\boob"); } return jResultDir; } /** * This method initializes jPanel3 * * @return javax.swing.JPanel */ private JPanel getSubmissionPanel() { if (submission_panel == null) { soapCommLogFile_label = new JLabel(); submissionTitle_label = new JLabel(); compareSourceDir_label = new JLabel(); submissionNumber_label = new JLabel(); GridLayout gridLayout13 = new GridLayout(); submission_panel = new JPanel(); submission_panel.setLayout(gridLayout13); gridLayout13.setRows(5); gridLayout13.setHgap(5); gridLayout13.setVgap(5); submission_panel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); submissionNumber_label.setText("Submission number:"); compareSourceDir_label.setText("Directory containing directories/files to compare:"); submissionTitle_label.setText("Submission title (user defined):"); soapCommLogFile_label.setText("SOAP communication log file (for client development):"); submission_panel.add(compareSourceDir_label, null); submission_panel.add(getJPanel2(), null); submission_panel.add(submissionTitle_label, null); submission_panel.add(getJTitleField(), null); submission_panel.add(resultDir_label, null); submission_panel.add(getJResultDir(), null); submission_panel.add(submissionNumber_label, null); submission_panel.add(getJSubmissionNum(), null); submission_panel.add(soapCommLogFile_label, null); submission_panel.add(getJLogFilePane(), null); } return submission_panel; } /** * This method initializes jTextField2 * * @return javax.swing.JTextField */ private JTextField getSourceDir() { if (sourceDir == null) { sourceDir = new JTextField(); sourceDir.setColumns(15); sourceDir.setText(arguments.length >= 2 ? arguments[0] : "i:\\blub\\boob\\jplag"); } return sourceDir; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { jPanel1 = new JPanel(); jPanel1.add(getGetServerInfoButton(), null); jPanel1.add(getCompareSourceButton(), null); jPanel1.add(getGetStatusButton(), null); jPanel1.add(getGetResultsButton(), null); jPanel1.add(getShowResultsButton(), null); jPanel1.add(getDeleteSubmissionButton(), null); } return jPanel1; } private String formatCalendar(Calendar cal) { if (cal == null) return "No date"; DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.GERMAN); return df.format(cal.getTime()); } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getGetServerInfoButton() { if (getServerInfo_button == null) { getServerInfo_button = new JButton(); getServerInfo_button.setText("Get server info"); getServerInfo_button.setMargin(new java.awt.Insets(2, 8, 2, 8)); getServerInfo_button.setPreferredSize(new Dimension(105, 26)); getServerInfo_button.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { try { getJEditorPane().setContentType("text/plain"); getJEditorPane().setText(""); getStatusTextfield().setText("Connecting to server..."); ServerInfo serverInfo = getJplagStub().getServerInfo(); // String usageString=getJplagStub().usage(0); getJEditorPane().setContentType("text/plain"); // getJEditorPane().setText(usageString); String lstr = ""; LanguageInfo[] langs = serverInfo.getLanguageInfos(); JComboBox<String> cb = getJLanguageCB(); for (int i = 0; i < langs.length; i++) { lstr += "\nLanguage: " + langs[i].getName() + "\nSuffixes: "; cb.addItem(langs[i].getName()); String[] suf = langs[i].getSuffixes(); for (int j = 0; j < suf.length; j++) lstr += suf[j] + ((j < suf.length - 1) ? "," : ""); lstr += "\nDefault minimum token length: " + langs[i].getDefMinMatchLen() + "\n"; } cb.setEnabled(true); String str = ""; Submission[] subs = serverInfo.getSubmissions(); for (int i = 0; i < subs.length; i++) { str += "Submission ID: " + subs[i].getSubmissionID() + " Title: " + subs[i].getTitle() + " Date: " + subs[i].getDate() + " Laststate: " + subs[i].getLastState() + "\n"; } UserInfo uinf = serverInfo.getUserInfo(); getJEditorPane().setText( "Left submission slots: " + serverInfo.getUserInfo().getLeftSubmissionSlots() + "\nAccount expires on: " + formatCalendar(uinf.getExpires()) + "\nPrimary email: " + uinf.getEmail() + "\nSecondary email: " + uinf.getEmailSecond() + "\nHomepage: " + uinf.getHomepage() + "\nList of languages:\n" + lstr + "\nList of submissions on server:\n" + str); getStatusTextfield().setText("Server info received"); } catch (Exception ex) { CheckException(ex); } } }); } return getServerInfo_button; } private JButton getCompareSourceButton() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setText("Compare source"); jButton1.setMargin(new java.awt.Insets(2, 8, 2, 8)); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (getJLanguageCB().getSelectedItem() == null) { javax.swing.JOptionPane.showMessageDialog(JplagSwingClient.this, "Please select a language!\n" + "You can get a list of available languages\n" + "by pressing the \"Get server info\" button.", "No language specified", javax.swing.JOptionPane.ERROR_MESSAGE); return; } File tempfile = null; { File sourceDir = new File(getSourceDir().getText()); if (!sourceDir.isDirectory()) { javax.swing.JOptionPane.showMessageDialog(JplagSwingClient.this, "The source directory \"" + getSourceDir().getText() + "\" is not a directory!", "Wrong source given:", javax.swing.JOptionPane.ERROR_MESSAGE); return; } getStatusTextfield().setText("Compressing content..."); try { tempfile = ZipUtil.zipTo(sourceDir, File.createTempFile("jplag", ".zip")); } catch (java.io.IOException ex) { getStatusTextfield().setText("IOException: " + ex.getMessage()); return; } System.out.println(tempfile.getName()); } // MimeMultipart result=null; String result = null; System.out.println("Entering try block..."); try { FileDataSource fds = new FileDataSource(tempfile); // Construct a MimeBodyPart // Add Part on the ..... MimeMultipart mmp = new MimeMultipart(); MimeBodyPart mbp = new MimeBodyPart(); mbp.setDataHandler(new DataHandler(fds)); mbp.setFileName(tempfile.getName()); mmp.addBodyPart(mbp); System.out.println("Creating Option object..."); // Prepare Options // @formatter:off Option option = new Option((String) getJLanguageCB().getSelectedItem(), // language null, // comparisonMode 0, // miminum match length null, //suffixes true, // readSubdirs null, // path to files null, // basecode dir null, // store matches "avr", // clustertype "en", // country lang (used for message localization) getJTitleField().getText(), // title getSourceDir().getText() // original dir ); // @formatter:on // running Jplag System.out.println("Calling compareSource..."); getStatusTextfield().setText("Calling server..."); result = getJplagStub().compareSource(option, mmp); getJEditorPane().setContentType("text/plain"); getJEditorPane().setText( "\n" + "############# JPLAG-RESULT: REQUEST=compareSource() ##############" + "\nResult= " + result); getStatusTextfield().setText("Call successful, removing temporary data..."); tempfile.delete(); getStatusTextfield().setText("Waiting for server status..."); jSubmissionNum.setText(result); if (statusTimer != null) statusTimer.stop(); statusTimer = new Timer(10000, new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { invokeGetStatus(); if (curStatus != null && (curStatus.getState() == DONE || curStatus.getState() >= ERROR || curStatus.getState() == INVALID)) { statusTimer.stop(); statusTimer = null; } } }); statusTimer.start(); } catch (Exception ex) { CheckException(ex); } catch (Throwable t) { t.printStackTrace(); } } }); } return jButton1; } private void invokeGetStatus() { try { curStatus = getJplagStub().getStatus(getJSubmissionNum().getText()); String str; switch (curStatus.getState()) { case INVALID: str = "Invalid submission number!"; break; case INQUEUE: str = "Submission is waiting in queue..."; break; case PARSING: str = "Submission is being parsed..."; break; case COMPARING: str = "Server is comparing files..."; break; case GENERATING_RESULT_FILES: str = "Server is generating result files..."; break; // case PACKAGING_RESULTS: str="Results become packaged..."; break; case DONE: str = "Submission finished!"; getJEditorPane().setContentType("text/plain"); getJEditorPane().setText(curStatus.getReport()); break; case ERROR_BADLANG: str = "Illegal language supplied!"; getJEditorPane().setContentType("text/plain"); getJEditorPane().setText(curStatus.getReport()); break; case ERROR_TOOFEWSUBS: str = "Not enough valid files!"; getJEditorPane().setContentType("text/plain"); getJEditorPane().setText(curStatus.getReport()); break; default: if (curStatus.getState() >= ERROR) { str = "Unknown error: " + curStatus.getState(); } else str = "Unknown state: " + curStatus.getState(); getJEditorPane().setContentType("text/plain"); getJEditorPane().setText(curStatus.getReport()); break; } getStatusTextfield().setText(str + " (State=" + curStatus.getState() + ")"); getJProgressBar().setMaximum(100); getJProgressBar().setValue(curStatus.getProgress()); } catch (Exception ex) { CheckException(ex); if (curStatus != null) curStatus.setState(INVALID); } } /** * This method initializes jButton2 * * @return javax.swing.JButton */ private JButton getGetStatusButton() { if (jButton2 == null) { jButton2 = new JButton(); jButton2.setText("Get status"); jButton2.setMargin(new java.awt.Insets(2, 8, 2, 8)); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { // javax.swing.SwingUtilities.invokeLater() invokeGetStatus(); } }); } return jButton2; } /** * This method initializes jButton3 * * @return javax.swing.JButton */ private JButton getGetResultsButton() { if (getResults_button == null) { getResults_button = new JButton(); getResults_button.setText("Get results"); getResults_button.setMargin(new java.awt.Insets(2, 8, 2, 8)); getResults_button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { MimeMultipart inputZipFile = null; try { inputZipFile = getJplagStub().getResult(getJSubmissionNum().getText()); } catch (Exception ex) { CheckException(ex); return; } File resultdir = new File(getJResultDir().getText()); resultdir.mkdirs(); File result = new File(getJResultDir().getText() + "/jplagResult.zip"); try { if (inputZipFile == null) return; MimeBodyPart bdp = (MimeBodyPart) inputZipFile.getBodyPart(0); System.out.println("Content Type " + bdp.getContentType()); DataHandler dh = bdp.getDataHandler(); FileOutputStream os = new FileOutputStream(result); dh.writeTo(os); os.close(); ZipUtil.unzip(result, getJResultDir().getText(), "jplagResult"); getStatusTextfield().setText("Files unzipped!"); } catch (Exception ex) { getStatusTextfield().setText(ex.getMessage()); ex.printStackTrace(); } String report = "\n" + "\n" + ((result == null) ? "compareSource was not successfull sorry" : "WAOOOOOOOUUUUU ******** CompareSource was succesfull**********") + "\n" + "\n"; System.out.println(report); } }); } return getResults_button; } /** * This method initializes jProgressBar * * @return javax.swing.JProgressBar */ private JProgressBar getJProgressBar() { if (jProgressBar == null) { jProgressBar = new JProgressBar(); } return jProgressBar; } /** * This method initializes jUsernameField * * @return javax.swing.JTextField */ private JTextField getJSubmissionNum() { if (jSubmissionNum == null) { jSubmissionNum = new JTextField(); } return jSubmissionNum; } /** * This method initializes jPanel4 * * @return javax.swing.JPanel */ private JPanel getJPanel4() { if (jPanel4 == null) { jPanel4 = new JPanel(); jPanel4.add(getStatusTextfield(), null); jPanel4.add(getJProgressBar(), null); } return jPanel4; } /** * This method initializes jTextField3 * * @return javax.swing.JTextField */ private JTextField getStatusTextfield() { if (jStatusText == null) { jStatusText = new JTextField(); jStatusText.setColumns(30); } return jStatusText; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS)); jPanel.add(getSubmissionPanel(), null); jPanel.add(getConfigPanel(), null); jPanel.add(getJPanel1(), null); } return jPanel; } /* * private static Object getBasicServiceObject() { try { Class * serviceManagerClass=Class.forName("javax.jnlp.ServiceManager"); * java.lang.reflect.Method lookupMethod=serviceManagerClass.getMethod( * "lookup",new Class [] { String.class }); * * return lookupMethod.invoke(null, new Object [] { * "javax.jnlp.BasicService" } ); } catch(Exception ex) { * ex.printStackTrace(); return null; } } * * private static Class getBasicServiceClass() { try { return * Class.forName("javax.jnlp.BasicService"); } catch(Exception ex) { * ex.printStackTrace(); return null; } } */ /** * This method initializes jButton4 * * @return javax.swing.JButton */ private JButton getShowResultsButton() { if (showResults_Button == null) { showResults_Button = new JButton(); showResults_Button.setText("Show results"); showResults_Button.setMargin(new java.awt.Insets(2, 8, 2, 8)); showResults_Button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { /* * if(basicServiceObject==null || basicServiceClass==null) { * JOptionPane.showMessageDialog(null,"Cannot use JNLP" + * " to launch your default browser!","Error:", * JOptionPane.WARNING_MESSAGE); return; } try { * java.lang.reflect.Method * method=basicServiceClass.getMethod( "showDocument", new * Class [] { java.net.URL.class } ); Boolean * resultBoolean=(Boolean) method.invoke( * basicServiceObject, new Object [] { * "e:\\blub\\boob\\jplagResult\\index.html" }); * if(!resultBoolean.booleanValue()) { * JOptionPane.showMessageDialog(null,"Unable to open" + * " results!"); } } catch(Exception ex) { * getJStatusText().setText(ex.getMessage()); * ex.printStackTrace(); } */ try { // getJEditorPane().setPage("file:\\\\\\" + // getJResultDir().getText()+"\\jplagResult\\index.html"); File file = new File(getJResultDir().getText() + File.separator + "jplagResult" + File.separator + "index.html"); /* * getJEditorPane().setPage("file:" + File.separator + * getJResultDir * ().getText()+"\\jplagResult\\index.html"); */ getJEditorPane().setPage(file.toURI().toURL()); } catch (java.io.IOException ex) { getStatusTextfield().setText(ex.getMessage()); ex.printStackTrace(); } } }); } return showResults_Button; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setViewportView(getJEditorPane()); } return jScrollPane; } private String getFrameName(String str) { if (str.equals("1")) return "top"; if (str.equals("2")) return "0"; if (str.equals("3")) return "1"; return null; } /** * This method initializes jEditorPane * * @return javax.swing.JEditorPane */ private JEditorPane getJEditorPane() { if (jEditorPane == null) { jEditorPane = new JEditorPane(); jEditorPane.setEditable(false); jEditorPane.addHyperlinkListener(new HyperlinkListener() { public void hyperlinkUpdate(HyperlinkEvent e) { /* * java.net.URL dest=e.getURL(); if(dest==null) { * getJStatusText().setText("URL = null!"); } else { * getJStatusText * ().setText(""+e.getURL().getFile()+" "+e.getURL * ().getRef()); System.out.println(dest.getProtocol()); * System.out.println(dest.getHost()); * System.out.println(dest.getPath()); * System.out.println(dest.getFile()); } */ getStatusTextfield().setText(e.getDescription()); if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { JEditorPane pane = (JEditorPane) e.getSource(); if (e instanceof HTMLFrameHyperlinkEvent) { HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent) e; HTMLDocument doc = (HTMLDocument) pane.getDocument(); String url = e.getDescription(); if (url.startsWith("javascript:ZweiFrames")) { String params[] = url.split("\\('|',|,'|\\)"); for (int i = 0; i < params.length; i++) System.out.println(params[i]); try { HTMLFrameHyperlinkEvent evt1 = new HTMLFrameHyperlinkEvent(e.getSource(), HyperlinkEvent.EventType.ACTIVATED, new java.net.URL(new File(getJResultDir().getText() + File.separator + "jplagResult" + File.separator).toURI().toString() + params[1]), // new java.net.URL("file:\\\\\\" + // getJResultDir().getText()+"\\jplagResult\\"+params[1]), getFrameName(params[2])); /* * System.out.println(new java.net.URL( new * File(getJResultDir().getText()+ * File.separator+"jplagResult"+ * File.separator) * .toURI().toString()+params[1])); * * System.out.println(new * java.net.URL("file:\\\\\\" + * getJResultDir * ().getText()+"\\jplagResult\\" * +params[1])); */ doc.processHTMLFrameHyperlinkEvent(evt1); HTMLFrameHyperlinkEvent evt2 = new HTMLFrameHyperlinkEvent(e.getSource(), HyperlinkEvent.EventType.ACTIVATED, new java.net.URL(new File(getJResultDir().getText() + File.separator + "jplagResult" + File.separator).toURI().toString() + params[3]), // new java.net.URL("file:\\\\\\" + // getJResultDir().getText()+"\\jplagResult\\"+params[3]), getFrameName(params[4])); doc.processHTMLFrameHyperlinkEvent(evt2); return; } catch (java.net.MalformedURLException ex) { ex.printStackTrace(); } } doc.processHTMLFrameHyperlinkEvent(evt); } else { try { pane.setPage(e.getURL()); } catch (Throwable t) { t.printStackTrace(); } } } } }); } return jEditorPane; } private static String[] arguments; private JButton fileOpenButton = null; private JPanel jPanel2 = null; private JPanel config_panel = null; private JLabel username_label = null; private JTextField jUsernameField = null; private JLabel password_label = null; private JPasswordField jPasswordField = null; private JLabel language_label = null; private JButton advancedOptions_button = null; private JLabel submissionTitle_label = null; private JTextField jTitleField = null; private JComboBox<String> language_combobox = null; private JButton deleteSubmission_button = null; private JLabel soapCommLogFile_label = null; private JTextField jLogFilePane = null; /** * This method initializes jButton5 * * @return javax.swing.JButton */ private JButton getFileOpenButton() { if (fileOpenButton == null) { fileOpenButton = new JButton(); fileOpenButton.setText("..."); fileOpenButton.setPreferredSize(new java.awt.Dimension(20, 20)); fileOpenButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser chooser = new JFileChooser(getSourceDir().getText()); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int retval = chooser.showOpenDialog(null); if (retval == JFileChooser.APPROVE_OPTION) { getSourceDir().setText(chooser.getSelectedFile().getPath()); } } }); } return fileOpenButton; } /** * This method initializes jPanel2 * * @return javax.swing.JPanel */ private JPanel getJPanel2() { if (jPanel2 == null) { jPanel2 = new JPanel(); jPanel2.setLayout(new BoxLayout(jPanel2, BoxLayout.X_AXIS)); jPanel2.add(getSourceDir(), null); jPanel2.add(getFileOpenButton(), null); } return jPanel2; } /** * This method initializes jPanel5 * * @return javax.swing.JPanel */ private JPanel getConfigPanel() { if (config_panel == null) { language_label = new JLabel(); password_label = new JLabel(); username_label = new JLabel(); config_panel = new JPanel(); username_label.setText("Username:"); password_label.setText("Password:"); language_label.setText("Langauge:"); config_panel.add(username_label, null); config_panel.add(getJUsernameField(), null); config_panel.add(password_label, null); config_panel.add(getJPasswordField(), null); config_panel.add(language_label, null); config_panel.add(getJLanguageCB(), null); config_panel.add(getAdvancedOptionsButton(), null); } return config_panel; } /** * This method initializes jUsernameField * * @return javax.swing.JTextField */ private JTextField getJUsernameField() { if (jUsernameField == null) { jUsernameField = new JTextField(); jUsernameField.setColumns(8); } return jUsernameField; } /** * This method initializes jPasswordField * * @return javax.swing.JPasswordField */ private JPasswordField getJPasswordField() { if (jPasswordField == null) { jPasswordField = new JPasswordField(); jPasswordField.setColumns(6); } return jPasswordField; } /** * This method initializes jButton6 * * @return javax.swing.JButton */ private JButton getAdvancedOptionsButton() { if (advancedOptions_button == null) { advancedOptions_button = new JButton(); advancedOptions_button.setText("Advanced options..."); advancedOptions_button.setPreferredSize(new java.awt.Dimension(132, 20)); advancedOptions_button.setMargin(new java.awt.Insets(2, 8, 2, 8)); advancedOptions_button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.err.println("No advanced options implemented yet..."); } }); } return advancedOptions_button; } /** * This method initializes jTitleField * * @return javax.swing.JTextField */ private JTextField getJTitleField() { if (jTitleField == null) { jTitleField = new JTextField(); } return jTitleField; } /** * This method initializes jComboBox * * @return javax.swing.JComboBox */ private JComboBox<String> getJLanguageCB() { if (language_combobox == null) { language_combobox = new JComboBox<String>(); language_combobox.setPreferredSize(new java.awt.Dimension(80, 20)); language_combobox.setEditable(true); language_combobox.setMinimumSize(new java.awt.Dimension(31, 20)); language_combobox.setEnabled(false); } return language_combobox; } /** * This method initializes jButton7 * * @return javax.swing.JButton */ private JButton getDeleteSubmissionButton() { if (deleteSubmission_button == null) { deleteSubmission_button = new JButton(); deleteSubmission_button.setText("Delete submission"); deleteSubmission_button.setMargin(new java.awt.Insets(2, 8, 2, 8)); deleteSubmission_button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { try { getJplagStub().cancelSubmission(getJSubmissionNum().getText()); getStatusTextfield().setText("Submission successfully deleted"); if (statusTimer != null) statusTimer.stop(); } catch (Exception ex) { CheckException(ex); } } }); } return deleteSubmission_button; } /** * This method initializes the text field for the log messages * * @return javax.swing.JTextField */ private JTextField getJLogFilePane() { if (jLogFilePane == null) { jLogFilePane = new JTextField(); if (System.getProperty("jplagClient.logfile") == null) { System.setProperty("jplagClient.logfile", System.getProperty("user.home") + File.separator + "jplagmessages.log"); System.out.println("jplagClient.logfile not set! log file name guessed"); } System.out.println("log file: " + System.getProperty("jplagClient.logfile")); jLogFilePane.setText(System.getProperty("jplagClient.logfile")); } return jLogFilePane; } public static void main(String[] args) { arguments = args; javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { JplagSwingClient me = new JplagSwingClient(); me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); me.setVisible(true); } }); } }