/** * @version $Id: Erratum.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2012/10/01 16:21:34 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.correction.script; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.swt.widgets.Shell; import com.tida_okinawa.corona.io.model.IClaimData; import com.tida_okinawa.corona.io.model.ICoronaProject; import com.tida_okinawa.corona.io.model.table.IFieldHeader; import com.tida_okinawa.corona.io.model.table.TableType; import com.tida_okinawa.corona.io.util.CoronaIoUtils; import com.tida_okinawa.corona.ui.controllers.ErratumController; /** * 誤記補正をコンソールから行うためのクラス * * @author kousuke-morishima * */ public class Erratum extends Cleansing { // TODO FindBugs /** * @param args * 前から順に、データベース接続URL、データベースユーザ名、データベースパスワード、誤記補正対象問い合わせデータ名、 * 誤記補正対象フィールドID(複数可) */ public static void main(String[] args) { try { new Erratum(args).run(); } catch (Exception e) { e.printStackTrace(); System.exit(Cleansing.ERROR_CODE_ANY_EXCEPTION); } System.exit(0); } /** * 自動実行用 * * @param args * 引数 */ private Erratum(String[] args) { super(args); } /** 引数の数がおかしいときのエラーコード */ public static final int ERROR_CODE_ARGS = 5; /** 指定された問い合わせデータがないときのエラーコード */ public static final int ERROR_CODE_NO_CLAIM = 6; /** 指定されたプロジェクトが存在しないときのエラーコード */ public static final int ERROR_CODE_PROJECT_NON_EXISTS = 7; /** 指定された誤記補正対象フィールドの値がおかしいときのエラーコード */ public static final int ERROR_CODE_INVALID_FIELDS = 8; private static final int URL = 0; private static final int USER = 1; private static final int PASS = 2; private static final int DATANAME = 3; private static final int PROJECT = 4; private static final int FIELDS = 5; private IClaimData claim; private List<IFieldHeader> fields; private ICoronaProject project; @Override int check(String[] args) { if (args.length < 6) { return ERROR_CODE_ARGS; } service = createService(args[URL], args[USER], args[PASS]); if (service == null) { return ERROR_CODE_NO_DATABASE_CONNECTION; } String tableName = CoronaIoUtils.createWorkTableName(args[DATANAME], TableType.CLAIM_DATA, 0); claim = getClaimData(tableName); if (claim == null) { return ERROR_CODE_NO_CLAIM; } project = searchProject(args[PROJECT]); if (project == null) { return ERROR_CODE_PROJECT_NON_EXISTS; } fields = getFields(claim, args); if (fields == null) { return ERROR_CODE_INVALID_FIELDS; } return CODE_OK; } @Override String getErrorMessage(int errorCode) { switch (errorCode) { case ERROR_CODE_ARGS: return Messages.bind(Messages.ErrorMessage_ArgsNum, new Object[] { Messages.Name_Erratum, 6, Messages.Erratum_ErrorMessage_ArgsDetail }); case ERROR_CODE_NO_CLAIM: return Messages.Erratum_ErrorMessage_NoData; case ERROR_CODE_PROJECT_NON_EXISTS: return Messages.Erratum_ErrorMessage_NoProject; case ERROR_CODE_INVALID_FIELDS: return Messages.Erratum_ErrorMessage_InvalidFieldsId; default: return super.getErrorMessage(errorCode); } } void run() { Shell parentShell = new Shell(); final ErratumController controller = new ErratumController(parentShell, claim, fields, null); final ProgressMonitorDialog dialog = new ProgressMonitorDialog(parentShell); try { dialog.run(true, true, controller); } catch (InvocationTargetException e) { e.printStackTrace(); errorExit(ERROR_CODE_ANY_EXCEPTION, getErrorMessage(ERROR_CODE_ANY_EXCEPTION)); } catch (InterruptedException e) { e.printStackTrace(); errorExit(ERROR_CODE_INTERRUPTED, getErrorMessage(ERROR_CODE_INTERRUPTED)); } /* 問い合わせデータをプロジェクトに登録する(ターゲットを作る) */ AutoCleansingUtil.registerProject(project, claim, fields); } /* テーブル名に該当する問い合わせデータがなかったらnullを返す */ private IClaimData getClaimData(String tableName) { for (IClaimData claim : service.getClaimDatas()) { if (claim.getTableName().equalsIgnoreCase(tableName)) { return claim; } } return null; } /* 不正な引数が与えられたときは、nullを返す */ private static List<IFieldHeader> getFields(IClaimData claim, String[] args) { List<IFieldHeader> fields = new ArrayList<IFieldHeader>(args.length - FIELDS); for (int i = FIELDS; i < args.length; i++) { try { IFieldHeader field = claim.getFieldInformation(Integer.parseInt(args[i])); fields.add(field); } catch (NumberFormatException e) { return null; } } return fields; } }