package org.xdams.managing.command;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.http.HttpSession;
import static org.xdams.utility.text.findreplace.Options.CASE_INSENSITIVE;
import static org.xdams.utility.text.findreplace.Options.WHOLE_WORD;
import org.apache.commons.lang3.StringUtils;
import org.springframework.ui.ModelMap;
import org.xdams.adv.configuration.ConfigurationXMLReader;
import org.xdams.adv.configuration.Element;
import org.xdams.adv.utility.GenericInterface;
import org.xdams.adv.utility.MappingAdv;
import org.xdams.conf.master.ConfBean;
import org.xdams.manager.conf.MultiEditingManager;
import org.xdams.page.view.bean.ManagingBean;
import org.xdams.user.bean.UserBean;
import org.xdams.utility.ExtractDocument;
import org.xdams.utility.XMLCopy;
import org.xdams.utility.request.MyRequest;
import org.xdams.utility.text.findreplace.Replacer;
import org.xdams.workflow.bean.WorkFlowBean;
import org.xdams.xml.builder.XMLBuilder;
import org.xdams.xmlengine.connection.manager.ConnectionManager;
import org.xdams.xw.XWConnection;
public class AdvFindReplace {
private Map<String, String[]> parameterMap = null;
private ModelMap modelMap = null;
public AdvFindReplace(Map<String, String[]> parameterMap, ModelMap modelMap) throws Exception {
this.parameterMap = parameterMap;
this.modelMap = modelMap;
}
public ManagingBean execute() throws Exception {
XWConnection xwconn = null;
ConnectionManager connectionManager = new ConnectionManager();
ConfBean confBean = null;
ManagingBean managingBean = null;
String physDoc = MyRequest.getParameter("physDoc", parameterMap);
String makeAction = MyRequest.getParameter("makeAction", parameterMap);
String action = MyRequest.getParameter("action", parameterMap);
String applyTo = MyRequest.getParameter("applyTo", parameterMap);
String selid = MyRequest.getParameter("selid", parameterMap);
HttpSession httpSession = null;
List<String> confControl = new ArrayList<String>();
confControl.add("titleManager");
confControl.add("docEdit");
confControl.add("valoriControllati");
confControl.add("managing");
try {
UserBean userBean = (UserBean) modelMap.get("userBean");
confBean = (ConfBean) modelMap.get("confBean");
WorkFlowBean workFlowBean = (WorkFlowBean) modelMap.get("workFlowBean");
httpSession = workFlowBean.getRequest().getSession(false);
xwconn = connectionManager.getConnection(workFlowBean.getArchive());
MultiEditingManager editingManager = new MultiEditingManager(parameterMap, confBean, userBean, workFlowBean);
editingManager.setTheXML(new XMLBuilder(xwconn.getSingleXMLFromNumDoc(Integer.parseInt(physDoc)), "ISO-8859-1"));
confBean = editingManager.rewriteMultipleConf(confControl);
if (httpSession.getAttribute(workFlowBean.getManagingBeanName()) != null) {
managingBean = ((ManagingBean) httpSession.getAttribute(workFlowBean.getManagingBeanName()));
} else {
managingBean = new ManagingBean();
}
managingBean.setSelid(selid);
if (!physDoc.equals("") && makeAction.equals("") && action.equals("")) {
managingBean.setPhysDoc(Integer.parseInt(physDoc));
managingBean.setDocLowerBrother(xwconn.getNumDocNextBrother(managingBean.getPhysDoc()));
managingBean.setDocUpperBrother(xwconn.getNumDocPreviousBrother(managingBean.getPhysDoc()));
it.highwaytech.db.QueryResult qrSons = xwconn.getSonsFromNumDoc(managingBean.getPhysDoc());
managingBean.setNumElementiSons(qrSons.elements);
it.highwaytech.db.QueryResult qrHier = xwconn.getQRFromHier(managingBean.getPhysDoc(), false);
managingBean.setNumElementiHier(qrHier.elements);
if (!selid.equals("")) {
it.highwaytech.db.QueryResult qr = xwconn.getQRFromSelId(selid);
managingBean.setNumElementi(qr.elements);
}
managingBean.setTitle((xwconn.getTitle(xwconn.connection, xwconn.getTheDb(), managingBean.getPhysDoc())).getTitle());
managingBean.setDocXML(xwconn.getSingleXMLFromNumDoc(managingBean.getPhysDoc()));
if (httpSession.getAttribute(workFlowBean.getManagingBeanName()) != null) {
ArrayList listDocs = ((ManagingBean) httpSession.getAttribute(workFlowBean.getManagingBeanName())).getListPhysDoc();
if (listDocs != null && listDocs.size() > 0) {
managingBean.setListPhysDoc(listDocs);
}
}
managingBean.setDispatchView("advFindReplaceMenu");
} else if (!physDoc.equals("") && makeAction.equals("true")) { // DO
managingBean.setPhysDoc(Integer.parseInt(physDoc));
ArrayList elementiNum = ExtractDocument.extractDocument(httpSession, xwconn, managingBean, workFlowBean, applyTo, selid);
managingBean.setNumElementi(elementiNum.size());
managingBean.setTitle((xwconn.getTitle(xwconn.connection, xwconn.getTheDb(), Integer.parseInt(physDoc))).getTitle());
managingBean.setDispatchView("advFindReplaceResult");
int totElementi = elementiNum.size();
int errori = 0;
final ArrayList<String> processati = new ArrayList<String>();
ConfigurationXMLReader configurationXMLReader = new ConfigurationXMLReader(confBean.getTheXMLConfManaging());
MappingAdv mappingAdv = new MappingAdv();
for (int i = 0; i < totElementi; i++) {
int docCorrente = 0;
try {
docCorrente = ((Integer) elementiNum.get(i)).intValue();
} catch (Exception e) {
docCorrente = (Integer.parseInt((String) elementiNum.get(i)));
}
try {
String docXML = xwconn.getSingleXMLFromNumDoc(docCorrente);
XMLBuilder xmlBuilder = new XMLBuilder(docXML, "ISO-8859-1");
String findWhat = MyRequest.getParameter("findWhat", parameterMap);
System.out.println(".execute() findWhat " + findWhat);
final String replaceWith = MyRequest.getParameter("replaceWith", parameterMap);
System.out.println(".execute() replaceWith " + replaceWith);
final String caseSensitive = MyRequest.getParameter("caseSensitive", parameterMap);
System.out.println(".execute() caseSensitive " + caseSensitive);
final String whole_word = MyRequest.getParameter("whole_word", parameterMap);
System.out.println(".execute() whole_word " + whole_word);
String regexStr = MyRequest.getParameter("regexStr", parameterMap);
final Replacer replacer = new Replacer(findWhat);
if (("on").equals(whole_word)) {
replacer.addOptions(WHOLE_WORD);
}
if (caseSensitive == null) {
replacer.addOptions(CASE_INSENSITIVE);
}
replacer.applyConfiguration();
for (Entry<String, String[]> entry : parameterMap.entrySet()) {
String keyValue = entry.getKey();
if (keyValue.equals("theDeep")) {
for (final String string : entry.getValue()) {
ArrayList<Element> arrayList = new ArrayList<Element>();
Element element = configurationXMLReader.getElementFromDeep(string);
arrayList.add(element);
mappingAdv.buildXML(arrayList, xmlBuilder, null, null, new GenericInterface<XMLBuilder>() {
public void invoke(XMLBuilder builder, Element element) {
try {
if (string.equals(element.getDeep()) && (!(element.getFieldValue().trim()).equals(""))) {
String finalValue = "";
replacer.setText(StringUtils.defaultIfEmpty(element.getFieldValue(), ""));
finalValue = replacer.replaceAll(replaceWith).toString();
if ((!(element.getFieldValue().trim()).equals("")) && !finalValue.equals(element.getFieldValue())) {
processati.add("");
if ((element.getCdata()) != null && element.getCdata().equals("true")) {
builder.insertValueAt(element.getFieldXPath(), finalValue, true);
} else {
builder.insertValueAt(element.getFieldXPath(), finalValue);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
}
xwconn.executeUpdateByDocNumber(xmlBuilder.getXML("ISO-8859-1", false), docCorrente);
} catch (Exception e) {
managingBean.addErrorMsg(e.getMessage());
errori++;
}
}
managingBean.setDocSuccessi(processati.size());
managingBean.setDocErrori(errori);
}
modelMap.put("confBean", confBean);
modelMap.put("managingBean", managingBean);
} catch (Exception e) {
e.printStackTrace();
modelMap.put("confBean", confBean);
modelMap.put("managingBean", managingBean);
throw new Exception(e.toString());
} finally {
connectionManager.closeConnection(xwconn);
}
return managingBean;
}
}