/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package framework.beans.directory.writer;
import framework.beans.FindEntity.Field;
import framework.beans.directory.DirectoryBean;
import framework.generic.ClipsServerException;
import framework.security.UserRight;
import framework.security.UserRightsSetAbstract;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import javax.ejb.Stateless;
/**
*
* @author petr
*/
@Stateless(mappedName="clips-beans/DirectoryIntelWriterBean")
public class DirectoryIntelWriterBean extends DirectoryBean<IntelWriter, IntelWriterDetails> implements DirectoryIntelWriterBeanRemote {
private static final int PURGE_COUNT_PERIOD = 4;
private static final int LEARN_TIME = 1;//days
private static final int LEARN_COUNT = 4;
private static final AtomicInteger purgeCounter = new AtomicInteger(0);
public DirectoryIntelWriterBean() {
super(IntelWriter.class, "IntelWriter");
}
@Override
protected UserRight getRightForCreateDirectoryItem() {
return UserRightsSetAbstract.CREATE_DIRECTORY_INTEL_WRITER;
}
@Override
protected UserRight getRightForWriteToDirectory() {
return UserRightsSetAbstract.CREATE_DIRECTORY_INTEL_WRITER;
}
@Override
protected void set(IntelWriter entity, IntelWriterDetails details) throws ClipsServerException {
IntelWriter writer = entity;
IntelWriterDetails d = details;
writer.setTitle(d.title);
//writer.setDirty(details.dirty);
writer.setType(d.type);
writer.setUsed(d.used);
}
/**
* Функция выделяет из текста отдельные предложения и отправляет
* в sentenceReceiver
* Пердложением считается непустой набор символов который начинается с
* русской или латинской заглавной буквы и заканчивается точкой.
* Знаки по какой либо причине оказавшиеся между концом одного
* предложения иначалом другого отбрасываются
* @param type тип
* @param text расбираемый текст
*/
void addNewText(int type, String text) {
String sentence = ""; //тут собираем предложение
boolean isSentence = false; //указывает, что каретка внутри предложения
char[] t = text.toCharArray();//загоним текст в чаровский массив, чтоб удобнее было
for (int i = 0; i < t.length; i++) {//шуршим по всем элементам массива
if ('A' <= t[i] && t[i] <= 'Z' || 'А' <= t[i] && t[i] <= 'Я') {//Начинается с заглавной
isSentence = true;
}
if (t[i] == '.' && !sentence.isEmpty()){//предложение кончилось
sentence += t[i];//последний символ
isSentence = false;//каретка не на предложении
sentenceReceiver(type, sentence);//отправим копию предложение приёмнику
sentence = "";//само предложение сбросим
}
if (isSentence){//если каретка в предложении
sentence += t[i];//добавим символ
}
}
}
void sentenceReceiver(int type, String sentence){
}
@Override
@SuppressWarnings("deprecation")
public void clearDirectory() throws ClipsServerException{
Field[] f = {
new Field("title", "", Field.OPERATOR_NOT_NULL)
};
deleteEntityList(IntelWriter.class, f);
}
@Override
public void learnTextEvent(int type, ArrayList<String> tokens) {
//fin
for (String curToken : tokens) {
// TODO
}
int counter = purgeCounter.getAndIncrement();
if ((counter % PURGE_COUNT_PERIOD) == 0){
purgeCounter.addAndGet(-PURGE_COUNT_PERIOD);
purge();
}
}
public void learnLine(){
}
private void purge(){
}
}