/** * @version $Id: FrequentTermHandler.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/09/29 14:38:34 * @author takayuki-matsumoto * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.ui.handlers; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.List; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import com.tida_okinawa.corona.CoronaActivator; import com.tida_okinawa.corona.common.CleansingNameVariable; import com.tida_okinawa.corona.internal.ui.util.Kernel; import com.tida_okinawa.corona.internal.ui.views.model.IUIProduct; import com.tida_okinawa.corona.internal.ui.views.model.IUIWork; import com.tida_okinawa.corona.internal.ui.views.model.impl.CoronaModel; import com.tida_okinawa.corona.io.IoActivator; import com.tida_okinawa.corona.io.model.ClaimWorkDataType; import com.tida_okinawa.corona.io.model.IClaimData; import com.tida_okinawa.corona.io.model.IClaimWorkData; import com.tida_okinawa.corona.io.model.ICoronaProduct; import com.tida_okinawa.corona.io.model.table.IFieldHeader; import com.tida_okinawa.corona.ui.ViewUtil; import com.tida_okinawa.corona.ui.controllers.FrequentController; import com.tida_okinawa.corona.ui.controllers.FrequentControllerForUI; /** * @author takayuki-matsumoto */ public class FrequentTermHandler extends AbstractCleansingHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { super.execute(event); Kernel.startSuppressSleep(); try { for (IUIProduct uiProduct : getProducts()) { ICoronaProduct product = uiProduct.getObject(); List<IClaimData> claims = product.getClaimDatas(); IClaimWorkData workData = null; /* ダイアログメッセージ用のStringBuffer */ StringBuilder message = new StringBuilder(); message.append(CleansingNameVariable.FREQUENT); message.append("が終了しました。\n\n対象列:\n"); for (IClaimData claim : claims) { int claimId = claim.getId(); Collection<Integer> fieldIds = product.getMiningFields(claimId); for (Integer fieldId : fieldIds) { IClaimWorkData srcWork = null; for (IClaimWorkData work : srcWorkList) { if ((work.getClaimId() == claimId) && (work.getFieldId() == fieldId)) { srcWork = work; break; } } if (srcWork != null) { IUIWork uiWork = CoronaModel.INSTANCE.getWork(uiProduct, srcWork); IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); FrequentController controller = new FrequentControllerForUI(uiProduct, uiWork); Shell shell = window.getShell(); ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell); long s = System.currentTimeMillis(); dialog.run(true, true, controller); CoronaActivator.debugLog("頻出用語抽出時間: " + (System.currentTimeMillis() - s) + "mSec"); /* 最終出力用のクレームデータ保持 */ workData = getClaimWorkData(uiProduct, ClaimWorkDataType.FREQUENTLY_APPERING, uiWork.getObject().getFieldId(), uiWork.getObject() .getClaimId()); /* 処理した列名をダイアログ用StringBufferに追加する */ IClaimData claimData = IoActivator.getService().getClaimData(workData.getClaimId()); IFieldHeader header = claimData.getFieldInformation(fieldId); message.append("  ["); message.append(header.getName()); message.append("]\n"); } } } if (workData != null) { /* 処理結果ダイアログを開く */ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), CleansingNameVariable.FREQUENT + "終了", message.toString()); } } } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { Kernel.stopSuppressSleep(); } ViewUtil.refreshProjectExplorer(0); return null; } @Override protected boolean isEnabled(ClaimWorkDataType type) { switch (type) { case DEPENDENCY_STRUCTURE: case CORRECTION_FLUC: case CORRECTION_SYNONYM: return true; default: return false; } } @Override ClaimWorkDataType getExecType() { return ClaimWorkDataType.FREQUENTLY_APPERING; } }