package org.orienteer.birt;
import java.util.logging.Level;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.core.internal.registry.RegistryProviderFactory;
import org.orienteer.core.OClassDomain;
import org.orienteer.core.OrienteerWebApplication;
import org.orienteer.core.module.AbstractOrienteerModule;
import org.orienteer.core.module.IOrienteerModule;
import org.orienteer.core.module.OWidgetsModule;
import org.orienteer.core.util.OSchemaHelper;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
import org.orienteer.birt.component.widget.AbstractBirtWidget;
import org.orienteer.birt.component.widget.BrowseBirtWidget;
import org.orienteer.birt.component.widget.ODocumentBirtWidget;
//import org.orienteer.birt.orientdb.*;
/**
* {@link IOrienteerModule} for 'orienteer-birt' module
*/
public class Module extends AbstractOrienteerModule{
public static final String LOGS_PATH = System.getProperty("java.io.tmpdir")+"/birt_logs";
public static final String MODULE_NAME = "orienteer-birt";
private IReportEngine engine;
protected Module() {
super(MODULE_NAME, 1,OWidgetsModule.NAME);
}
@Override
public ODocument onInstall(OrienteerWebApplication app, ODatabaseDocument db) {
super.onInstall(app, db);
//Install data model
makeSchema(db);
//Return null of default OModule is enough
return null;
}
@Override
public void onUpdate(OrienteerWebApplication app, ODatabaseDocument db, int oldVersion, int newVersion) {
makeSchema(db);
super.onUpdate(app, db, oldVersion, newVersion);
}
private void makeSchema(ODatabaseDocument db){
OSchemaHelper helper = OSchemaHelper.bind(db);
helper.oClass(AbstractBirtWidget.OCLASS_NAME, OWidgetsModule.OCLASS_WIDGET).domain(OClassDomain.SYSTEM)
.oProperty(AbstractBirtWidget.REPORT_FIELD_NAME, OType.BINARY, 100)
.oProperty(AbstractBirtWidget.PARAMETERS_FIELD_NAME, OType.EMBEDDEDMAP, 110).linkedType(OType.STRING)
.oProperty(AbstractBirtWidget.USE_LOCAL_BASE_FIELD_NAME, OType.BOOLEAN, 120)
.oProperty(AbstractBirtWidget.VISIBLE_PARAMETERS_FIELD_NAME, OType.EMBEDDEDSET, 130).linkedType(OType.STRING);
helper.oClass(BrowseBirtWidget.OCLASS_NAME, AbstractBirtWidget.OCLASS_NAME).domain(OClassDomain.SYSTEM);
helper.oClass(ODocumentBirtWidget.OCLASS_NAME, AbstractBirtWidget.OCLASS_NAME).domain(OClassDomain.SYSTEM);
}
@Override
public void onInitialize(OrienteerWebApplication app, ODatabaseDocument db) {
super.onInitialize(app, db);
app.mountPages("org.orienteer.birt.web");
app.registerWidgets("org.orienteer.birt.component.widget");
try{
//Connection.setUserData(new OUserDataProxy());//remarked by "useLocalDB" settings parameter
final EngineConfig config = new EngineConfig( );
config.setLogConfig(LOGS_PATH, Level.FINE);
//config.setFontConfig("c:/temp/fontsConfig.xml");
Platform.startup( config );
//If using RE API in Eclipse/RCP application this is not needed.
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
engine.changeLogLevel( Level.WARNING );
}catch( Exception ex){
ex.printStackTrace();
}
}
@Override
public void onDestroy(OrienteerWebApplication app, ODatabaseDocument db) {
super.onDestroy(app, db);
app.unmountPages("org.orienteer.birt.web");
app.unregisterWidgets("org.orienteer.birt.component.widget");
try
{
engine.destroy();
Platform.shutdown();
RegistryProviderFactory.releaseDefault();
}catch ( Exception e1 ){
e1.printStackTrace();
// Ignore
}
}
public IReportEngine getEngine() {
return engine;
}
}