package com.psddev.cms.tool.search; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import com.psddev.cms.db.Localization; import com.psddev.cms.db.Site; import com.psddev.cms.db.ToolUi; import com.psddev.cms.tool.CmsTool; import com.psddev.cms.tool.Search; import com.psddev.dari.db.Database; import com.psddev.dari.db.ObjectType; import com.psddev.dari.db.Predicate; import com.psddev.dari.db.Query; import com.psddev.dari.util.PaginatedResult; public class GridSearchResultView extends ListSearchResultView { @Override public String getIconName() { return "th-large"; } @Override public String getDisplayName() { return Localization.currentUserText(this, "displayName"); } @Override public boolean isSupported(Search search) { ObjectType selectedType = search.getSelectedType(); if (selectedType != null) { return selectedType.getPreviewField() != null; } else { Set<ObjectType> types = search.getTypes(); if (types.isEmpty()) { return false; } else { for (ObjectType type : types) { if (type.getPreviewField() == null) { return false; } } return true; } } } @Override protected void doWriteHtml() throws IOException { ObjectType selectedType = search.getSelectedType(); sortField = updateSort(); showSiteLabel = Query.from(CmsTool.class).first().isDisplaySiteInSearchResult() && Query.from(Site.class).hasMoreThan(0); if (selectedType != null) { showTypeLabel = selectedType.as(ToolUi.class).findDisplayTypes().size() != 1; if (ObjectType.getInstance(ObjectType.class).equals(selectedType)) { List<ObjectType> types = new ArrayList<ObjectType>(); Predicate predicate = search.toQuery(page.getSite()).getPredicate(); for (ObjectType t : Database.Static.getDefault().getEnvironment().getTypes()) { if (t.is(predicate)) { types.add(t); } } result = new PaginatedResult<ObjectType>(search.getOffset(), search.getLimit(), types); } } else { showTypeLabel = search.findValidTypes().size() != 1; } if (result == null) { result = search.toQuery(page.getSite()).select(search.getOffset(), search.getLimit()); } writeSortsHtml(); page.writeStart("div", "class", "searchResult-list infiniteScroll"); if (result.hasPages()) { writeItemsHtml(result.getItems()); writePaginationHtml(result); } else { writeEmptyHtml(); } page.writeEnd(); } @Override public boolean isPreferred(Search search) { return isSupported(search); } @Override protected void writeItemsHtml(Collection<?> items) throws IOException { writeImagesHtml(items); } }