diff --git a/metadata/dbms/DBMSRecords.java b/metadata/dbms/DBMSRecords.java deleted file mode 100644 index c2c4016..0000000 --- a/metadata/dbms/DBMSRecords.java +++ /dev/null @@ -1,2342 +0,0 @@ -package dbms; //package org.ccalm.monitoring; //Главная 2 - -import java.io.BufferedOutputStream; -import java.io.BufferedWriter; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.PublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.X509EncodedKeySpec; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.text.SimpleDateFormat; -import java.util.*; -//import java.util.Iterator; -import java.util.zip.CRC32; -import java.util.zip.Checksum; - -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.Jws; -import io.jsonwebtoken.Jwts; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletResponse; - -import javax.crypto.SecretKey; -import javax.crypto.spec.SecretKeySpec; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; - -//import org.apache.commons.fileupload.FileItem; -//import org.apache.commons.fileupload.disk.DiskFileItemFactory; -//import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.io.FileUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.MarkerManager; -import org.json.JSONArray; -import org.json.JSONObject; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.env.Environment; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.FileSystemResource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; -import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.context.ServletContextAware; -import org.springframework.web.multipart.MultipartFile; -import org.w3c.dom.CharacterData; -import org.w3c.dom.DOMException; -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 tctable.Tools; -import tools.DBTools; -import tools.EmailUtility; -import tools.Translation; -import tools.User; - - -@Controller -public class DBMSRecords implements ServletContextAware { - - private static final Logger logger = LogManager.getLogger(DBMSRecords.class); - - private final NamedParameterJdbcTemplate jdbcTemplate; - private ServletContext context; - private Properties m_props=null; - private String m_props_loc=""; - - @Value("${public.key}") - String key_a_txt=""; - - @Autowired - private Environment env; - - @Autowired - public DBMSRecords(NamedParameterJdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - @Override - public void setServletContext(ServletContext servletContext) { - this.context=servletContext; - } - - public String sendError(int code, String message,String marker) { - JSONObject json = new JSONObject(); - json.put("error_code",code); - json.put("error_message",message); - json.put("error_marker",marker); - return json.toString(); - } - - private PublicKey getPublicKey(){ - try { - byte[] keyBytes = Base64.getDecoder().decode(key_a_txt); - X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - PublicKey key = keyFactory.generatePublic(spec); - return key; - } catch (Exception e) { - logger.error(e); - } - return null; - } - - //Документация по @RequestBody http://javastudy.ru/spring-mvc/json-xml/ application/xml - //Обычно мантирую в: /api/dbms/v09/ - @RequestMapping(value = "/dbms",method = {RequestMethod.POST,RequestMethod.GET}) //,produces = "text/plain; charset=utf-8" - @ResponseBody - public ResponseEntity ajaxRecords( - @ModelAttribute User user, - @RequestBody(required = false) byte[] reqData, - @CookieValue(value = "jwt_a", defaultValue = "") String jwt_a, - @RequestParam(required=false,name="lng") String language_id - ) { - final HttpHeaders httpHeaders= new HttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - - String result=sendError(10000,"Request_not_processed",null); - - if(user.id==null || user.id.equals("null")) { // - if (jwt_a.equals("") || Tools.countOccurrences(jwt_a, '.') != 2) { - result = sendError(10000, "Please_send_a_valid_JWT_token",null); - return new ResponseEntity(result, httpHeaders, HttpStatus.OK); - } - //Проверяю подпись токена - Jws claims = null; - PublicKey key_a = getPublicKey(); //SecretKey key_a = new SecretKeySpec(Base64.getDecoder().decode(env.getProperty("access.key")), "HmacSHA256"); - try { - claims = Jwts.parserBuilder() - .setSigningKey(key_a) - .build() - .parseClaimsJws(jwt_a); - } catch (Exception e) { - return new ResponseEntity("JWT_token_verification_error", httpHeaders, HttpStatus.OK); - } - user.id = claims.getBody().get("user_id").toString(); - } - - - if(language_id!=null && !language_id.equals("")) - user.language_id=language_id; - logger.info("user.id="+user.id+" user.name="+user.name+" user.language_id="+user.language_id+" user.country_id="+user.country_id); - - boolean error=false; - result=sendError(10000,"Request not processed!",null); - if(reqData==null) - return new ResponseEntity(result, httpHeaders, HttpStatus.OK); - - //response.setCharacterEncoding("UTF-8"); - - //response.getWriter().append("Served at: ").append(request.getContextPath()); - //Thread.sleep(5000); // sleep 5 seconds - String db_url = ""; - String db_login = ""; - String db_password = ""; - String data_dir = ""; - String mail_host = ""; - String mail_port = ""; - String mail_login = ""; - String mail_password = ""; - try { - db_url = env.getProperty("spring.datasource.url"); - db_login = env.getProperty("spring.datasource.username"); - db_password = env.getProperty("spring.datasource.password"); - data_dir = env.getProperty("data.dir"); - mail_host = env.getProperty("mail.host"); - mail_port = env.getProperty("mail.port"); - mail_login = env.getProperty("mail.login"); - mail_password = env.getProperty("mail.password"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - String jspPath = context.getRealPath("/"); - - String fn = "";//request.getParameter("fn"); - String name = "";//request.getParameter("n"); //type name - - InputStream body = new ByteArrayInputStream(reqData); - - //logger.info("Send \"Records\" for user = ."+user.name); - //logger.info("req = "+req); - - Document doc = null; - Element reqNode = null; - try { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - doc = dBuilder.parse(body); - } catch (Exception ex) { - logger.info(ex.getMessage()); - //return ""; - return new ResponseEntity(sendError(10000,"Parsing request error!",null), httpHeaders, HttpStatus.OK); - } - - if (doc != null) { - reqNode = doc.getDocumentElement(); - fn = reqNode.getAttribute("fn"); //Номер функции - } - - //logger.info(""); - //logger.info("XML = "); - //logger.info(toString(doc)); - - Connection conn = null; - try { - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url, db_login, db_password); - if (conn != null) { - String uuid = UUID.randomUUID().toString(); - Marker marker = MarkerManager.getMarker(uuid); - logger.info(marker,"Connect is OK!"); - } else { - error=true; - result=sendError(10000,"An error occurred while connecting to the database!",null); - } - } catch (Exception ex) { - logger.info(ex.getMessage()); - error=true; - result=sendError(10000,"An error occurred while connecting to the database!",null); - } - - try { - Statement stt0 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - //st.executeUpdate("SET TIME ZONE 'UTC';"); зачем коментил? - stt0.executeUpdate("SET TIME ZONE 'Asia/Almaty';"); - stt0.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - error=true; - result=sendError(10000,"An set TYPE_SCROLL_SENSITIVE!",null); - } - - //response.getWriter().append("fn="+fn); - //out.print("
"+ request.getRequestURI() ); - - //XPathFactory xPathfactory = XPathFactory.newInstance(); //If error set path in tomcat to xalan.jar - javax.xml.xpath.XPathFactory xPathfactory = javax.xml.xpath.XPathFactory.newInstance(); - XPath xpath = xPathfactory.newXPath(); - XPathExpression expr=null; - - //Description - // (Fn == 0) - Send the metadata to the client at the requested site - // (Fn == 1) - Insert one record in the database - // (Fn == 2) - Update the record - // (Fn == 3) - Delete the record - // (Fn == 4) - Send data to the client according to the filter value - // (Fn == 5) - Take the data for editing 1st record by id - // (Fn == 6) - Return the data to the client to fill SELECT object into a separate function to save bandwidth filters can also be used here - // (Fn == 7) - Login (or sent restore email) - // (Fn == 8) - Reports almost the same as the function 4 - // (Fn == 9) - Save the binary data into the database - - if (fn != null && fn.equals("0")) //Send metadata to client - { - if (doc != null) { - xPathfactory = XPathFactory.newInstance(); - xpath = xPathfactory.newXPath(); - try { - expr = xpath.compile("//metadata/type/@n"); - name = "" + expr.evaluate(doc, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - error=true; - } - } - - String xml = ""; - - //Get XML node from database and parse to DOM - doc = parseString(getTypeStrNode(conn,name)); - - if (doc != null) { - doc.getDocumentElement().normalize(); //Del or concat text node - - xml += ""; - - //Delete all child "sql-query" nodes. - XPathExpression exp=null; - NodeList nl=null; - try { - exp = xpath.compile("//sql-query"); - nl = (NodeList) exp.evaluate(doc, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - for (int j = 0; j < nl.getLength(); j++) { - nl.item(j).getParentNode().removeChild(nl.item(j)); - } - // XML Node Serialisation - DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation(); - LSSerializer lsSerializer = domImplementation.createLSSerializer(); - lsSerializer.getDomConfig().setParameter("xml-declaration", false); - - //Set attributes to define access level (insert,update,selete,select). - String sql_query = ""; - String allow; - Statement stt=null; - ResultSet rs=null; - - allow = "1"; - try { - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - sql_query = "select main.get_Access(" + user.id + ", 'Select_" + name + "') as acc;"; - rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) - if (rs.getBoolean(1)) - allow = "1"; - else - allow = "0"; - rs.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - } catch (SQLException ex) { - logger.info(ex.getMessage() + " SQL=" + sql_query); - result=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - }finally { - if(rs!=null) try{rs.close();}catch(SQLException ex){} - if(stt!=null) try{stt.close();}catch(SQLException ex){} - } - doc.getDocumentElement().setAttribute("sel", allow); - - stt=null; rs=null; - allow = "1"; - try { - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stt.executeQuery("select main.get_Access(" + user.id + ", 'Insert_" + name + "') as acc;"); - if (rs != null) { - try { - if (rs.next()) - if (rs.getBoolean(1)) - allow = "1"; - else - allow = "0"; - rs.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - }finally { - if(rs!=null) try{rs.close();}catch(SQLException ex){} - if(stt!=null) try{stt.close();}catch(SQLException ex){} - } - doc.getDocumentElement().setAttribute("ins", allow); - - stt=null; rs=null; - allow = "1"; - try { - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stt.executeQuery("select main.get_Access(" + user.id + ", 'Update_" + name + "') as acc;"); - if (rs != null) { - try { - if (rs.next()) - if (rs.getBoolean(1)) - allow = "1"; - else - allow = "0"; - rs.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - }finally { - if(rs!=null) try{rs.close();}catch(SQLException ex){} - if(stt!=null) try{stt.close();}catch(SQLException ex){} - } - doc.getDocumentElement().setAttribute("upd", allow); - - stt=null; rs=null; - allow = "1"; - try { - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stt.executeQuery("select main.get_Access(" + user.id + ", 'Delete_" + name + "') as acc;"); - if (rs != null) { - try { - if (rs.next()) - if (rs.getBoolean(1)) - allow = "1"; - else - allow = "0"; - rs.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - }finally { - if(rs!=null) try{rs.close();}catch(SQLException ex){} - if(stt!=null) try{stt.close();}catch(SQLException ex){} - } - doc.getDocumentElement().setAttribute("del", allow); - - xml += lsSerializer.writeToString(doc.getDocumentElement()); - xml += ""; - } else { - xml += ""; - } - - result=trts(conn,xml,user); - httpHeaders.setContentType(MediaType.APPLICATION_XML); - - } else if (fn != null && fn.equals("1")) { - String typename = ""; - String obj_id = ""; - NodeList node_properties = null; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - //obj_id = "" + nTypeR.getAttributes().getNamedItem("id").getNodeValue(); //The current page number - try { - expr = xpath.compile("properties/prop"); - node_properties = (NodeList) expr.evaluate(nTypeR, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - String sql_query=""; - try { - expr = xpath.compile("properties/sql-query[@t='i']/text()"); - sql_query = (String) expr.evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - logger.info("sql_query11 = " + sql_query); - - for (int i = 0; i < node_properties.getLength(); i++) { - String vn = node_properties.item(i).getAttributes().getNamedItem("n").getNodeValue(); - String val = node_properties.item(i).getTextContent(); - - //Since the node type does not appear in the query, we select it separately - String vt = ""; - NodeList nodeList=null; - try { - expr = xpath.compile("properties/prop[@n='" + vn + "']"); - nodeList = (NodeList) expr.evaluate(nTypeS, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - if (nodeList!=null && nodeList.getLength() > 0) { - vt = nodeList.item(0).getAttributes().getNamedItem("vt").getNodeValue(); - //If this "file" is then copy it from the temporary folder to the specified path - if(vt.equals("file")) - { - String srcPath = data_dir;//context.getInitParameter("file-upload"); - String destPath = nodeList.item(0).getAttributes().getNamedItem("path").getNodeValue(); - File srcFile = new File(srcPath+val); //Upload folder - if(srcFile.isFile()) - { - File destFile = new File(destPath+val); //Foldef from metadata.xml - try { - FileUtils.copyFile(srcFile, destFile); - FileUtils.forceDelete(srcFile); - } catch (IOException ex) { - logger.info(ex.getMessage()); - } - } - } - } - - sql_query = Tools.replaceAll(sql_query,"${" + vn + "}", DBTools.getSQLValue(vt, val)); - - } - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - logger.info("sql_query22 = " + sql_query); - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) - obj_id = rs.getString(1); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - String xmlstring = ""; - - result=xmlstring; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - } - stt.close(); - rs.close(); - stt=null; - rs=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage()+"\n\nSQL query: " + sql_query,null); - error=true; - } - } - - } else if (fn != null && fn.equals("2")) //Update record by ID from XML data - { - String typename = ""; - String obj_id = ""; - NodeList node_properties = null; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - obj_id = "" + nTypeR.getAttributes().getNamedItem("id").getNodeValue(); //The current page number - try { - expr = xpath.compile("properties/prop"); - node_properties = (NodeList) expr.evaluate(nTypeR, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - String sql_query=""; - try { - expr = xpath.compile("properties/sql-query[@t='u']/text()"); - sql_query = (String) expr.evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - logger.info("sql_query = " + sql_query); - for (int i = 0; i < node_properties.getLength(); i++) { - String vn = node_properties.item(i).getAttributes().getNamedItem("n").getNodeValue(); - String val = node_properties.item(i).getTextContent(); - - //Так как тип узла не передётся в запросе выбираем его отдельно - String vt = ""; - NodeList nodeList = null; - try { - expr = xpath.compile("properties/prop[@n='" + vn + "']"); - nodeList = (NodeList) expr.evaluate(nTypeS, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - if (nodeList!=null && nodeList.getLength() > 0) { - vt = nodeList.item(0).getAttributes().getNamedItem("vt").getNodeValue(); - //If this "file" is then copy it from the temporary folder to the specified path - if(vt.equals("file")) - { - String srcPath = data_dir;//context.getInitParameter("file-upload"); - String destPath = nodeList.item(0).getAttributes().getNamedItem("path").getNodeValue(); - File srcFile = new File(srcPath+val); //Upload folder - if(srcFile.isFile()) - { - File destFile = new File(destPath+val); //Foldef from metadata.xml - try { - FileUtils.copyFile(srcFile, destFile); - FileUtils.forceDelete(srcFile); - } catch (IOException ex) { - logger.info(ex.getMessage()); - } - - } - } - } - sql_query=Tools.replaceAll(sql_query,"${" + vn + "}", DBTools.getSQLValue(vt, val)); - } - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - logger.info("sql_query = " + sql_query); - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) - obj_id = rs.getString(1); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - - String xmlstring = ""; - - result=xmlstring; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - } - rs.close(); - stt.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage()+"\n\nSQL query: " + sql_query,null); - error=true; - } - } - - } else if (fn != null && fn.equals("3")) { - String typename = ""; - String obj_id = ""; - //NodeList node_properties=null; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - obj_id = "" + nTypeR.getAttributes().getNamedItem("id").getNodeValue(); //The current page number - - //expr = xpath.compile("properties/prop"); - //node_properties = (NodeList)expr.evaluate(nTypeR, XPathConstants.NODESET); - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - String sql_query=""; - try { - expr = xpath.compile("properties/sql-query[@t='d']/text()"); - sql_query = (String) expr.evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - logger.info("sql_query = " + sql_query); - /*for(int i=0;i0) - { - vt=nodeList.item(0).getAttributes().getNamedItem("vt").getNodeValue(); - } - - sql_query=Tools.replaceAll(sql_query,"${"+vn+"}",DBTools.getSQLValue(vt,val)); - } */ - - sql_query = Tools.replaceAll(sql_query,"${id}", DBTools.getSQLValue("string", obj_id)); //string а не i4 так как некоторые таблицы с uuid - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - //logger.info("sql_query = " + sql_query); - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) - obj_id = rs.getString(1); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - String xmlstring = ""; - - result=xmlstring; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - } - rs.close(); - stt.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage()+"\n\nSQL query: " + sql_query,null); - error=true; - } - - } - - } else if (fn != null && (fn.equals("4") || fn.equals("11"))) { - int rowspagecount = 100; //Records per page - String typename = ""; - String pagepos = ""; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - pagepos = "" + nTypeR.getAttributes().getNamedItem("pp").getNodeValue(); //The current page number - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - //Find XML node "type" by name - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - if (nTypeS != null) { - Node f1 = null, f2 = null; - //В переданном запросе может быть не полный фильтр заполняем серверный значениями из переданного - NodeList nodeList = null; - try { - nodeList = (NodeList) xpath.compile("objects-list/filter").evaluate(nTypeS, XPathConstants.NODESET); - if (nodeList.getLength() > 0) - f1 = nodeList.item(0); - nodeList = (NodeList) xpath.compile("objects-list/filter").evaluate(nTypeR, XPathConstants.NODESET); - if (nodeList.getLength() > 0) - f2 = nodeList.item(0); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - //logger.info("f1=\n" + nodeToString(f1)); - //logger.info("f1=\n" + nodeToString(f2)); - - setFilter(f1, f2);//заменить все значения первого фильтра значениями из второго - - //logger.info("f1=\n" + nodeToString(f1)); - //logger.info("f1=\n" + nodeToString(f2)); - - String sql_query=""; - try { - sql_query = (String) xpath.compile("objects-list/sql-query/text()").evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - //logger.info("sql_query = " + sql_query); - - Node nextnode = f1.getFirstChild(); - while (nextnode != null) { - if (nextnode.getNodeName().equals("column")) { - try { - String vn = nextnode.getAttributes().getNamedItem("n").getNodeValue(); - /*String size; - Node n = nextnode.getAttributes().getNamedItem("size"); - if (n != null) { - size = n.getNodeValue(); - }*/ - String vt = nextnode.getAttributes().getNamedItem("vt").getNodeValue(); - String val = getCharacterDataFromElement((Element) nextnode); - - val = DBTools.getSQLValue(vt, val); - - sql_query = Tools.replaceAll(sql_query,"${" + vn + "}", val); - } catch (Exception ex) { - logger.info(ex.getMessage()); - logger.info("exception = " + ex.getMessage()); - } - } - nextnode = nextnode.getNextSibling(); - } - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - //logger.info("sql_query = " + sql_query); - - try { - Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stmt.executeQuery(sql_query); - int pagecount = 0; - try { - if (rs.last()) { - pagecount = rs.getRow(); - rs.beforeFirst(); - } - } catch (Exception ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage()+"\n\nSQL query: " + sql_query,null); - error=true; - } - pagecount = (int) Math.ceil((double) pagecount / (double) rowspagecount); - - //В месте с фильтром может прити и название полей которые нужно выбрать если есть хоть 1 поле то выберать только его - List columns = new ArrayList(); - - try { - nodeList = (NodeList) xpath.compile("objects-list/column").evaluate(nTypeR, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - if(nodeList!=null) - { - for (int i = 0; i < nodeList.getLength(); i++) { - columns.add(nodeList.item(i).getAttributes().getNamedItem("n").getNodeValue()); - } - } - - if (columns.size() == 0) //Если нет ни одного столбца заполняем массив из серверного XML - { - try { - nodeList = (NodeList) xpath.compile("objects-list/column").evaluate(nTypeS, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - for (int i = 0; i < nodeList.getLength(); i++) { - columns.add(nodeList.item(i).getAttributes().getNamedItem("n").getNodeValue()); - } - } - - //перебираем RS и строим XML только из тех столбцов которые записанны в секци objects-list поля column в не зависимости от их видимости - /*String xmlstring = ""; - xmlstring += "\n"; - - int pos = -1; - - // iterate through the java resultset - try { - while (rs.next()) { - pos++; - if ((Integer.parseInt(pagepos) != -1) && ((pos < (Integer.parseInt(pagepos) * rowspagecount)) || (pos >= Integer.parseInt(pagepos) * rowspagecount + rowspagecount))) - continue; - - String access = ""; //u = enable update field, d = enable delete field - try { - if (rs.getBoolean("_u") == true) - access += "u"; - } catch (java.sql.SQLException e) { - access += "u"; - } - try { - if (rs.getBoolean("_d") == true) - access += "d"; - } catch (java.sql.SQLException e) { - access += "d"; - } - - String id = ""; - try { - id = rs.getString(nTypeS.getAttributes().getNamedItem("ObjectID").getNodeValue()); - } catch (SQLException e) { - } - - xmlstring += " "; - for (int i = 0; i < columns.size(); i++) { - try { - String val = rs.getString(columns.get(i)); - if (val == null) - val = ""; - xmlstring += ""; - } catch (SQLException e) { - } - } - xmlstring += "\n"; - } - } catch (NumberFormatException | DOMException | SQLException ex) { - logger.info(ex.getMessage()); - } - - xmlstring += "\n"; - result=xmlstring;*/ - JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); - json.put("fn",fn); - json.put("n",typename); - json.put("pc",pagecount); - json.put("pp",pagepos); - JSONArray datas = new JSONArray(); - json.put("data",datas); - - int pos = -1; - - // iterate through the java resultset - try { - while (rs.next()) { - pos++; - if ((Integer.parseInt(pagepos) != -1) && ((pos < (Integer.parseInt(pagepos) * rowspagecount)) || (pos >= Integer.parseInt(pagepos) * rowspagecount + rowspagecount))) - continue; - - JSONObject data = new JSONObject(); - datas.put(data); - - - String access = ""; //u = enable update field, d = enable delete field - try { - if (rs.getBoolean("_u") == true) - access += "u"; - } catch (java.sql.SQLException e) { - access += "u"; - } - try { - if (rs.getBoolean("_d") == true) - access += "d"; - } catch (java.sql.SQLException e) { - access += "d"; - } - - String id = ""; - try { - id = rs.getString(nTypeS.getAttributes().getNamedItem("ObjectID").getNodeValue()); - } catch (SQLException e) { - } - - data.put("id", id); - data.put("a", access); - - JSONArray row = new JSONArray(); - data.put("row",row); - for (int i = 0; i < columns.size(); i++) { - try { - String val = rs.getString(columns.get(i)); - row.put(val); - } catch (SQLException e) { - } - } - } - } catch (NumberFormatException | DOMException | SQLException ex) { - logger.info(ex.getMessage()); - } - - result=json.toString(); - - rs.close(); - stmt.close(); - rs=null; - stmt=null; - - } catch (SQLException ex) { - String uuid = UUID.randomUUID().toString(); - Marker marker = MarkerManager.getMarker(uuid); - logger.error(marker,ex.getMessage(),ex); - ex.printStackTrace(); - result=sendError(10000,trt(conn,"Error_executing_SQL_query",user),uuid); - error=true; - } - } - } - } else if (fn != null && fn.equals("5")) { - String sql_query = ""; - String typename = ""; - String idname = ""; - String id = ""; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - idname = "" + nTypeR.getAttributes().getNamedItem("ObjectID").getNodeValue(); - id = "" + nTypeR.getAttributes().getNamedItem("id").getNodeValue(); - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - if (nTypeS != null) { - //Select SQL query to editing record - sql_query=""; - try { - sql_query = (String) xpath.compile("properties/sql-query[@t='s']/text()").evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - sql_query = Tools.replaceAll(sql_query,"${"+idname+"}", DBTools.getSQLValue("string", id)); - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - //logger.info("sql_query = " + sql_query); - - //st = conn.createStatement(); - - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - //Выбираем данные и строим XML для отправки клиенту - String xmlstring = ""; - xmlstring += "\n"; - NodeList nodeList=null; - try { - nodeList = (NodeList) xpath.compile("properties/prop").evaluate(nTypeS, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - // iterate through the java resultset - if(nodeList!=null) - { - try { - while (rs.next()) { - for (int i = 0; i < nodeList.getLength(); i++) { - String fName = nodeList.item(i).getAttributes().getNamedItem("n").getNodeValue(); - String val = rs.getString(fName); - if (val == null) - val = ""; - xmlstring += ""; - } - } - } catch (DOMException | SQLException ex) { - logger.info(ex.getMessage()); - } - } - xmlstring += "\n"; - - result=xmlstring; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage()+"\n\nSQL query: " + sql_query,null); - error=true; - } - } - } - } else if (fn != null && fn.equals("6")) //TODO concat width 4 and 11 function - { - //String sql_query=""; - String typename = ""; - String[] columns = null; - String propName = ""; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - String columnname; - columnname = "" + nTypeR.getAttributes().getNamedItem("c").getNodeValue(); - - //logger.info("columnname = " + columnname); - columns = columnname.split(","); - - propName = "" + nTypeR.getAttributes().getNamedItem("pn").getNodeValue(); //Название поля нигде не используется передаётся обратно в результат - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - //Находим серверный XML узел по имени - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - if (nTypeS != null) { - Node f1 = null, f2 = null; - //В переданном запросе может быть не полный фильтр заполняем серверный значениями из переданного - //NodeList nodeList; - try { - NodeList nodeList = (NodeList) xpath.compile("objects-list/filter").evaluate(nTypeS, XPathConstants.NODESET); - if (nodeList.getLength() > 0) - f1 = nodeList.item(0); - nodeList = (NodeList) xpath.compile("objects-list/filter").evaluate(nTypeR, XPathConstants.NODESET); - if (nodeList.getLength() > 0) - f2 = nodeList.item(0); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - //logger.info("Server f1=\n" + nodeToString(f1)); - //logger.info("Request f2=\n" + nodeToString(f2)); - - setFilter(f1, f2);//заменить все значения первого фильтра значениями из второго - - //logger.info("Server f1=\n" + nodeToString(f1)); - //logger.info("Request f2=\n" + nodeToString(f2)); - - String sql_query=""; - try { - sql_query = (String) xpath.compile("objects-list/sql-query/text()").evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - //logger.info("sql_query = " + sql_query); - - Node nextnode = f1.getFirstChild(); - while (nextnode != null) { - if (nextnode.getNodeName().equals("column")) { - try { - String vn = nextnode.getAttributes().getNamedItem("n").getNodeValue(); - /*String size; - Node n = nextnode.getAttributes().getNamedItem("size"); - if (n != null) { - size = n.getNodeValue(); - }*/ - String vt = nextnode.getAttributes().getNamedItem("vt").getNodeValue(); - String val = getCharacterDataFromElement((Element) nextnode); - - val = DBTools.getSQLValue(vt, val); - - sql_query = Tools.replaceAll(sql_query,"${" + vn + "}", val); - } catch (Exception ex) { - logger.info(ex.getMessage()); - //error=true; //throw new Exception(ex); - } - } - nextnode = nextnode.getNextSibling(); - } - - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - //logger.info("sql_query = " + sql_query); - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - //перебираем RS и строим XML только из тех столбцов которые записанны в секци objects-list поля column в не зависимости от их видимости - String xmlstring = ""; - xmlstring += "\n"; - - // iterate through the java resultset - try { - while (rs.next()) { - xmlstring += " "; - for (int i = 0; i < columns.length; i++) { - xmlstring += ""; - } - xmlstring += "\n"; - } - } catch (DOMException | SQLException ex) { - logger.info(ex.getMessage()); - } - xmlstring += "\n"; - - result=xmlstring; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage()+"\n\nSQL query: " + sql_query,null); - error=true; - } - - - - } else { - result=sendError(10000,"Could not find the requested node!",null); - error=true; - } - } - - } else if (fn != null && fn.equals("7")) //Login function - { - String user_id = ""; - String cmd=""; - String login = ""; - String password = ""; - String hash = ""; - //String captcha = ""; - //For registration new user - String country_id = ""; - String lastname = ""; - String firstname = ""; - String company = ""; - String position = ""; - String phone = ""; - String email = ""; - - try { - cmd = (String) xpath.compile("//metadata/cmd/text()").evaluate(reqNode, XPathConstants.STRING); - login = (String) xpath.compile("//metadata/login/text()").evaluate(reqNode, XPathConstants.STRING); - password = (String) xpath.compile("//metadata/password/text()").evaluate(reqNode, XPathConstants.STRING); - hash = (String) xpath.compile("//metadata/hash/text()").evaluate(reqNode, XPathConstants.STRING); //Сессия для авто логина если не пустая то сначала пытаемся авторизоваться по ней - //captcha = (String) xpath.compile("//metadata/captcha/text()").evaluate(reqNode, XPathConstants.STRING); - //For registration new user - country_id = (String) xpath.compile("//metadata/country_id/text()").evaluate(reqNode, XPathConstants.STRING); - lastname = (String) xpath.compile("//metadata/lastname/text()").evaluate(reqNode, XPathConstants.STRING); - firstname = (String) xpath.compile("//metadata/firstname/text()").evaluate(reqNode, XPathConstants.STRING); - company = (String) xpath.compile("//metadata/company/text()").evaluate(reqNode, XPathConstants.STRING); - position = (String) xpath.compile("//metadata/position/text()").evaluate(reqNode, XPathConstants.STRING); - phone = (String) xpath.compile("//metadata/phone/text()").evaluate(reqNode, XPathConstants.STRING); - email = (String) xpath.compile("//metadata/email/text()").evaluate(reqNode, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - String xmlstring = ""; - if (cmd.equals("0")) //Restore password by email - { - boolean find = false; - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - String sql = "select id from main._users where del=false and lower(email)=lower('" + login + "');"; - ResultSet rs = stt.executeQuery(sql); - if (rs != null) { - try { - if (rs.next()) - find = true; - rs.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - //xmlstring = ""; - xmlstring=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - } - - - if (find) { - String newPass = getRandomString(6); - - boolean mEerror = false; - - String recipient = login; - String subject = "New password for CCALM from http://www.ccalm.org"; - String content = "Login is: "+ email.toLowerCase()+"\n
New password: " + newPass+""; - content += "

Sincerely, the administration of ccalm.org."; - - String answer = ""; - try { - EmailUtility.sendEmail(mail_host, mail_port, mail_login, mail_password, recipient, subject, content); - answer = "New password was sent successfully on \"" + recipient + "\".\nIf there is no email then check the spam folder."; - } catch (Exception ex) { - logger.info(ex.getMessage()); - answer = "There were an error: " + ex.getMessage(); - //error=true; - } finally { - //request.setAttribute("Message", resultMessage); - //context.getRequestDispatcher("/Result.jsp").forward(request, response); - } - - if (!mEerror) { - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - stt.execute("update main._users set password=md5('" + newPass + "') where email=lower('" + login + "');"); - stt.close(); - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - //xmlstring = ""; - xmlstring=sendError(10000,"Error: " + ex.getMessage(),null); - } - } - - xmlstring = ""; - } else { - //xmlstring = ""; - xmlstring=sendError(10000,"This email address was not registered!",null); - } - - } else if (cmd.equals("1")) //Logout - { - String sql_query="select main.p__logout("+user.id+");"; - - //Отмечаем в базе что пользователь вышел (для электронной очереди если пользователь обрабатывается) - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - //xmlstring = ""; - xmlstring=sendError(10000,"Error: " + ex.getMessage() + "\n\nSQL query: " + sql_query,null); - error=true; - } - - if(!error) - { - user.Logout(); //Обнуляем значения - xmlstring = ""; - } - - } else if (cmd.equals("2")) //Check if user not logged. - { - if (user.id != null && !user.id.equals("null")) { - xmlstring = ""; - } else { - xmlstring = ""; - } - - } else if (cmd.equals("3")) //Login user (Login function from metadata.xml) - { - if (login.equals("") && password.equals("")) { - user_id = (String) user.id; - if (user_id == null) - user_id = "null"; - } - - String typename = "_Login"; - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - //Находим серверный XML узел по имени - if (doc != null) { - //doc.getDocumentElement().normalize(); //Del or concat text node - Node nTypeS = doc.getDocumentElement(); - - if (nTypeS != null) { - String sql_query=""; - try { - sql_query = (String) xpath.compile("objects-list/sql-query/text()").evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - String val; - val = DBTools.getSQLValue("i4", user_id); - sql_query = Tools.replaceAll(sql_query,"${user_id}", val); - val = DBTools.getSQLValue("string", login); - sql_query = Tools.replaceAll(sql_query,"${login}", val); - val = DBTools.getSQLValue("string", password); - sql_query = Tools.replaceAll(sql_query,"${password}", val); - val = DBTools.getSQLValue("string", hash); - sql_query = Tools.replaceAll(sql_query,"${hash}", val); - val = DBTools.getSQLValue("string", ""/*request.getSession().getId()*/); - sql_query = Tools.replaceAll(sql_query,"${sessionid}", val); - val = DBTools.getSQLValue("string", ""/*request.getRemoteAddr()*/); - sql_query = Tools.replaceAll(sql_query,"${ip}", val); - - //logger.info("sql_query = " + sql_query); - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - - if (rs != null) { - if (rs.next()) { - user_id = rs.getString("id"); - if(user_id==null) user_id="null"; - user.id=user_id; - String uName = rs.getString("name"); - user.name=uName; - String role = rs.getString("role"); - user.role=role; - user.language_id=rs.getString("language_id"); - String date = rs.getString("date"); //Дата с sql сервера - String expiration = rs.getString("expiration"); //Дата до которой действует пароль - String renewal = rs.getString("renewal"); //На сколько дней продлевать действие пароля - - xmlstring = ""; - }else - { - //xmlstring = ""; - xmlstring=sendError(10000,trt(conn,"Error_in_login_or_password",user),null); - } - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - //xmlstring = ""; - xmlstring=sendError(10000,"Error: " + ex.getMessage() + "\n\nSQL query: " + sql_query,null); - error=true; - } - - } - } - } else if (cmd.equals("4")) //Create new user - { - xmlstring = ""; //if error - String sql_query = ""; - String val; - - //Check exists user by email email - sql_query = "select id from main._users where email=LOWER(TRIM(${email}))"; - val = DBTools.getSQLValue("string", email); - sql_query = Tools.replaceAll(sql_query,"${email}", val); - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) { - //xmlstring = ""; - xmlstring=sendError(10000,trt(conn,"E_mail_already_exists_in_the_database",user),null); - error=true; - } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - rs.close(); - stt.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - //xmlstring = ""; - xmlstring=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - } - - if(!error) { - String newPass = getRandomString(8); - sql_query = "select * from main.p__Users_1(4,${country_id},${surname},${name},${company},${position},${phone},${email},${password});"; - - val = DBTools.getSQLValue("i4", country_id); - sql_query = Tools.replaceAll(sql_query,"${country_id}", val); - val = DBTools.getSQLValue("string", lastname); - sql_query = Tools.replaceAll(sql_query,"${surname}", val); - val = DBTools.getSQLValue("string", firstname); - sql_query = Tools.replaceAll(sql_query,"${name}", val); - val = DBTools.getSQLValue("string", company); - sql_query = Tools.replaceAll(sql_query,"${company}", val); - val = DBTools.getSQLValue("string", position); - sql_query = Tools.replaceAll(sql_query,"${position}", val); - val = DBTools.getSQLValue("string", phone); - sql_query = Tools.replaceAll(sql_query,"${phone}", val); - val = DBTools.getSQLValue("string", email); - sql_query = Tools.replaceAll(sql_query,"${email}", val); - val = DBTools.getSQLValue("string", newPass); - sql_query = Tools.replaceAll(sql_query,"${password}", val); - - //logger.info("sql_query = " + sql_query); - - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - try { - if (rs.next()) { - xmlstring = ""; - - //Отправляем пароль на Email - String recipient = email; - String subject = "Password for new user on http://www.ccalm.org"; - String content = "Login is: "+ email.toLowerCase()+"\n
Password: " + newPass+""; - content += "

Sincerely, the administration of ccalm.org."; - - //String answer = ""; - try { - EmailUtility.sendEmail(mail_host, mail_port, mail_login, mail_password, recipient, subject, content); - //answer = "New password was sent successfully on \"" + recipient + "\".\nIf there is no email then check the spam folder."; - } catch (Exception ex) { - logger.info(ex.getMessage()); - //answer = "There were an error: " + ex.getMessage(); - } finally { - //request.setAttribute("Message", resultMessage); - //context.getRequestDispatcher("/Result.jsp").forward(request, response); - } - - } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - //xmlstring = ""; - xmlstring=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - } - } - } - - result=xmlstring; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - - } else if (fn != null && fn.equals("8")) { - //Select information about the current user for generated report - String uName = "
"; - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery("select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from main._users where id=" + user.id + ""); - if (rs != null) { - try { - while (rs.next()) { - uName = "" + rs.getString("name") + "
"; - } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - } - - String typename = ""; - //String pagepos=""; - - Node nTypeR = null; - if (doc != null) { - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type"); - exprResult = expr.evaluate(reqNode, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - if (nodeList.getLength() > 0) { - nTypeR = nodeList.item(0); - typename = "" + nTypeR.getAttributes().getNamedItem("n").getNodeValue(); - //pagepos = "" + nTypeR.getAttributes().getNamedItem("pp").getNodeValue(); //The current page number - } - } - - //Get XML node "type" from database and parse to DOM - doc = parseString(getTypeStrNode(conn,typename)); - - //Находим серверный XML узел по имени - if (doc != null) { - Node nTypeS = doc.getDocumentElement(); - - if (nTypeS != null) { - Node f1 = null, f2 = null; - //В переданном запросе может быть не полный фильтр заполняем серверный значениями из переданного - NodeList nodeList=null; - try { - nodeList = (NodeList) xpath.compile("objects-list/filter").evaluate(nTypeS, XPathConstants.NODESET); - if (nodeList.getLength() > 0) - f1 = nodeList.item(0); - nodeList = (NodeList) xpath.compile("objects-list/filter").evaluate(nTypeR, XPathConstants.NODESET); - if (nodeList.getLength() > 0) - f2 = nodeList.item(0); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - - //logger.info("f1=\n" + nodeToString(f1)); - //logger.info("f1=\n" + nodeToString(f2)); - - setFilter(f1, f2);//заменить все значения первого фильтра значениями из второго - - //logger.info("f1=\n" + nodeToString(f1)); - //logger.info("f1=\n" + nodeToString(f2)); - - //Filter options for display in the header Excel(XLS) document. - /* - String filter=""+trt("Filter_options",user)+":
"; - expr = xpath.compile("objects-list/filter/column"); - exprResult = expr.evaluate(nTypeR, XPathConstants.NODESET); - nodeList = (NodeList) exprResult; - for(int i=0;i"; - filter+=getCharacterDataFromElement((Element)nodeList.item(i)); - filter+="
"; - } - } - */ - - String sql_query=""; - try { - sql_query = (String) xpath.compile("objects-list/sql-query/text()").evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - - //sql_query=Tools.replaceAll(sql_query,"${id}","null"); - //logger.info("sql_query1 = " + sql_query); - - Node nextnode = f1.getFirstChild(); - while (nextnode != null) { - if (nextnode.getNodeName().equals("column")) { - try { - String vn = nextnode.getAttributes().getNamedItem("n").getNodeValue(); - /*String size; - Node n = nextnode.getAttributes().getNamedItem("size"); - if (n != null) { - size = n.getNodeValue(); - }*/ - String vt = nextnode.getAttributes().getNamedItem("vt").getNodeValue(); - String val = getCharacterDataFromElement((Element) nextnode); - - val = DBTools.getSQLValue(vt, val); - - sql_query = Tools.replaceAll(sql_query,"${" + vn + "}", val); - } catch (Exception ex) { - logger.info(ex.getMessage()); - } - } - nextnode = nextnode.getNextSibling(); - } - if(user.id==null) sql_query = Tools.replaceAll(sql_query,"${_user_id}", "null"); - else sql_query = Tools.replaceAll(sql_query,"${_user_id}", (String) user.id); - - //logger.info("sql_query2 = " + sql_query); - - - try { - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - //Create Excel file and write result set - Writer writer = null; - Random rand = new Random(); - String tmpName = "file_" + rand.nextInt(1000) + ".xls"; //TODO Not safety, the file names can match. - - try { - String tmpPath = data_dir + "temp" + File.separator; - File file = new File(tmpPath); - if (!file.exists()) { - file.mkdirs(); - } - - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmpPath + tmpName), "utf-8")); - - writer.write("\n"); - writer.write(" \n"); - writer.write(" " + nTypeS.getAttributes().getNamedItem("d").getNodeValue() + "\n"); - writer.write(" \n"); - writer.write(""); - writer.write(" \n"); - writer.write(" \n"); - - writer.write("" + trt(conn,"Time_and_date_of_generation",user) + ": " + (new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date())) + "
"); - writer.write("" + trt(conn,"Creator",user) + ": " + uName); - - //writer.write(filter); - - xPathfactory = XPathFactory.newInstance(); - xpath = xPathfactory.newXPath(); - try { - expr = xpath.compile("objects-list/@d"); - - writer.write(" \n"); - writer.write(" \n"); - writer.write(" \n"); - writer.write(" "); - - expr = xpath.compile("objects-list/column"); - Object exprResult = expr.evaluate(nTypeS, XPathConstants.NODESET); - nodeList = (NodeList) exprResult; - for (int i = 0; i < nodeList.getLength(); i++) { - writer.write(""); - } - writer.write(" \n"); - writer.write(" \n"); - writer.write(" \n"); - - while (rs.next()) { - writer.write(" "); - for (int i = 0; i < nodeList.getLength(); i++) { - String val = rs.getString(nodeList.item(i).getAttributes().getNamedItem("n").getNodeValue()); - if (val == null) - val = ""; - writer.write(""); - } - writer.write("\n"); - } - writer.write(" \n"); - writer.write("
" + trts(conn,"" + expr.evaluate(nTypeS, XPathConstants.STRING),user) + "
" + trts(conn,nodeList.item(i).getAttributes().getNamedItem("d").getNodeValue(),user) - + "
" + val + "
\n"); - writer.write(" \n"); - writer.write("\n"); - } catch (XPathExpressionException | DOMException | SQLException ex) { - logger.info(ex.getMessage()); - } - } catch (IOException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage(),null); - error=true; - } finally { - try { - writer.close(); - } catch (Exception ex) { - } - } - //Отправляем название файла клиенту - result=""; - httpHeaders.setContentType(MediaType.APPLICATION_XML); - } - rs.close(); - stt.close(); - rs=null; - stt=null; - } catch (SQLException ex) { - logger.info(ex.getMessage()); - result=sendError(10000,"Error: " + ex.getMessage() + "\n\nSQL query: " + sql_query,null); - error=true; - } - } - } - - } else if (fn != null && fn.equals("9")) { - // https://www.tutorialspoint.com/jsp/jsp_file_uploading.htm -/* - File file; - int maxFileSize = 5000 * 1024; - int maxMemSize = 5000 * 1024; - String filePath = context.getInitParameter("file-upload"); - - // Verify the content type - String contentType = request.getContentType(); - - if (contentType != null && contentType.indexOf("multipart/form-data") >= 0) { - DiskFileItemFactory factory = new DiskFileItemFactory(); - //factory.setSizeThreshold(maxMemSize); // maximum size that will be stored in memory - //factory.setRepository(new File("O:\\temp\\upload")); // Location to save data that is larger than maxMemSize. - - // Create a new file upload handler - ServletFileUpload upload = new ServletFileUpload(factory); - - // maximum file size to be uploaded. - upload.setSizeMax(maxFileSize); - - try { - // Parse the request to get file items. - List fileItems = upload.parseRequest(request); - - // Process the uploaded file items - Iterator i = fileItems.iterator(); - - while (i.hasNext()) { - FileItem fi = (FileItem) i.next(); - if (!fi.isFormField()) { - // Get the uploaded file parameters - String fieldName = fi.getFieldName(); - String fileName = fi.getName(); - boolean isInMemory = fi.isInMemory(); - long sizeInBytes = fi.getSize(); - - // Write the file - file = new File(filePath + fileName); - fi.write(file); - - //Calc CRC32 - long crc32=0; - FileInputStream fin = new FileInputStream(filePath + fileName); - Checksum sum_control = new CRC32(); - for (int b = fin.read(); b != -1; b = fin.read()) { - sum_control.update(b); - } - crc32 = sum_control.getValue(); - fin.close(); - - //To be rename file, add CRC32 in begin. - File srcFile = new File(filePath + fileName); - File destFile = new File(filePath + Long.toHexString(crc32) +"_"+ fileName); - FileUtils.copyFile(srcFile, destFile); - FileUtils.forceDelete(srcFile); - - logger.info("Uploaded Filename: " + Long.toHexString(crc32) +"_"+ fileName); - response.getWriter().append("ok=" + Long.toHexString(crc32) +"_"+ fileName + "\n"); - } - } - - } catch (Exception ex) { - logger.info(ex); - } - } - - //This code put into iframe - response.setContentType("text/html"); - - response.getWriter().append(""); - response.getWriter().append(""); - response.getWriter().append(" "); - response.getWriter().append(" "); - response.getWriter().append(" "); - response.getWriter().append(" "); - response.getWriter().append("
"); - response.getWriter().append(" "); - response.getWriter().append("
"); - response.getWriter().append(" "); - response.getWriter().append(" "); - response.getWriter().append("
"); - response.getWriter().append(" "); - response.getWriter().append(""); - - //Отчищяем временные файлы которые больше суток на сервере - //deleteTempFiles($dir); -*/ - - } else { - result=sendError(10000,"Unknown function \"" + fn + "\" !",null); - error=true; - } - - try { if(conn!=null) conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } - //return body content - return new ResponseEntity(result, httpHeaders, HttpStatus.OK); - } - - /** - * Example request: http://localhost:8080/CCALM/download?t=FrmLocust&f=image_name1&i=1298 - */ - @RequestMapping(value = "/download", method = RequestMethod.GET,produces = "application/octet-stream") - @ResponseBody - public FileSystemResource home(HttpServletResponse response,@ModelAttribute User user,@RequestParam(required=false,name="t") String typename,@RequestParam(required=false,name="f") String field,@RequestParam(required=false,name="i") String id) { - - String metadata_file = ""; - - String db_url=""; - String db_login=""; - String db_password=""; - try { - db_url = env.getProperty("spring.datasource.url"); - db_login = env.getProperty("spring.datasource.username"); - db_password = env.getProperty("spring.datasource.password"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - - Connection conn = null; - try { - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url, db_login, db_password); - if (conn != null) { - String uuid = UUID.randomUUID().toString(); - Marker marker = MarkerManager.getMarker(uuid); - logger.info(marker,"Connect is OK!"); - } else { - logger.info("An error occurred while connecting to the database!"); - } - } catch (Exception ex) { - logger.info(ex.getMessage()); - } - Statement stt=null; - try { - stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - - //Send the binary data to the client as a file (no resume). - //String typename = request.getParameter("t"); //Type from metadata.xml - //String field = request.getParameter("f"); //field name - //String id = request.getParameter("i"); //field id - String path=""; - String filename=""; - File file=null; - - //Parse main XML - Document doc = null; - try { - File inputFile = new File(context.getRealPath("/")+"resources"+File.separator+metadata_file); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - doc = dBuilder.parse(inputFile); - } catch (Exception ex) { - logger.info(ex.getMessage()); - } - - if (doc != null) { - doc.getDocumentElement().normalize(); //Del or concat text node - //response.getWriter().append("Root element: " + doc.getDocumentElement().getNodeName()+" !
"); - - javax.xml.xpath.XPathFactory xPathfactory = XPathFactory.newInstance(); - XPath xpath = xPathfactory.newXPath(); - XPathExpression expr=null; - - Object exprResult=null; - try { - expr = xpath.compile("//metadata/type[@n='" + typename + "']"); - exprResult = expr.evaluate(doc, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - - Node nTypeS = null; - if (nodeList.getLength() > 0) - nTypeS = nodeList.item(0); - - try { - expr = xpath.compile("properties/prop[@n='"+field+"']/@path"); - path = (String) expr.evaluate(nTypeS, XPathConstants.STRING); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - } - - if(path!=null && !path.equals("")) - { - ResultSet rs = null; - try { - String sql="SELECT "+field+" as name FROM main."+typename+" WHERE id="+String.valueOf(id); - rs = stt.executeQuery(sql); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - if (rs != null) { - try { - if (rs.next()) - filename = rs.getString(1); - rs.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - } - if(!filename.equals("")) - { - file = new File(path+File.separator+filename); - } - } - - try { if(conn!=null) conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } - - if(file!=null) { - response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment; filename="+afterFirst(filename,"_")); - response.setHeader("Cache-Control", "no-cache"); - return new FileSystemResource(file); - }else { - response.setContentType("text/html"); - return null; - } - } - - @RequestMapping(value = "/upload", method = { RequestMethod.GET, RequestMethod.POST }) - @ResponseBody - public String uploadFile(HttpServletResponse response,@RequestParam(required=false,name="file") MultipartFile file) { - - String result=""; - - String data_dir = ""; - try { - data_dir = env.getProperty("data.dir"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - - String fileName = ""; - - if (file!=null && !file.isEmpty()) { - try { - - byte[] bytes = file.getBytes(); - fileName = file.getOriginalFilename(); - - File dir = new File(data_dir); - if (!dir.exists()) dir.mkdirs(); - - BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(data_dir + fileName))); - stream.write(bytes); - stream.flush(); - stream.close(); - - //Calc CRC32 - long crc32=0; - FileInputStream fin = new FileInputStream(data_dir + fileName); - Checksum sum_control = new CRC32(); - for (int b = fin.read(); b != -1; b = fin.read()) { - sum_control.update(b); - } - crc32 = sum_control.getValue(); - fin.close(); - - //To be rename file, add CRC32 in begin. - File srcFile = new File(data_dir + fileName); - File destFile = new File(data_dir + Long.toHexString(crc32) +"_"+ fileName); - FileUtils.copyFile(srcFile, destFile); - FileUtils.forceDelete(srcFile); - - //logger.info("Uploaded Filename: " + Long.toHexString(crc32) +"_"+ fileName); - result+="ok=" + Long.toHexString(crc32) +"_"+ fileName + "\n"; - - } catch (Exception ex) { - logger.info(ex.getMessage()); - } - } - - //This code put into iframe - response.setContentType("text/html"); - - result+=""; - result+=""; - result+=" "; - result+=" "; - result+=" "; - result+=" "; - result+="
"; - result+=" "; - result+="
"; - result+=" "; - result+=" "; - result+="
"; - result+=" "; - result+=""; - - //deleteTempFiles($dir); - - return result; - } - - //Send generated report to the client for downloading - @RequestMapping(value = "/reports",method = RequestMethod.GET, produces = "application/octet-stream") - @ResponseBody - public FileSystemResource sendReport(HttpServletResponse response,@RequestParam(required=true,name="file") String fileName) { - - String data_dir = ""; - try { - data_dir = env.getProperty("data.dir"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - File file = new File(data_dir + "temp" + File.separator + fileName); - if(file.exists()) - { - //logger.info("Send report: " + fileName); - - //response.setContentType("application/octet-stream"); //Commented because it is specified in the function declaration. - response.setHeader("Content-Disposition","attachment; filename="+fileName); - response.setContentLength((int) file.length()); - return new FileSystemResource(file); - }else - { - logger.info("File not found: " + fileName); - return null; - } - } - - private String nodeToString(Node node) { - StringWriter sw = new StringWriter(); - try { - Transformer t = TransformerFactory.newInstance().newTransformer(); - t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - t.transform(new DOMSource(node), new StreamResult(sw)); - } catch (TransformerException ex) { - System.out.println(ex.getMessage()); - System.out.println("nodeToString Transformer Exception"); - } - return sw.toString(); - } - - //Replace all the values of the first filter values from the second - public void setFilter(Node n1, Node n2) { - if (n1 == null || n2 == null) - return; - - XPathFactory xPathfactory = XPathFactory.newInstance(); - XPath xpath = xPathfactory.newXPath(); - - Node nc1 = n1.getFirstChild(); - while (nc1 != null) { - if (nc1.getNodeName().equals("column")) { - try { - String path = "column[@n='" + nc1.getAttributes().getNamedItem("n").getNodeValue() + "']"; - XPathExpression expr = xpath.compile(path); - NodeList nodeList = (NodeList) expr.evaluate(n2, XPathConstants.NODESET); - if (nodeList.getLength() > 0) { - Node nc2 = nodeList.item(0); - - setCharacterDataToElement((Element) nc1, getCharacterDataFromElement((Element) nc2)); - - //getCdata($nc1)->nodeValue=getCdata($nc2)->nodeValue; - } - - } catch (Exception ex) { - System.out.println(ex.getMessage()); - //String message = "XML parsing error!"; - //return; - } - } - nc1 = nc1.getNextSibling(); - } - } - - public static String getCharacterDataFromElement(Element e) { - Node child = e.getFirstChild(); - if (child instanceof CharacterData) { - CharacterData cd = (CharacterData) child; - return cd.getData().trim(); - } - return ""; - } - - public void setCharacterDataToElement(Element e, String data) { - Node child = e.getFirstChild(); - if (child instanceof CharacterData) { - CharacterData cd = (CharacterData) child; - cd.setData(data); - } else //Create new CDATA node - { - Document doc = e.getOwnerDocument(); - e.appendChild(doc.createCDATASection(data)); - } - } - - public static String getRandomString(int length) { - final String characters = "abcdefghijklmnopqrstuvwxyz1234567890"; - StringBuilder result = new StringBuilder(); - while (length > 0) { - Random rand = new Random(); - result.append(characters.charAt(rand.nextInt(characters.length()))); - length--; - } - return result.toString(); - } - - //Translate word by id from database - public String trt(Connection conn,String key,User user) - { - String result=""; - ResultSet rs=null; - Statement st = null; - try { - st = conn.createStatement(); - String sql = "select case when '"+user.language_id+"'='666' then translation||'''\"' else translation end as translation from main._translations t where t.identifier='"+key+"' and (t.language_id='"+user.language_id+"' or ('"+user.language_id+"'='666' and t.language_id=1));"; - rs = st.executeQuery(sql); - if(rs != null) { - if (rs.next()) { - result = rs.getString(1); - } - } - } catch( SQLException ex ) - { - logger.info(ex.getMessage()); - }finally{ - if(st!=null) try{st.close();}catch(SQLException ex) {} - if(rs!=null) try{rs.close();}catch(SQLException ex) {} - } - if(result.equals("")) - { - result = Tools.replaceAll(key,"_", " "); - } - return result; - } - - //Translate text by patterns - public String trts(Connection conn,String text,User user) { - int pos1 = 0; - while (true) { - pos1 = text.indexOf("trt('", pos1); - if (pos1 == -1) - break; - int pos2 = text.indexOf("')", pos1); - if (pos2 == -1) - break; - - text = text.substring(0, pos1) + trt(conn,text.substring(pos1 + 5, pos2),user) + text.substring(pos2 + 2); - } - return text; - } - - public static String afterFirst(String str, String ch) - { - int i=str.indexOf(ch); - if(i!=-1) - { - return str.substring(i+ch.length()); - } - return ""; - } - - //Получить узел метаданных из базы данных - public String getTypeStrNode(Connection conn,String typeName) - { - String result=""; - String sql="select xml from main._metadata where name='"+typeName+"';"; - try { - Statement st = conn.createStatement(); - ResultSet rs=null; - try { - rs = st.executeQuery(sql); - } catch( SQLException ex ) { - ex.printStackTrace(); - } - try { - if(rs!=null) - { - if(rs.next()) - { - result=rs.getString(1); - } - rs.close(); - } - st.close(); - } catch (SQLException ex) { - ex.printStackTrace(); - } - } catch (SQLException ex) { - ex.printStackTrace(); - } - return result; - } - - //Пропарсить сткоку в DOM - public Document parseString(String xml) - { - Document doc=null; - try { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - doc = dBuilder.parse(new InputSource(new StringReader(xml))); - } catch (Exception ex) { - ex.printStackTrace(); - } - return doc; - } - -} \ No newline at end of file diff --git a/metadata/dbms/DBMSTree.java b/metadata/dbms/DBMSTree.java deleted file mode 100644 index 590a302..0000000 --- a/metadata/dbms/DBMSTree.java +++ /dev/null @@ -1,443 +0,0 @@ -package dbms; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Properties; - -//import javax.servlet.ServletContext; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; - -import jakarta.servlet.ServletContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.io.ClassPathResource; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.SessionAttributes; -import org.springframework.web.context.ServletContextAware; -import org.w3c.dom.DOMException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import tctable.Tools; -import tools.DBTools; -import tools.XMLTools; -import tools.User; - - -@Controller -public class DBMSTree implements ServletContextAware { - - private static final Logger logger = LoggerFactory.getLogger(DBMSTree.class); - private ServletContext context; - - @RequestMapping(value = "/tree",method = RequestMethod.POST,produces = "application/xml; charset=utf-8") - @ResponseBody - public Object ajaxTamer(@ModelAttribute User user,@RequestBody byte[] reqData,@RequestParam(required=false,name="lng") String language_id) { - - if(language_id!=null && !language_id.equals("")) - user.language_id=language_id; - - logger.info("user.id="+user.id+" user.name="+user.name+" user.language_id="+user.language_id+" user.country_id="+user.country_id); - - boolean error=false; - String result=""; - - String jspPath = context.getRealPath("/"); - String db_url=""; - String db_login=""; - String db_password=""; - Properties prop = new Properties(); - try { - prop.load(new FileInputStream("org_ccalm_main.properties")); // load a properties file - db_url = prop.getProperty("spring.datasource.url"); - db_login = prop.getProperty("spring.datasource.username"); - db_password = prop.getProperty("spring.datasource.password"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - Connection conn = null; - try { - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url, db_login, db_password); - if (conn != null) { - logger.info("Connect is OK!"); - } else { - error=true; - result=""; - } - } catch (Exception ex) { - logger.info(ex.getMessage()); - error=true; - result=""; - } - - String fn=""; - String treeid=""; - String htmlid=""; - - //Парсим принятый XML запрос - InputStream body = new ByteArrayInputStream(reqData); - Document doc = null; - Element reqNode = null; - try { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - doc = dBuilder.parse(body); - } catch (Exception ex) { - logger.info(ex.getMessage()); - return ""; - } - if (doc != null) { - reqNode = doc.getDocumentElement(); - } - - - //Парсим XML из файла - Document objXMLDocument = null; - try { - File inputFile = new File(jspPath+"resources"+File.separator+"engine/tree.xml"); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - objXMLDocument = dBuilder.parse(inputFile); - } catch (Exception ex) { - logger.info(ex.getMessage()); - error=true; - } - - - Node mainNode=null; - //находим нужный узел в tree.xml для того чтобы выполнить запрос - XPathFactory xPathfactory = XPathFactory.newInstance(); - XPath xpath = xPathfactory.newXPath(); - - if (doc != null) { - Object exprResult=null; - try { - XPathExpression expr = xpath.compile("//metadata/type[@id='" + treeid + "']"); - exprResult = expr.evaluate(doc, XPathConstants.NODESET); - } catch (XPathExpressionException ex) { - logger.info(ex.getMessage()); - } - NodeList nodeList = (NodeList) exprResult; - - if (nodeList.getLength() > 0) - mainNode = nodeList.item(0); - } - - String retrez=""; - if(mainNode!=null) - { - //перебераем все дочерние элементы и для каждого выполняем запрос c фильтрацией - Node currNode = mainNode.getFirstChild(); //из tree.xml - while (currNode != null) - { - - Node tmpNode=currNode; //если узел goto - - if (tmpNode.getNodeName().equals("goto")) //если встретилась "зацикливалка" - { - treeid = tmpNode.getAttributes().getNamedItem("id").getNodeValue(); - tmpNode=XMLTools.findFirstNodeOnAttribute(objXMLDocument.getDocumentElement(),"type","id",treeid); - if(tmpNode==null) { currNode = currNode.getNextSibling(); continue; } - } - - if(tmpNode.getNodeName().equals("type")) //если выборка из базы - { - treeid=tmpNode.getAttributes().getNamedItem("id").getNodeValue(); - String caption=tmpNode.getAttributes().getNamedItem("c").getNodeValue(); - - //j=0; - XMLTools.applyNodeToNode(reqNode,tmpNode,"n"); - - //Переносим значения в SQL запрос из фильтра - String sql=XMLTools.getCDATAValue(XMLTools.findNode(tmpNode,"sql-query")); - Node nFs=XMLTools.findNode(tmpNode, "filter"); - if(nFs!=null) - { - Node nF=nFs.getFirstChild(); - while(nF != null) - { - if(nF.getNodeName().equals("column")) - { - String vt = nF.getAttributes().getNamedItem("vt").getNodeValue(); - String val= XMLTools.getCDATAValue(nF); - sql = sql.replace("${" + nF.getAttributes().getNamedItem("n").getNodeValue() + "}", DBTools.getSQLValue(vt, val)); - } - nF=nF.getNextSibling(); - } - } - - //Выполняем подготовленный SQL - Statement stmt; - ResultSet rs=null; - try { - stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stmt.executeQuery(sql); - } catch (SQLException e) { - e.printStackTrace(); - } - - - //res=fnGetData(reqNode,tmpNode);//currNode из tree.xml - if(rs==null) - { - //sendError('fnGetData==null!'); - }else - { - try { - while (rs.next()) //while (row = res->fetch(PDO::FETCH_ASSOC)) - { - String fid=""; - String iid=""; - String val=""; - - if(DBTools.hasColumn(rs,"id")) fid=rs.getString("id"); else fid=""; //Уникальный id записи - if(DBTools.hasColumn(rs,"icon_id")) iid=rs.getString("icon_id"); else iid=""; //id значка - if(DBTools.hasColumn(rs,caption)) val=rs.getString(caption); else val=""; //Заголовок - - String visible = ""; - if(tmpNode.getAttributes().getNamedItem("visible").getNodeValue().equals("0")) visible=" visible=\"0\" "; - //Для проверки есть ли дети составляем XML запрос и отправляем в вункцию как будто он пришел от клиента - //c - Есть ли под узлы по умолчанию есть - //fid - id записи - //iid - id иконки - //treeid - id ветки дерева - //ObjectID - название поля с уникальным идентификатором записи - String xmlnode = ""; - xmlnode+=""; - xmlnode+=""; - //сохраняем параметры фильтра для дочерних элементов с текщем состоянием - //перебираем фильтры которые должны быть заполненны для каждого узла даные для фильтра беруться из результ сета - xmlnode+=""; - - //считываем название поля и находим данные в результсете - Node nodeParam = XMLTools.findFirstNode(tmpNode, "columns"); //tree.xml - if(nodeParam!=null) nodeParam=nodeParam.getFirstChild(); - while (nodeParam != null) - { - if(nodeParam.getNodeName().equals("param")) - { - String fname = nodeParam.getAttributes().getNamedItem("n").getNodeValue(); - String fval=""; - try - { - if(DBTools.hasColumn(rs,fname)) - { - fval=rs.getString(fname); - }else - { fval=XMLTools.getCDATAValue(nodeParam); - } - } catch (Exception e) - { - //sendError(e->getMessage()); - } - xmlnode+=""; - } - nodeParam = nodeParam.getNextSibling(); - } - xmlnode+=""; - xmlnode+=""; - - //парсим созданную ветку дерева в DOMDocument потом посылаем в функцию взятия данных как будто их все открыли - //если есть данные то у этого узла дерева есть дети c="1" инече нет c="0". - int child = 0; - Document objXMLDocTree=null; - try - { //objXMLDocTree->loadXML(xmlnode); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - objXMLDocument = dBuilder.parse(xmlnode); - } catch (Exception e) - { //sendError(e->getMessage()); - } - Element testNodeTree = objXMLDocTree.getDocumentElement(); - - Node testNode = tmpNode.getFirstChild(); //Текущий узел из tree.xml - while (testNode != null) - { - Node tmpNode2 = testNode; - if(tmpNode2.getNodeName().equals("goto")) - { - treeid=tmpNode2.getAttributes().getNamedItem("id").getNodeValue(); - tmpNode2=XMLTools.findFirstNodeOnAttribute(objXMLDocument.getDocumentElement(),"type","id",treeid); - if(tmpNode2==null) { testNode = testNode.getNextSibling(); continue; } - } - if(tmpNode2.getNodeName().equals("type")) - { - /*Object testrs = fnGetData(conn,testNodeTree,tmpNode2); - if((testrs!=null)&&(testrs.rowCount()>0)) - { - child=1; - break; - }*/ - } - testNode = testNode.getNextSibling(); - } - //testNodeTree.getAttribute("c",child); - - //retrez+=objXMLDocTree->saveXML(objXMLDocTree.getDocumentElement()); - //Закончили проверку на детей - - } - } catch (DOMException | SQLException e) { - e.printStackTrace(); - } - try { - rs.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - - } - } - - currNode = currNode.getNextSibling(); - } - }else - { - result=""; - } - - result=""+retrez+""; - //header('Content-type: text/xml'); - - - - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - //return body content - return result; - } - - //Replace all the values of the first filter values from the second - public void setFilter(Node n1, Node n2) { - if (n1 == null || n2 == null) - return; - - XPathFactory xPathfactory = XPathFactory.newInstance(); - XPath xpath = xPathfactory.newXPath(); - - Node nc1 = n1.getFirstChild(); - while (nc1 != null) { - if (nc1.getNodeName().equals("column")) { - try { - String path = "column[@n='" + nc1.getAttributes().getNamedItem("n").getNodeValue() + "']"; - XPathExpression expr = xpath.compile(path); - NodeList nodeList = (NodeList) expr.evaluate(n2, XPathConstants.NODESET); - if (nodeList.getLength() > 0) { - Node nc2 = nodeList.item(0); - - XMLTools.setCharacterDataToElement((Element) nc1, XMLTools.getCharacterDataFromElement((Element) nc2)); - - //getCdata($nc1)->nodeValue=getCdata($nc2)->nodeValue; - } - - } catch (Exception ex) { - System.out.println(ex.getMessage()); - //String message = "XML parsing error!"; - //return; - } - } - nc1 = nc1.getNextSibling(); - } - } - - - public ResultSet fnGetData(Connection conn,Node treeNode,Node currNode) - { - String sql=getSQL(treeNode,currNode); - - /*if(gettype($_SESSION['USER_ID'])=='string') - sql=str_replace('${_user_id}',$_SESSION['USER_ID']=='' ? 'null' : '\''.$_SESSION['USER_ID'].'\'',$sql); - else - sql=str_replace('${_user_id}',$_SESSION['USER_ID']=='' ? 'null' : $_SESSION['USER_ID'],$sql);*/ - - Statement stmt; - ResultSet rs=null; - try { - stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stmt.executeQuery(sql); - } catch (SQLException e) { - e.printStackTrace(); - } - return rs; - } - - /** Перенести параметры из родительского в sql строку дочернего элемента - * @param XMLNode $nParent Родительский узел - * @param XMLNode $nChild Дочерний узел - * @result Строка - */ - public String getSQL(Node nParent,Node nChild) - { - if(nChild==null) return ""; - String sql=""; - - Node nPs=XMLTools.findNode(nParent, "columns"); - Node nFs=XMLTools.findNode(nChild, "filter"); - //Переносим значения в фильтр - if(nFs!=null) - { - Node nP; - if(nPs!=null) nP=nPs.getFirstChild(); else nP=null; - while (nP != null) - { - if (nP.getNodeName().equals("param")) - { - String val=XMLTools.getCDATAValue(nP); - - Node nF=XMLTools.findNodeOnAttribute(nFs, "column", "pn", nP.getAttributes().getNamedItem("n").getNodeValue()); - if(nF!=null) - XMLTools.setCharacterDataToElement(nF, val); - } - nP = nP.getNextSibling(); - } - } - //Переносим значения в SQL запрос из фильтра - sql=XMLTools.getCDATAValue(XMLTools.findNode(nChild,"sql-query")); - nFs=XMLTools.findNode(nChild, "filter"); - if(nFs!=null) - { Node nF = nFs.getFirstChild(); - while(nF != null) - { - if(nF.getNodeName().equals("column")) - { - sql = sql.replace("{"+nF.getAttributes().getNamedItem("n").getNodeValue()+"}", DBTools.getSQLValue(nF.getAttributes().getNamedItem("vt").getNodeValue(),XMLTools.getCDATAValue(nF))); - } - nF=nF.getNextSibling(); - } - } - return sql; - } - - @Override - public void setServletContext(ServletContext servletContext) { - this.context=servletContext; - } -} diff --git a/metadata/dbms/editrecord.js b/metadata/dbms/editrecord.js index b5a267d..edd16cd 100644 --- a/metadata/dbms/editrecord.js +++ b/metadata/dbms/editrecord.js @@ -73,34 +73,7 @@ class EdtRec } }; - //Функция для создания или редактирования новой записи (аналог callData) - //Если id = -1 то это создание новой записи - eRecNa(typeName,id,settings) - { - this.f_TypeName=typeName; - this.f_Settings=settings; - this.record_id=id; - - postXMLData(ScriptName,'', - (ok,data)=>{ - if(ok){ - if(data.error_code=='0') - { - this.eRecNo(data,this.record_id); - }else - { - alert2(trt('Alert'),data.error_message); - } - }else{ - alert2(trt('Error'),data); - } - this.hideProgressBar(); - } - ); - this.showProgressBar(); - }; - - //Задать CDATA значение для узла "type->properties->prop" по "n" + //Задать CDATA значение для узла "type->properties->prop" по "n" setPropCdata(name,value) { let node=findNodeOnPath(this.nodeMetadata,"type/properties/prop[@n='"+name+"']"); @@ -138,6 +111,33 @@ class EdtRec } }; + //Функция для создания или редактирования новой записи (аналог callData) + //Если id = -1 то это создание новой записи + eRecNa(typeName,id,settings) + { + this.f_TypeName=typeName; + this.f_Settings=settings; + this.record_id=id; + + postXMLData(ScriptDBMS+"metadata",'', + (ok,data)=>{ + if(ok){ + if(data.error_code=='0') + { + this.eRecNo(data,this.record_id); + }else + { + alert2(trt('Alert'),data.error_message); + } + }else{ + alert2(trt('Error'),data); + } + this.hideProgressBar(); + } + ); + this.showProgressBar(); + }; + // Create a user GUI from XML () // Node - Node "type" eRecNo(Node,record_id) diff --git a/metadata/dbms/login.js b/metadata/dbms/login.js index c62761b..09b4f90 100644 --- a/metadata/dbms/login.js +++ b/metadata/dbms/login.js @@ -38,7 +38,7 @@ class DBMSUser { if(findNode(node,'#cdata-section').nodeValue=="0") //if not logged { - this.showLoginForm(); + //this.showLoginForm(); }else { this.name=getCdataValue(findNode(node,'name')); @@ -86,7 +86,7 @@ class DBMSUser }; //Display login and registration form - showLoginForm() + /*showLoginForm() { if(this.win==null || this.win.closed) { @@ -152,17 +152,18 @@ class DBMSUser }; } } - }; + };*/ + //logout current user - Logout() + /*Logout() { - xs=''; - var request=new TRequest(this); + let xs=''; + let request=new TRequest(this); if(request.callServer(ScriptName,xs)) { this.showShadow(); } - }; + };*/ showLock(visible) { if(this.divsh==null) { @@ -177,7 +178,7 @@ class DBMSUser } //Checking the session without its extension, if it is completed, we display the authorization window. - checkSession() + /*checkSession() { $.ajax({ url: '../session', @@ -205,7 +206,7 @@ class DBMSUser } }); setTimeout(()=>this.checkSession(), 10000); - }; + };*/ showShadow(visible) { diff --git a/metadata/dbms/showrecord.js b/metadata/dbms/showrecord.js index 91781a7..17ffe61 100644 --- a/metadata/dbms/showrecord.js +++ b/metadata/dbms/showrecord.js @@ -1579,7 +1579,11 @@ class SRec let erec = new EdtRec(""); erec.win.setParent(this.win); erec.opener=this; - erec.eRecNo(this.nodeMetadata,id); + + if(findNodeOnPath(this.nodeMetadata, 'type/properties')!=null) + erec.eRecNo(this.nodeMetadata,id); + else + erec.eRecNa(this.f_TypeName,id,null); //e.win.setLeftTop(pageX-10,pageY-10); if(this.onInsert!=null) this.onUpdate(erec); @@ -1601,7 +1605,11 @@ class SRec let erec = new EdtRec(""); erec.win.setParent(this.win); erec.opener=this; - erec.eRecNo(this.nodeMetadata,id); +//alert("2 "+findNodeOnPath(this.nodeMetadata, 'type/properties')); + if(findNodeOnPath(this.nodeMetadata, 'type/properties')!=null) + erec.eRecNo(this.nodeMetadata,id); + else + erec.eRecNa(this.f_TypeName,id,null); //e.win.setLeftTop(pageX-10,pageY-10); if(this.onInsert!=null) this.onUpdate(erec); @@ -1668,7 +1676,7 @@ class SRec { this.f_TypeName=typeName; this.f_Settings=settings; - postXMLData(ScriptName,'',(ok,data)=>{ + postXMLData(ScriptDBMS+"metadata",'',(ok,data)=>{ if(ok){ if(data.error_code=='0') { diff --git a/metadata/dbms/tools.js b/metadata/dbms/tools.js index 03e33d3..74d55d1 100644 --- a/metadata/dbms/tools.js +++ b/metadata/dbms/tools.js @@ -265,7 +265,7 @@ function postJsonData(url,data,fun){ { return function(){ if(req.readyState == 4 || typeof(req.readyState)=='undefined'){ - if(req.status == 200) { + //if(req.status == 200) { if(req.responseXML!=null) { let node = req.responseXML.documentElement; node.error_code='0'; @@ -281,9 +281,9 @@ function postJsonData(url,data,fun){ else fun(false, req.responseText); } - }else{ - fun(false,trt('Failed_to_receive_data')); - } + //}else{ + // fun(false,trt('Failed_to_receive_data')); + //} } }; }(req); @@ -327,8 +327,30 @@ function postXMLData(url,data,fun){ req.open( "POST", url, true ); req.setRequestHeader("Content-type", "application/xml"); req.send(data); +} - +function errorDialog(data,okFunc){ + if(data!=null && data !== undefined && data.error_message !== undefined && data.error_message!=null){ + if(typeof data.error_message === "string"){ + alert2(trt('Alert'), trt(data.error_message), '', okFunc); + }else if(Array.isArray(data.error_message)){ + let text = ''; + for(let i=0;i\n"; + } + alert2(trt('Alert'), text, '', okFunc); + } + }else{ + alert2(trt('Alert'), trt('Error_while_receiving_data'), data, okFunc); + } } //Вывести текст поверх окон с кнопочкой OK @@ -407,7 +429,7 @@ function confirm2(title,smallText,fullText,okFunc,cancelFunc) `+fullText+` - `+(fullText === undefined || fullText == '' ? '' : '')+`  + `+(fullText === undefined || fullText == null || fullText == '' ? '' : '')+`  @@ -1312,64 +1334,6 @@ class TRequest return null; } - /*processReqChange(xmlHttpRequest,url,xmlString) - { - //if (typeof(xmlHttpRequest.readyState)=='undefined' || xmlHttpRequest.readyState == 4) - //{ - if(typeof(xmlHttpRequest.status)=='undefined' || xmlHttpRequest.status == 200) - { -alert(JSON.stringify(xmlHttpRequest)); - if(typeof(xmlHttpRequest.responseXML)=='undefined') { - if(xmlHttpRequest.contentType.match(/\/xml/)) { - xmlHttpRequest.responseXML = CreateXMLDOC(xmlHttpRequest.responseText); - if(xmlHttpRequest.responseXML==null) { - alert2(trt('Alert'), trt('Wrong_XML_document') + "!\nXML=(" + xmlHttpRequest.responseText + ')\nURL=(' + url + ')\nxmlString=(' + xmlString + ')'); - return; - } - //загрузился xml документ начинаем его разбирать (по id функции в документе) - let node = xmlHttpRequest.responseXML.documentElement; - if((node==null)||(node.getAttribute("fn")==null)) alert(trt('Error')+"\n"+trt('No_data')+"!\n"+xmlHttpRequest.responseText); - else - { - let fn = node.getAttribute("fn"); - if(this.winObj!=null) - { - this.winObj.applyReq(this,fn,node,xmldoc,this.winObj); - return null; - }else if(fn==0) alert(findFirstNode(node,'#cdata-section').nodeValue); - } - - }else if(xmlHttpRequest.contentType.match(/\/json/)){ - xmlHttpRequest.responseXML = JSON.parse(xmlHttpRequest.responseText); - if(xmlHttpRequest.responseXML==null) { - alert2(trt('Alert'), trt('Wrong_JSON_document') + "!\nJSON=(" + xmlHttpRequest.responseText + ')\nURL=(' + url + ')\njsonString=(' + xmlString + ')'); - return; - } - //загрузился xml документ начинаем его разбирать (по id функции в документе) - let node=xmlHttpRequest.responseXML; - if((node==null)||(node.fn==null)) alert(trt('Error')+"\n"+trt('No_data')+"!\n"+xmlHttpRequest.responseText); - else - { - if(this.winObj!=null) - { - this.winObj.applyReq(this,node.fn,node,null,this.winObj); - return null; - }else if(fn==0) alert(findFirstNode(node,'#cdata-section').nodeValue); - } - - } - } - - }else - { - if(confirm(trt('Failed_to_get_data')+"\n URL: "+url+"\n"+xmlHttpRequest.statusText+"\nПовторить запрос?")) - { - this.callServer(url,xmlString); - }; - } - //} - return null; - }*/ }; /** Класс асинхронных запросов к серверу (TODO удалить его и не использовать) diff --git a/metadata/dbms/window.js b/metadata/dbms/window.js index b888860..d7e3169 100644 --- a/metadata/dbms/window.js +++ b/metadata/dbms/window.js @@ -253,17 +253,26 @@ class TWin obj.appendChild(val); } - //Присвоить содержимое в виде строки + //Присвоить содержимое setContent(html) { let obj=document.getElementById('TWin_Co_'+this.tWinId); if(obj!=null) { - obj.innerHTML=html; + obj.innerHTML = ''; + if (html instanceof HTMLElement || html instanceof DocumentFragment) { + obj.appendChild(html); + } else if (typeof html === 'string') { + obj.innerHTML = html; //TODO не использовать + } else { + console.warn('setContent: unsupported data type passed', html); + return; + } if(this.tbl.offsetHeight>this.div.offsetHeight) this.div.style.height=this.tbl.offsetHeight+"px"; if(this.tbl.offsetWidth>this.div.offsetWidth) this.div.style.width=this.tbl.offsetWidth+"px"; } } + //Выбрать (активизировать) окно setSel() { @@ -388,7 +397,7 @@ class TWin r.setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate"); r.setRequestHeader("Pragma", "no-cache"); r.setRequestHeader("Expires", "0"); - if(json!=null) + if(json!=null){ r.send(JSON.stringify(json)); }else { r.open( "GET", url, true ); @@ -427,17 +436,25 @@ class TWin w.childs[w.childs.length]=this; } } - hide(val) - { - if(val) - { this.div.style.display='none'; - this.divsh.style.display='none'; - }else - { + + get visible() { + return this.div.style.display!=='none'; + } + + set visible(val){ + if(val){ this.div.style.display='inline'; if(this.shadow) this.divsh.style.display='block'; + }else + { + this.div.style.display='none'; + this.divsh.style.display='none'; } } + hide(val)//TODO Outdated + { + this.visible=!val; + } //Показать прогрес бар showProgressBar() diff --git a/metadata/include/jscalendar/index.html b/metadata/include/jscalendar/index.html index 35578c4..a5e328e 100644 --- a/metadata/include/jscalendar/index.html +++ b/metadata/include/jscalendar/index.html @@ -43,7 +43,7 @@
-

The new coolest JavaScript calendar

+

- Extensive API documentation is available at www.dynarch.com +

diff --git a/metadata/test.xyz b/metadata/test.xyz index 0834b22..da817a6 100644 --- a/metadata/test.xyz +++ b/metadata/test.xyz @@ -9,7 +9,6 @@ - diff --git a/metadata/tree/tree_b.php b/metadata/tree/tree_b.php index 03d0c1a..7d5fcc9 100644 --- a/metadata/tree/tree_b.php +++ b/metadata/tree/tree_b.php @@ -1,6 +1,6 @@ diff --git a/metadata/vue.js b/metadata/vue.js index 919aa12..51f57d0 100644 --- a/metadata/vue.js +++ b/metadata/vue.js @@ -9053,8 +9053,8 @@ devtools.emit('init', Vue); } else { console[console.info ? 'info' : 'log']( - 'Download the Vue Devtools extension for a better development experience:\n' + - 'https://github.com/vuejs/vue-devtools' + '' + + '' ); } } @@ -9062,9 +9062,9 @@ typeof console !== 'undefined' ) { console[console.info ? 'info' : 'log']( - "You are running Vue in development mode.\n" + - "Make sure to turn on production mode when deploying for production.\n" + - "See more tips at https://vuejs.org/guide/deployment.html" + "" + + "" + + "" ); } }, 0);