program-item-factory.ts 2.25 KB
import {ProgramItem, PROGRAM_ITEM_TYPE_SLIDESHOW, PROGRAM_ITEM_TYPE_VIDEO } from './program-item';
import { ProgramRepository } from './../program-repository';

export class ProgramItemFactory {

    protected _programRepository:ProgramRepository;
    protected _basePath:string;

    set basePath(bp:string) {
        this._basePath = bp;
    }
    
    get basePath() : string {
        return this._basePath;
    }

    set programRepository(pr:ProgramRepository) {
        this._programRepository = pr;
    }

    get programRepository() : ProgramRepository {
        return this._programRepository;
    }

    getProgramItem(programItemId:string) : Promise<ProgramItem> {
         return this.programRepository
            .findById(programItemId)
            .then((programItem) => {
                return this.prepareProgramItem(programItem.program_item_type, programItem);
            });
    }

    prepareProgramItem(type:string, data:any) : Promise<ProgramItem> {
        let programItem = new ProgramItem();
        programItem.type = type;

        if (type === PROGRAM_ITEM_TYPE_VIDEO) {
            return this.prepareVideoItem(programItem, data);
        } else if (type === PROGRAM_ITEM_TYPE_SLIDESHOW) {
            return this.prepareSlideshowItem(programItem, data);
        } else {
            return null;
        }
    } 

    prepareSlideshowItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {
        return this._programRepository.findByIds(data.images)
            .then(images => {            
                programItem.data = {
                    speed  : data.settings.speed ,
                    effect : data.settings.effect ,
                    images : []
                }; 

                for (let image of images) {
                    programItem.data.images.push(this.basePath + image.filename);
                }

                return programItem;
            });
    }

    prepareVideoItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {
        return this._programRepository.findById(data.video)
            .then((data) => {                
                programItem.data = {
                    video : this.basePath + data['filename']
                }; 
                return programItem;
            });
    }

}