libreccm-legacy/ccm-docmgr/src-2/com/arsdigita/docmgr/installer/Initializer.java

217 lines
7.3 KiB
Java
Executable File

/*
* Copyright (C) 2001, 2002 Red Hat Inc. All Rights Reserved.
*
* The contents of this file are subject to the CCM Public
* License (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of
* the License at http://www.redhat.com/licenses/ccmpl.html
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
*/
package com.arsdigita.docmgr.installer;
import org.apache.log4j.Logger;
import com.arsdigita.db.DbHelper;
import com.arsdigita.docmgr.Constants;
import com.arsdigita.docmgr.DocBlobject;
import com.arsdigita.docmgr.File;
import com.arsdigita.docmgr.Folder;
import com.arsdigita.docmgr.Repository;
import com.arsdigita.docmgr.ResourceImpl;
import com.arsdigita.docmgr.ui.RecentUpdatedDocsPortlet;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.domain.DomainObjectInstantiator;
import com.arsdigita.kernel.ACSObjectInstantiator;
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.PortletType;
import com.arsdigita.portal.apportlet.AppPortletSetup;
import com.arsdigita.runtime.CompoundInitializer;
import com.arsdigita.runtime.DomainInitEvent;
import com.arsdigita.runtime.PDLInitializer;
import com.arsdigita.runtime.RuntimeConfig;
import com.arsdigita.web.ApplicationSetup;
import com.arsdigita.web.ApplicationType;
/**
* Initializes the document manager package, sets up the
* DomainFactory, registers knowledge types and portlets.
*
* @author Stefan Deusch
* @author David Dao
*
* @version $Revision: #7 $ $Date: 2003/07/10 $
*/
//public class Initializer implements com.arsdigita.initializer.Initializer {
public class Initializer extends CompoundInitializer {
public Initializer() {
final String url = RuntimeConfig.getConfig().getJDBCURL();
final int database = DbHelper.getDatabaseFromURL(url);
add(new PDLInitializer
(new ManifestSource
("ccm-docmgr.pdl.mf",
new NameFilter(DbHelper.getDatabaseSuffix(database), "pdl"))));
}
// private Configuration m_conf = new Configuration();
// private static final String SEPARATOR = java.io.File.separator;
private static String PACKAGE_TYPE_NAME = "docs";
private static Logger s_log =
Logger.getLogger(Initializer.class);
public void init(DomainInitEvent e) {
s_log.warn("Document Manager is initializing using .init(DomainInitEvent e)");
setupDomainFactory();
TransactionContext txn = SessionManager.getSession()
.getTransactionContext();
txn.beginTxn();
ApplicationType docsAppType = setupDocs();
setupDocManagerPortlet(docsAppType);
txn.commitTxn();
s_log.info("Document Manager Initializer completed.");
}
// public Initializer() { }
// /**
// * Returns the configuration object used by this initializer.
// */
// public Configuration getConfiguration() {
// return m_conf;
// }
// /**
// * Called on startup.
// */
// public void startup() {
// s_log.warn("Document Manager is initializing.");
// setupDomainFactory();
// TransactionContext txn = SessionManager.getSession()
// .getTransactionContext();
// txn.beginTxn();
// ApplicationType docsAppType = setupDocs();
// setupDocManagerPortlet(docsAppType);
// txn.commitTxn();
// s_log.info("Document Manager Initializer completed.");
// }
/**
* Set up the document manager. Checks to see if the necessary
* package exists, and if not it creates it for the first time.
*/
private ApplicationType setupDocs() {
ApplicationSetup setup = new ApplicationSetup(s_log);
setup.setApplicationObjectType(Repository.BASE_DATA_OBJECT_TYPE);
setup.setKey(PACKAGE_TYPE_NAME);
setup.setTitle("Document Manager Application");
setup.setSingleton(true);
setup.setDescription
("The document manager empowers users to share documents.");
setup.setDispatcherClass("com.arsdigita.docmgr.ui.DMDispatcher");
setup.setStylesheet("/packages/docmgr/xsl/docs.xsl");
setup.setInstantiator(new ACSObjectInstantiator() {
public DomainObject doNewInstance(DataObject dataObject) {
return new Repository(dataObject);
}
});
return setup.run();
}
private void setupDocManagerPortlet(ApplicationType provider) {
// Create the document manager portlet
AppPortletSetup setup = new AppPortletSetup(s_log);
setup.setPortletObjectType(RecentUpdatedDocsPortlet.BASE_DATA_OBJECT_TYPE);
setup.setTitle("Recently Updated Documents");
setup.setDescription("Displays the most recent documents in the document manager.");
setup.setProfile(PortletType.WIDE_PROFILE);
setup.setProviderApplicationType(provider);
setup.setInstantiator(new ACSObjectInstantiator() {
protected DomainObject doNewInstance(DataObject dataObject) {
return new RecentUpdatedDocsPortlet(dataObject);
}
});
setup.run();
}
/**
* Set up domain object factories for basic document manager
* object types.
*/
private void setupDomainFactory() {
DomainObjectFactory.registerInstantiator
(ResourceImpl.BASE_DATA_OBJECT_TYPE,
new ACSObjectInstantiator() {
public DomainObject doNewInstance(DataObject obj) {
Boolean isFolder = (Boolean) obj.get(Constants.IS_FOLDER);
if (isFolder != null && isFolder.booleanValue()) {
return new Folder(obj);
} else {
return new File(obj);
}
}
});
// File
DomainObjectFactory.registerInstantiator(
File.BASE_DATA_OBJECT_TYPE, new ACSObjectInstantiator() {
public DomainObject doNewInstance(DataObject dataObject) {
return new File(dataObject);
}
}
);
// Folder
DomainObjectFactory.registerInstantiator(
Folder.BASE_DATA_OBJECT_TYPE, new ACSObjectInstantiator() {
public DomainObject doNewInstance(DataObject dataObject) {
return new Folder(dataObject);
}
}
);
DomainObjectFactory.registerInstantiator(
DocBlobject.BASE_DATA_OBJECT_TYPE, new DomainObjectInstantiator() {
public DomainObject doNewInstance(DataObject dataObject) {
return new DocBlobject(dataObject);
}
}
);
}
// /**
// * Shutdown the document manager.
// */
// public void shutdown() { }
}