Package com.dotmarketing.portlets.containers.ajax

Source Code of com.dotmarketing.portlets.containers.ajax.ContainerAjax$ContainerComparator

package com.dotmarketing.portlets.containers.ajax;

import static com.dotmarketing.business.PermissionAPI.PERMISSION_WRITE;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.dotcms.repackage.org.apache.chemistry.cmissql.CmisSqlParser.boolean_factor_return;
import com.dotcms.repackage.org.directwebremoting.WebContextFactory;

import com.dotmarketing.beans.ContainerStructure;
import com.dotmarketing.beans.Host;
import com.dotmarketing.beans.Identifier;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.PermissionAPI;
import com.dotmarketing.business.web.UserWebAPI;
import com.dotmarketing.business.web.WebAPILocator;
import com.dotmarketing.cache.StructureCache;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotRuntimeException;
import com.dotmarketing.exception.DotSecurityException;
import com.dotmarketing.factories.InodeFactory;
import com.dotmarketing.portlets.containers.business.ContainerAPI;
import com.dotmarketing.portlets.containers.model.Container;
import com.dotmarketing.portlets.contentlet.business.HostAPI;
import com.dotmarketing.portlets.structure.model.Structure;
import com.dotmarketing.portlets.templates.business.TemplateAPI;
import com.dotmarketing.portlets.templates.model.Template;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.RegEX;
import com.dotmarketing.util.UtilMethods;
import com.liferay.portal.PortalException;
import com.liferay.portal.SystemException;
import com.liferay.portal.language.LanguageUtil;
import com.liferay.portal.model.User;

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


/**
* @author David
*/
public class ContainerAjax {

  UserWebAPI userWebAPI;
  ContainerAPI containerAPI;
  HostAPI hostAPI;

  public ContainerAjax () {
    containerAPI = APILocator.getContainerAPI();
    userWebAPI = WebAPILocator.getUserWebAPI();
    hostAPI = APILocator.getHostAPI();
  }

  public Map<String, Object> fetchContainers (Map<String, String> query, Map<String, String> queryOptions, int start, int count,
      List<String> sort) throws PortalException, SystemException, DotDataException, DotSecurityException {
    HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
    User user = userWebAPI.getLoggedInUser(req);
    boolean respectFrontendRoles = userWebAPI.isLoggedToFrontend(req);

    List<Container> fullListContainers = new ArrayList<Container>();
    try{
      if(UtilMethods.isSet(query.get("hostId"))) {
        Host host = hostAPI.find(query.get("hostId"), user, respectFrontendRoles);
        fullListContainers = containerAPI.findContainersUnder(host);
      } else {
        fullListContainers = containerAPI.findAllContainers(user, respectFrontendRoles);
      }
    }catch (DotDataException e) {
      Logger.error(this, e.getMessage(), e);
      throw new DotDataException(e.getMessage(), e);
    }
    String baseHostId = (String) req.getSession().getAttribute(com.dotmarketing.util.WebKeys.CMS_SELECTED_HOST_ID);
    Collections.sort(fullListContainers, new ContainerComparator(baseHostId));
    Map<String, Object> results = new HashMap<String, Object>();
    List<Map<String, Object>> list = new LinkedList<Map<String, Object>> ();

    for(Container cont : fullListContainers) {
      if(cont != null && !cont.isArchived()){
        Map<String, Object> contMap = cont.getMap();
        if(passFilter(contMap, query)) {
          Host parentHost = containerAPI.getParentHost(cont, user, respectFrontendRoles);
          if(parentHost != null) {
            contMap.put("hostName", parentHost.getHostname());
            contMap.put("hostId", parentHost.getIdentifier());
            contMap.put("fullTitle", parentHost.getHostname() + ": " + contMap.get("title"));
          } else {
            contMap.put("fullTitle", contMap.get("title"));
          }

          list.add(contMap);
        }
      }
    }

    if(start >= list.size()) start =  list.size() - 1;
    if(start < 0start  = 0;
    if(start + count >= list.size()) count = list.size() - start;
    List<Map<String, Object>> containers = list.subList(start, start + count);

    results.put("totalResults", list.size());
    results.put("list", containers);

    return results;
  }

  class ContainerComparator implements Comparator<Container> {

    private String baseHostId;

    public ContainerComparator(String baseHostId) {
      this.baseHostId = baseHostId;
    }

    public int compare(Container o1, Container o2) {
      try {
        Identifier id1 = APILocator.getIdentifierAPI().find(o1.getIdentifier());
        if(id1.getHostId() == null) id1 = null;
        Identifier id2 = APILocator.getIdentifierAPI().find(o2.getIdentifier());
        if(id2.getHostId() == null) id2 = null;
        if(id1 != null && id2 != null && id1.getHostId().equals(baseHostId) && id2.getHostId().equals(baseHostId)) {
          return o1.getTitle().compareTo(o2.getTitle());
        }
        if(id1 != null && id1.getHostId().equals(baseHostId)) {
          return -1;
        }
        if(id2 != null && id2.getHostId().equals(baseHostId)) {
          return 1;
        }
        return id1 == null || id2 == null || id1.getHostId().equals(id2.getHostId())?o1.getTitle().compareTo(o2.getTitle()):id1.getHostId().compareTo(id2.getHostId());

      } catch (DotDataException e) {

      }
      return 0;
    }

  }

  protected boolean passFilter(Map<String, Object> item, Map<String, String> query) {
    for(String key : item.keySet()) {
      if(query.containsKey(key)) {
        String filter = query.get(key);
        filter = "^" + filter.replaceAll("\\*", ".*");
        filter = filter.replaceAll("\\?", ".?");
        String value = item.get(key).toString();
        if(!RegEX.contains(value.toLowerCase(), filter.toLowerCase()))
          return false;
      }
    }
    return true;
  }

  public List<Map<String, String>> getContainerStructures(String containerInode) throws Exception{
    Container cont = (Container) InodeFactory.getInode(containerInode, Container.class);

    List<Map<String,String>> resultList = new ArrayList<Map<String,String>>();
    List<ContainerStructure> csList;

    try {
      csList = APILocator.getContainerAPI().getContainerStructures(cont);

      for (ContainerStructure cs : csList) {
        Map<String, String> result = new HashMap<String, String>();
        Structure st = StructureCache.getStructureByInode(cs.getStructureId());
        result.put("inode", cs.getStructureId());
        result.put("name", st.getName());
        resultList.add(result);
      }

    } catch (Exception e) {
      Logger.error(getClass(), e.getMessage());
      throw e;
    }

    return resultList;
  }
 
  public List<Map<String, String>> getContainerStructuresForUser(String containerInode) throws Exception{
    Container cont = (Container) InodeFactory.getInode(containerInode, Container.class);

    List<Map<String,String>> resultList = new ArrayList<Map<String,String>>();
    List<ContainerStructure> csList;

    HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
    User user = userWebAPI.getLoggedInUser(req);
    PermissionAPI permissionAPI = APILocator.getPermissionAPI();


    try {
      csList = APILocator.getContainerAPI().getContainerStructures(cont);

      for (ContainerStructure cs : csList) {
        Map<String, String> result = new HashMap<String, String>();
        Structure st = StructureCache.getStructureByInode(cs.getStructureId());
        if(permissionAPI.doesUserHavePermission(st, PERMISSION_WRITE, user)){
          result.put("inode", cs.getStructureId());
          result.put("name", st.getName());
          resultList.add(result);
        }
      }

    } catch (Exception e) {
      Logger.error(getClass(), e.getMessage());
      throw e;
    }

    return resultList;
  }

  public String checkDependencies(String containerInode) throws DotDataException, DotRuntimeException, DotSecurityException, PortalException, SystemException{
    HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
    User user = userWebAPI.getLoggedInUser(req);
    boolean respectFrontendRoles = userWebAPI.isLoggedToFrontend(req);
    String[] inodesArray = containerInode.split(",");
    String result= null;
    for(String contInode : inodesArray){
      Container cont = (Container) InodeFactory.getInode(contInode, Container.class);
      TemplateAPI templateAPI = APILocator.getTemplateAPI();
      List<Template> templates = templateAPI.findTemplates(user, true, null, null, null, null, null, 0, -1, null);
      result = checkTemplatesUsedByContainer(templates,cont,user, respectFrontendRoles);     
      if(result.length()>0){
        StringBuilder dialogMessage=new StringBuilder();
        dialogMessage.append(LanguageUtil.get(user,"container-used-templates")).append("<br> <br>");
        dialogMessage.append(LanguageUtil.get(user,"Container") + " : ").append(cont.getTitle()).append("<br>");
        dialogMessage.append(LanguageUtil.get(user,"templates") + " : ").append(result);
        return dialogMessage.length()>0?dialogMessage.toString():null;
      }
       
    }

    return result.length()>0?result.toString():null;

  }
 
  private String checkTemplatesUsedByContainer(List<Template> templates,Container cont, User user,boolean respectFrontendRoles ) throws DotSecurityException,  DotDataException {
    TemplateAPI templateAPI = APILocator.getTemplateAPI();
    StringBuilder names=new StringBuilder();
    String result = null;
    for (Template template : templates) {
      List<Container> containers = templateAPI.getContainersInTemplate(template, user, respectFrontendRoles);
      if(containers.contains(cont)) {
        names.append(template.getTitle()).append("</br> ");
      }
    }
    result = names.toString();
    return result;
  }
 
 
}
TOP

Related Classes of com.dotmarketing.portlets.containers.ajax.ContainerAjax$ContainerComparator

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.