package com.portfolio.data.attachment;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.activation.MimeType;
import javax.activation.MimeTypeParseException;
import javax.naming.InitialContext;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.opensaml.saml1.core.Request;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSSerializer;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.*;
import com.portfolio.data.provider.DataProvider;
import com.portfolio.data.utils.ConfigUtils;
import com.portfolio.data.utils.SqlUtils;
import com.portfolio.security.Credential;
public class CompareServlet extends HttpServlet {
final Logger logger = LoggerFactory.getLogger(CompareServlet.class);
private static final long serialVersionUID = 9188067506635747901L;
DataProvider dataProvider;
boolean hasNodeReadRight = false;
boolean hasNodeWriteRight = false;
Credential credential;
int userId;
int groupId = -1;
HttpSession session;
static DataProvider provider;
public void initialize(HttpServletRequest httpServletRequest)
{
}
public static int comparaisonParCodes(String code1, String code2, Element racine, Connection c) throws TransformerFactoryConfigurationError, MimeTypeParseException, Exception
{
int pourcentage=0;
NodeList liste1 = racine.getElementsByTagName("code");
List<Node> listeCode1 = new ArrayList<Node>();
List<Node> listeCode2 = new ArrayList<Node>();
for(int i=0;i<liste1.getLength();i++)
{
Node nd = liste1.item(i).getFirstChild();
if(nd!=null)
{
String txt = nd.getNodeValue();
if(txt.equals(code1))
{
listeCode1.add(liste1.item(i));
}
else if(txt.equals(code2))
{
listeCode2.add(liste1.item(i));
}
}
else{};
}
if(listeCode1.size()==1 && listeCode2.size()==1)
{
Node parNd1=listeCode1.get(0).getParentNode().getParentNode();
Node parNd2=listeCode2.get(0).getParentNode().getParentNode();
pourcentage = comparaisonVraiFaux(parNd1,parNd2,c);
}
else if(listeCode1.size()==0 | listeCode2.size()==0)
{
System.out.println("Aucune donn�e � comparer");
}
else if(listeCode1.size()!= 0 && listeCode2.size() != 0 && (listeCode1.size()>1 | listeCode2.size()>1))
{
System.out.println("Impossible de comparer plus de deux donn�es");
}
return pourcentage;
}
public static int comparaisonVraiFaux(Node nd1, Node nd2, Connection c) throws TransformerFactoryConfigurationError, MimeTypeParseException, Exception
{
int prct=0;
int nbBR=0;
int nbComparaison=0;
boolean similaire = false;
Element elt1 = (Element) nd1;
Element elt2 = (Element) nd2;
NodeList ndL1 = elt1.getElementsByTagName("code");
NodeList ndL2 = elt2.getElementsByTagName("code");
for (int i=0;i<ndL1.getLength();i++)
{
for(int j=0;j<ndL2.getLength();j++)
{
if(ndL1.item(i).hasChildNodes() && ndL2.item(j).hasChildNodes())
{
String cd1=ndL1.item(i).getFirstChild().getNodeValue().trim();
String cd2=ndL2.item(j).getFirstChild().getNodeValue().trim();
if(cd1.equals(cd2))
{
Element pndL1 = (Element) ndL1.item(i).getParentNode();
Element pndL2 = (Element) ndL2.item(j).getParentNode();
String str1 = pndL1.getAttribute("xsi_type");
String str2 = pndL2.getAttribute("xsi_type");
if(str1.equals("nodeRes") && str2.equals("nodeRes"))
{
Element aComparer1 = (Element) pndL1.getNextSibling().getNextSibling().getFirstChild();
String v1 = aComparer1.getTextContent().trim();
Element aComparer2 = (Element) pndL2.getNextSibling().getNextSibling().getFirstChild();
String v2 = aComparer2.getTextContent().trim();
if(v1!=null && v2!=null && v1.equals(v2))
{
similaire=true;
nbComparaison = nbComparaison+1;
nbBR=nbBR+1;
Element n = (Element) aComparer1.getParentNode().getParentNode().getFirstChild();
n.setAttribute("compare", "true"); //ajout attribut compare dans metadatawad
StringWriter stw = new StringWriter();
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.transform(new DOMSource(n), new StreamResult(stw));
String result = stw.toString();
Element nP = (Element) n.getParentNode();
String idd=nP.getAttribute("id");
provider.putNodeMetadataWad(c, new MimeType("text/xml"), idd, result, 1, 0);
}
else if ((v1!=null && v2!=null && !v1.equals(v2)))
{
similaire=false;
nbComparaison = nbComparaison+1;
Element n = (Element) aComparer1.getParentNode().getParentNode().getFirstChild();
n.setAttribute("compare", "false");
StringWriter stw = new StringWriter();
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.transform(new DOMSource(n), new StreamResult(stw));
String result = stw.toString();
Element nP = (Element) n.getParentNode();
String idd=nP.getAttribute("id");
provider.putNodeMetadataWad(c, new MimeType("text/xml"), idd, result, 1, 0);
}
else
{}
aComparer1=null;
aComparer2=null;
}
else
{
}
pndL1=null;
pndL2=null;
}
else{}
cd1=""; cd2="ee";
}
else{}
}
}
prct = ((100*nbBR)/(nbComparaison));
System.out.println(nbBR+"/"+nbComparaison+" "+prct);
return prct;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
String uuidsNds = request.getPathInfo().substring(1);
String uuidREP = uuidsNds.substring(0,36);
String uuidSOL = uuidsNds.substring(36,72);
String uuidNd = uuidsNds.substring(72);
Connection c;
String lbl = null;
Object ingt = "g";
Object ingtREP = "";
Object ingtSOL = "";
try {
provider = SqlUtils.initProvider(null, logger);
c = SqlUtils.getConnection(getServletContext());
ingt = provider.getNode(c, new MimeType("text/xml"), uuidNd, true, 1, groupId, lbl); //pour test remplacer uuidNd par strNoeud
ingtREP = provider.getNode(c, new MimeType("text/xml"), uuidREP, true, 1, groupId, lbl);
ingtSOL = provider.getNode(c, new MimeType("text/xml"), uuidSOL, true, 1, groupId, lbl);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//out.println("<h2>FAIT...</h2>");
//parse les donn�es du noeud
DocumentBuilderFactory documentBuilderFactory =DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = null;
try {
documentBuilder = documentBuilderFactory.newDocumentBuilder();
} catch (ParserConfigurationException e1) {
e1.printStackTrace();
}
ByteArrayInputStream is = new ByteArrayInputStream(ingt.toString().getBytes("UTF-8"));
ByteArrayInputStream isREP = new ByteArrayInputStream(ingtREP.toString().getBytes("UTF-8"));
ByteArrayInputStream isSOL = new ByteArrayInputStream(ingtSOL.toString().getBytes("UTF-8"));
Document doc = null;
Document docREP = null;
Document docSOL = null;
try {
doc = documentBuilder.parse(is);
docREP = documentBuilder.parse(isREP);
docSOL = documentBuilder.parse(isSOL);
} catch (SAXException e) {
e.printStackTrace();
}
DOMImplementationLS impl = (DOMImplementationLS)doc.getImplementation().getFeature("LS", "3.0");
LSSerializer serial = impl.createLSSerializer();
serial.getDomConfig().setParameter("xml-declaration", true);
System.out.println("fjsfoigb");
Element root = doc.getDocumentElement();
Element rootREP = docREP.getDocumentElement();
Element rootSOL = docSOL.getDocumentElement();
try {
c=SqlUtils.getConnection(getServletContext());
int aRenvoyer = comparaisonVraiFaux(rootREP, rootSOL, c);
response.getWriter().print(aRenvoyer);
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (MimeTypeParseException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}