diff --git a/src/main/java/org/ccalm/main/AcceptASDCController.java b/src/main/java/org/ccalm/main/AcceptASDCController.java index 32065c2..e4b0d1d 100644 --- a/src/main/java/org/ccalm/main/AcceptASDCController.java +++ b/src/main/java/org/ccalm/main/AcceptASDCController.java @@ -1091,7 +1091,7 @@ public class AcceptASDCController implements ServletContextAware { @RequestMapping(value = "/get/",method = { RequestMethod.GET, RequestMethod.POST },produces = "application/xml; charset=utf-8") @ResponseBody public Object uploadXML(HttpServletResponse response, @RequestHeader(required=false,name="Content-Type") String contentType, @RequestBody(required=false) byte[] reqData) { - + if(contentType!=null) logger.info("Content-Type = " + contentType); //INFO : kz.locust.CCALM.AcceptASDC - Content-Type = multipart/form-data; boundary=kTwyQRMc7R9JvmcYlXyvMEwX6B08jb diff --git a/src/main/java/org/ccalm/main/MainController.java b/src/main/java/org/ccalm/main/MainController.java index e57e971..b86b4bf 100644 --- a/src/main/java/org/ccalm/main/MainController.java +++ b/src/main/java/org/ccalm/main/MainController.java @@ -2,11 +2,8 @@ package org.ccalm.main; import java.io.FileInputStream; import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; +import java.util.List; import java.util.Locale; import java.util.Properties; import java.util.Set; @@ -21,13 +18,20 @@ import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; import org.springframework.http.CacheControl; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.ServletContextAware; +import org.ccalm.main.TranslationUtils; +import tools.DBTools; import tools.User; /** @@ -46,26 +50,13 @@ public class MainController implements ServletContextAware { this.context=context; } - //If not created object "user", create him. - //@ModelAttribute("user") - //public User populatePerson() { - // return new User("none"); - //} + private final NamedParameterJdbcTemplate jdbcTemplate; - /** - * Simply selects the home view to render by returning its name. - */ - /*@RequestMapping(value = "/test", method = RequestMethod.GET) - public String home(Locale locale, Model model) { - logger.info("Welcome home! The client locale is {}.", locale); - - //Date date = new Date(); - //DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); - //String formattedDate = dateFormat.format(date); - //model.addAttribute("serverTime", formattedDate ); - - return "index"; - }*/ + @Autowired + public MainController(NamedParameterJdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + this.m_props = new Properties(); + } /** * Simply selects the home view to render by returning its name. @@ -114,125 +105,20 @@ public class MainController implements ServletContextAware { * Testing new main index page */ @RequestMapping(value = "/", method = RequestMethod.GET) - public String home2(@ModelAttribute User user, Model model,@CookieValue(value = "lng", defaultValue = "1") String language_id) { - //logger.info("Welcome home! The client locale is {}.", locale); - - 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); - - String db_url=""; - String db_login=""; - String db_password=""; - Properties prop = new Properties(); + public String home2(Model model,@CookieValue(value = "lng", defaultValue = "1") String language_id_str) { + int language_id; 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); - } - - //Get language from database - Connection conn = null; - try{ - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url,db_login,db_password); - if(conn!=null) - { - System.out.println("Connect is OK!"); - }else - { - System.out.println("Connect is ERROR"); - } - }catch(Exception e) - { - System.out.println("Connect Exception:"+e.getMessage()+""); + language_id = Integer.parseInt(language_id_str); + } catch (NumberFormatException e) { + language_id = 1; // Значение по умолчанию в случае ошибки } - try { - Statement st = conn.createStatement(); - ResultSet rs=null; - if(user.id!=null){ - - if(language_id!=null && !language_id.equals("")) - { - //Set the language for the current user if it is transferred. - user.language_id=language_id; - try { - st.execute("update main._users set language_id='"+user.language_id+"' where id="+user.id); - } catch( SQLException ex ) - { - System.out.println("SQLException:"+ex.getMessage()+""); - } - } - - //Select language for current user - try { - String sql="select language_id,country_id from main._users u where u.id="+String.valueOf(user.id)+";"; - rs = st.executeQuery(sql); - } catch( SQLException ex ) - { - System.out.println("SQLException:"+ex.getMessage()+""); - } - - if(rs!=null) - { - while (rs.next()) - { - user.language_id = rs.getString("language_id"); - user.country_id = rs.getString("country_id"); - } - } - } - st.close(); - } catch( SQLException ex ) - { - System.out.println("SQLException:"+ex.getMessage()+""); - } - - //Send user name and role - model.addAttribute("uName",user.name+" ("+user.role+")"); - model.addAttribute("m_locale",user.language_id); - model.addAttribute("country_id",user.country_id); + //model.addAttribute("uName",user.name+" ("+user.role+")"); + model.addAttribute("m_locale",language_id); + //model.addAttribute("country_id",user.country_id); //Для перевода выбираю всё что под номером 1 в переводе - try { - m_props = new Properties(); - Statement stt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - String sql_query = "select identifier,case when '"+user.language_id+"'='666' then translation||'''\"' else translation end as translation from main._translations t where t.del=false and (t.language_id='"+user.language_id+"' or ('"+user.language_id+"'='666' and t.language_id=1)) and translation_type_id=1;"; - ResultSet rs = stt.executeQuery(sql_query); - if (rs != null) { - while (rs.next()) - { - String identifier = rs.getString("identifier"); - String translation = rs.getString("translation"); - m_props.setProperty(identifier, translation); - } - rs.close(); - } - stt.close(); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - } - Set keys = m_props.keySet(); - for(Object k:keys){ - String key = (String)k; - String val=""; - if(val.equals("")) - { - val = m_props.getProperty(key,""); - if(val.equals("")) - { - val = val.replaceAll("_", " "); - } - } - model.addAttribute(key,val); - } - - - try{ conn.close(); }catch(Exception e){} + TranslationUtils.loadTranslations(jdbcTemplate, language_id, model); //return "index"; return "test"; @@ -248,77 +134,33 @@ public class MainController implements ServletContextAware { JSONObject result = new JSONObject(); JSONArray array=new JSONArray(); - String db_url=""; - String db_login=""; - String db_password=""; - //String data_dir = ""; - 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"); - //data_dir = prop.getProperty("data.dir"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - //Connect to database - Connection conn = null; - try{ - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url,db_login,db_password); - if(conn!=null) - { - System.out.println("Connect is OK!"); - }else - { - System.out.println("Connect is ERROR"); - } - }catch(Exception e) - { - System.out.println("Connect Exception:"+e.getMessage()+""); - } - - String sql; - sql = "select * from main.p_dataindex(to_timestamp("+date_start+")::timestamp without time zone,to_timestamp("+date_end+")::timestamp without time zone);"; - ResultSet rs = null; - try { - Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = stmt.executeQuery(sql); - } catch (SQLException ex) { - logger.info(ex.getMessage()); - ex.printStackTrace(); - } - - try { - while (rs.next()) { - JSONObject rsRez = new JSONObject(); - rsRez.put("id",rs.getInt("id")); - rsRez.put("lon",rs.getDouble("lon")); - rsRez.put("lat",rs.getDouble("lat")); - rsRez.put("type",rs.getInt("type")); - rsRez.put("terrain",rs.getString("terrain")); + String sql=""" + select + id, + lon, + lat, + type, + terrain + from main.p_dataindex(to_timestamp(:date_start)::timestamp without time zone,to_timestamp(:date_end)::timestamp without time zone); + """; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("date_start", date_start, Types.INTEGER); + parameters.addValue("date_end", date_end, Types.INTEGER); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (int i = 0; i < ret.size(); i++) { + JSONObject rsRez = new JSONObject(ret.get(i)); array.put(rsRez); } - } catch (SQLException ex) { - logger.info(ex.getMessage()); - ex.printStackTrace(); + } catch( DataAccessException ex ) + { + logger.error("Error",ex); } + result.put("Error_code", "0"); result.put("Error_message", ""); - result.put("data", array); - if(conn!=null) - { - try { - conn.close(); - } catch (SQLException e) { - } - } - return result.toString(); } diff --git a/src/main/java/org/ccalm/main/TranslationController.java b/src/main/java/org/ccalm/main/TranslationController.java index 64f5b43..b959ce1 100644 --- a/src/main/java/org/ccalm/main/TranslationController.java +++ b/src/main/java/org/ccalm/main/TranslationController.java @@ -1,13 +1,8 @@ package org.ccalm.main; import java.io.FileInputStream; -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 java.util.Set; +import java.sql.*; +import java.util.*; //import javax.servlet.ServletContext; @@ -15,11 +10,16 @@ import jakarta.servlet.ServletContext; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.ServletContextAware; +import tools.DBTools; import tools.User; /** @@ -32,117 +32,103 @@ public class TranslationController implements ServletContextAware { private static final Logger logger = LoggerFactory.getLogger(TranslationController.class); private ServletContext context; - /*@Value("${spring.datasource.url}") - private String dbUrl; - @Value("${spring.datasource.username}") - private String dbUsername; - @Value("${spring.datasource.password}") - private String dbPassword;*/ + private final NamedParameterJdbcTemplate jdbcTemplate; - //If not created object "user", create him. - //@ModelAttribute("user") - //public User populatePerson() { - // return new User("none"); - //} + @Autowired + public TranslationController(NamedParameterJdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/translation", method = RequestMethod.GET) @ResponseBody - public String home(@ModelAttribute User user/*, Locale locale*/, Model model) { - - String db_url=""; - String db_login=""; - String db_password=""; - //String data_dir = ""; - 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"); - //data_dir = prop.getProperty("data.dir"); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Error load org_ccalm_main.properties",e); - } - - //Get language from database - Connection conn = null; - try{ - Class.forName("org.postgresql.Driver"); - conn = DriverManager.getConnection(db_url,db_login,db_password); - if(conn!=null) - { - System.out.println("Connect is OK!"); - }else - { - System.out.println("Connect is ERROR"); - } - }catch(Exception e) - { - System.out.println("Connect Exception:"+e.getMessage()+""); - } + public String home( + Model model, + @CookieValue(value = "lng", defaultValue = "1") String language_id + ) { Properties props = new Properties(); try { - Statement st = conn.createStatement(); - ResultSet rs=null; - try { - String sql_query = "select identifier,case when '"+user.language_id+"'='666' then translation||'''\"' else translation end as translation from main._translations t where t.del=false and (t.language_id='"+user.language_id+"' or ('"+user.language_id+"'='666' and t.language_id=1)) and translation_type_id=1 order by identifier;"; - rs = st.executeQuery(sql_query); - } catch( SQLException ex ) - { - System.out.println("SQLException:"+ex.getMessage()+""); - } - - if(rs!=null) - { - while (rs.next()) - { - if(rs.getString("translation")!=null) - props.setProperty(rs.getString("identifier"), rs.getString("translation")); - } - } - st.close(); - } catch( SQLException ex ) + String sql=""" + select + identifier, + translation + from + main._translations t + where + t.del=false and + t.language_id=:language_id and + translation_type_id=1 + order by + identifier + """; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("language_id", language_id, Types.INTEGER); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (String str : ret) { + JSONObject obj = new JSONObject(str); + props.setProperty(obj.getString("identifier"), obj.getString("translation")); + } + } catch( DataAccessException ex ) { - System.out.println("SQLException:"+ex.getMessage()+""); + logger.info(ex.getMessage()); } - try{ conn.close(); }catch(Exception e){} - - //Create JavaScript text - /* - InputStream utf8in = getClass().getClassLoader().getResourceAsStream("messages_"+user.lng+".properties"); - Reader reader; - try { - reader = new InputStreamReader(utf8in, "UTF-8"); - props.load(reader); - } catch (UnsupportedEncodingException e) { - }catch (IOException e) { - }*/ //Переписываю в JavaScript код - //JSONArray data = new JSONArray(); JSONObject data = new JSONObject(); - String result=""; Set keys = props.keySet(); for(Object k:keys){ String key = ((String)k).trim(); String val = props.getProperty(key,""); - data.put(key,val); - //JSONObject obj = new JSONObject(); - //obj.put(key,val); - //data.put(obj); } - //model.addAttribute("keys",result); - //return "translation"; return "var g_translations = "+data.toString(); } + /** + * Функция для получения переводов в формате JSON. + */ + @GetMapping(value = "/api/translation", produces = "application/json") + @ResponseBody + public Map getTranslations( + @CookieValue(value = "lng", defaultValue = "1") String language_id + ) { + + Map translations = new HashMap<>(); + + try { + String sql = """ + select + identifier, + translation + from + main._translations t + where + t.del = false + and t.language_id = :language_id + and translation_type_id = 1 + order by identifier + """; + + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("language_id", language_id, Types.INTEGER); + List> rows = jdbcTemplate.queryForList(sql, parameters); + + for (Map row : rows) { + String identifier = (String) row.get("identifier"); + String translation = (String) row.get("translation"); + translations.put(identifier, translation); + } + } catch (DataAccessException ex) { + logger.info("Error fetching translations: " + ex.getMessage()); + } + + return translations; + } + @Override public void setServletContext(ServletContext servletContext) { this.context=servletContext; diff --git a/src/main/java/org/ccalm/main/TranslationUtils.java b/src/main/java/org/ccalm/main/TranslationUtils.java new file mode 100644 index 0000000..594168e --- /dev/null +++ b/src/main/java/org/ccalm/main/TranslationUtils.java @@ -0,0 +1,45 @@ +package org.ccalm.main; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.ui.Model; +import org.json.JSONObject; +import tools.DBTools; + +import java.sql.Types; +import java.util.List; +import java.util.Set; +import java.util.Properties; + +public class TranslationUtils { + + private static final Logger logger = LoggerFactory.getLogger(TranslationUtils.class); + + public static void loadTranslations(NamedParameterJdbcTemplate jdbcTemplate, int language_id, Model model) { + // Для перевода выбираю всё что под номером 1 в переводе + try { + String sql = """ + select identifier, translation from main._translations t + where t.del = false and t.language_id = :language_id and translation_type_id = 1; + """; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("language_id", language_id, Types.INTEGER); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (String jsonString : ret) { + JSONObject obj = new JSONObject(jsonString); + String key = obj.getString("identifier"); + String val = obj.getString("translation"); + if (val.equals("")) { + val = val.replaceAll("_", " "); + } + model.addAttribute(key, val); + } + } catch (DataAccessException ex) { + logger.error("Error loading translations for language_id: {}", language_id, ex); + } + } +} diff --git a/src/main/java/org/ccalm/main/engine/EngineController.java b/src/main/java/org/ccalm/main/engine/EngineController.java index dafe44e..2f96e1d 100644 --- a/src/main/java/org/ccalm/main/engine/EngineController.java +++ b/src/main/java/org/ccalm/main/engine/EngineController.java @@ -19,6 +19,7 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.Jwts; import org.apache.logging.log4j.LogManager; +import org.ccalm.main.TranslationUtils; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,7 +86,7 @@ public class EngineController implements ServletContextAware { Model model, HttpServletResponse response, @CookieValue(value = "jwt_a", defaultValue = "") String jwt_a, - @CookieValue(value = "lng", defaultValue = "1") String language_id + @CookieValue(value = "lng", defaultValue = "1") int language_id ) { if (jwt_a.equals("") || Tools.countOccurrences(jwt_a, '.') != 2) { String redirectUrl = "/login/login?msg=Please_log_in"; @@ -131,8 +132,7 @@ public class EngineController implements ServletContextAware { model.addAttribute("uName",claims.getBody().get("sub").toString()/*+" ("+user.role+")"*/); model.addAttribute("m_locale",language_id); model.addAttribute("country_id",country_id); - - + //Send translation to user /*InputStream utf8in = getClass().getClassLoader().getResourceAsStream("messages_"+user.lng+".properties"); if(utf8in!=null) @@ -351,39 +351,8 @@ public class EngineController implements ServletContextAware { }*/ //Для перевода выбираю всё что под номером 1 в переводе + TranslationUtils.loadTranslations(jdbcTemplate, language_id, model); - try { - String sql=""" - select identifier,translation from main._translations t where t.del=false and t.language_id=:language_id and translation_type_id=1; - """; - MapSqlParameterSource parameters = new MapSqlParameterSource(); - parameters.addValue("language_id", language_id, Types.INTEGER); - List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); - for (int i = 0; i < ret.size(); i++) { - JSONObject obj = new JSONObject(ret.get(i)); - m_props.setProperty(obj.getString("identifier"), obj.getString("translation")); - } - } catch( DataAccessException ex ) - { - logger.info(ex.getMessage()); - } - - Set keys = m_props.keySet(); - for(Object k:keys){ - String key = (String)k; - String val=""; - if(val.equals("")) - { - val = m_props.getProperty(key,""); - if(val.equals("")) - { - val = val.replaceAll("_", " "); - } - } - model.addAttribute(key,val); - } - - //Подложка Substrate_head Substrate_tail String Substrate_head=""; String Substrate_tail=""; diff --git a/src/main/resources/templates/login/login.html b/src/main/resources/templates/login/login.html index 530180f..d29eb78 100644 --- a/src/main/resources/templates/login/login.html +++ b/src/main/resources/templates/login/login.html @@ -112,110 +112,188 @@ .centered-text a:hover { text-decoration: underline; } + + /* Header styles */ + .header { + width: 100%; + background-color: var(--back-color2); + color: white; + padding: 10px; + text-align: center; + position: fixed; + top: 0; + left: 0; + z-index: 100; + } + - - - Authorization - - - Login (E-mail): - - - - - Пароль: - - - - - Восстановление пароля - - - - Войти - - - - Загрузка... - - + + Username - - - Registration - - - Country * - - + + - - Surname - - - - - Name * - - - - - Company - - - - - Position - - - - - Phone - - - - - Email * - - - - - - - - Я согласен с политикой конфиденциальности - - - - - Registration - - - - Загрузка... + + Authorization + + + Login (E-mail): + + + + Password: + + + + Log in + - - - - Password_recovery - + + Registration + + + + Country * + + + + + Surname + + + + + Name * + + + + + Company + + + + + Position + + + + + Phone + + + + + Email * + + + + + + + Я согласен с политикой конфиденциальности + + + + + Registration + + + - - - - Authorization - Create a new user - Password recovery - Change password - Get new TOTP key + + Password_recovery + + + Email * + + + + + Next + + + + Загрузка... + + + + + + Password_recovery + + + Login Email + + + + + Old_password + + + + + New_password + + + + + New_password + + + + + Change_password + + + + + + + + New_totp_key + + + Login (E-mail) + + + + + Password + + + + + Old_totp + + + + + New_password + + + + + New_totp_key + + + + + + + Authorization + Create a new user + Password recovery + Change password + Get new TOTP key + diff --git a/src/main/resources/templates/test.html b/src/main/resources/templates/test.html index b33a5c6..5f1ac54 100644 --- a/src/main/resources/templates/test.html +++ b/src/main/resources/templates/test.html @@ -115,7 +115,7 @@ location.href = location.href.replace(/^http:/, 'https:') } - var g_lng = /*[[${m_locale}]]*/ ''; + var g_lng = [[${m_locale}]]; var g_map=null; var m_winPP=null; @@ -540,21 +540,21 @@ if(g_lng=="1") - NDVI Normalized_difference_vegetation_index + NDVI Normalized_difference_vegetation_index - IVI Integral_vegetation_index + IVI Integral_vegetation_index - NDWI Normalized_difference_water_index + NDWI Normalized_difference_water_index - NDSI Normalised_difference_snow_index + NDSI Normalised_difference_snow_index
Authorization
Create a new user
Password recovery
Change password
Get new TOTP key