package org.orienteer.pages.module;
import com.google.inject.Singleton;
import org.orienteer.core.OrienteerWebApplication;
import org.orienteer.core.module.AbstractOrienteerModule;
import org.orienteer.core.util.OSchemaHelper;
import org.orienteer.pages.PagesCompoundRequestMapper;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* {@link AbstractOrienteerModule} to provide extentions for Orienteer Pages
*/
@Singleton
public class PagesModule extends AbstractOrienteerModule {
public static final String NAME = "pages";
public static final String OCLASS_PAGE="OPage";
public static final String OPROPERTY_TITLE="title";
public static final String OPROPERTY_DESCRIPTION="description";
public static final String OPROPERTY_CONTENT="content";
public static final String OPROPERTY_SCRIPT="script";
public static final String OPROPERTY_PATH="path";
public static final String OPROPERTY_EMBEDDED="embedded";
public static final String OPROPERTY_DOCUMENT="document";
private PagesCompoundRequestMapper pagesCompoundRequestMapper;
protected PagesModule() {
super(NAME, 1);
}
@Override
public ODocument onInstall(OrienteerWebApplication app, ODatabaseDocument db) {
onUpdate(app, db, 0, getVersion());
return null;
}
@Override
public void onUpdate(OrienteerWebApplication app, ODatabaseDocument db,
int oldVersion, int newVersion) {
if(oldVersion>=newVersion) return;
switch (oldVersion+1)
{
case 1:
onUpdateToFirstVesion(app, db);
break;
default:
break;
}
if(oldVersion+1<newVersion) onUpdate(app, db, oldVersion + 1, newVersion);
}
public void onUpdateToFirstVesion(OrienteerWebApplication app, ODatabaseDocument db)
{
OSchemaHelper helper = OSchemaHelper.bind(db);
helper.oClass(OCLASS_PAGE)
.oProperty(OPROPERTY_TITLE, OType.STRING, 0).markAsDocumentName()
.oProperty(OPROPERTY_PATH, OType.STRING, 10)
.oProperty(OPROPERTY_DESCRIPTION, OType.STRING, 20).assignVisualization("textarea")
.oProperty(OPROPERTY_CONTENT, OType.STRING, 30).assignVisualization("textarea")
.oProperty(OPROPERTY_SCRIPT, OType.STRING, 40).assignVisualization("textarea")
.oProperty(OPROPERTY_EMBEDDED, OType.BOOLEAN, 50)
.oProperty(OPROPERTY_DOCUMENT, OType.LINK, 60);
}
@Override
public void onInitialize(OrienteerWebApplication app, ODatabaseDocument db) {
super.onInitialize(app, db);
app.registerWidgets("org.orienteer.pages.component.widget");
app.mount(pagesCompoundRequestMapper = new PagesCompoundRequestMapper());
app.getOrientDbSettings().getORecordHooks().add(PagesHook.class);
}
@Override
public void onDestroy(OrienteerWebApplication app, ODatabaseDocument db) {
app.unregisterWidgets("org.orienteer.pages.component.widget");
app.getRootRequestMapperAsCompound().remove(pagesCompoundRequestMapper);
app.getOrientDbSettings().getORecordHooks().remove(PagesHook.class);
}
public PagesCompoundRequestMapper getPagesCompoundRequestMapper() {
return pagesCompoundRequestMapper;
}
}