001package org.kuali.ole.docstore.document.rdbms;
002
003import org.kuali.ole.docstore.document.DocumentManager;
004import org.kuali.ole.docstore.model.enums.DocCategory;
005import org.kuali.ole.docstore.model.enums.DocFormat;
006import org.kuali.ole.docstore.model.enums.DocType;
007import org.kuali.ole.docstore.model.xmlpojo.ingest.RequestDocument;
008
009import java.util.HashMap;
010import java.util.Map;
011
012/**
013 * Creates the suitable implementation of DocumentManager for the given document category, type and format.
014 *
015 * @author tirumalesh.b
016 * @version %I%, %G%
017 *          Date: 28/8/12 Time: 12:52 PM
018 */
019public class RdbmsDocumentManagerFactory {
020    private static RdbmsDocumentManagerFactory documentManagerFactory = new RdbmsDocumentManagerFactory();
021    private Map<String, DocumentManager> documentManagerMap = new HashMap<String, DocumentManager>();
022
023    public static RdbmsDocumentManagerFactory getInstance() {
024        return documentManagerFactory;
025    }
026
027    private RdbmsDocumentManagerFactory() {
028        initDocumentManagerMap();
029    }
030
031    private void initDocumentManagerMap() {
032        String key = DocCategory.WORK.getCode() + DocType.BIB.getCode() + DocFormat.MARC.getCode();
033        documentManagerMap.put(key, RdbmsWorkBibMarcDocumentManager.getInstance());
034
035        key = DocCategory.WORK.getCode() + DocType.BIB.getCode() + DocFormat.DUBLIN_CORE.getCode();
036        documentManagerMap.put(key, RdbmsWorkBibDocumentManager.getInstance());
037
038        key = DocCategory.WORK.getCode() + DocType.BIB.getCode() + DocFormat.DUBLIN_UNQUALIFIED.getCode();
039        documentManagerMap.put(key, RdbmsWorkBibDocumentManager.getInstance());
040
041        key = DocCategory.WORK.getCode() + DocType.INSTANCE.getCode() + DocFormat.OLEML.getCode();
042        documentManagerMap.put(key, RdbmsWorkInstanceDocumentManager.getInstance());
043
044        key = DocCategory.WORK.getCode() + DocType.ITEM.getCode() + DocFormat.OLEML.getCode();
045        documentManagerMap.put(key, RdbmsWorkItemDocumentManager.getInstance());
046
047        key = DocCategory.WORK.getCode() + DocType.HOLDINGS.getCode() + DocFormat.OLEML.getCode();
048        documentManagerMap.put(key, RdbmsWorkHoldingsDocumentManager.getInstance());
049
050        key = DocCategory.WORK.getCode() + DocType.EINSTANCE.getCode() + DocFormat.OLEML.getCode();
051        documentManagerMap.put(key, RdbmsWorkEInstanceDocumentManager.getInstance());
052
053        key = DocCategory.WORK.getCode() + DocType.EHOLDINGS.getCode() + DocFormat.OLEML.getCode();
054        documentManagerMap.put(key, RdbmsWorkEHoldingsDocumentManager.getInstance());
055
056    }
057
058    public DocumentManager getDocumentManager(String docCategory, String docType, String docFormat) {
059        return documentManagerMap.get(docCategory + docType + docFormat);
060    }
061
062    public DocumentManager getDocumentManager(RequestDocument requestDocument) {
063        return documentManagerMap
064                .get(requestDocument.getCategory() + requestDocument.getType() + requestDocument.getFormat());
065    }
066}