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.component.property.OClassViewPanel;
import org.orienteer.core.web.AbstractWidgetDisplayModeAwarePage;
import org.orienteer.core.web.AbstractWidgetPage;
import ru.ydn.wicket.wicketorientdb.model.OPropertyModel;
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.metadata.schema.OProperty;
/**
* Page to show {@link OProperty} specific parameters
*/
@MountPath("/property/${className}/${propertyName}")
@RequiredOrientResource(value=OSecurityHelper.SCHEMA, permissions=OrientPermission.READ)
public class OPropertyPage extends AbstractWidgetDisplayModeAwarePage<OProperty> {
public OPropertyPage() {
super();
}
public OPropertyPage(IModel<OProperty> model) {
super(model);
}
public OPropertyPage(PageParameters parameters) {
super(parameters);
}
@Override
protected IModel<OProperty> resolveByPageParameters(
PageParameters pageParameters) {
String className = pageParameters.get("className").toOptionalString();
String propertyName = pageParameters.get("propertyName").toOptionalString();
return Strings.isEmpty(className) || Strings.isEmpty(propertyName)?null:new OPropertyModel(className, propertyName) ;
}
@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) {
PropertyModel<OClass> oClassModel = new PropertyModel<OClass>(getModel(), "ownerClass");
SchemaPageHeader pageHeader = new SchemaPageHeader(componentId, oClassModel);
pageHeader.addChild(new OClassViewPanel(pageHeader.newChildId(), oClassModel));
pageHeader.addChild(new Label(pageHeader.newChildId(), getTitleModel()));
return pageHeader;
}
@Override
public String getDomain() {
return "property";
}
public static PageParameters preparePageParameters(OProperty oProperty, DisplayMode mode) {
PageParameters ret = new PageParameters();
ret.add("className", oProperty.getOwnerClass().getName());
ret.add("propertyName", oProperty.getName());
if(!DisplayMode.VIEW.equals(mode)) ret.add("mode", mode.getName());
return ret;
}
}