using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Sleis.Controllers; using Sleis.Models; using Sleis.ViewModels; using Sleis.Utility; namespace Sleis.Service { public class ServiceFactory { public IFacilityService PublicFacilityService { get; set; } public IFacilityService AgencyFacilityService { get; set; } public IReportService AgencyReportService { get; set; } public IReportService PublicReportService { get; set; } public IReleasePointService AgencyReleasePointService { get; set; } public IReleasePointService PublicReleasePointService { get; set; } public IReportAttachmentService AgencyReportAttachmentService { get; set; } public IReportAttachmentService PublicReportAttachmentService { get; set; } public IEmissionUnitService PublicEmissionUnitService { get; set; } public IEmissionUnitService AgencyEmissionUnitService { get; set; } public IControlDeviceService PublicControlDeviceService { get; set; } public IControlDeviceService AgencyControlDeviceService { get; set; } public IUnitProcessService PublicUnitProcessService { get; set; } public IUnitProcessService AgencyUnitProcessService { get; set; } public IProcessEmissionService PublicProcessEmissionService { get; set; } public IProcessEmissionService AgencyProcessEmissionService { get; set; } public IUserService UserService { get; set; } //TODO: Abstract out to use Interface. public DocumentService AgencyDocumentService { get; set; } public DocumentService PublicDocumentService { get; set; } private bool _IsAgency () { UserModel user = SessionUtility.CurrentUser; //try to restore if (user == null) { SessionUtility.RestoreUserSession(UserService); user = SessionUtility.CurrentUser; } //check again if (user != null) { return user.IsAgencyUser(); } return false; } public ServiceFactory() { } public IFacilityService CreateFacilityService() { if (_IsAgency()) { return AgencyFacilityService; } return PublicFacilityService; } public IReportService CreateReportService() { if (_IsAgency()) { return AgencyReportService; } return PublicReportService; } public IReleasePointService CreateReleasePointService() { if (_IsAgency()) { return AgencyReleasePointService; } return PublicReleasePointService; } public IReportAttachmentService CreateReportAttachmentService() { if (_IsAgency()) { return AgencyReportAttachmentService; } return PublicReportAttachmentService; } public IEmissionUnitService CreateEmissionUnitService() { if (_IsAgency()) { return AgencyEmissionUnitService; } return PublicEmissionUnitService; } public IControlDeviceService CreateControlDeviceService() { if (_IsAgency()) { return AgencyControlDeviceService; } return PublicControlDeviceService; } public IUnitProcessService CreateUnitProcessService() { if (_IsAgency()) { return AgencyUnitProcessService; } return PublicUnitProcessService; } public IProcessEmissionService CreateProcessEmissionService() { if (_IsAgency()) { return AgencyProcessEmissionService; } return PublicProcessEmissionService; } public DocumentService CreateDocumentService() { if (_IsAgency()) { return AgencyDocumentService; } return PublicDocumentService; } } }