libreccm-legacy/ccm-weblog/src/org/undp/weblog/Initializer.java

122 lines
3.9 KiB
Java
Executable File

package org.undp.weblog;
import org.apache.log4j.Logger;
import org.undp.weblog.ui.WebLogPortlet;
import com.arsdigita.db.DbHelper;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.domain.DomainObjectInstantiator;
import com.arsdigita.initializer.InitializationException;
import com.arsdigita.kernel.ACSObjectInstantiator;
import com.arsdigita.kernel.PackageType;
// import com.arsdigita.kernel.Stylesheet;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.persistence.TransactionContext;
import com.arsdigita.persistence.pdl.ManifestSource;
import com.arsdigita.persistence.pdl.NameFilter;
import com.arsdigita.portal.apportlet.AppPortletType;
import com.arsdigita.runtime.CompoundInitializer;
import com.arsdigita.runtime.DomainInitEvent;
import com.arsdigita.runtime.PDLInitializer;
import com.arsdigita.runtime.RuntimeConfig;
import com.arsdigita.web.ApplicationType;
/**
* @author Peter Kopunec
*/
public class Initializer extends CompoundInitializer {
private static final Logger s_log = Logger.getLogger(Initializer.class);
public Initializer() throws InitializationException {
final String url = RuntimeConfig.getConfig().getJDBCURL();
final int database = DbHelper.getDatabaseFromURL(url);
add(new PDLInitializer(new ManifestSource("ccm-weblog.pdl.mf",
new NameFilter(DbHelper.getDatabaseSuffix(database), "pdl"))));
}
public void init(DomainInitEvent e) {
s_log.info("WebLog Initializer starting.");
boolean isMyTransaction = false;
TransactionContext txn = SessionManager.getSession()
.getTransactionContext();
if (!txn.inTxn()) {
txn.beginTxn();
isMyTransaction = true;
}
// register application
DomainObjectInstantiator instantiator = new ACSObjectInstantiator() {
protected DomainObject doNewInstance(DataObject dataObject) {
return new WebLogApplication(dataObject);
}
};
DomainObjectFactory.registerInstantiator(
WebLogApplication.BASE_DATA_OBJECT_TYPE, instantiator);
checkSetup();
// Register the portlets
instantiator = new ACSObjectInstantiator() {
protected DomainObject doNewInstance(DataObject dataObject) {
return new WebLogPortlet(dataObject);
}
};
DomainObjectFactory.registerInstantiator(
WebLogPortlet.BASE_DATA_OBJECT_TYPE, instantiator);
if (isMyTransaction) {
txn.commitTxn();
}
s_log.debug("WebLog Initializer done.");
}
private void checkSetup() {
try {
s_log.debug("WebLog Initializer - verifying setup.");
PackageType entityType = PackageType.findByKey("weblog");
} catch (DataObjectNotFoundException e) {
setup();
}
}
private void setup() {
s_log.info("WebLog Initializer - setting up new package");
PackageType entityType = PackageType.create("weblog", "WebLog",
"WebLogs", "http://www.undp.org/weblog");
s_log.debug("Just added package type WebLog ");
// Old style StylesheetResolver where location of stylesheets are stored
// in db and as well as mappings to applications.
// New style is pattern based, see cpom.arsdigita.templating
// Stylesheet entitySheet = Stylesheet
// .createStylesheet("/packages/weblog/xsl/weblog.xsl");
// entityType.addStylesheet(entitySheet);
entityType.setDispatcherClass(WebLogDispatcher.class.getName());
entityType.save();
final ApplicationType entityAppType = ApplicationType
.createApplicationType(entityType, "WebLog Application",
WebLogApplication.BASE_DATA_OBJECT_TYPE);
entityAppType.save();
// portlet
AppPortletType portletType = AppPortletType.createAppPortletType(
"WebLog Portlet", AppPortletType.WIDE_PROFILE,
WebLogPortlet.BASE_DATA_OBJECT_TYPE);
portletType.setProviderApplicationType(entityAppType);
portletType.setPortalApplication(true);
portletType.save();
}
}