package org.orienteer.core.web; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.string.Strings; import org.orienteer.core.MountPath; import org.orienteer.core.component.property.DisplayMode; import org.orienteer.core.module.OWidgetsModule; import org.orienteer.core.web.schema.OClassPage; import org.orienteer.core.widget.ByOClassWidgetFilter; import org.orienteer.core.widget.DashboardPanel; import org.orienteer.core.widget.IWidgetFilter; import org.orienteer.core.widget.IWidgetType; import ru.ydn.wicket.wicketorientdb.model.OClassModel; import ru.ydn.wicket.wicketorientdb.model.OClassNamingModel; import ru.ydn.wicket.wicketorientdb.security.ISecuredComponent; import ru.ydn.wicket.wicketorientdb.security.OSecurityHelper; import ru.ydn.wicket.wicketorientdb.security.OrientPermission; import ru.ydn.wicket.wicketorientdb.security.RequiredOrientResource; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.record.impl.ODocument; /** * Page to browse all documents for a specific {@link OClass} */ @MountPath("/browse/${className}") public class BrowseOClassPage extends AbstractWidgetPage<OClass> implements ISecuredComponent { public BrowseOClassPage(String className) { this(new OClassModel(className)); } public BrowseOClassPage(IModel<OClass> model) { super(model); } public BrowseOClassPage(PageParameters parameters) { super(parameters); } @Override protected IModel<OClass> resolveByPageParameters( PageParameters pageParameters) { return new OClassModel(pageParameters.get("className").toOptionalString()); } @Override public void initialize() { if(getModelObject()==null) throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND); setWidgetsFilter(new ByOClassWidgetFilter<OClass>() { @Override public OClass getOClass() { return BrowseOClassPage.this.getModelObject(); } }); super.initialize(); } @Override protected DashboardPanel<OClass> newDashboard(String id, String domain, String tab, IModel<OClass> model, IWidgetFilter<OClass> filter) { return new DashboardPanel<OClass>(id, domain, tab, model, filter) { @Override protected ODocument lookupDashboardDocument(String domain, String tab, IModel<OClass> model) { return dashboardManager.getExistingDashboard(domain, tab, model, model.getObject()); } @Override public ODocument storeDashboard() { ODocument doc = super.storeDashboard(); doc.field(OWidgetsModule.OPROPERTY_CLASS, getModelObject().getName()); doc.save(); return doc; } }; } @Override public String getDomain() { return "browse"; } @Override public IModel<String> getTitleModel() { return new StringResourceModel("class.browse.title", new OClassNamingModel(getModel())); } @Override public RequiredOrientResource[] getRequiredResources() { return OSecurityHelper.requireOClass(getModelObject(), OrientPermission.READ); } public static PageParameters preparePageParameters(OClass oClass, DisplayMode mode) { return OClassPage.preparePageParameters(oClass, mode); } }