package com.psddev.cms.tool.page;
import java.io.IOException;
import javax.servlet.ServletException;
import com.psddev.cms.db.RichTextReference;
import com.psddev.cms.db.ToolUi;
import com.psddev.cms.tool.PageServlet;
import com.psddev.cms.tool.Search;
import com.psddev.cms.tool.SearchResultRenderer;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.Database;
import com.psddev.dari.db.ObjectType;
import com.psddev.dari.db.Reference;
import com.psddev.dari.db.State;
import com.psddev.dari.util.ObjectUtils;
import com.psddev.dari.util.RoutingFilter;
@RoutingFilter.Path(application = "cms", value = "enhancementSearchResult")
public class EnhancementSearchResult extends PageServlet {
private static final long serialVersionUID = 1L;
@Override
protected String getPermissionId() {
return null;
}
@Override
protected void doService(ToolPageContext page) throws IOException, ServletException {
Search search = new Search(page);
SearchResultRenderer resultRenderer = new SearchResultRenderer(page, search) {
@Override
public void renderBeforeItem(Object item) throws IOException {
Reference enhancement = null;
State state = State.getInstance(item);
ObjectType refType = null;
Class<? extends Reference> referenceClass = state.getType().as(ToolUi.class).getReferenceableViaClass();
if (referenceClass != null) {
refType = Database.Static.getDefault().getEnvironment().getTypeByClass(referenceClass);
}
if (refType != null) {
Object refObject = refType.createObject(null);
if (refObject instanceof Reference) {
enhancement = (Reference) refObject;
}
}
if (enhancement == null) {
enhancement = new Reference();
}
RichTextReference rt = enhancement.as(RichTextReference.class);
enhancement.setObject(item);
rt.setLabel(state.getLabel());
rt.setPreview(page.getPreviewThumbnailUrl(item));
page.writeStart("a",
"data-enhancement", ObjectUtils.toJson(enhancement.getState().getSimpleValues()),
"href", "#");
}
@Override
public void renderAfterItem(Object item) throws IOException {
page.writeEnd();
}
};
resultRenderer.render();
}
}