08492587c046a86bf5a4d58b9e2e11e3b6343919
[mediacube.git] /
1 package hu.user.mediacube.executors.tests;\r
2 \r
3 import java.sql.Connection;\r
4 import java.sql.PreparedStatement;\r
5 import java.sql.ResultSet;\r
6 import java.sql.SQLException;\r
7 \r
8 import org.junit.AfterClass;\r
9 import org.junit.BeforeClass;\r
10 import org.junit.Test;\r
11 \r
12 import user.commons.logging.LogUtils;\r
13 import user.jobengine.db.IItemManager;\r
14 import user.jobengine.db.IResultSetConsumer;\r
15 import user.jobengine.db.IStatementDecorator;\r
16 import user.jobengine.db.Item;\r
17 import user.jobengine.db.ItemManager;\r
18 import user.jobengine.db.Media;\r
19 import user.jobengine.server.steps.MetadataTypeDetector;\r
20 import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
21 import user.jobengine.server.steps.PlanAirExtensions;\r
22 \r
23 public class SupportCheckItem {\r
24         class PlanAirProcessor implements IStatementDecorator, IResultSetConsumer {\r
25 \r
26                 private final MetadataType type;\r
27                 private String search;\r
28                 private String itemHouseId;\r
29                 private String itemTitle;\r
30 \r
31                 public PlanAirProcessor(String search) {\r
32                         this.search = MetadataTypeDetector.truncateExtension(search);\r
33                         this.type = MetadataTypeDetector.GuessMetadataType(this.search);\r
34                         this.search = this.search.substring(1, this.search.length() - 1);\r
35                 }\r
36 \r
37                 @Override\r
38                 public void decorate(PreparedStatement statement) throws SQLException {\r
39                         statement.setString(1, search);\r
40                 }\r
41 \r
42                 public String getItemHouseId() {\r
43                         return itemHouseId;\r
44                 }\r
45 \r
46                 public String getItemTitle() {\r
47                         return itemTitle;\r
48                 }\r
49 \r
50                 public MetadataType getType() {\r
51                         return type;\r
52                 }\r
53 \r
54                 public Connection process(Connection connection) throws Exception {\r
55                         return PlanAirExtensions.search(connection, type, manager, "jdbc:sqlserver://10.10.1.45;databaseName=PA_Echo;", "MAM", "Echotv.hu", this, this);\r
56                 }\r
57 \r
58                 @Override\r
59                 public boolean process(ResultSet resultSet) throws SQLException {\r
60                         switch (type) {\r
61                         case TrafficMaterial:\r
62                                 itemHouseId = resultSet.getString("v_ProgrammeID");\r
63                                 itemTitle = resultSet.getString("v_ProgTitle");\r
64                                 break;\r
65                         default:\r
66                                 throw new SQLException("Not implemented!");\r
67                         }\r
68                         return true;\r
69                 }\r
70 \r
71         }\r
72 \r
73         protected static IItemManager manager = null;\r
74         private static final String LOWRES_ROOT = "//10.10.1.27/mclowres/www/video";\r
75 \r
76         private static final long[] duplicateLength = { 0 };\r
77 \r
78         @BeforeClass\r
79         static public void setUpConnection() {\r
80                 //              System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns");\r
81                 //              System.setProperty("jobengine.octopus.stories.name", "test_stories");\r
82                 //              System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders");\r
83                 System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620");\r
84                 System.setProperty("jobengine.octopus.stories.name", "stories180620");\r
85                 System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620");\r
86 \r
87                 System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
88                 System.setProperty("jobengine.nosql.db.user", "db2admin");\r
89                 System.setProperty("jobengine.nosql.db.password", "password");\r
90                 System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
91                 System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
92                 System.setProperty(ItemManager.DBPASSWORD, "password");\r
93                 System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
94                 // System.setProperty(ItemManager.DBURL,\r
95 \r
96                 manager = new ItemManager();\r
97                 manager.connect();\r
98         }\r
99 \r
100         @AfterClass\r
101         static public void tearDownConnection() {\r
102                 manager.disconnect();\r
103         }\r
104 \r
105         private void createItem(final Connection[] con, ResultSet rs, int progress) throws Exception {\r
106                 long itemId = rs.getLong("itemId");\r
107                 String itemHouseId = rs.getString("itemHouseId");\r
108                 itemHouseId = itemHouseId == null ? "" : itemHouseId;\r
109                 String itemTitle = rs.getString("itemTitle");\r
110                 itemTitle = itemTitle == null ? "" : itemTitle;\r
111                 String mediaFileHouseId = rs.getString("mediaFileHouseId");\r
112                 String mediaType = rs.getString("mediaType");\r
113                 long mediaId = rs.getLong("mediaId");\r
114                 long mediaFileId = rs.getLong("mediaFileId");\r
115                 try {\r
116                         if (mediaFileHouseId.length() > 7)\r
117                                 mediaFileHouseId = mediaFileHouseId.substring(0, 8);\r
118 \r
119                         PlanAirProcessor p = new PlanAirProcessor(mediaFileHouseId);\r
120                         if (p.getType() == MetadataType.TrafficMaterial) {\r
121                                 con[0] = p.process(con[0]);\r
122                                 String itemHouseId2 = p.getItemHouseId() == null ? "" : p.getItemHouseId();\r
123                                 String itemTitle2 = p.getItemTitle() == null ? "" : p.getItemTitle();\r
124                                 if (!itemHouseId2.equals(itemHouseId) || !itemTitle2.equals(itemTitle)) {\r
125                                         Item item = manager.getItem(itemId);\r
126                                         System.out.println(itemId + " : wrong | " + rs.getString("mediaFileHouseId") + ", " + itemHouseId + ", " + itemTitle + ", " + mediaType);\r
127                                         System.out.println("\t good | " + itemHouseId2 + ", " + itemTitle2 + ", " + progress + "%");\r
128                                         item.setId(0);\r
129                                         item.setTitle(itemTitle2);\r
130                                         item.setHouseId(itemHouseId2);\r
131                                         manager.add(item);\r
132 \r
133                                         Media media = manager.getMedia(mediaId);\r
134                                         media.setItemId(item.getId());\r
135                                         manager.modify(media);\r
136                                         //item.setMedias(null);\r
137 \r
138                                         updateMediaDescription(itemId, mediaId, mediaFileId);\r
139 \r
140                                         //delete from MEDIADESCRIPTION where MEDIAID=364228;\r
141 \r
142                                 }\r
143 \r
144                         }\r
145                 } catch (Exception e) {\r
146                         e.printStackTrace();\r
147                 }\r
148         }\r
149 \r
150         @Test\r
151         public void process() throws SQLException {\r
152                 final Connection[] con = { null };\r
153                 final int[] count = { 0 };\r
154                 final int[] processed = { 0 };\r
155                 String sqlb = "select %s from vw_items where (mediatype = 'ECHO műsor' or mediatype = 'Műsor')"; // and mediaFileHouseId like '%%M109138A%%'\r
156                 String sqlc = String.format(sqlb, "count(*)");\r
157                 String sql = String.format(sqlb + "  order by mediacreated desc", "itemid, itemhouseid, itemtitle, mediaid, mediafilehouseid, mediafileid, mediatype");\r
158 \r
159                 manager.executeQuery(sqlc, rs -> {\r
160                         count[0] = rs.getInt(1);\r
161                         return true;\r
162                 }, null);\r
163                 manager.executeQuery(sql, rs -> {\r
164                         processed[0]++;\r
165                         int progress = (processed[0] * 100) / count[0];\r
166 \r
167                         try {\r
168                                 createItem(con, rs, progress);\r
169                         } catch (Exception e) {\r
170                                 return false;\r
171                         }\r
172 \r
173                         processed[0]++;\r
174                         return true;\r
175                 }, null);\r
176 \r
177                 if (con[0] != null)\r
178                         con[0].close();\r
179         }\r
180 \r
181         private void updateMediaDescription(long itemId, long mediaId, long mediaFileId) {\r
182                 // TODO Auto-generated method stub\r
183                 manager.executeUpdate(String.format("delete from MEDIADESCRIPTION where ITEMID=%d and MEDIAID=%d", itemId, mediaId), null);\r
184                 String sql = String.format("insert into mediadescription (itemid, mediaid, mediafileid, description) "\r
185                                 + "select itemid, mediaid, mediafileid, fulldesc(itemid, mediaid, mediafileid) from vw_items " + "where mediafileid=%d", mediaFileId);\r
186                 manager.executeUpdate(sql, null);\r
187 \r
188         }\r
189 \r
190 }\r