<dataConfig>
    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
   url="jdbc:sqlserver://10.200.37.187:1433;databaseName=iptv_v5_britbox;responseBuffering=adaptive;" user="bbsa" password="et45tw5775@576bsd"/>
	<!--
    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    		url="jdbc:sqlserver://172.16.0.148:1433;databaseName=v50_base_iptv;responseBuffering=adaptive;" user="sa" password="sapassword"/>
			-->
    <document>
        <entity name="PROGRAM" pk="program_id" query="select c.NAME as cp, p.*, pt.name as purchaseTypeName from PROGRAM_CM p left join CONFIG_APP_SERVER c on p.groupId = c.GROUP_ID left join PROGRAM_PURCHASE_TYPE pt on p.purchaseTypeId = pt.id"
               deltaQuery="select id as program_id from CONTENT_PROGRAM p where p.UPDATETIME &gt; dbo.f_formatDatetime2('${dataimporter.last_index_time}', -60)"
               onError="continue">

      <!-- all fields are exposed by the columns of the view -->
			<entity name="PROGRAM_CATEGORY" pk="program_id"
          query="select program_id, CATEGORY_ID, RANK, ENG_DESC, SEO_NAME, case when SHOW = 1 then RANK else null end as episodeNumber,
              catIds, CAST(CATEGORY_ID as varchar(10)) + case when (catIds is null or catIds = '') then '' else ',' + catIds end as catPath
            from (select pc.program_id, pc.CATEGORY_ID, pc.RANK, cat.ENG_DESC, cat.SEO_NAME, cat.SHOW, dbo.f_parentCatIds(cat.id) as catIds from PROGRAM_CATEGORY pc, CATEGORY cat where pc.CATEGORY_ID = cat.id and pc.PROGRAM_ID = ${PROGRAM.program_id}) t"
          transformer="script:pivotCatRanks"
          onError="continue">
				 <field column="CATEGORY_ID" name="catId"/>
				 <field column="CATEGORY_ID" name="catId2"/>
				 <field column="ENG_DESC" name="cat"/>
				 <field column="SEO_NAME" name="catSEOName"/>
				 <field column="catPath" name="catPath"/>
				 <field column="episodeNumber" name="episodeNumber"/> <!-- null values will be ignored -->
				 <entity name="PARENT_CATEGORY" pk="ID" query="select ID, ENG_DESC from CATEGORY cat, (select CAST(TOKEN as int) as cid from dbo.fv_tokenize('${PROGRAM_CATEGORY.catIds}', ',')) s where cat.id = s.cid">
				      <field column="ENG_DESC" name="pcat"/>
				      <field column="ID" name="catId2"/>
				 </entity>
			</entity>

      <entity name="PROGRAM_KEYWORD" pk="program_id"
					query="select pk.keyword as tagsExact, k.KEYWORD as tagsNorm, k.FILTER as filter
						from PROGRAM_KEYWORD pk
						left join (select KEYWORD, FILTER from KEYWORD where GROUP_ID = ${PROGRAM.groupId} and FILTER is not null and PARENT_ID > 0) k
						 	on pk.KEYWORD = k.KEYWORD
						where pk.PROGRAM_ID = ${PROGRAM.program_id}"
					transformer="script:pivotTags"
					onError="continue">
			</entity>

			<!-- cast, move to PROGRAM view -->
			<entity name="PERSON_PROGRAM" pk="program_id"
					query="select pp.PERSON_TYPE as PERSON_TYPE, cp.ENG_DESC as PERSON_NAME from PERSON_PROGRAM pp, CONTENT_PERSON cp where pp.PERSON_ID = cp.ID and PROGRAM_ID = ${PROGRAM.program_id}"
					transformer="script:pivotCast"
					onError="continue">
			</entity>

            <entity name="ASSET_MEDIA" query="select am.filename
				from ASSET_MEDIA am, EPISODE_ASSET_MEDIA eam, EPISODE e where am.media_id = eam.media_id and eam.episode_id = e.id and e.program_id = ${PROGRAM.program_id}"
					onError="continue">
                <field column="FILENAME" name="fileName"/>
            </entity>

			<entity name="DEVICE_CONFIG" query="select p.id,
												case
													when p.PC_SMALLIMG_EN = '' or p.PC_SMALLIMG_EN is null then ''
													when dt.alias = 'pc' then cas.CDN_CONTENT + p.PC_SMALLIMG_EN
													else cas.CDN_CONTENT + REPLACE(p.PC_SMALLIMG_EN, '_es','_'+dt.alias+'_es')
												end as PC_SMALLIMG_EN_PATH,
												case
													when p.PC_BIGIMG_EN = '' or p.PC_BIGIMG_EN is null then ''
													when dt.alias = 'pc' then cas.CDN_CONTENT + p.PC_BIGIMG_EN
													else cas.CDN_CONTENT + REPLACE(p.PC_BIGIMG_EN, '_eb','_'+dt.alias+'_eb')
												end as PC_BIGIMG_EN_PATH,
												dt.alias as type, dc.SMALLIMG_HEIGHT, dc.SMALLIMG_WIDTH, dc.BIGIMG_HEIGHT, dc.BIGIMG_WIDTH
												from content_program p, device_config dc, device_type dt, CONFIG_APP_SERVER cas
												where dc.DEVICE_TYPE = dt.type
												and cas.group_id = p.group_id
												and dc.group_id = p.group_id
												and p.id = ${PROGRAM.program_id}"
					onError="continue">
				<field column="PC_SMALLIMG_EN_PATH" name="ext_SmallImgPath"/>
				<field column="SMALLIMG_HEIGHT" name="ext_SmallImgHeight"/>
				<field column="SMALLIMG_WIDTH" name="ext_SmallImgWidth"/>
				<field column="PC_BIGIMG_EN_PATH" name="ext_BigImgPath"/>
				<field column="BIGIMG_HEIGHT" name="ext_BigImgHeight"/>
				<field column="BIGIMG_WIDTH" name="ext_BigImgWidth"/>
				<field column="type" name="ext_ImgDeviceType"/>
			</entity>

            <entity name="CONTENT_PROGRAM_RES" query="select * from CONTENT_PROGRAM_RES where PROGRAM_ID = ${PROGRAM.program_id}"
					onError="continue" transformer="script:pivotLocale"/>

        </entity>
    </document>

    <script>
	<![CDATA[
    function pivotCatRanks(row)
    {
      var catId = row.get('CATEGORY_ID');
      var rank = row.get('RANK');
      if (catId != null && rank != null)
        row.put('rank_' + catId, rank);
      return row;
    }

		function pivotTags(row)
		{
			var filter = row.get('filter');
			if (filter != null)
				row.put('tags_' + filter, row.get('tagsNorm'));
			return row;
		}

		function pivotCast(row)
		{
			var type = row.get('PERSON_TYPE');
			var value = row.get('PERSON_NAME');
			if (type == 'D') {
				var director = row.get('director');
				if (!director) {
					director = new java.util.ArrayList();
				}
				director.add(value);
				row.put('director', director);
			}
			else if (type == 'A') {
				var actor = row.get('actor');
				if (!actor) {
					actor = new java.util.ArrayList();
				}
				actor.add(value);
				row.put('actor', actor);
			}
			else if (type == 'W') {
				var writer = row.get('writer');
				if (!writer) {
					writer = new java.util.ArrayList();
				}
				writer.add(value);
				row.put('writer', writer);
			}
			else if (type == 'P') {
				var producer = row.get('producer');
				if (!producer) {
					producer = new java.util.ArrayList();
				}
				producer.add(value);
				row.put('producer', producer);
			}
			else if (type == 'E') {
				var editor = row.get('editor');
				if (!editor) {
					editor = new java.util.ArrayList();
				}
				editor.add(value);
				row.put('editor', editor);
			}
			else if (type == 'DS') {
				var distributor = row.get('distributor');
				if (!distributor) {
					distributor = new java.util.ArrayList();
				}
				distributor.add(value);
				row.put('distributor', distributor);
			}
			return row;
		}

		function pivotLocale(row)
   		{
   			var locale = row.get('LOCALE');
   			var name = row.get('NAME');
   			var description = row.get('DESCRIPTION');
   			var longDescription = row.get('LONG_DESCRIPTION');
   			var seoTitleOverride = row.get('SEO_TITLE_OVERRIDE');
   			var seoDescOverride = row.get('SEO_DESC_OVERRIDE');
   			var seoKeywordsOverride = row.get('SEO_KEYWORDS_OVERRIDE');

   			row.put('name_' + locale, name);
   			if (description != null)
   				row.put('description_' + locale, description);
     		if (longDescription != null)
     			row.put('longDescription_' + locale, longDescription);
   			if (seoTitleOverride != null)
   				row.put('seoTitleOverride_' + locale, seoTitleOverride);
   			if (seoDescOverride != null)
   				row.put('seoDescOverride_' + locale, seoDescOverride);
   			if (seoKeywordsOverride != null)
   				row.put('seoKeywordsOverride_' + locale, seoKeywordsOverride);
   			return row;
   		}
	]]>
	</script>
</dataConfig>
