Author: solomax
Date: Mon Jul  2 10:28:15 2012
New Revision: 1356166

URL: http://svn.apache.org/viewvc?rev=1356166&view=rev
Log:
OPENMEETINGS-299 each language is imported ~3 times faster

Modified:
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
    
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
 Mon Jul  2 10:28:15 2012
@@ -46,7 +46,7 @@ public class FieldLanguageDaoImpl {
        @PersistenceContext
        private EntityManager em;
 
-       public Long addLanguage(int langId, String langName, Boolean langRtl, 
String code) {
+       public FieldLanguage addLanguage(int langId, String langName, Boolean 
langRtl, String code) {
                try {
 
                        FieldLanguage fl = new FieldLanguage();
@@ -58,9 +58,8 @@ public class FieldLanguageDaoImpl {
                        fl.setCode(code);
 
                        fl = em.merge(fl);
-                       Long languages_id = fl.getLanguage_id();
 
-                       return languages_id;
+                       return fl;
                } catch (Exception ex2) {
                        log.error("[addLanguage]: ", ex2);
                }
@@ -69,11 +68,10 @@ public class FieldLanguageDaoImpl {
 
        public void emptyFieldLanguage() {
                try {
-
-                       // TODO delete hql query doesn't work, must be repared
-                       em.createQuery("delete from FieldLanguage");
+                       TypedQuery<FieldLanguage> q = em.createQuery("delete 
from FieldLanguage", FieldLanguage.class);
+                       q.executeUpdate();
                } catch (Exception ex2) {
-                       log.error("[getConfKey]: ", ex2);
+                       log.error("[emptyFieldLanguage]: ", ex2);
                }
        }
 
@@ -95,7 +93,7 @@ public class FieldLanguageDaoImpl {
                return new Long(-1);
        }
 
-       private void updateLanguage(FieldLanguage fl) throws Exception {
+       public void updateLanguage(FieldLanguage fl) throws Exception {
                if (fl.getLanguage_id() == null) {
                        em.persist(fl);
                } else {

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
 Mon Jul  2 10:28:15 2012
@@ -18,7 +18,6 @@
  */
 package org.openmeetings.app.data.beans.basic;
 
-import java.io.Serializable;
 import java.util.List;
 
 public class SearchResult<T> {

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
 Mon Jul  2 10:28:15 2012
@@ -20,11 +20,13 @@ package org.openmeetings.app.installatio
 
 import java.io.File;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import org.dom4j.Document;
 import org.dom4j.Element;
@@ -46,9 +48,11 @@ import org.openmeetings.app.data.user.St
 import org.openmeetings.app.data.user.Usermanagement;
 import org.openmeetings.app.data.user.dao.UsersDaoImpl;
 import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
+import org.openmeetings.app.persistence.beans.lang.FieldLanguage;
+import org.openmeetings.app.persistence.beans.lang.Fieldlanguagesvalues;
 import org.openmeetings.app.persistence.beans.lang.Fieldvalues;
-import org.openmeetings.utils.OmFileHelper;
 import org.openmeetings.utils.ImportHelper;
+import org.openmeetings.utils.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -885,12 +889,12 @@ public class ImportInitvalues {
                for (Iterator<Integer> itLang = 
listlanguages.keySet().iterator(); itLang
                                .hasNext();) {
                        Integer langId = itLang.next();
-                       LinkedHashMap<String, Object> lang = 
listlanguages.get(langId);
-                       log.debug("loadInitLanguages lang: " + lang);
+                       LinkedHashMap<String, Object> langMap = 
listlanguages.get(langId);
+                       log.debug("loadInitLanguages lang: " + langMap);
 
-                       String langName = (String) lang.get("name");
-                       String rtl = (String) lang.get("rtl");
-                       String code = (String) lang.get("code");
+                       String langName = (String) langMap.get("name");
+                       String rtl = (String) langMap.get("rtl");
+                       String code = (String) langMap.get("code");
 
                        log.debug("loadInitLanguages rtl from xml: " + rtl);
 
@@ -899,14 +903,15 @@ public class ImportInitvalues {
                        if (rtl != null && rtl.equals("true"))
                                langRtl = true;
 
-                       Long languages_id = 
fieldLanguageDaoImpl.addLanguage(langId, langName,
-                                       langRtl, code);
+                       long ticks = System.currentTimeMillis();
+                       FieldLanguage lang = 
fieldLanguageDaoImpl.addLanguage(langId, langName, langRtl, code);
 
                        SAXReader reader = new SAXReader();
                        Document document = reader.read(new 
File(OmFileHelper.getLanguagesDir(), langName + ".xml"));
 
                        Element root = document.getRootElement();
 
+                       Map<Long, Fieldlanguagesvalues> flvMap = 
lang.getLanguageValuesMap();
                        for (@SuppressWarnings("rawtypes")
                        Iterator it = root.elementIterator("string"); 
it.hasNext();) {
                                Element item = (Element) it.next();
@@ -924,20 +929,31 @@ public class ImportInitvalues {
 
                                // log.error("result: "+langFieldIdIsInited+" 
"+id+" "+name+" "+value);
 
-                               Fieldvalues fv = null;
-                               // Only do that for the first field-set
-                               if (!fieldCache.containsKey(id)) {
-                                       fv = fieldmanagment.addFieldById(name, 
id);
-                                       fieldCache.put(id,  fv);
+                               if (flvMap.containsKey(id)) {
+                                       Fieldlanguagesvalues flv = 
flvMap.get(id);
+                                       flv.setUpdatetime(new Date());
+                                       flv.setValue(value);
                                } else {
-                                       fv = fieldCache.get(id);
+                                       Fieldvalues fv = null;
+                                       // Only do that for the first field-set
+                                       if (!fieldCache.containsKey(id)) {
+                                               fv = 
fieldmanagment.addFieldById(name, id);
+                                               fieldCache.put(id,  fv);
+                                       } else {
+                                               fv = fieldCache.get(id);
+                                       }
+                                       Fieldlanguagesvalues flv = new 
Fieldlanguagesvalues();
+                                       flv.setStarttime(new Date());
+                                       flv.setValue(value);
+                                       
flv.setLanguage_id(lang.getLanguage_id());
+                                       flv.setFieldvalues(fv);
+                                       flv.setDeleted("false");
+                                       flvMap.put(id, flv);
                                }
-
-                               
fieldmanagment.addFieldValueByFieldAndLanguage(fv,
-                                               languages_id, value);
-
                        }
-                       log.debug("Lang ADDED: " + lang);
+                       lang.setLanguageValues(flvMap.values());
+                       fieldLanguageDaoImpl.updateLanguage(lang);
+                       log.debug("Lang ADDED: " + lang + "; seconds passed: " 
+ (System.currentTimeMillis() - ticks) / 1000);
                }
                log.debug("All languages are imported");
        }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
 Mon Jul  2 10:28:15 2012
@@ -19,17 +19,16 @@
 package org.openmeetings.app.persistence.beans.lang;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Date;
-import java.util.List;
-
-
+import java.util.Hashtable;
+import java.util.Map;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
@@ -40,8 +39,7 @@ public class FieldLanguage implements Se
 
        private static final long serialVersionUID = 3501643212388395425L;
        @Id
-       @GeneratedValue(strategy = GenerationType.IDENTITY)
-       @Column(name="language_id")
+       @Column(name="language_id", unique=true, nullable= false)
        private Long language_id;
        @Column(name="name")
        private String name;
@@ -56,9 +54,9 @@ public class FieldLanguage implements Se
        @Column(name="code")
        private String code;
        
-       @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+       @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        @JoinColumn(name = "language_id", insertable = true, updatable = true)
-       private List<Fieldlanguagesvalues> languageValues;
+       private Collection<Fieldlanguagesvalues> languageValues;
        
        public Long getLanguage_id() {
                return language_id;
@@ -108,10 +106,21 @@ public class FieldLanguage implements Se
        public void setCode(String code) {
                this.code = code;
        }
-       public List<Fieldlanguagesvalues> getLanguageValues() {
-               return languageValues;
+       
+       public Collection<Fieldlanguagesvalues> getLanguageValues() {
+               return languageValues == null ? new 
ArrayList<Fieldlanguagesvalues>() : languageValues;
        }
-       public void setLanguageValues(List<Fieldlanguagesvalues> 
languageValues) {
-               this.languageValues = languageValues;
+       public void setLanguageValues(Collection<Fieldlanguagesvalues> 
languageValues) {
+               if (languageValues != null) {
+                       this.languageValues = languageValues;
+               }
+       }
+       public Map<Long, Fieldlanguagesvalues> getLanguageValuesMap() {
+               Collection<Fieldlanguagesvalues> langVals = getLanguageValues();
+               Map<Long, Fieldlanguagesvalues> result = new Hashtable<Long, 
Fieldlanguagesvalues>(langVals.size());
+               for (Fieldlanguagesvalues flv : langVals) {
+                       result.put(flv.getFieldvalues().getFieldvalues_id(), 
flv);
+               }
+               return result;
        }
 }

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
 Mon Jul  2 10:28:15 2012
@@ -114,7 +114,8 @@ public class LanguageService {
                if (authLevelManagement.checkAdminLevel(user_level)) {
                        if (langName.length() == 0)
                                return new Long(-30);
-                       return fieldLanguageDaoImpl.addLanguage(0, langName, 
false, code);
+                       FieldLanguage lang = 
fieldLanguageDaoImpl.addLanguage(0, langName, false, code);
+                       return lang != null ? lang.getLanguage_id() : -1;
                }
                return null;
        }


Reply via email to