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.ListIterator;
import java.util.Set;
import com.psddev.cms.db.Localization;
import com.psddev.cms.tool.Search;
import com.psddev.cms.tool.Tool;
import com.psddev.dari.db.ObjectType;
import com.psddev.dari.db.Query;
import com.psddev.dari.db.State;
import com.psddev.dari.util.StorageItem;
public class MixedSearchResultView extends ListSearchResultView {
@Override
public String getIconName() {
return "asterisk";
}
@Override
public String getDisplayName() {
return Localization.currentUserText(this, "displayName");
}
@Override
public boolean isSupported(Search search) {
if (search.getSelectedType() != null) {
return false;
} else {
Set<ObjectType> types = search.getTypes();
if (types.isEmpty()) {
return true;
} else {
for (ObjectType type : search.getTypes()) {
if (type.getPreviewField() == null) {
return true;
}
}
return false;
}
}
}
@Override
public boolean isPreferred(Search search) {
return true;
}
@Override
protected void writeItemsHtml(Collection<?> items) throws IOException {
List<Object> tableItems = new ArrayList<>(items);
List<Object> imageItems = new ArrayList<>();
ITEM: for (ListIterator<Object> i = tableItems.listIterator(); i.hasNext();) {
Object item = i.next();
for (Tool tool : Query.from(Tool.class).selectAll()) {
if (!tool.isDisplaySearchResultItem(search, item)) {
continue ITEM;
}
}
State itemState = State.getInstance(item);
StorageItem preview = itemState.getPreview();
if (preview != null) {
String contentType = preview.getContentType();
if (contentType != null && contentType.startsWith("image/")) {
i.remove();
imageItems.add(item);
}
}
}
page.writeStart("div", "class", "searchResult-mixed");
if (!imageItems.isEmpty()) {
writeImagesHtml(imageItems);
}
if (!tableItems.isEmpty()) {
writeTableHtml(tableItems);
}
page.writeEnd();
}
}