package com.qxueyou.scc.exercise.service.impl.node;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import com.qxueyou.scc.exercise.model.ExerciseItem;
|
import com.qxueyou.scc.exercise.service.impl.Node;
|
import com.qxueyou.scc.exercise.service.impl.parser.DocParser;
|
import com.qxueyou.scc.exercise.service.impl.parser.ItemAnswerParser;
|
|
/**
|
* 带解析的文档
|
* @author 德虎
|
*
|
*/
|
public class Doc extends Node {
|
|
public static final String CURR_SUCCESS_CONTENT ="CONTENT";
|
|
public static final String CURR_SUCCESS_OPTION ="OPTION";
|
|
public static final String CURR_SUCCESS_ANALYSIS ="ANALYSIS";
|
|
//上一次解析成功的类型
|
private String lastSuccessType;
|
|
public String getLastSuccessType() {
|
return lastSuccessType;
|
}
|
|
public void setLastSuccessType(String lastSuccessType) {
|
this.lastSuccessType = lastSuccessType;
|
}
|
|
public Doc(){
|
setName("DOC");
|
setParser(new DocParser());
|
}
|
|
@Override
|
public boolean isComplete() {
|
return false;
|
}
|
|
@SuppressWarnings("unchecked")
|
public List<ItemType> getItemTypes(){
|
List<Node> children = getChildren();
|
|
if(children.isEmpty()){
|
return Collections.EMPTY_LIST;
|
}
|
|
List<ItemType> itemTypes = new ArrayList<ItemType>(children.size());
|
|
for(Node node:children){
|
itemTypes.add((ItemType) node);
|
}
|
|
return itemTypes;
|
|
}
|
|
public List<ExerciseItem> convertExerciseItems(){
|
List<ItemType> itemTypes = getItemTypes();
|
|
List<ExerciseItem> exerciseItems = new ArrayList<ExerciseItem>(12);
|
|
for(ItemType type:itemTypes){
|
List<Item> items = type.getItems();
|
for(Item item:items){
|
if(!item.isComplete()){
|
continue;
|
}
|
if(StringUtils.isBlank(item.getAnswer())){
|
generateItemAnswerAgain(item);
|
}
|
exerciseItems.add(item.convertExerciseItem());
|
}
|
}
|
|
return exerciseItems;
|
}
|
|
//如果没有答案,重新解析一遍答案
|
private void generateItemAnswerAgain(Item item){
|
ItemAnswerParser parser = new ItemAnswerParser();
|
parser.parse(item, item.getTitle());
|
}
|
|
}
|