/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.delegate.directory;
import cli_fmw.main.ClipsException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Date;
import org.xBaseJ.micro.DBF;
import org.xBaseJ.micro.fields.Field;
import org.xBaseJ.micro.xBaseJException;
/**
*
* @author vip
*/
abstract public class UpdaterDirectory {
protected PrintStream out;
abstract public String getFilename();
abstract public String getTitle();
public void update() throws ClipsException {
out = null;
String homeDir = System.getProperty("user.home");
String name = getClass().getSimpleName();
File dir = new File(homeDir);
File f = new File(dir, name + ".log");
try {
out = new PrintStream(f);
out.println("Обновление : " + getTitle());
out.println("Локальное время : " + new Date());
updateImpl();
out.println("Обновление завершено");
out.println("Локальное время : " + new Date());
out.flush();
out.close();
} catch (FileNotFoundException ex) {
throw new ClipsException("Не удалось создать файл " + f.getAbsolutePath(), ex);
} finally {
out.close();
}
}
abstract protected void updateImpl() throws ClipsException;
protected DBF createDBF(File f) throws ClipsException {
String filename = f.getName();
try {
DBF dbf = new DBF(f.getAbsolutePath(), "cp866");
System.out.println("DBASEPARSER: parse file '" + filename + "'");
return dbf;
} catch (xBaseJException ex) {
throw new ClipsException("Ошибка при чтении данных из файла " + filename, ex);
} catch (IOException ex) {
throw new ClipsException("Не найден файл " + filename, ex);
}
}
protected void closeDBF(DBF dbf) {
try {
dbf.close();
} catch (IOException ex) {
//DO NOTHING
}
}
/**
* Вытаскивает поля из таблицы
* @param dbf файл с таблицей
* @return
* @throws java.lang.ArrayIndexOutOfBoundsException
* @throws org.xBaseJ.micro.xBaseJException
*/
protected Field[] getFields(DBF dbf) throws ClipsException {
try {
int fieldCount = dbf.getFieldCount();
System.out.println("DBASEPARSER: item count: " + dbf.getRecordCount());
Field[] fields = new Field[fieldCount];
for (int i = 1; i <= fieldCount; i++) {
fields[i - 1] = dbf.getField(i);
String fieldName = fields[i - 1].getName();
System.out.print(fieldName + " ");
}
System.out.println();
return fields;
} catch (ArrayIndexOutOfBoundsException ex) {
throw new ClipsException("Неверно определено количество полей в файле" + dbf.getName(), ex);
} catch (xBaseJException ex) {
throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
}
}
}