/**
* @version $Id: OrOperator.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/08/29 17:52:41
* @author kousuke-morishima
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.correction.parsing.model;
import com.tida_okinawa.corona.io.model.MorphemeElement;
/**
* @author kousuke-morishima
*/
public class OrOperator extends ScopePattern implements IModification, IHitMorphemeHolder {
private MorphemeElement me = null;
/**
* ルートにOrパターンを作る
*/
public OrOperator() {
this(null);
}
/**
* 指定された親の下にOrパターンを作る
*
* @param parent
* 親パターン
*/
public OrOperator(PatternContainer parent) {
super(parent);
}
@Override
public boolean canHaveChild(PatternKind kind) {
if (isUnderSequence()) {
return PatternKind.TERM.equals(kind);
}
switch (kind) {
case MODIFICATION_SOURCE:
return false;
case MODIFICATION_DESTINATION:
return false;
case NOT:
return false;
default:
return true;
}
}
/**
* @return 自身がSequenceの配下ならtrue
*/
private boolean isUnderSequence() {
PatternContainer parent = getParent();
while (parent != null) {
if (PatternKind.SEQUENCE.equals(parent.getKind())) {
return true;
} else if (PatternKind.OR.equals(parent.getKind())) {
parent = parent.getParent();
} else {
return false;
}
}
return false;
}
@Override
public void setTopMorpheme(MorphemeElement morphemeElement) {
me = morphemeElement;
}
@Override
public MorphemeElement getTopMorpheme() {
return me;
}
@Override
public String toString() {
String search = (getScope() == null) ? "" : getScope().getName(); //$NON-NLS-1$
StringBuilder string = new StringBuilder(12);
return string.append("検索範囲 : ").append(search).append(" (").append(getKind()).append(")").toString(); //$NON-NLS-2$ //$NON-NLS-3$
}
@Override
protected PatternContainer ownClone() {
OrOperator or = new OrOperator(null);
or.setScope(getScope());
return or;
}
@Override
public PatternKind getKind() {
return PatternKind.OR;
}
}