diff --git a/src/main/java/istlab/KisoJikken/Editor.java b/src/main/java/istlab/KisoJikken/Editor.java index 62f64fb..50dff41 100644 --- a/src/main/java/istlab/KisoJikken/Editor.java +++ b/src/main/java/istlab/KisoJikken/Editor.java @@ -146,10 +146,10 @@ lastOpened = this; } - public void load() { + public static String loadFile(File f){ InputStream is = null; try { - is = new FileInputStream(file); + is = new FileInputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -168,7 +168,11 @@ } catch (IOException e1) { e1.printStackTrace(); } - textArea.setText(sb.toString()); + return sb.toString(); + + } + public void load() { + textArea.setText(loadFile(file)); } public void save() { diff --git a/src/main/java/istlab/KisoJikken/JCompiler.java b/src/main/java/istlab/KisoJikken/JCompiler.java index e077c7c..21deb44 100644 --- a/src/main/java/istlab/KisoJikken/JCompiler.java +++ b/src/main/java/istlab/KisoJikken/JCompiler.java @@ -38,6 +38,7 @@ "javac -encoding UTF-8 " + pkgname + "/*.java"); processBuilder.redirectErrorStream(true); JTAConsole con = new JTAConsole("(Compile) javac "+pkgname+"/*.java"); + con.setMainSrcByFileName(absolutePath); con.Systemoutprintln("== コンパイル開始 =="); con.Systemoutprintln("> cd ~" + App.nwpsrc); diff --git a/src/main/java/istlab/KisoJikken/JExecutor.java b/src/main/java/istlab/KisoJikken/JExecutor.java index 089dbc5..cf4958b 100644 --- a/src/main/java/istlab/KisoJikken/JExecutor.java +++ b/src/main/java/istlab/KisoJikken/JExecutor.java @@ -51,6 +51,7 @@ ProcessBuilder processBuilder = new ProcessBuilder(comlist); processBuilder.redirectErrorStream(true); JTAConsole con = new JTAConsole("(Exec) java " + pkgname + "." + javafname + " " + commandLineOption); + con.setMainSrcByFileName(absolutePath); con.Systemoutprintln("== 実行開始 =="); con.Systemoutprintln("> cd ~" + App.nwpsrc); con.Systemoutprintln("> java " + pkgname + "." + javafname + " " + commandLineOption); diff --git a/src/main/java/istlab/KisoJikken/JTAConsole.java b/src/main/java/istlab/KisoJikken/JTAConsole.java index aaed470..61c2d17 100644 --- a/src/main/java/istlab/KisoJikken/JTAConsole.java +++ b/src/main/java/istlab/KisoJikken/JTAConsole.java @@ -11,6 +11,7 @@ import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -21,6 +22,7 @@ import java.util.Stack; import javax.swing.JFrame; +import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; @@ -44,6 +46,7 @@ OutputStream outstream; StringBuilder originalContent; + String mainSrc; // ProcessBuilder pb; // public JTAConsole(ProcessBuilder prob) { @@ -325,27 +328,46 @@ } } else if (e.getActionCommand().equals("Submit")) { + if (SendJsonData.studentID == null){ + String s = JOptionPane.showInputDialog(this,"お手数ですが、学生番号を入力してください(例:21A5999)"); + if (s != null){ + SendJsonData.studentID = s.trim(); + } + } String orig = originalContent.toString(); // 出力情報のみ String buffer = getText(); // JTAの内容(入力と、コメント含む) ここでの入力とは、擬似ターミナル経由でプロセスに送信した内容を指す - SendJsonData sjd = new SendJsonData(orig, buffer,"mainsrc"); + SendJsonData sjd = new SendJsonData(orig, buffer); + if (mainSrc != null) sjd.setMainSrc(mainSrc); Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(sjd); - System.out.println(json); + PostHTTP postHttp = new PostHTTP(json); + try { + postHttp.execute(); + } catch (IOException e1) { + e1.printStackTrace(); + } + // System.out.println(json); } } + + public void setMainSrcByFileName(String absolutePath) { + File f = new File(absolutePath); + mainSrc = Editor.loadFile(f); + } } class SendJsonData { + public static String studentID = "(anonymous)"; public String orig, buffer; public String markdown; public String mainSrc; - - SendJsonData(String o, String b, String m) { + public String stuID; + + SendJsonData(String o, String b) { orig = o; buffer = b; - mainSrc = m; List origList = Arrays.asList(orig.split("\n")); List bufList = Arrays.asList(buffer.split("\n")); DiffRowGenerator generator = DiffRowGenerator.create() @@ -363,5 +385,9 @@ sb.append("|" + row.getOldLine() + "|" + row.getNewLine() + "|"); } markdown = sb.toString(); + stuID = studentID; + } + public void setMainSrc(String s){ + mainSrc = s; } } \ No newline at end of file diff --git a/src/main/java/istlab/KisoJikken/PostHTTP.java b/src/main/java/istlab/KisoJikken/PostHTTP.java new file mode 100644 index 0000000..8dee88f --- /dev/null +++ b/src/main/java/istlab/KisoJikken/PostHTTP.java @@ -0,0 +1,69 @@ +package istlab.KisoJikken; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.net.HttpURLConnection; +import java.net.URL; + +public class PostHTTP { + public static String apiURL = "https://ss.istlab.info/xcp/"; + public String json; + + public PostHTTP(String j) { + json = j; + + } + + // https://qiita.com/nururuv/items/b269af6ac5ac472ceab1 + public String execute() throws IOException { + + // 1.接続するための設定をする + + // URL に対して openConnection メソッドを呼び出すし、接続オブジェクトを生成 + URL url = new URL(apiURL); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + // HttpURLConnectionの各種設定 + // HTTPのメソッドをPOSTに設定 + conn.setRequestMethod("POST"); + // リクエストボディへの書き込みを許可 + conn.setDoInput(true); + // レスポンスボディの取得を許可 + conn.setDoOutput(true); + // リクエスト形式をJsonに指定 + conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); + + // 2.接続を確立する + conn.connect(); + + // 3.リクエスとボディに書き込みを行う + // HttpURLConnectionからOutputStreamを取得し、json文字列を書き込む + PrintStream ps = new PrintStream(conn.getOutputStream()); + ps.print(json); + ps.close(); + + // 4.レスポンスを受け取る + // 正常終了時はHttpStatusCode 200が返ってくる + if (conn.getResponseCode() != 200) { + // エラー処理 + } + + // HttpURLConnectionからInputStreamを取得し、読み出す + BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); + + StringBuilder sb = new StringBuilder(); + String line; + + while ((line = br.readLine()) != null) { + sb.append(line); + } + + // 5.InputStreamを閉じる + br.close(); + + // 結果は呼び出し元に返しておく + return sb.toString(); + } +} diff --git a/src/main/java/istlab/KisoJikken/ScriptRunner.java b/src/main/java/istlab/KisoJikken/ScriptRunner.java index 8cad503..c9dc7b6 100644 --- a/src/main/java/istlab/KisoJikken/ScriptRunner.java +++ b/src/main/java/istlab/KisoJikken/ScriptRunner.java @@ -38,6 +38,7 @@ processBuilder.directory(new File(App.userhome + App.nwpsrc)); // processBuilder.inheritIO(); JTAConsole con = new JTAConsole("(Exec) " + scriptfile); + con.setMainSrcByFileName(scriptfile); con.Systemoutprintln("== 実行開始 =="); con.Systemoutprintln("> cd ~" + App.nwpsrc); con.Systemoutprintln("> "+scriptfile);