/** インポートしているスタンプを削除する。 */ public void removeImportedTree() { // 削除するTreeを取得する int row = browseTable.getSelectedRow(); final PublishedTreeModel removeTree = tableModel.getObject(row); if (removeTree == null) { return; } SubscribedTreeModel sm = new SubscribedTreeModel(); sm.setTreeId(removeTree.getId()); sm.setUserModel(Project.getUserModel()); final List<SubscribedTreeModel> list = new ArrayList<SubscribedTreeModel>(1); list.add(sm); // Unsubscribeタスクを実行する final SimpleWorker worker = new SimpleWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { StampDelegater sdl = new StampDelegater(); sdl.unsubscribeTrees(list); return null; } @Override protected void succeeded(Void result) { // スタンプボックスから削除する stampBox.removeImportedTree(removeTree.getId()); // ブラウザ表示を変更する removeTree.setImported(false); tableModel.fireTableDataChanged(); } @Override protected void cancelled() { ClientContext.getBootLogger().debug("Task cancelled"); } @Override protected void failed(java.lang.Throwable cause) { JOptionPane.showMessageDialog( frame, cause.getMessage(), ClientContext.getFrameTitle(title), JOptionPane.WARNING_MESSAGE); ClientContext.getBootLogger().warn(cause.getMessage()); } @Override protected void startProgress() { delayCount = 0; blockGlass.block(); taskTimer.start(); } @Override protected void stopProgress() { taskTimer.stop(); monitor.close(); blockGlass.unblock(); taskTimer = null; monitor = null; } }; String message = "スタンプインポート"; String note = "インポート済みスタンプを削除しています..."; Component c = frame; monitor = new ProgressMonitor(c, message, note, 0, maxEstimation / delay); taskTimer = new Timer( delay, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { delayCount++; if (monitor.isCanceled() && (!worker.isCancelled())) { // worker.cancel(true); // No cancel } else if (delayCount >= monitor.getMaximum() && (!worker.isCancelled())) { worker.cancel(true); } else { monitor.setProgress(delayCount); } } }); worker.execute(); }
/** ブラウザテーブルで選択した公開Treeをインポートする。 */ public void importPublishedTree() { // テーブルはシングルセレクションである int row = browseTable.getSelectedRow(); final PublishedTreeModel importTree = tableModel.getObject(row); if (importTree == null) { return; } // Import 済みの場合 if (importTree.isImported()) { return; } try { importTree.setTreeXml(new String(importTree.getTreeBytes(), "UTF-8")); } catch (Exception e) { e.printStackTrace(System.err); } // サブスクライブリストに追加する SubscribedTreeModel sm = new SubscribedTreeModel(); sm.setUserModel(Project.getUserModel()); sm.setTreeId(importTree.getId()); final List<SubscribedTreeModel> subscribeList = new ArrayList<SubscribedTreeModel>(1); subscribeList.add(sm); final SimpleWorker worker = new SimpleWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { StampDelegater sdl = new StampDelegater(); sdl.subscribeTrees(subscribeList); return null; } @Override protected void succeeded(Void result) { // スタンプボックスへインポートする stampBox.importPublishedTree(importTree); // Browser表示をインポート済みにする importTree.setImported(true); tableModel.fireTableDataChanged(); } @Override protected void cancelled() { ClientContext.getBootLogger().debug("Task cancelled"); } @Override protected void failed(java.lang.Throwable cause) { JOptionPane.showMessageDialog( frame, cause.getMessage(), ClientContext.getFrameTitle(title), JOptionPane.WARNING_MESSAGE); ClientContext.getBootLogger().warn(cause.getMessage()); } @Override protected void startProgress() { delayCount = 0; blockGlass.block(); taskTimer.start(); } @Override protected void stopProgress() { taskTimer.stop(); monitor.close(); blockGlass.unblock(); taskTimer = null; monitor = null; } }; String message = "スタンプインポート"; String note = "インポートしています..."; Component c = frame; monitor = new ProgressMonitor(c, message, note, 0, maxEstimation / delay); taskTimer = new Timer( delay, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { delayCount++; if (monitor.isCanceled() && (!worker.isCancelled())) { // worker.cancel(true); // No cancel } else if (delayCount >= monitor.getMaximum() && (!worker.isCancelled())) { worker.cancel(true); } else { monitor.setProgress(delayCount); } } }); worker.execute(); }