package org.orienteer.core.web.schema;
import javax.servlet.http.HttpServletResponse;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
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.SchemaPageHeader;
import org.orienteer.core.component.property.DisplayMode;
import org.orienteer.core.web.AbstractWidgetDisplayModeAwarePage;
import org.orienteer.core.web.BrowseOClassPage;
import org.orienteer.core.widget.ByOClassWidgetFilter;
import ru.ydn.wicket.wicketorientdb.model.OClassModel;
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;
/**
* Page to show {@link OClass} specific things: class parameters, properties, indexes and etc.
*/
@MountPath("/class/${className}/#{mode}")
@RequiredOrientResource(value=OSecurityHelper.SCHEMA, permissions=OrientPermission.READ)
public class OClassPage extends AbstractWidgetDisplayModeAwarePage<OClass> {
public OClassPage(IModel<OClass> model) {
super(model);
}
public OClassPage(PageParameters parameters) {
super(parameters);
DisplayMode mode = DisplayMode.parse(parameters.get("mode").toOptionalString());
if(mode!=null) setModeObject(mode);
}
@Override
public void initialize() {
if(getModelObject()==null) throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND);
setWidgetsFilter(new ByOClassWidgetFilter<OClass>() {
@Override
public OClass getOClass() {
return OClassPage.this.getModelObject();
}
});
super.initialize();
selectTab("configuration");
}
@Override
protected IModel<OClass> resolveByPageParameters(
PageParameters pageParameters) {
String className = pageParameters.get("className").toOptionalString();
return Strings.isEmpty(className)?null:new OClassModel(className);
}
@Override
protected void onConfigure() {
super.onConfigure();
if(getModelObject()==null) throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND);
}
@Override
public IModel<String> getTitleModel() {
return new PropertyModel<String>(getModel(), "name");
}
@Override
protected Component newPageHeaderComponent(String componentId) {
SchemaPageHeader pageHeader = new SchemaPageHeader(componentId, getModel());
pageHeader.addChild(new Label(pageHeader.newChildId(), getTitleModel()));
return pageHeader;
}
@Override
public String getDomain() {
return "class";
}
public static PageParameters preparePageParameters(OClass oClass, DisplayMode mode) {
PageParameters ret = new PageParameters();
ret.add("className", oClass.getName());
if(!DisplayMode.VIEW.equals(mode)) ret.add("mode", mode.getName());
return ret;
}
}