• R/O
  • SSH

提交

标签

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

ベータ版移行版。作業部屋IDの綴り修正


Commit MetaInfo

修订版2b17489650e3e70d5dcc1985b80fb6a4e17c8e7e (tree)
时间2015-07-17 21:42:06
作者MirrgieRiana Kurilab
CommiterMirrgieRiana Kurilab

Log Message

ChlorophyllUploader: add: Main ver2

更改概述

差异

diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/ContainerTerminalOutput.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/ContainerTerminalOutput.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,30 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import java.util.function.BooleanSupplier;
4+
5+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
6+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ContainerTerminal;
7+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.Terminal.EnumStateTerminal;
8+
9+public class ContainerTerminalOutput extends ContainerTerminal<TerminalOutput>
10+{
11+
12+ public ContainerTerminalOutput(BooleanSupplier isDisposed)
13+ {
14+ super(isDisposed);
15+ }
16+
17+ public void accept(PacketChlorofilSender packet)
18+ {
19+ for (TerminalOutput terminal : terminals) {
20+
21+ if (terminal.getState() == EnumStateTerminal.RUNNING) {
22+
23+ terminal.accept(packet);
24+
25+ }
26+
27+ }
28+ }
29+
30+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/FrameChlorofilSender.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/FrameChlorofilSender.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,147 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import java.awt.BorderLayout;
4+import java.awt.CardLayout;
5+import java.awt.Container;
6+import java.net.URL;
7+
8+import javax.swing.ImageIcon;
9+import javax.swing.JLabel;
10+import javax.swing.JMenu;
11+import javax.swing.JMenuBar;
12+import javax.swing.JMenuItem;
13+import javax.swing.JSplitPane;
14+
15+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ContainerTerminal;
16+import mirrg.swing.helium.FrameMirrg;
17+import mirrg.swing.helium.logging.HLog;
18+
19+public class FrameChlorofilSender extends FrameMirrg
20+{
21+
22+ private ContainerTerminal<TerminalInput> containerTerminaInput;
23+ private ContainerTerminalOutput containerTerminalOutput;
24+
25+ public FrameChlorofilSender()
26+ {
27+ super("ChlorofilSender");
28+
29+ {
30+ JMenuBar menuBar = new JMenuBar();
31+ setJMenuBar(menuBar);
32+
33+ /*
34+ {
35+ JMenu menu = new JMenu("ウィンドウ(W)");
36+ menuBar.add(menu);
37+
38+ menu.setMnemonic('W');
39+
40+ {
41+ JMenuItem menuItem = new JMenuItem("送信ウィンドウ(S)");
42+ menu.add(menuItem);
43+
44+ menuItem.setMnemonic('S');
45+ menuItem.addActionListener(e -> {
46+
47+ showFramePacketChlorofilSender();
48+
49+ });
50+ }
51+
52+ {
53+ JMenuItem menuItem = new JMenuItem("ログウィンドウ(L)");
54+ menu.add(menuItem);
55+
56+ menuItem.setMnemonic('L');
57+ menuItem.addActionListener(e -> {
58+
59+ showFrameLog();
60+
61+ });
62+ }
63+
64+ }
65+ */
66+
67+ {
68+ JMenu menu = new JMenu("入力(I)");
69+ menuBar.add(menu);
70+
71+ menu.setMnemonic('I');
72+
73+ RegistryChlorophyllUploader.listInputTerminal.forEach(category -> {
74+ JMenuItem menuItem = category.createMenuItem();
75+ menu.add(menuItem);
76+
77+ menuItem.addActionListener(e -> {
78+
79+ category.create(containerTerminaInput::addTerminal,
80+ containerTerminalOutput::accept);
81+
82+ });
83+
84+ });
85+
86+ }
87+
88+ {
89+ JMenu menu = new JMenu("出力(O)");
90+ menuBar.add(menu);
91+
92+ menu.setMnemonic('O');
93+
94+ RegistryChlorophyllUploader.listOutputTerminal.forEach(category -> {
95+ JMenuItem menuItem = category.createMenuItem();
96+ menu.add(menuItem);
97+
98+ menuItem.addActionListener(e -> {
99+
100+ category.create(containerTerminalOutput::addTerminal);
101+
102+ });
103+
104+ });
105+
106+ }
107+
108+ }
109+
110+ {
111+ containerTerminaInput = new ContainerTerminal<>(this::isDisposed);
112+ containerTerminalOutput = new ContainerTerminalOutput(this::isDisposed);
113+
114+ onDisposed(e -> containerTerminaInput.dispose());
115+ onDisposed(e -> containerTerminalOutput.dispose());
116+
117+ Container containerUp = new Container();
118+ containerUp.setLayout(new BorderLayout());
119+ containerUp.add(new JLabel("入力"), BorderLayout.NORTH);
120+ containerUp.add(containerTerminaInput, BorderLayout.CENTER);
121+
122+ Container containerDown = new Container();
123+ containerDown.setLayout(new BorderLayout());
124+ containerDown.add(new JLabel("出力"), BorderLayout.NORTH);
125+ containerDown.add(containerTerminalOutput, BorderLayout.CENTER);
126+
127+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
128+ containerUp,
129+ containerDown);
130+ splitPane.setResizeWeight(0.5);
131+
132+ add(splitPane);
133+ setLayout(new CardLayout());
134+ }
135+
136+ {
137+ URL url = getClass().getResource("icon.png");
138+ if (url != null) {
139+ setIconImage(new ImageIcon(url).getImage());
140+ } else {
141+ HLog.warning("アイコンファイルの読み込みに失敗しました。");
142+ }
143+ }
144+
145+ prepareFrame();
146+ }
147+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/ICategoryInput.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/ICategoryInput.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,34 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import java.util.function.Consumer;
4+
5+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
6+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ICategory;
7+
8+public interface ICategoryInput extends ICategory<TerminalInput>
9+{
10+
11+ /**
12+ * 新しいインスタンス作成のためのダイアログを表示する。
13+ *
14+ * @param consumerTerminal
15+ * 正常にインスタンスが生成された場合に、生成したインスタンスが報告される。
16+ * 複数回呼び出してもよい。
17+ */
18+ public void create(Consumer<TerminalInput> consumerTerminal, Consumer<PacketChlorofilSender> consumerPacket);
19+
20+ /**
21+ * 保存用オブジェクトから読み込む。
22+ *
23+ * @param data
24+ * 読み込むためのデータ。
25+ * @param consumerTerminal
26+ * 正常に読み込めた場合に、生成したインスタンスが報告される。
27+ * 複数回呼び出してもよい。
28+ * @param onException
29+ * 不正な{@link ICategory}により読み込めなかった場合に呼び出される。
30+ * 複数呼び出し可。
31+ */
32+ public void load(Object data, Consumer<TerminalInput> consumerTerminal, Consumer<PacketChlorofilSender> consumerPacket, Consumer<Exception> onException);
33+
34+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/ICategoryOutput.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/ICategoryOutput.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,33 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import java.util.function.Consumer;
4+
5+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ICategory;
6+
7+public interface ICategoryOutput extends ICategory<TerminalOutput>
8+{
9+
10+ /**
11+ * 新しいインスタンス作成のためのダイアログを表示する。
12+ *
13+ * @param consumerTerminal
14+ * 正常にインスタンスが生成された場合に、生成したインスタンスが報告される。
15+ * 複数回呼び出してもよい。
16+ */
17+ public void create(Consumer<TerminalOutput> consumerTerminal);
18+
19+ /**
20+ * 保存用オブジェクトから読み込む。
21+ *
22+ * @param data
23+ * 読み込むためのデータ。
24+ * @param consumerTerminal
25+ * 正常に読み込めた場合に、生成したインスタンスが報告される。
26+ * 複数回呼び出してもよい。
27+ * @param onException
28+ * 不正な{@link ICategory}により読み込めなかった場合に呼び出される。
29+ * 複数呼び出し可。
30+ */
31+ public void load(Object data, Consumer<TerminalOutput> consumerTerminal, Consumer<Exception> onException);
32+
33+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/RegistryChlorophyllUploader.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/RegistryChlorophyllUploader.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,22 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import java.util.ArrayList;
4+
5+public class RegistryChlorophyllUploader
6+{
7+
8+ public static ArrayList<ICategoryInput> listInputTerminal = new ArrayList<>();
9+
10+ public static void registerTerminalInput(ICategoryInput category)
11+ {
12+ listInputTerminal.add(category);
13+ }
14+
15+ public static ArrayList<ICategoryOutput> listOutputTerminal = new ArrayList<>();
16+
17+ public static void registerTerminalOutput(ICategoryOutput category)
18+ {
19+ listOutputTerminal.add(category);
20+ }
21+
22+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/TerminalInput.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/TerminalInput.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,18 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import java.util.function.Consumer;
4+
5+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
6+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.Terminal;
7+
8+public abstract class TerminalInput extends Terminal
9+{
10+
11+ protected Consumer<PacketChlorofilSender> consumer;
12+
13+ public TerminalInput(Consumer<PacketChlorofilSender> consumer)
14+ {
15+ this.consumer = consumer;
16+ }
17+
18+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/TerminalOutput.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/core/TerminalOutput.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,11 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.core;
2+
3+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
4+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.Terminal;
5+
6+public abstract class TerminalOutput extends Terminal
7+{
8+
9+ public abstract void accept(PacketChlorofilSender packet);
10+
11+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/terminal/ContainerTerminal.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/terminal/ContainerTerminal.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,201 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal;
2+
3+import java.awt.Component;
4+import java.awt.Dimension;
5+import java.util.ArrayList;
6+import java.util.Vector;
7+import java.util.function.BooleanSupplier;
8+
9+import javax.swing.JButton;
10+import javax.swing.JComponent;
11+import javax.swing.JScrollPane;
12+import javax.swing.JTable;
13+import javax.swing.table.DefaultTableModel;
14+
15+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.Terminal.EnumStateTerminal;
16+import jp.hishidama.swing.layout.GroupLayoutUtil;
17+import mirrg.swing.helium.logging.HLog;
18+
19+public class ContainerTerminal<T extends Terminal> extends JComponent
20+{
21+
22+ protected BooleanSupplier supplierDisposed;
23+ protected DefaultTableModel tableModel;
24+ protected JTable table;
25+
26+ public ContainerTerminal(BooleanSupplier supplierDisposed)
27+ {
28+ this.supplierDisposed = supplierDisposed;
29+
30+ tableModel = new DefaultTableModel();
31+ table = new JTable(tableModel);
32+ tableModel.addColumn("ON");
33+ table.getColumnModel().getColumn(0).setPreferredWidth(30);
34+ table.getColumnModel().getColumn(0).setWidth(30);
35+ tableModel.addColumn("カテゴリ");
36+ table.getColumnModel().getColumn(1).setPreferredWidth(150);
37+ table.getColumnModel().getColumn(1).setWidth(150);
38+ tableModel.addColumn("説明");
39+ table.getColumnModel().getColumn(2).setPreferredWidth(220);
40+ table.getColumnModel().getColumn(2).setWidth(220);
41+
42+ JScrollPane scrollPane = new JScrollPane(table);
43+ scrollPane.setPreferredSize(new Dimension(400, 100));
44+
45+ JButton buttonEdit = new JButton("編集");
46+ buttonEdit.addActionListener(e -> {
47+ T terminal = getSelectedTerminal();
48+ if (terminal != null) terminal.showEditDialog();
49+ });
50+
51+ JButton buttonStart = new JButton("開始");
52+ buttonStart.addActionListener(e -> {
53+ T terminal = getSelectedTerminal();
54+ if (terminal != null) terminal.start();
55+ });
56+
57+ JButton buttonStop = new JButton("停止");
58+ buttonStop.addActionListener(e -> {
59+ T terminal = getSelectedTerminal();
60+ if (terminal != null) terminal.stop();
61+ });
62+
63+ JButton buttonDelete = new JButton("除去");
64+ buttonDelete.addActionListener(e -> {
65+ T terminal = getSelectedTerminal();
66+ if (terminal != null) removeTerminal(terminal);
67+ });
68+
69+ {
70+ Component[][] components = {
71+ {
72+ scrollPane,
73+ GroupLayoutUtil.SAME_L,
74+ GroupLayoutUtil.SAME_L,
75+ GroupLayoutUtil.SAME_L,
76+ },
77+ {
78+ buttonEdit,
79+ buttonStart,
80+ buttonStop,
81+ buttonDelete,
82+ },
83+ };
84+
85+ GroupLayoutUtil groupLayoutUtil = new GroupLayoutUtil();
86+
87+ groupLayoutUtil.setComponents(components);
88+ groupLayoutUtil.setGroupLayoutTo(this);
89+
90+ groupLayoutUtil.getGroupLayout().setAutoCreateContainerGaps(false);
91+ groupLayoutUtil.getGroupLayout().setAutoCreateGaps(true);
92+ }
93+ }
94+
95+ protected ArrayList<T> terminals = new ArrayList<>();
96+
97+ public T getTerminal(int index)
98+ {
99+ return terminals.get(index);
100+ }
101+
102+ public int getTerminalIndex(T terminal)
103+ {
104+ return terminals.indexOf(terminal);
105+ }
106+
107+ public T getSelectedTerminal()
108+ {
109+ int row = table.getSelectedRow();
110+ if (row != -1) {
111+ return getTerminal(row);
112+ }
113+ return null;
114+ }
115+
116+ protected String getLocalizedState(EnumStateTerminal state)
117+ {
118+ switch (state) {
119+ case DIRTY:
120+ return "OFF(汚濁)";
121+ case RUNNABLE:
122+ return "OFF(清純)";
123+ case RUNNING:
124+ return "ON";
125+ case DISPOSED:
126+ return "OFF(破棄)";
127+ case UNINITIALIZED:
128+ return "OFF(未初期化)";
129+ }
130+ throw new RuntimeException();
131+ }
132+
133+ public void addTerminal(T terminal)
134+ {
135+ int row = tableModel.getRowCount();
136+ tableModel.addRow((Vector<?>) null);
137+
138+ terminals.add(terminal);
139+ tableModel.setValueAt(getLocalizedState(terminal.getState()), row, 0);
140+ tableModel.setValueAt(terminal.getCategory().getName(), row, 1);
141+ tableModel.setValueAt(terminal.getDescription(), row, 2);
142+
143+ terminal.addListenerStateChanged((state, runnableStopListening) -> {
144+
145+ tableModel.setValueAt(getLocalizedState(state), row, 0);
146+
147+ if (supplierDisposed.getAsBoolean() || getTerminalIndex(terminal) == -1) {
148+ runnableStopListening.run();
149+ }
150+ });
151+
152+ terminal.init();
153+ }
154+
155+ public void removeTerminal(T terminal)
156+ {
157+ if (terminal.getState() == EnumStateTerminal.RUNNING) {
158+ terminal.stop();
159+ }
160+ terminal.dispose();
161+
162+ int index = getTerminalIndex(terminal);
163+
164+ terminals.remove(terminal);
165+ tableModel.removeRow(index);
166+ }
167+
168+ public void startTerminal(T terminal)
169+ {
170+ if (terminal.getState() == EnumStateTerminal.RUNNABLE) {
171+ terminal.reset();
172+ terminal.start();
173+ } else {
174+ HLog.warning(String.format("既に実行しています: %s/%s",
175+ terminal.getCategory().getName(),
176+ terminal.getDescription()));
177+ }
178+ }
179+
180+ public void stopTerminal(T terminal)
181+ {
182+ if (terminal.getState() == EnumStateTerminal.RUNNING) {
183+ terminal.stop();
184+ } else {
185+ HLog.warning(String.format("実行されていません: %s/%s",
186+ terminal.getCategory().getName(),
187+ terminal.getDescription()));
188+ }
189+ }
190+
191+ public void dispose()
192+ {
193+ for (T terminal : terminals) {
194+ if (terminal.getState() == EnumStateTerminal.RUNNING) {
195+ terminal.stop();
196+ }
197+ terminal.dispose();
198+ }
199+ }
200+
201+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/terminal/ICategory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/terminal/ICategory.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,29 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal;
2+
3+import javax.swing.JMenuItem;
4+
5+public interface ICategory<T extends Terminal>
6+{
7+
8+ public String getMenuItemLabel();
9+
10+ /**
11+ * @return Swingのショートカットキー。
12+ */
13+ public int getMnemonic();
14+
15+ /**
16+ * @return 表示用のカテゴリ名称。
17+ */
18+ public String getName();
19+
20+ public default JMenuItem createMenuItem()
21+ {
22+ JMenuItem menuItem = new JMenuItem(getMenuItemLabel());
23+
24+ menuItem.setMnemonic(getMnemonic());
25+
26+ return menuItem;
27+ }
28+
29+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/terminal/Terminal.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/terminal/Terminal.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,127 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal;
2+
3+import java.util.ArrayList;
4+import java.util.Iterator;
5+import java.util.function.BiConsumer;
6+
7+/**
8+ * 3つのステートが存在する。
9+ * <ul>
10+ * <li>未初期化状態(初期状態)</li>
11+ * <li>未実行・汚濁状態</li>
12+ * <li>未実行・清純状態</li>
13+ * <li>実行状態</li>
14+ * <li>破棄状態</li>
15+ * </ul>
16+ */
17+public abstract class Terminal
18+{
19+
20+ public Terminal()
21+ {
22+ setState(EnumStateTerminal.UNINITIALIZED);
23+ }
24+
25+ /**
26+ * @return 端末のインスタンスを生成したカテゴリ。
27+ */
28+ public abstract ICategory<?> getCategory();
29+
30+ /**
31+ * @return 同カテゴリの別のインスタンスとの違いが分かるような文字列。
32+ */
33+ public abstract String getDescription();
34+
35+ /**
36+ * @return 保存に使われる、この端末の設定を記述したXStreamオブジェクト。
37+ */
38+ public abstract Object getData();
39+
40+ /**
41+ * このインスタンスを編集するダイアログを表示する。
42+ * キャンセルを実装する場合、キャンセルしたら何もする必要はない。
43+ * 編集が成功した場合は、このインスタンスを改変する。
44+ * その際、必要であれば{@link #stop()}や{@link #reset()}などを呼び出してよい。
45+ */
46+ public abstract void showEditDialog();
47+
48+ /**
49+ * インスタンスを初期化する。1回だけ呼び出される。未実行・汚濁状態に移行。
50+ */
51+ public void init()
52+ {
53+ setState(EnumStateTerminal.DIRTY);
54+ }
55+
56+ /**
57+ * 未実行・汚濁状態にのみ呼び出される。未実行・清純状態に移行。
58+ */
59+ public void reset()
60+ {
61+ setState(EnumStateTerminal.RUNNABLE);
62+ }
63+
64+ /**
65+ * 未実行・清純状態にのみ呼び出される。実行状態に移行。
66+ */
67+ public void start()
68+ {
69+ setState(EnumStateTerminal.RUNNING);
70+ }
71+
72+ /**
73+ * 実行状態にのみ呼び出される。未実行・汚濁状態に移行。
74+ */
75+ public void stop()
76+ {
77+ setState(EnumStateTerminal.DIRTY);
78+ }
79+
80+ /**
81+ * 未実行状態にのみ呼び出される。1回だけ呼び出される。インスタンスを破棄する。
82+ */
83+ public void dispose()
84+ {
85+ setState(EnumStateTerminal.DISPOSED);
86+ }
87+
88+ protected ArrayList<BiConsumer<EnumStateTerminal, Runnable>> listeners = new ArrayList<>();
89+
90+ /**
91+ * @param listener
92+ * (state ,runnableStopListening)
93+ */
94+ public void addListenerStateChanged(BiConsumer<EnumStateTerminal, Runnable> listener)
95+ {
96+ listeners.add(listener);
97+ }
98+
99+ private EnumStateTerminal state;
100+
101+ public EnumStateTerminal getState()
102+ {
103+ return state;
104+ }
105+
106+ public void setState(EnumStateTerminal state)
107+ {
108+ this.state = state;
109+
110+ Iterator<BiConsumer<EnumStateTerminal, Runnable>> iterator = listeners.iterator();
111+ while (iterator.hasNext()) {
112+ BiConsumer<EnumStateTerminal, Runnable> listener = iterator.next();
113+
114+ listener.accept(state, iterator::remove);
115+ }
116+ }
117+
118+ public static enum EnumStateTerminal
119+ {
120+ UNINITIALIZED,
121+ DIRTY,
122+ RUNNABLE,
123+ RUNNING,
124+ DISPOSED,
125+ }
126+
127+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/CategoryInputDialog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/CategoryInputDialog.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,118 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.ver2;
2+
3+import java.util.function.Consumer;
4+
5+import javax.swing.WindowConstants;
6+
7+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.ICategoryInput;
8+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.TerminalInput;
9+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.FramePacketChlorofilSender;
10+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
11+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ICategory;
12+
13+public class CategoryInputDialog implements ICategoryInput
14+{
15+
16+ @Override
17+ public String getMenuItemLabel()
18+ {
19+ return "送信ウィンドウ(W)...";
20+ }
21+
22+ @Override
23+ public int getMnemonic()
24+ {
25+ return 'W';
26+ }
27+
28+ @Override
29+ public String getName()
30+ {
31+ return "送信ウィンドウ";
32+ }
33+
34+ @Override
35+ public void create(Consumer<TerminalInput> consumerTerminal, Consumer<PacketChlorofilSender> consumerPacket)
36+ {
37+ // TODO 自動生成されたメソッド・スタブ
38+ consumerTerminal.accept(new TerminalInput(consumerPacket) {
39+
40+ @Override
41+ public void showEditDialog()
42+ {
43+ // TODO 自動生成されたメソッド・スタブ
44+
45+ }
46+
47+ @Override
48+ public String getDescription()
49+ {
50+ // TODO 自動生成されたメソッド・スタブ
51+ return "desc";
52+ }
53+
54+ @Override
55+ public Object getData()
56+ {
57+ // TODO 自動生成されたメソッド・スタブ
58+ return new String[] {
59+ "aiueo"
60+ };
61+ }
62+
63+ FramePacketChlorofilSender frame;
64+
65+ @Override
66+ public void init()
67+ {
68+ frame = new FramePacketChlorofilSender(consumer);
69+ frame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
70+ frame.onHidden(e -> {
71+ setState(EnumStateTerminal.DIRTY);
72+ });
73+
74+ super.init();
75+ }
76+
77+ @Override
78+ public void start()
79+ {
80+ frame.setVisible(true);
81+
82+ super.start();
83+
84+ }
85+
86+ @Override
87+ public void stop()
88+ {
89+ frame.setVisible(false);
90+
91+ super.stop();
92+ }
93+
94+ @Override
95+ public void dispose()
96+ {
97+ frame.dispose();
98+
99+ super.dispose();
100+ }
101+
102+ @Override
103+ public ICategory<?> getCategory()
104+ {
105+ return CategoryInputDialog.this;
106+ }
107+
108+ });
109+ }
110+
111+ @Override
112+ public void load(Object data, Consumer<TerminalInput> consumerTerminal, Consumer<PacketChlorofilSender> consumerPacket, Consumer<Exception> onException)
113+ {
114+ // TODO 自動生成されたメソッド・スタブ
115+ create(consumerTerminal, consumerPacket);
116+ }
117+
118+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/CategoryInputFileWatcherSpawning.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/CategoryInputFileWatcherSpawning.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,97 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.ver2;
2+
3+import java.util.function.Consumer;
4+
5+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.ICategoryInput;
6+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.TerminalInput;
7+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
8+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ICategory;
9+
10+public class CategoryInputFileWatcherSpawning implements ICategoryInput
11+{
12+
13+ @Override
14+ public String getMenuItemLabel()
15+ {
16+ return "監視フォルダの追加(F)...";
17+ }
18+
19+ @Override
20+ public int getMnemonic()
21+ {
22+ return 'F';
23+ }
24+
25+ @Override
26+ public String getName()
27+ {
28+ return "監視フォルダ";
29+ }
30+
31+ @Override
32+ public void create(Consumer<TerminalInput> consumerTerminal, Consumer<PacketChlorofilSender> consumerPacket)
33+ {
34+ // TODO 自動生成されたメソッド・スタブ
35+ consumerTerminal.accept(new TerminalInput(consumerPacket) {
36+
37+ @Override
38+ public void showEditDialog()
39+ {
40+ // TODO 自動生成されたメソッド・スタブ
41+
42+ }
43+
44+ @Override
45+ public String getDescription()
46+ {
47+ // TODO 自動生成されたメソッド・スタブ
48+ return "desc";
49+ }
50+
51+ @Override
52+ public Object getData()
53+ {
54+ // TODO 自動生成されたメソッド・スタブ
55+ return new String[] {
56+ "aiueo"
57+ };
58+ }
59+
60+ @Override
61+ public void reset()
62+ {
63+ // TODO 自動生成されたメソッド・スタブ
64+ super.reset();
65+ }
66+
67+ @Override
68+ public void start()
69+ {
70+ // TODO 自動生成されたメソッド・スタブ
71+ super.start();
72+ }
73+
74+ @Override
75+ public void stop()
76+ {
77+ // TODO 自動生成されたメソッド・スタブ
78+ super.stop();
79+ }
80+
81+ @Override
82+ public ICategory<?> getCategory()
83+ {
84+ return CategoryInputFileWatcherSpawning.this;
85+ }
86+
87+ });
88+ }
89+
90+ @Override
91+ public void load(Object data, Consumer<TerminalInput> consumerTerminal, Consumer<PacketChlorofilSender> consumerPacket, Consumer<Exception> onException)
92+ {
93+ // TODO 自動生成されたメソッド・スタブ
94+ create(consumerTerminal, consumerPacket);
95+ }
96+
97+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/CategoryOutputTunnelSerialToIEEE1888.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/CategoryOutputTunnelSerialToIEEE1888.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,104 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.ver2;
2+
3+import java.util.function.Consumer;
4+
5+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.ICategoryOutput;
6+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.TerminalOutput;
7+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.packet.PacketChlorofilSender;
8+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.terminal.ICategory;
9+
10+public class CategoryOutputTunnelSerialToIEEE1888 implements ICategoryOutput
11+{
12+
13+ @Override
14+ public String getMenuItemLabel()
15+ {
16+ return "Arduino - TunnelSerialToIEEE1888@AcsSerial(A)...";
17+ }
18+
19+ @Override
20+ public int getMnemonic()
21+ {
22+ return 'A';
23+ }
24+
25+ @Override
26+ public String getName()
27+ {
28+ return "Arduino Output";
29+ }
30+
31+ @Override
32+ public void create(Consumer<TerminalOutput> consumerTerminal)
33+ {
34+ // TODO 自動生成されたメソッド・スタブ
35+ consumerTerminal.accept(new TerminalOutput() {
36+
37+ @Override
38+ public void showEditDialog()
39+ {
40+ // TODO 自動生成されたメソッド・スタブ
41+
42+ }
43+
44+ @Override
45+ public String getDescription()
46+ {
47+ // TODO 自動生成されたメソッド・スタブ
48+ return "desc";
49+ }
50+
51+ @Override
52+ public Object getData()
53+ {
54+ // TODO 自動生成されたメソッド・スタブ
55+ return new String[] {
56+ "aiueo"
57+ };
58+ }
59+
60+ @Override
61+ public void reset()
62+ {
63+ // TODO 自動生成されたメソッド・スタブ
64+ super.reset();
65+ }
66+
67+ @Override
68+ public void start()
69+ {
70+ // TODO 自動生成されたメソッド・スタブ
71+ super.start();
72+ }
73+
74+ @Override
75+ public void stop()
76+ {
77+ // TODO 自動生成されたメソッド・スタブ
78+ super.stop();
79+ }
80+
81+ @Override
82+ public ICategory<?> getCategory()
83+ {
84+ return CategoryOutputTunnelSerialToIEEE1888.this;
85+ }
86+
87+ @Override
88+ public void accept(PacketChlorofilSender packet)
89+ {
90+ // TODO 自動生成されたメソッド・スタブ
91+ System.out.println(packet.encode().get());
92+ }
93+
94+ });
95+ }
96+
97+ @Override
98+ public void load(Object data, Consumer<TerminalOutput> consumerTerminal, Consumer<Exception> onException)
99+ {
100+ // TODO 自動生成されたメソッド・スタブ
101+ create(consumerTerminal);
102+ }
103+
104+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/Main.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/Main.java Fri Jul 17 21:42:06 2015 +0900
@@ -0,0 +1,22 @@
1+package jp.ac.kisarazu.j.kurilab.chlorophylluploader.ver2;
2+
3+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.FrameChlorofilSender;
4+import jp.ac.kisarazu.j.kurilab.chlorophylluploader.core.RegistryChlorophyllUploader;
5+import mirrg.swing.helium.HSwing;
6+
7+public class Main
8+{
9+
10+ public static void main(String[] args)
11+ {
12+ System.loadLibrary("rxtxSerial");
13+ HSwing.tryAddWebLookAndFeel();
14+ HSwing.setWindowsLookAndFeel();
15+
16+ RegistryChlorophyllUploader.registerTerminalInput(new CategoryInputFileWatcherSpawning());
17+ RegistryChlorophyllUploader.registerTerminalInput(new CategoryInputDialog());
18+ RegistryChlorophyllUploader.registerTerminalOutput(new CategoryOutputTunnelSerialToIEEE1888());
19+
20+ new FrameChlorofilSender().setVisible(true);
21+ }
22+}
diff -r 60f53e7cb8fb -r 2b17489650e3 workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/icon.png
Binary file workspace/ChlorophyllUploader/src/main/java/jp/ac/kisarazu/j/kurilab/chlorophylluploader/ver2/icon.png has changed