/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.content.factory; import org.dspace.content.DSpaceObject; import org.dspace.content.InProgressSubmission; import org.dspace.content.WorkspaceItem; import org.dspace.content.service.*; import org.dspace.services.factory.DSpaceServicesFactory; import org.dspace.workflow.factory.WorkflowServiceFactory; import java.util.List; /** * Abstract factory to get services for the content package, use ContentServiceFactory.getInstance() to retrieve an implementation * * @author kevinvandevelde at atmire.com */ public abstract class ContentServiceFactory { public abstract List<DSpaceObjectService<? extends DSpaceObject>> getDSpaceObjectServices(); public abstract List<DSpaceObjectLegacySupportService<? extends DSpaceObject>> getDSpaceObjectLegacySupportServices(); public abstract BitstreamFormatService getBitstreamFormatService(); public abstract BitstreamService getBitstreamService(); public abstract BundleService getBundleService(); public abstract CollectionService getCollectionService(); public abstract CommunityService getCommunityService(); public abstract ItemService getItemService(); public abstract MetadataFieldService getMetadataFieldService(); public abstract MetadataSchemaService getMetadataSchemaService(); public abstract MetadataValueService getMetadataValueService(); public abstract WorkspaceItemService getWorkspaceItemService(); public abstract InstallItemService getInstallItemService(); public abstract SupervisedItemService getSupervisedItemService(); public abstract SiteService getSiteService(); public InProgressSubmissionService getInProgressSubmissionService(InProgressSubmission inProgressSubmission) { if(inProgressSubmission instanceof WorkspaceItem) { return getWorkspaceItemService(); } else { return WorkflowServiceFactory.getInstance().getWorkflowItemService(); } } public<T extends DSpaceObject> DSpaceObjectService<T> getDSpaceObjectService(T dso) { // No need to worry when supressing, as long as our "getDSpaceObjectManager" method is properly implemented // no casting issues should occur @SuppressWarnings("unchecked") DSpaceObjectService<T> manager = getDSpaceObjectService(dso.getType()); return manager; } public DSpaceObjectService getDSpaceObjectService(int type) { for (int i = 0; i < getDSpaceObjectServices().size(); i++) { DSpaceObjectService objectService = getDSpaceObjectServices().get(i); if(objectService.getSupportsTypeConstant() == type) { return objectService; } } throw new UnsupportedOperationException("Unknown DSpace type: " + type); } public DSpaceObjectLegacySupportService<? extends DSpaceObject> getDSpaceLegacyObjectService(int type) { for (int i = 0; i < getDSpaceObjectLegacySupportServices().size(); i++) { DSpaceObjectLegacySupportService<? extends DSpaceObject> objectLegacySupportService = getDSpaceObjectLegacySupportServices().get(i); if(objectLegacySupportService.getSupportsTypeConstant() == type) { return objectLegacySupportService; } } throw new UnsupportedOperationException("Unknown DSpace type: " + type); } public static ContentServiceFactory getInstance(){ return DSpaceServicesFactory.getInstance().getServiceManager().getServiceByName("contentServiceFactory", ContentServiceFactory.class); } }