/** * @version $Id: ExportCleansingWizardPage.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/11/29 14:36:45 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.ui.wizards; import java.io.File; import java.util.Iterator; import java.util.List; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.IStructuredSelection; import com.tida_okinawa.corona.CoronaActivator; import com.tida_okinawa.corona.internal.ui.actions.CleansingExportOperation; import com.tida_okinawa.corona.internal.ui.views.model.IUIElement; import com.tida_okinawa.corona.internal.ui.views.model.IUIProduct; import com.tida_okinawa.corona.internal.ui.views.model.IUIProject; 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.model.IClaimWorkData; import com.tida_okinawa.corona.ui.UIActivator; /** * @author kousuke-morishima */ public class ExportCleansingWizardPage extends ExportWizardPage { public ExportCleansingWizardPage(String pageName, IStructuredSelection selection) { super(pageName, CoronaModel.toContainer(selection)); setTitle("クレンジング結果 エクスポート"); } @Override public boolean finish() { final CleansingExportOperation op = new CleansingExportOperation(); List<?> selectedResources = getSelectedResources(); final IUIWork[] subjects = new IUIWork[selectedResources.size()]; Iterator<?> itr = selectedResources.iterator(); for (int i = 0; i < subjects.length; i++) { subjects[i] = (IUIWork) model.adapter((IResource) itr.next(), false); } final File exportDir = new File(destinationField.getText()); Job exportJob = new Job("エクスポート") { @Override protected IStatus run(IProgressMonitor monitor) { IStatus status = null; try { status = op.execute(subjects, exportDir, monitor); } catch (ExecutionException e) { e.printStackTrace(); status = new Status(Status.ERROR, UIActivator.PLUGIN_ID, e.getLocalizedMessage()); } if (status.getSeverity() == IStatus.CANCEL) { CoronaActivator.getDefault().getLogger().getOutStream().println("処理がキャンセルされました。"); } return status; } @Override public boolean belongsTo(Object family) { return false; } }; exportJob.setUser(true); exportJob.setSystem(false); exportJob.schedule(); try { exportJob.join(); } catch (InterruptedException e) { e.printStackTrace(); } saveWidgetValues(); return (Status.OK == exportJob.getResult().getSeverity()); } /* **************************************** * validate */ @Override protected boolean validateSourceGroup() { if (!super.validateSourceGroup()) { return false; } List<?> resources = getSelectedResources(); for (Object o : resources) { if (!isWork((IResource) o)) { setErrorMessage("エクスポート可能なクレンジング結果ではないファイルが含まれています。\n(構文解析のみ出力可能)"); return false; } } return true; } CoronaModel model = CoronaModel.INSTANCE; private boolean isWork(IResource resource) { if (!(resource instanceof IFile)) { return false; } IUIElement element = model.adapter(resource, false); if (element instanceof IUIWork) { return isValidWork((IUIWork) element); } if (element != null) { /* その他のCoronaObjectが選択されている */ return false; } /* 以下、プロジェクトツリーを未展開だと、adapterがうまく働かないことへの対応 */ IProject project = resource.getProject(); IUIProject uiProject = (IUIProject) model.adapter(project, false); if (uiProject == null) { return false; } IUIProduct[] uiProducts = uiProject.getProducts(); IUIProduct uiProduct = null; for (IUIProduct uiProd : uiProducts) { if (uiProd.getResource().getFullPath().isPrefixOf(resource.getFullPath())) { uiProduct = uiProd; break; } } if (uiProduct == null) { return false; } IUIWork[] uiWorks = uiProduct.getWorks(); for (IUIWork uiWork : uiWorks) { if (uiWork.getResource().equals(resource)) { return isValidWork(uiWork); } } return false; } private static boolean isValidWork(IUIWork uiWork) { /* Memo 今は構文解析結果だけ有効 */ IClaimWorkData work = uiWork.getObject(); switch (work.getClaimWorkDataType()) { case RESLUT_PATTERN: return true; case CORRECTION_MISTAKES: case MORPHOLOGICAL: case DEPENDENCY_STRUCTURE: case CORRECTION_FLUC: case CORRECTION_SYNONYM: case FREQUENTLY_APPERING: default: return false; } } }