Package com.dotmarketing.portlets.languagesmanager.ajax

Source Code of com.dotmarketing.portlets.languagesmanager.ajax.LanguageAjax

package com.dotmarketing.portlets.languagesmanager.ajax;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import javax.servlet.http.HttpServletRequest;

import com.dotcms.repackage.org.directwebremoting.WebContext;
import com.dotcms.repackage.org.directwebremoting.WebContextFactory;

import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.web.UserWebAPI;
import com.dotmarketing.business.web.WebAPILocator;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotRuntimeException;
import com.dotmarketing.portlets.languagesmanager.business.LanguageAPI;
import com.dotmarketing.portlets.languagesmanager.model.Language;
import com.dotmarketing.portlets.languagesmanager.model.LanguageKey;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.UtilMethods;
import com.dotmarketing.util.WebKeys;
import com.liferay.portal.PortalException;
import com.liferay.portal.SystemException;
import com.liferay.portal.language.LanguageException;
import com.liferay.portal.language.LanguageUtil;

import com.dotcms.repackage.edu.emory.mathcs.backport.java.util.Collections;

public class LanguageAjax {

  public LanguageAPI langAPI = APILocator.getLanguageAPI();

  public List<LanguageKey> getLanguageKeys(String languageCode) {
    return getLanguageKeys(languageCode, null);
  }

  public List<LanguageKey> getLanguageKeys(String languageCode, String countryCode) {
    return langAPI.getLanguageKeys(languageCode, countryCode);
  }

  public List<Map<String,Object>> getPaginatedLanguageKeys(String languageCode,int page) {
    return getPaginatedLanguageKeys(languageCode, null,page,"");
  }

  private List<LanguageKey> filterList(List<LanguageKey> list, String filter) {
      List<LanguageKey> filtered=new ArrayList<LanguageKey>();
      for(LanguageKey lk : list) {
          if(lk.getKey().contains(filter) || lk.getValue().contains(filter)) {
              filtered.add(lk);
          }
      }
      return filtered;
   }

  public List<Map<String,Object>> getPaginatedLanguageKeys(String languageCode, String countryCode,int page,String filter) {

    int keysPerPage = 50;
    int keyIndex = 1;
    List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
    List<Map<String,Object>> keysToShow = new ArrayList<Map<String,Object>>();

      //Normalizing lists for display
      List<LanguageKey> lkeys = langAPI.getLanguageKeys(languageCode);
      List<LanguageKey> skeys = langAPI.getLanguageKeys(languageCode, countryCode);

      List<LanguageKey> filteredLKeys = lkeys;
      List<LanguageKey> filteredSKeys = skeys;

      if(UtilMethods.isSet(filter)) {
        filteredLKeys=filterList(lkeys, filter);
        filteredSKeys=filterList(skeys, filter);
      }

      TreeSet<String> allKeys=new TreeSet<String>();
      for (LanguageKey lk : filteredLKeys) {
            allKeys.add(lk.getKey());
        }
      for (LanguageKey lk : filteredSKeys) {
            allKeys.add(lk.getKey());
        }

      final int beginIdx=Math.max((page-1) * keysPerPage, 0);
      final int endIdx=Math.min(page*keysPerPage, allKeys.size());

      String[] keys=allKeys.toArray(new String[allKeys.size()]);

      for(int i = beginIdx ; i < endIdx ; i++ ) {
          String key=keys[i];

          LanguageKey fake=new LanguageKey("", "", key, "");
          int lpos=Collections.binarySearch(lkeys, fake);
          int spos=Collections.binarySearch(skeys, fake);

          String gValue="", sValue="";
          if(lpos>=0) gValue=lkeys.get(lpos).getValue();
          if(spos>=0) sValue=skeys.get(spos).getValue();

          Map<String,Object> keyMap = new HashMap<String, Object>();
            keyMap.put("key", key);
            keyMap.put("generalValue", UtilMethods.webifyString(UtilMethods.escapeHTMLSpecialChars(gValue)));
            keyMap.put("specificValue", UtilMethods.webifyString(UtilMethods.escapeHTMLSpecialChars(sValue)));
            keyMap.put("idx", Integer.toString(keysToShow.size()));
            keysToShow.add(keyMap);
      }

    //Adding the result counters as the first row of the results
    Map<String, Object> counters = new HashMap<String, Object>();
    result.add(counters);

    long total = allKeys.size();
    counters.put("total", total);

    counters.put("hasPrevious", page>1);

    if (page == 0)
      counters.put("hasNext", false);
    else
      counters.put("hasNext", endIdx < allKeys.size());

    int totalPages = 1;
    if (page != 0)
      totalPages = (int) Math.ceil((float) total / (float) keysPerPage);

    counters.put("begin", beginIdx+1);
    counters.put("end", endIdx);
    counters.put("totalPages", totalPages);

    result.addAll(keysToShow);
    return result;
  }

  public String saveKeys(String languageCode,String countryCode,List<String> keysToAdd,List<String> keysToUpdate,List<String> keysToDelete){

    Map<String, String> generalKeysToAdd = new HashMap<String, String>();
    Map<String, String> specificKeysToAdd  = new HashMap<String, String>();
    Set<String> deleteKeys = new HashSet<String>();
    Language lang = langAPI.getLanguage(languageCode, countryCode);
    String delim = WebKeys.CONTENTLET_FORM_NAME_VALUE_SEPARATOR;

    for(String str:keysToAdd){
      int firstDelimIndex = str.indexOf(delim);
      int secondDelimIndex = str.indexOf(delim,firstDelimIndex+1);
      String key = str.substring(0,firstDelimIndex);
      String generalValue = str.substring(firstDelimIndex+delim.length(),secondDelimIndex);
      String specificValue = str.substring(secondDelimIndex+delim.length());

      if(UtilMethods.isSet(generalValue)){
        generalKeysToAdd.put(key, generalValue);
      }
      if(UtilMethods.isSet(specificValue)){
        specificKeysToAdd.put(key, specificValue);
      }
    }

    for(String str:keysToUpdate){
      int firstDelimIndex = str.indexOf(delim);
      int secondDelimIndex = str.indexOf(delim,firstDelimIndex+1);
      String key = str.substring(0,firstDelimIndex);
      String generalValue = str.substring(firstDelimIndex+delim.length(),secondDelimIndex);
      String specificValue = str.substring(secondDelimIndex+delim.length());

      if(UtilMethods.isSet(generalValue)){
        generalKeysToAdd.put(key, generalValue);
      }
      if(UtilMethods.isSet(specificValue)){
        specificKeysToAdd.put(key, specificValue);
      }
    }
    for(String str:keysToDelete){
      deleteKeys.add(str);
    }

    try {
      langAPI.saveLanguageKeys(lang, generalKeysToAdd, specificKeysToAdd, deleteKeys);
    } catch (DotDataException e) {
      Logger.error(this, e.getMessage());
    }

    try {
      return LanguageUtil.get(UtilMethods.getDefaultCompany().getCompanyId(), UtilMethods.getDefaultCompany().getLocale(), "message.languagemanager.save");
    } catch (LanguageException e) {
      return "message.languagemanager.save";
    }
  }

  public List<Map<String, String>> getLanguages() throws LanguageException, DotRuntimeException, PortalException, SystemException {
    List<Language> languages =  APILocator.getLanguageAPI().getLanguages();
    ArrayList<Map<String, String>> langList = new ArrayList<Map<String, String>> ();
    UserWebAPI uWebAPI = WebAPILocator.getUserWebAPI();
    WebContext ctx = WebContextFactory.get();
    HttpServletRequest request = ctx.getHttpServletRequest();

    for (Language language : languages) {
      Map<String, String> map = new HashMap<String, String>();
      map.put("title", LanguageUtil.get(uWebAPI.getLoggedInUser(request), "Language") );
      map.put("languageCode", language.getLanguageCode());
      map.put("language", language.getLanguage());
      map.put("countryCode", language.getCountryCode());
      map.put("country", language.getCountry());
      map.put("id", Long.toString(language.getId()));
      langList.add(map);
    }

    return langList;

  }
}
TOP

Related Classes of com.dotmarketing.portlets.languagesmanager.ajax.LanguageAjax

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.