package context.core.entity;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import org.openide.util.Exceptions;
/**
*
* @author Aale
*/
public class CorpusData extends DataElement {
/**
*
*/
protected List<FileData> files;
/**
*
*/
protected File dir;
/**
*
* @param name
* @param path
*/
public CorpusData(StringProperty name, StringProperty path) {
super(name, path);
dir = new File(path.get());
files = new ArrayList<FileData>();
}
/**
*
* @param outputDir
* @param prefix
* @param input
*/
public static void createOutputDirectory(String outputDir, String prefix, CorpusData input) {
File directory = new File(outputDir);
if (!directory.exists()) {
directory.mkdirs();
}
File newfile;
for (int i = 0; i < input.files.size(); i++) {
try {
newfile = new File(directory, prefix + "-" + input.files.get(i).getFile().getName());
newfile.createNewFile();
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
}
}
/**
*
* @param name
* @return
*/
public int addFile(String name) {
try {
File newFile = new File(dir, name);
if (newFile.exists()) {
newFile.delete();
}
System.out.println("dir=" + dir);
System.out.println("name=" + name);
System.out.println("newfile=" + newFile.getAbsolutePath());
newFile.createNewFile();
String newName = this.name.get() + "-" + this.files.size();
files.add(new FileData(new SimpleStringProperty(newName), newFile));
return files.size() - 1;
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
return 0;
}
/**
*
* @param sourceDir
*/
public void addAllFiles(File sourceDir) {
if (!sourceDir.isDirectory()) {
return;
}
FileFilter directoryFilter = new FileFilter() {
@Override
public boolean accept(File file) {
return !file.isDirectory();
}
};
File[] allfiles = dir.listFiles(directoryFilter);
for (File f : allfiles) {
if (!f.isDirectory() && !(f.getName().equals("desktop.ini")) && !(f.getName().startsWith("."))) {
FileData fileData = new FileData(new SimpleStringProperty(name.get() + this.files.size()), f);
files.add(fileData);
System.out.println("FileData added: " + fileData.getName().get() + " path=" + fileData.getPath().get());
}
}
}
/**
*
* @return
*/
public List<FileData> getFiles() {
return this.files;
}
/**
*
* @param index
* @return
*/
public String readFile(int index) {
if (index >= this.files.size()) {
System.out.println("readFile: index is greater than files# ");
return null;
}
return files.get(index).readFileIntoString();
}
/**
*
* @return
*/
public String readAllFiles() {
StringBuilder sb = new StringBuilder();
System.out.println("files count:" + files.size());
for (FileData f : files) {
System.out.println("iterate over files=" + f.getFile().getAbsolutePath());
String str = f.readFileIntoString();
sb.append(str);
}
return sb.toString();
}
/**
*
* @param index
* @param content
*/
public void writeFile(int index, String content) {
if (index >= this.files.size()) {
System.out.println("writeFile: index is greater than files# ");
return;
}
FileData.writeDataIntoFile(content, files.get(index).getPath().get());
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}