380 lines
12 KiB
Java
380 lines
12 KiB
Java
package nodeAC;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.CharBuffer;
|
|
import java.nio.charset.Charset;
|
|
import java.util.List;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
import org.xml.sax.SAXException;
|
|
|
|
import net.lingala.zip4j.core.ZipFile;
|
|
import net.lingala.zip4j.model.FileHeader;
|
|
|
|
public class LecturesDossiers {
|
|
|
|
|
|
private static EnsembleFichiers EC = new EnsembleFichiers();
|
|
|
|
|
|
public LecturesDossiers( Ecriture.LocationFile location, String patch) throws ParserConfigurationException, SAXException, IOException {
|
|
String NomDossier = null;
|
|
String leNomDuRepertoire = patch;
|
|
String ContentT = null;
|
|
String ContentObjectGraphicTableur = null;
|
|
|
|
String fichierAnalyseods = null;
|
|
|
|
|
|
File rep = new File(leNomDuRepertoire);
|
|
|
|
if(location==Ecriture.LocationFile.DansDossier) {
|
|
System.out.println();
|
|
|
|
if(rep.isDirectory()) {
|
|
File[] fichiers = rep.listFiles();
|
|
|
|
for(int i=0; i<fichiers.length; i++ ) {
|
|
ContentT = "";
|
|
ContentObjectGraphicTableur = "";
|
|
fichierAnalyseods = null;
|
|
NomDossier=null;
|
|
|
|
if(fichiers[i].isDirectory()) {
|
|
|
|
String filename = fichiers[i].getName();
|
|
|
|
//String fichierAnalyseods = null ;
|
|
if(fichiers[i].getName().contains("_")) {
|
|
NomDossier = fichiers[i].getName().substring(0, fichiers[i].getName().indexOf("_"));
|
|
}else {
|
|
NomDossier = fichiers[i].getName();
|
|
}
|
|
|
|
File[] fichiers2 = fichiers[i].listFiles();
|
|
for(int j=0; j<fichiers2.length; j++ ) {
|
|
if(fichiers2[j].getName().contains(".")) {
|
|
String ext = fichiers2[j].getName().substring( fichiers2[j].getName().lastIndexOf("."));
|
|
if(ext.equals(".ods")) {
|
|
ContentT = ContenuContent(fichiers2[j]);
|
|
fichierAnalyseods = fichiers2[j].getName();
|
|
ContentObjectGraphicTableur = ContenuContentObject(fichiers2[j]);
|
|
fichierAnalyseods = fichiers2[j].getName(); }
|
|
}
|
|
}
|
|
if(NomDossier==null) {NomDossier="inconnu"; filename="inconnu";}
|
|
if(fichierAnalyseods==null) fichierAnalyseods="pas de fichier calc déposé.";
|
|
|
|
|
|
if(fichierAnalyseods!=null) {
|
|
constructionNodeAvecString A = new constructionNodeAvecString();
|
|
nodeAC nod = A.NewNode(fichierAnalyseods);
|
|
fichierAnalyseods = Ecriture.ecritureNodeWithIndent(nod,0).toString();
|
|
|
|
nod = A.NewNode(ContentObjectGraphicTableur);
|
|
ContentObjectGraphicTableur = Ecriture.ecritureNodeWithIndent(nod,0).toString();
|
|
}
|
|
|
|
EC.AjouteEnsembleAnalyse(NomDossier, ContentT, fichierAnalyseods,ContentObjectGraphicTableur,filename );
|
|
System.out.print(".");
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if(location == Ecriture.LocationFile.UniquementFichier) {
|
|
System.out.println();
|
|
|
|
File[] fichiers = rep.listFiles();
|
|
|
|
ContentT = "";
|
|
fichierAnalyseods = null;
|
|
NomDossier=null;
|
|
|
|
for(int j=0; j<fichiers.length; j++ ) {
|
|
if(fichiers[j].getName().contains(".")) {
|
|
String ext = fichiers[j].getName().substring( fichiers[j].getName().lastIndexOf("."));
|
|
if(fichiers[j].isFile()) {
|
|
if(ext.equals(".ods")) {
|
|
ContentT = ContenuContent(fichiers[j]);
|
|
fichierAnalyseods = fichiers[j].getName();
|
|
NomDossier=fichierAnalyseods;
|
|
if(NomDossier.contains("_")) NomDossier = NomDossier.substring(0, NomDossier.indexOf("_"));
|
|
ContentObjectGraphicTableur = ContenuContentObject(fichiers[j]); fichierAnalyseods = fichiers[j].getName();
|
|
|
|
if(fichierAnalyseods!=null) {
|
|
constructionNodeAvecString A = new constructionNodeAvecString();
|
|
nodeAC nod = A.NewNode(fichierAnalyseods);
|
|
Ecriture.ecritureNodeEnXML(nod, "fichierAnalyseods", patch, Ecriture.typeFichier.fichier_etudiant);
|
|
fichierAnalyseods = Ecriture.ecritureNodeWithIndent(nod,0).toString();
|
|
|
|
if(ContentObjectGraphicTableur!=null) {
|
|
nod = A.NewNode(ContentObjectGraphicTableur);
|
|
ContentObjectGraphicTableur = Ecriture.ecritureNodeWithIndent(nod,0).toString();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
EC.AjouteEnsembleAnalyse(NomDossier, ContentT,fichierAnalyseods, ContentObjectGraphicTableur, "");
|
|
ContentT="";
|
|
ContentObjectGraphicTableur="";
|
|
NomDossier="";
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
*
|
|
* @param Version
|
|
* @param patch
|
|
* @param fichierStudentInCurrentFolder
|
|
* @throws ParserConfigurationException
|
|
* @throws SAXException
|
|
* @throws IOException
|
|
*/
|
|
public LecturesDossiers(String pathFichier) throws ParserConfigurationException, SAXException, IOException {
|
|
String NomDossier = null;
|
|
|
|
String ContentT = null;
|
|
String ContentObjectGraphicTableur = null;
|
|
String fichierAnalyseods = null;
|
|
|
|
File fichiers = new File(pathFichier);
|
|
|
|
ContentT = "";
|
|
ContentObjectGraphicTableur = "";
|
|
|
|
String filename = fichiers.getName();
|
|
if(fichiers.getName().contains(".")) {
|
|
String ext = fichiers.getName().substring( fichiers.getName().lastIndexOf("."));
|
|
filename = fichiers.getName();
|
|
NomDossier = pathFichier;
|
|
|
|
if(ext.equals(".ods")) {
|
|
ContentT = ContenuContent(fichiers);
|
|
fichierAnalyseods = fichiers.getName();
|
|
ContentObjectGraphicTableur = ContenuContentObject(fichiers);
|
|
fichierAnalyseods = fichiers.getName();
|
|
}
|
|
}
|
|
|
|
if(fichierAnalyseods==null) fichierAnalyseods="pas de fichier calc déposé.";
|
|
|
|
System.out.println("ContentT :" + ContentT);
|
|
System.out.println("ContentObjectGraphicTableur :" + ContentObjectGraphicTableur);
|
|
System.out.println("NomDossier :" + NomDossier);
|
|
System.out.println("filename :" + filename);
|
|
|
|
|
|
EC.AjouteEnsembleAnalyse(NomDossier, ContentT, fichierAnalyseods,ContentObjectGraphicTableur,filename );
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param zipf
|
|
* @return
|
|
* @throws ParserConfigurationException
|
|
* @throws SAXException
|
|
* @throws IOException
|
|
*/
|
|
private static String ContenuContent(File zipf) throws ParserConfigurationException, SAXException, IOException {
|
|
String content = null;
|
|
String style= null;
|
|
String meta =null;
|
|
|
|
try {
|
|
ZipFile zipFile = new ZipFile(zipf.getAbsolutePath());
|
|
|
|
@SuppressWarnings("unchecked")
|
|
List<FileHeader> fileHeaderList = (List<FileHeader>) zipFile.getFileHeaders();
|
|
|
|
for (int i = 0; i < fileHeaderList.size(); i++) {
|
|
FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
|
|
net.lingala.zip4j.io.ZipInputStream is = zipFile.getInputStream(fileHeader);
|
|
|
|
if(fileHeader.getFileName().equals("content.xml")) {
|
|
int uncompressedSize = (int) fileHeader.getUncompressedSize();
|
|
|
|
OutputStream os = new ByteArrayOutputStream(uncompressedSize);
|
|
|
|
int bytesRead;
|
|
|
|
byte[] buffer = new byte[4096];
|
|
while ((bytesRead = is.read(buffer)) != -1) {
|
|
os.write(buffer, 0, bytesRead); // os le contenu du fichier
|
|
}
|
|
content = os.toString();
|
|
|
|
}
|
|
if(fileHeader.getFileName().equals("styles.xml")) {
|
|
int uncompressedSize = (int) fileHeader.getUncompressedSize();
|
|
|
|
OutputStream os = new ByteArrayOutputStream(uncompressedSize);
|
|
|
|
int bytesRead;
|
|
|
|
byte[] buffer = new byte[4096];
|
|
|
|
while ((bytesRead = is.read(buffer)) != -1) {
|
|
os.write(buffer, 0, bytesRead); // os le contenu du fichier
|
|
}
|
|
style = os.toString();
|
|
}
|
|
if(fileHeader.getFileName().equals("meta.xml")) {
|
|
int uncompressedSize = (int) fileHeader.getUncompressedSize();
|
|
|
|
OutputStream os = new ByteArrayOutputStream(uncompressedSize);
|
|
|
|
int bytesRead;
|
|
|
|
byte[] buffer = new byte[4096];
|
|
|
|
while ((bytesRead = is.read(buffer)) != -1) {
|
|
os.write(buffer, 0, bytesRead); // os le contenu du fichier
|
|
}
|
|
meta = os.toString();
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace(System.err);
|
|
} catch (net.lingala.zip4j.exception.ZipException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
String tout = content + style + meta ;
|
|
|
|
|
|
byte[] defaultBytes = tout.getBytes();
|
|
//Charset def = Charset.defaultCharset();
|
|
Charset utf8 = Charset.forName("utf-8");
|
|
ByteBuffer bb = ByteBuffer.wrap(defaultBytes);
|
|
CharBuffer cb = utf8.decode(bb);
|
|
tout = cb.toString();
|
|
|
|
|
|
|
|
return tout;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param zipf
|
|
* @return
|
|
* @throws ParserConfigurationException
|
|
* @throws SAXException
|
|
* @throws IOException
|
|
*/
|
|
private static String ContenuContentObject(File zipf) throws ParserConfigurationException, SAXException, IOException {
|
|
String object= null;
|
|
|
|
try {
|
|
ZipFile zipFile = new ZipFile(zipf.getAbsolutePath());
|
|
|
|
@SuppressWarnings("unchecked")
|
|
List<FileHeader> fileHeaderList = (List<FileHeader>) zipFile.getFileHeaders();
|
|
|
|
// int CompteurObject = 1;
|
|
|
|
for (int i = 0; i < fileHeaderList.size(); i++) {
|
|
FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
|
|
net.lingala.zip4j.io.ZipInputStream is = zipFile.getInputStream(fileHeader);
|
|
|
|
if(fileHeader.getFileName().contains("Object ") && fileHeader.getFileName().contains("/content.xml") ) {
|
|
String num = fileHeader.getFileName();
|
|
Pattern p = Pattern.compile("[a-zA-Z]");
|
|
Matcher m = p.matcher(num);
|
|
num = m.replaceAll("");
|
|
|
|
p = Pattern.compile("/");
|
|
m = p.matcher(num);
|
|
num = m.replaceAll("");
|
|
|
|
p = Pattern.compile(" ");
|
|
m = p.matcher(num);
|
|
num = m.replaceAll("");
|
|
|
|
p = Pattern.compile("\\.");
|
|
m = p.matcher(num);
|
|
num = m.replaceAll("");
|
|
|
|
int uncompressedSize = (int) fileHeader.getUncompressedSize();
|
|
|
|
OutputStream os = new ByteArrayOutputStream(uncompressedSize);
|
|
|
|
int bytesRead;
|
|
|
|
byte[] buffer = new byte[4096];
|
|
|
|
while ((bytesRead = is.read(buffer)) != -1) {
|
|
os.write(buffer, 0, bytesRead); // os le contenu du fichier
|
|
}
|
|
object = "<Object num=\""+num+"\">" + os.toString() + "</Object>" + object;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace(System.err);
|
|
} catch (net.lingala.zip4j.exception.ZipException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
|
|
String tout = object ;
|
|
if(tout!=null) {
|
|
byte[] defaultBytes = tout.getBytes();
|
|
//Charset def = Charset.defaultCharset();
|
|
Charset utf8 = Charset.forName("utf-8");
|
|
ByteBuffer bb = ByteBuffer.wrap(defaultBytes);
|
|
CharBuffer cb = utf8.decode(bb);
|
|
tout = cb.toString();
|
|
}
|
|
|
|
|
|
return tout;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return
|
|
*/
|
|
public static EnsembleFichiers getEC() {
|
|
return EC;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param eC
|
|
*/
|
|
public void setEC(EnsembleFichiers eC) {
|
|
EC = eC;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|