/**
* @version $Id: ResultPatternEditorInput2.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/09/02 21:49:11
* @author imai
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.ui.editors;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
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.IClaimWorkPattern;
import com.tida_okinawa.corona.io.model.IResultCoronaPattern;
import com.tida_okinawa.corona.io.model.dic.IPattern;
import com.tida_okinawa.corona.io.model.dic.PatternType;
import com.tida_okinawa.corona.io.model.table.IRecord;
import com.tida_okinawa.corona.ui.PreferenceInitializer;
import com.tida_okinawa.corona.ui.UIActivator;
public class ResultPatternEditorInput2 implements IEditorInput, IResultPatternEditorInput {
final String name;
final IClaimWorkPattern claimWorkPattern;
final boolean resultNomatch;
int claimID;
int fieldID;
ClaimWorkDataType type;
Date lasted;
private Object[] results;
/**
* この解析結果で扱うパターン分類
*/
private Map<Integer, PatternType> patternTypes = new HashMap<Integer, PatternType>();
public ResultPatternEditorInput2(String name, final IClaimWorkPattern claimWorkPattern) {
resultNomatch = UIActivator.getDefault().getPreferenceStore().getBoolean(PreferenceInitializer.PREF_RESULT_NOMATCH);
this.name = name;
this.claimWorkPattern = claimWorkPattern;
claimID = claimWorkPattern.getClaimId();
fieldID = claimWorkPattern.getFieldId();
type = claimWorkPattern.getClaimWorkDataType();
lasted = claimWorkPattern.getLasted();
if (!resultNomatch) {
results = claimWorkPattern.getClaimWorkPatterns().toArray();
} else {
List<Object> lst = new ArrayList<Object>();
IClaimData claim = IoActivator.getService().getClaimData(claimWorkPattern.getClaimId());
String product = IoActivator.getService().getProductName(claimWorkPattern.getProductId());
for (IRecord rec : claim.getRecords()) {
// 対象ターゲットのみ
if (!rec.getField(claim.getProductField()).getValue().equals(product)) {
continue;
}
try {
IResultCoronaPattern result = claimWorkPattern.getClaimWorkPattern(rec.getRecordId());
if (result != null) {
lst.add(result);
} else {
lst.add(rec);
}
} catch (IndexOutOfBoundsException e) {// 範囲外もあり
// TODO ここ何もなくていいの???
}
}
results = lst.toArray();
}
}
@Override
public IClaimWorkPattern getClaimWorkPattern() {
return claimWorkPattern;
}
@Override
public boolean equals(Object obj) {
if (super.equals(obj)) {
return true;
}
if (!(obj instanceof ResultPatternEditorInput2)) {
return false;
}
ResultPatternEditorInput2 input = (ResultPatternEditorInput2) obj;
if (claimID == input.getClaimWorkPattern().getClaimId() && fieldID == input.getClaimWorkPattern().getFieldId()
&& type == input.getClaimWorkPattern().getClaimWorkDataType() && lasted.equals(input.getClaimWorkPattern().getLasted())) {
return true;
}
return false;
}
@SuppressWarnings("rawtypes")
@Override
public Object getAdapter(Class adapter) {
return null;
}
@Override
public boolean exists() {
return false;
}
@Override
public ImageDescriptor getImageDescriptor() {
return null;
}
@Override
public String getName() {
return name;
}
@Override
public IPersistableElement getPersistable() {
return null;
}
@Override
public String getToolTipText() {
return "";
}
/**
* ContentProvider用
*
* @return
*/
public Object[] getElements() {
return Arrays.copyOf(results, results.length);
}
/**
* ContentProvider用
*
* @return
*/
public Object[] getChildren(IResultCoronaPattern result) {
// TODO 要テスト。#817
return result.getHitPositions(0).keySet().toArray();
}
/**
* ContentProvider用
*
* @return
*/
public Object[] getChildren(IPattern pattern) {
return new Object[] { PatternType.getPatternType(pattern.getPatternType()) };
}
/**
* ContentProvider用<br />
* IPatternの親を返す
*
* @param pattern
* @return
*/
public PatternType getParent(IPattern pattern) {
PatternType type = patternTypes.get(pattern.getPatternType());
return type;
}
final static Comparator<PatternType> comparator_PatternType = new Comparator<PatternType>() {
@Override
public int compare(PatternType o1, PatternType o2) {
/* パターン分類の辞書順ソート(大文字小文字区別なし)。「その他」「該当なし」は一番下。 */
int id1 = o1.getId();
int id2 = o2.getId();
if ((id1 > 0) && (id2 > 0)) {
String s1 = o1.getPatternName();
String s2 = o2.getPatternName();
int ret = s1.compareToIgnoreCase(s2);
return ret;
} else {
return id2 - id1;
}
}
};
final static Comparator<IPattern> comparator_IPattern = new Comparator<IPattern>() {
@Override
public int compare(IPattern o1, IPattern o2) {
if ((o1.getPatternType() > 0) && (o2.getPatternType() > 0)) {
String s1 = PatternType.getPatternType(o1.getPatternType()).getPatternName();
String s2 = PatternType.getPatternType(o2.getPatternType()).getPatternName();
int ret = s1.compareToIgnoreCase(s2);
return ret;
}
return o1.getId() - o2.getId();
}
};
final static Comparator<IResultCoronaPattern> compartor_IResultCoronaPattern = new Comparator<IResultCoronaPattern>() {
@Override
public int compare(IResultCoronaPattern o1, IResultCoronaPattern o2) {
return o1.getRecordId() - o2.getRecordId();
}
};
@Override
public int getClaimId() {
return this.claimID;
}
@Override
public int getFieldId() {
return this.fieldID;
}
}