93d705167133be92410f2bd35beb23f553b59289
[mediacube.git] /
1 package hu.user.mediacube.executors.tests;\r
2 \r
3 import java.nio.file.Files;\r
4 import java.nio.file.Paths;\r
5 import java.sql.Connection;\r
6 import java.sql.PreparedStatement;\r
7 import java.sql.ResultSet;\r
8 import java.sql.SQLException;\r
9 import java.util.List;\r
10 \r
11 import org.junit.AfterClass;\r
12 import org.junit.BeforeClass;\r
13 import org.junit.Test;\r
14 \r
15 import sqlj.runtime.ref.DefaultContext;\r
16 import user.commons.StoreUri;\r
17 import user.commons.remotestore.RemoteStoreProtocol;\r
18 import user.jobengine.db.IItemManager;\r
19 import user.jobengine.db.IResultSetConsumer;\r
20 import user.jobengine.db.IStatementDecorator;\r
21 import user.jobengine.db.Item;\r
22 import user.jobengine.db.ItemManager;\r
23 import user.jobengine.db.MediaFile;\r
24 import user.jobengine.db.Store;\r
25 import user.jobengine.server.steps.MetadataTypeDetector;\r
26 import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
27 import user.jobengine.server.steps.PlanAirExtensions;\r
28 \r
29 public class SupportCleanMissingTSM {\r
30         class PlanAirProcessor implements IStatementDecorator, IResultSetConsumer {\r
31 \r
32                 private final MetadataType type;\r
33                 private String search;\r
34                 private String itemHouseId;\r
35                 private String itemTitle;\r
36 \r
37                 public PlanAirProcessor(String search) {\r
38                         this.search = MetadataTypeDetector.truncateExtension(search);\r
39                         this.type = MetadataTypeDetector.GuessMetadataType(this.search);\r
40                         this.search = this.search.substring(1, this.search.length() - 1);\r
41                 }\r
42 \r
43                 @Override\r
44                 public void decorate(PreparedStatement statement) throws SQLException {\r
45                         statement.setString(1, search);\r
46                 }\r
47 \r
48                 public String getItemHouseId() {\r
49                         return itemHouseId;\r
50                 }\r
51 \r
52                 public String getItemTitle() {\r
53                         return itemTitle;\r
54                 }\r
55 \r
56                 public MetadataType getType() {\r
57                         return type;\r
58                 }\r
59 \r
60                 public Connection process(Connection connection) throws Exception {\r
61                         return PlanAirExtensions.search(connection, type, manager, "jdbc:sqlserver://10.10.1.45;databaseName=PA_Echo;", "MAM", "Echotv.hu", this, this);\r
62                 }\r
63 \r
64                 @Override\r
65                 public boolean process(ResultSet resultSet) throws SQLException {\r
66                         switch (type) {\r
67                         case TrafficMaterial:\r
68                                 itemHouseId = resultSet.getString("v_ProgrammeID");\r
69                                 itemTitle = resultSet.getString("v_ProgTitle");\r
70                                 break;\r
71                         default:\r
72                                 throw new SQLException("Not implemented!");\r
73                         }\r
74                         return true;\r
75                 }\r
76 \r
77         }\r
78 \r
79         protected static IItemManager manager = null;\r
80         private static final String LOWRES_ROOT = "//10.10.1.27/mclowres/www/video";\r
81 \r
82         private static final long[] duplicateLength = { 0 };\r
83 \r
84         @BeforeClass\r
85         static public void setUpConnection() {\r
86                 System.setProperty("jobengine.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
87                 System.setProperty("jobengine.db.user", "db2admin");\r
88                 System.setProperty("jobengine.db.password", "password");\r
89                 manager = new ItemManager();\r
90                 manager.connect();\r
91         }\r
92 \r
93         @AfterClass\r
94         static public void tearDownConnection() {\r
95                 manager.disconnect();\r
96         }\r
97 \r
98         public void executeUpdate(Connection connection, String query, IResultSetConsumer consumer, IStatementDecorator decorator) {\r
99                 PreparedStatement st = null;\r
100                 try {\r
101                         st = connection.prepareStatement(query);\r
102                         if (decorator != null)\r
103                                 decorator.decorate(st);\r
104                         int i = st.executeUpdate();\r
105                         connection.commit();\r
106                 } catch (Exception e) {\r
107                         try {\r
108                                 connection.rollback();\r
109                         } catch (Exception e1) {\r
110                         }\r
111                 } finally {\r
112                         try {\r
113                                 if (st != null)\r
114                                         st.close();\r
115                         } catch (Exception e1) {\r
116                         }\r
117                 }\r
118         }\r
119 \r
120         public void importTSM() throws SQLException {\r
121                 final Connection[] con = { null };\r
122                 String sql = "INSERt INTO TSM (NAME) VALUES (?)";\r
123 \r
124                 DefaultContext context = manager.getDbContext();\r
125                 Connection connection = context.getConnection();\r
126                 try {\r
127                         List<String> lines = Files.readAllLines(Paths.get("/Temp/save.out"));\r
128                         for (String line : lines) {\r
129                                 final String name = line.trim();\r
130                                 executeUpdate(connection, sql, null, st -> {\r
131                                         st.setString(1, name);\r
132                                 });\r
133                         }\r
134                 } catch (Exception e) {\r
135                 } finally {\r
136                         manager.putDbContext(context);\r
137                 }\r
138 \r
139         }\r
140 \r
141         @Test\r
142         public void process() throws SQLException {\r
143                 Store store = manager.getSystemStore(false);\r
144                 final StoreUri storeUri = store.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
145                 final Connection[] con = { null };\r
146                 String sql = "select distinct(i.id) from mediafile mf left outer join tsm t on(mf.RELATIVEPATH=t.name) "\r
147                                 + "left outer join media m on(mf.mediaid=m.id) " + "left outer join item i on(m.itemid=i.id) " + "where mf.FILETYPEID=1 and t.name is null";\r
148 \r
149                 DefaultContext context = manager.getDbContext();\r
150                 Connection connection = context.getConnection();\r
151                 try {\r
152                         manager.executeQuery(connection, sql, rs -> {\r
153                                 long itemid = rs.getLong("id");\r
154                                 Item item = manager.getItem(itemid);\r
155 \r
156                                 try {\r
157                                         MediaFile mf = item.getMedias().get(0).getMediaFiles().get(0);\r
158                                         System.out.println("Delete " + mf.getRelativePath());\r
159                                         manager.remove(item);\r
160                                 } catch (Exception e) {\r
161                                         System.out.println(e.getMessage());\r
162                                 }\r
163                                 return true;\r
164                         }, null);\r
165                 } catch (Exception e) {\r
166                 } finally {\r
167                         manager.putDbContext(context);\r
168                         storeUri.cleanUp();\r
169                 }\r
170 \r
171         }\r
172 \r
173 }\r