git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 29 Mar 2018 22:24:26 +0000 (22:24 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 29 Mar 2018 22:24:26 +0000 (22:24 +0000)
23 files changed:
server/-configuration/mediacube-auth.properties
server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java
server/user.jobengine.osgi.db/sql/update-itemtypes.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/test/user/jobengine/db/IResultSetConsumer.java [new file with mode: 0644]
server/user.jobengine.osgi.db/test/user/jobengine/db/IStatementDecorator.java [new file with mode: 0644]
server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java
server/user.jobengine.osgi.server/css/archivum.css
server/user.jobengine.osgi.server/img/ic_search_black_24dp_1x.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/ic_shopping_cart_black_24dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/index.zul
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/pages/menu.zul
server/user.jobengine.osgi.server/pages/retrievebatchselector.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/searchitems.zul
server/user.jobengine.osgi.server/resources/i3-label_hu.properties
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/util/SessionUtil.java

index 1e0709423720ec013b338001b4475a39c0a9208c..c70327431321461a348e26852ee9caccbacb1055 100644 (file)
@@ -5,5 +5,5 @@ ad_nonsecureport=3268
 ad_base_dn=DC=intra,DC=echotv,DC=hu\r
 ad_admin_map=G_ECH_U_INFORMATIKUSOK,G_ECH_U_MUSZAKVEZETOK,ECH-ISILON-ADMINS\r
 local_users=user:password;kuka:kuka\r
-local_admins=root:password\r
+local_admins=root:password:vasary@elgekko.net\r
 local_jobsubmitters=lebony:lebony
\ No newline at end of file
index e3ded320e469dff571a59e5754d1b78ef5f47907..da99265b2b84ddb4b69f7492c073d005bd72fc09 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Archivált anyag visszatöltése">\r
+<jobtemplate name="Archivált anyag visszatöltése" multiInstance="true">\r
        <declarations>\r
                <parameters>\r
                        <parameter name="trafficOutputPath" type="java.lang.String" />\r
index 5f7eedbb36de8cca9fefb7107dd685f6fe7c4716..35bba94f9dda808d47d4e1ae4108eeba7f4477fd 100644 (file)
@@ -45,7 +45,7 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
        private static final String LONGNAMEID = "longnameid";\r
        private static final String ARCHIVEDRUNDOWNS = "archivedrundowns";\r
        private static final String ID = "id";\r
-       private static final String MEDIATYPE = "Octopus bejátszó";\r
+       private static final String MEDIATYPE = "Hír bejátszó";\r
        private OctopusAPI octopusAPI;\r
        private IItemManager manager;\r
 \r
index 3c71a2a416cb4538f6b7327f0eac0946d50b24c6..043a098ad3f90eb31a4867a2fb719244be81c05a 100644 (file)
@@ -8,6 +8,7 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.List;\r
+import java.util.TimeZone;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.commons.net.ftp.FTP;\r
@@ -176,7 +177,11 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
                        logger.warn(systemMarker, "A '{}' fájl neve nem időbélyeggel kezdődik, ezért nem archiválható.", clipName);\r
                        return null;\r
                }\r
-               return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime();\r
+               Calendar dateCal = CalendarUtils.createCalendar(recordDate);\r
+               dateCal.setTimeZone(TimeZone.getTimeZone("Europe/Budapest"));\r
+               Calendar wholeCal = CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart);\r
+               wholeCal.setTimeZone(TimeZone.getTimeZone("Europe/Budapest"));\r
+               return wholeCal.getTime();\r
        }\r
 \r
        private String getTargetFileName(RundownArchive rundownArchive, String sourceFileName) {\r
@@ -208,10 +213,10 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
                        return null;\r
                }\r
 \r
-               if (clipName.startsWith("1900")) {\r
-                       Calendar cal = CalendarUtils.createCalendar(scheduledStart);\r
-                       cal.add(Calendar.MINUTE, 5);\r
-                       rundown = octopusAPI.getRundown(cal.getTime());\r
+               if (clipName.startsWith("1900_")) {\r
+                       String clipNameNext = clipName.replace("1900_", "1905_");\r
+                       scheduledStart = getScheduledStart(clipNameNext, recordDate);\r
+                       rundown = octopusAPI.getRundown(scheduledStart);\r
                        if (rundown == null) {\r
                                logger.error(systemMarker, "A '{}' anyaghoz nem található tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart);\r
                                return null;\r
index 4856bf15eac5db9a0f4a19d1af3072b18a91ffd2..ce863149302827dfc262015b5fdcc473640bcf55 100644 (file)
@@ -189,17 +189,22 @@ public class ImportStatisticsStep extends JobStep {
                        if (mosObjects == null || mosObjects.isEmpty())\r
                                continue;\r
 \r
+                       boolean foundAnyClip = false;\r
                        for (BasicDBObject mosObject : mosObjects) {\r
                                String clipName = NoSQLUtils.asString(mosObject, IOctopusAPI.OBJ_ID);\r
                                if (clipName != null && clipName.length() > 0) {\r
                                        BasicDBObject clip = (BasicDBObject) clipCollection.findOne(new BasicDBObject(LONGNAMEID, clipName));\r
                                        if (clip != null) {\r
                                                long duration = NoSQLUtils.asLong(clip, DURATION);\r
-                                               if (duration > 0)\r
+                                               if (duration > 0) {\r
                                                        mosObject.put("duration", duration);\r
+                                                       foundAnyClip = true;\r
+                                               }\r
                                        }\r
                                }\r
                        }\r
+                       if (!foundAnyClip)\r
+                               continue;\r
 \r
                        List<BasicDBObject> rdList = NoSQLUtils.asList(story, IOctopusAPI.REF_RUNDOWN);\r
                        story.put(IOctopusAPI.REF_RUNDOWN, rdList == null ? 0 : rdList.size());\r
@@ -226,20 +231,26 @@ public class ImportStatisticsStep extends JobStep {
        }\r
 \r
        private void store(Calendar scheduledDate, List<BasicDBObject> stories, BasicDBObject typeStat, BasicDBObject planStat, BasicDBObject reporterStat) {\r
-               BasicDBObject dailyHistory = new BasicDBObject();\r
-               dailyHistory.put("dateTime", scheduledDate.getTime());\r
-               BasicDBList list = new BasicDBList();\r
-               dailyHistory.put("rawData", list);\r
-               for (BasicDBObject story : stories) {\r
-                       list.add(story);\r
-               }\r
-               dailyHistory.put("typeStat", typeStat);\r
-               dailyHistory.put("planStat", planStat);\r
-               dailyHistory.put("reporterStat", reporterStat);\r
+               try {\r
+                       BasicDBObject dailyHistory = new BasicDBObject();\r
+                       dailyHistory.put("dateTime", scheduledDate.getTime());\r
+                       BasicDBList list = new BasicDBList();\r
+                       dailyHistory.put("rawData", list);\r
+                       for (BasicDBObject story : stories) {\r
+                               list.add(story);\r
+                       }\r
+                       dailyHistory.put("typeStat", typeStat);\r
+                       dailyHistory.put("planStat", planStat);\r
+                       dailyHistory.put("reporterStat", reporterStat);\r
+\r
+                       DBCollection collection = db.getCollection("daily_news_history");\r
+                       collection.remove(new BasicDBObject("dateTime", scheduledDate.getTime()));\r
+                       collection.save(dailyHistory);\r
 \r
-               DBCollection collection = db.getCollection("daily_news_history");\r
-               collection.remove(new BasicDBObject("dateTime", scheduledDate.getTime()));\r
-               collection.save(dailyHistory);\r
+               } catch (Exception e) {\r
+                       logger.error(e);\r
+                       throw e;\r
+               }\r
        }\r
 \r
        private void storeStories(Calendar scheduledDate, Map<Long, BasicDBObject> stories) {\r
@@ -254,6 +265,9 @@ public class ImportStatisticsStep extends JobStep {
                        List<BasicDBObject> mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS);\r
                        for (BasicDBObject mos : mosObjects) {\r
                                String objId = NoSQLUtils.asString(mos, IOctopusAPI.OBJ_ID);\r
+                               if (!mos.containsKey("duration"))\r
+                                       continue;\r
+\r
                                long parentStoryId = NoSQLUtils.asLong(story, IOctopusAPI.PARENT_STORY_ID);\r
                                String key = String.format("%d-%s", parentStoryId, objId);\r
                                if (processed.contains(key))\r
@@ -261,6 +275,12 @@ public class ImportStatisticsStep extends JobStep {
                                processed.add(key);\r
 \r
                                String label = NoSQLUtils.asString(mos, IOctopusAPI.LABEL);\r
+                               if (label == null) {\r
+                                       logger.error(marker, "Az anyag MOS objektuma nem tartalmaz formátum meghatározást, feldolgozása nem lehetséges. Részletek:");\r
+                                       logger.error(marker, "STORY: {}", story.toString());\r
+                                       logger.error(marker, "MOS: {}", mos.toString());\r
+                                       continue;\r
+                               }\r
                                long duration = NoSQLUtils.asLong(mos, "duration");\r
                                long rdCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_RUNDOWN);\r
                                long sfCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_STORYFOLDER);\r
diff --git a/server/user.jobengine.osgi.db/sql/update-itemtypes.sql b/server/user.jobengine.osgi.db/sql/update-itemtypes.sql
new file mode 100644 (file)
index 0000000..c93fe78
--- /dev/null
@@ -0,0 +1,7 @@
+select * from itemtype\r
+insert into itemtype (name, description, isstatic) values('Hír bejátszó','Hír bejátszó','N') \r
+\r
+update media set itemtypeid=(select id from itemtype where name='Visszarögzített') where ID in (select mediaid from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%')\r
+update media set itemtypeid=(select id from itemtype where name='Hír bejátszó') where ID in (select mediaid from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%')\r
+\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/IResultSetConsumer.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/IResultSetConsumer.java
new file mode 100644 (file)
index 0000000..36d6fe5
--- /dev/null
@@ -0,0 +1,10 @@
+package user.jobengine.db;\r
+\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+\r
+public interface IResultSetConsumer {\r
+\r
+       void process(ResultSet resultSet) throws SQLException;\r
+\r
+}\r
diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/IStatementDecorator.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/IStatementDecorator.java
new file mode 100644 (file)
index 0000000..91fb7ef
--- /dev/null
@@ -0,0 +1,10 @@
+package user.jobengine.db;\r
+\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+\r
+public interface IStatementDecorator {\r
+\r
+       void decorate(PreparedStatement statement) throws SQLException;\r
+\r
+}\r
index 2fc515ff12ca2531edb40aac3f5e13b22cd6f6c9..e9bb73502b4c7c92b951ad4390c6c01e55833613 100644 (file)
@@ -1,5 +1,6 @@
 package user.jobengine.db;\r
 \r
+import java.io.File;\r
 import java.nio.charset.Charset;\r
 import java.nio.file.Files;\r
 import java.nio.file.Path;\r
@@ -42,6 +43,10 @@ public class Support_new {
 \r
        protected static IItemManager manager = null;\r
 \r
+       private static final String LOWRES_ROOT = "//10.10.1.27/mclowres/www/video";\r
+\r
+       private static final long[] duplicateLength = { 0 };\r
+\r
        @BeforeClass\r
        static public void setUpConnection() {\r
                System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
@@ -103,6 +108,41 @@ public class Support_new {
 \r
        }\r
 \r
+       private void executeQuery(String query, IResultSetConsumer consumer, IStatementDecorator decorator) {\r
+               ResultSet rs = null;\r
+               PreparedStatement st = null;\r
+               DefaultContext context = ((ItemManager) manager).getDbContext();\r
+               Connection connection = context.getConnection();\r
+               try {\r
+                       st = connection.prepareStatement(query);\r
+                       if (decorator != null)\r
+                               decorator.decorate(st);\r
+                       rs = st.executeQuery();\r
+                       while (rs.next()) {\r
+                               consumer.process(rs);\r
+                       }\r
+\r
+                       connection.commit();\r
+               } catch (Exception e) {\r
+                       try {\r
+                               connection.rollback();\r
+                       } catch (Exception e1) {\r
+                       }\r
+               } finally {\r
+                       try {\r
+                               if (rs != null)\r
+                                       rs.close();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       try {\r
+                               if (st != null)\r
+                                       st.close();\r
+                       } catch (Exception e1) {\r
+                       }\r
+                       ((ItemManager) manager).putDbContext(context);\r
+               }\r
+       }\r
+\r
        @Test\r
        public void generateMissingRecordingsList() throws Exception {\r
                //              select itemtitle, mediafilehouseid from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' order by itemtitle, mediafilehouseid\r
@@ -129,7 +169,10 @@ public class Support_new {
                        lines.add(key + ";" + recordings.get(key) + ";");\r
                        System.out.println(key + "\t" + recordings.get(key));\r
                }\r
-               Files.write(Paths.get("c:\\temp\\recordings.csv"), lines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
+               Path out = Paths.get("c:\\temp\\recordings.csv");\r
+               if (Files.exists(out))\r
+                       Files.delete(out);\r
+               Files.write(out, lines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
 \r
        }\r
 \r
@@ -188,6 +231,47 @@ public class Support_new {
                return result;\r
        }\r
 \r
+       private void processLowresDuplicateGroup(String fileName) {\r
+               System.out.println("*** Processing: " + fileName);\r
+               String query = "select mediafileid, mediafilehouseid, relativepath from vw_items_rd_lh where filename = ?";\r
+               IStatementDecorator decorator = st -> {\r
+                       st.setString(1, fileName);\r
+               };\r
+\r
+               MediaFile[] masterMediaFile = { null };\r
+\r
+               IResultSetConsumer consumer = rs -> {\r
+                       long mediaFileId = rs.getLong("mediafileid");\r
+                       MediaFile mediaFile = (MediaFile) manager.get(MediaFile.class, mediaFileId);\r
+                       String mediaFileHouseId = rs.getString("mediafilehouseid");\r
+                       if (masterMediaFile[0] == null) {\r
+                               masterMediaFile[0] = mediaFile;\r
+                               System.out.println("Skipping: " + mediaFileHouseId);\r
+                               return;\r
+                       }\r
+\r
+                       String path = rs.getString("relativepath");\r
+                       //                      System.out.println("Inspecting: " + path + " filename " + fileName + " mediaFileHouseId " + mediaFileHouseId);\r
+\r
+                       File file = Paths.get(LOWRES_ROOT, path).toFile();\r
+                       duplicateLength[0] += file.length();\r
+                       System.out.println("Inspecting: " + mediaFileHouseId + " now available " + duplicateLength[0]);\r
+\r
+               };\r
+               executeQuery(query, consumer, decorator);\r
+       }\r
+\r
+       @Test\r
+       public void processLowresDuplicates() {\r
+               String query = "select filename from vw_items_rd_dup order by filecount";\r
+               IResultSetConsumer consumer = rs -> {\r
+                       String fileName = rs.getString("filename");\r
+                       processLowresDuplicateGroup(fileName);\r
+               };\r
+               executeQuery(query, consumer, null);\r
+               System.out.println("Available will " + duplicateLength[0]);\r
+       }\r
+\r
        private List<String> query(Connection con) throws Exception {\r
                List<String> result = new ArrayList<>();\r
 \r
index 05bd90b8dcc52504b5ba3cc4e832ae767b9a1262..695d890599606a4922148e368204f0bf7c9e2371 100644 (file)
@@ -82,7 +82,7 @@ body *:not([class*="z-icon-"]) {
 }\r
 \r
  .listbox-odd-style{\r
-       background: #ebebeb;\r
+       background: white;\r
  }\r
  \r
 .attributedeflistbox .z-listcell-content {\r
@@ -120,7 +120,7 @@ body *:not([class*="z-icon-"]) {
 }\r
 \r
 .z-row .z-row-inner, .z-row .z-cell {\r
-    border-left: 0px;\r
+    border: 0px;\r
 }\r
 \r
 .z-east-splitter, .z-west-splitter, .z-north-splitter, .z-south-splitter{\r
@@ -154,7 +154,7 @@ body *:not([class*="z-icon-"]) {
 \r
 .listbox-normal-style .z-listitem .z-listcell {\r
     border-left: 1px solid gray;\r
-    border-bottom: 1px solid gray;\r
+    border-bottom: 1px solid blue;\r
 }\r
 \r
 .z-treerow, .z-tree-body{\r
diff --git a/server/user.jobengine.osgi.server/img/ic_search_black_24dp_1x.png b/server/user.jobengine.osgi.server/img/ic_search_black_24dp_1x.png
new file mode 100644 (file)
index 0000000..6b16343
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/ic_search_black_24dp_1x.png differ
diff --git a/server/user.jobengine.osgi.server/img/ic_shopping_cart_black_24dp.png b/server/user.jobengine.osgi.server/img/ic_shopping_cart_black_24dp.png
new file mode 100644 (file)
index 0000000..f56585b
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/ic_shopping_cart_black_24dp.png differ
index d44cbbefc8d5bfcfdf5935019242f2abcb2a9f9c..089654fbabc1aa5c751e8f0029233527c6579fa4 100644 (file)
@@ -52,7 +52,7 @@
                <custom-attributes org.zkoss.zul.image.preload="true" />\r
                <borderlayout width="${myWidth}" height="${myHeight}">\r
                        <north border="0">\r
-                               <div id="divMenu" apply="org.zkoss.bind.BindComposer" viewModel="@id('mvm') @init('user.jobengine.zk.model.MenuModel')">\r
+                               <div id="divMenu" apply="org.zkoss.bind.BindComposer">\r
                                        <borderlayout height="50px">\r
                                                <west border="0">\r
                                                        <hbox height="100%" width="100%" align="center" pack="center" style="background: #008AC8;">\r
                                                <east border="0">\r
                                                        <hbox height="100%" width="100%" align="bottom" pack="center" style="background: #008AC8;">\r
                                                                <div style="margin-right: 10px">\r
-                                                                       <label style="color:#e3e3e3;font-size:12px;font-weight:bold" value="Bejelentkezve: ${sessionScope.userPrincipal.displayName}" tooltip="emailPopup, at_pointer" />\r
+                                                                       <label style="color:#e3e3e3;font-size:12px;font-weight:bold" value="Bejelentkezve: ${sessionScope.userPrincipal.displayName}" /> \r
+                                                                       <attribute name="tooltip" if="${not empty sessionScope.userPrincipal.email}">\r
+                                                                               emailPopup, at_pointer\r
+                                                                       </attribute>                                                                                            \r
                                                                        <popup id="emailPopup">\r
                                                                        <vlayout>\r
                                                                            <label value="${sessionScope.userPrincipal.email}"/>\r
index fbf6fb9da3f35cb20c012d576f7bfe13c9102fa9..562472af21d86cdb4e45ab3eea51ef26c6a93fa3 100644 (file)
@@ -33,7 +33,7 @@
                                <!--                                    <center> -->\r
                                <listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging" autopaging="true"\r
                                        vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
-                                       emptyMessage="Nincs futó folyamat." selectedItems="@bind(jlm.selectedJobs)">\r
+                                       emptyMessage="Nincs futó folyamat" selectedItems="@bind(jlm.selectedJobs)">\r
                                        <listhead>\r
                                                <listheader label="Id" hflex="min" align="left" sort="auto" />\r
                                                <listheader label="Indítás" hflex="min" align="left" sort="auto" />\r
index c4d094bf566cb2222235dcd05d71f3b00757bfb2..1d21559ffbb11cb567b56c68e773614d4e5fedc2 100644 (file)
 <!--                           <menuitem sclass="rozsda" label="Test" onClick='includeContent.src="/pages/database.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" /> -->\r
                        </menupopup>\r
                </menu>\r
-\r
-               <menu sclass="whitemenu" label="Statisztikák" >\r
+               <menu sclass="whitemenu" label="Statisztikák">\r
                        <menupopup>\r
-                               <menuitem sclass="rozsda" label="Folyamat statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
-                               <menuitem sclass="rozsda" label="Híranyag történet" onClick='includeContent.src="/pages/newshistory.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
+                               <menuitem sclass="rozsda" label="Folyamat tevékenységek" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
+                               <menuitem sclass="rozsda" label="Híranyag gyártás" onClick='includeContent.src="/pages/newshistory.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                        </menupopup>\r
                </menu>\r
 \r
@@ -74,7 +73,8 @@
                                <menuitem sclass="rozsda" label="${labels.menu_version}" href="/resource/help.html" target="_blank" />\r
                        </menupopup>\r
                </menu>\r
-               <menuitem sclass="whitemenu" style="float: right" label="Kilépés" onClick="@command('doLogout',window=zkwindow)" disabled="false" />\r
+               <menuitem id="basketIMenuItem" image="/img/ic_shopping_cart_black_24dp.png" sclass="whitemenu" style="float: right" label="@load(lm.basketMenuLabel)" onClick="@command('showBasket')" disabled="false" />\r
+               <menuitem sclass="whitemenu" style="float: right" label="Kilépés" onClick="@command('doLogout')" disabled="false" />\r
        </menubar>\r
 </div>\r
 </zk>\r
diff --git a/server/user.jobengine.osgi.server/pages/retrievebatchselector.zul b/server/user.jobengine.osgi.server/pages/retrievebatchselector.zul
new file mode 100644 (file)
index 0000000..9804573
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<window id="wndRetrieveBatch" title="Visszatöltés" width="700px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+       viewModel="@id('jlm') @init('user.jobengine.zk.model.RetrieveBatchSelectorModel')" onCancel="wndRetrieveBatch.detach()">\r
+       <grid>\r
+               <columns>\r
+                       <column width="120px" />\r
+                       <column width="100%" />\r
+               </columns>\r
+               <rows>\r
+                       <row>\r
+                               <label value="Azonosító:" />\r
+                               <textbox value="@load(jlm.houseId) @save(jlm.houseId,before='execute')" width="100%" tabindex="1" forward="onOK=execute.onClick"\r
+                                       constraint="no empty: Kérem adjon meg egy azonosítót (Traffic, Octopus, Egyéb)." />\r
+                       </row>\r
+                       <row>\r
+                               <label value="Értesítési cím:" />\r
+                               <textbox value="@load(jlm.email) @save(jlm.email,before='execute')" width="100%" tabindex="2" forward="onOK=execute.onClick"\r
+                                       constraint="/.+@.+\.[a-z]+/: Kérem adjon meg egy email címet!" />\r
+                       </row>\r
+                       <row>\r
+                               <cell colspan="2">\r
+                                       <listbox id="basketList" height="200px" sizedByContent="false" model="@load(jlm.basketItems)" multiple="true"\r
+                                               style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" emptyMessage="Üres">\r
+                                               <listhead>\r
+                                                       <listheader label="Azonosító" hflex="min" align="left" sort="auto" />\r
+                                                       <listheader label="Cím" hflex="min" align="left" sort="auto" />\r
+                                                       <listheader label="Filenév" hflex="min" align="left" sort="auto" />\r
+                                               </listhead>\r
+\r
+                                               <template name="model">\r
+                                                       <listitem>\r
+                                                               <listcell label="@load(each.media.id)" />\r
+                                                               <listcell label="@load(each.media.title)" />\r
+                                                               <listcell label="@load(each.media.mediaFilesName)">></listcell>\r
+                                                       </listitem>\r
+                                               </template>\r
+                                       </listbox>\r
+                               </cell>\r
+                       </row>\r
+               </rows>\r
+       </grid>\r
+       <vbox>\r
+\r
+       </vbox>\r
+       <hbox width="100%" pack="center">\r
+               <button id="cancel" label="Mégsem" autodisable="execute,cancel" onClick="wndRetrieveBatch.detach()" />\r
+               <button id="execute" label="Végrehajtás" autodisable="execute,cancel" onClick="@command('execute')" />\r
+       </hbox>\r
+</window>\r
index 416fc3dbbd0467e25bb49e2d23ee76a777a29041..9fcd7c2a83e05f91f3a8f19acbd056dc197c2cc6 100644 (file)
@@ -23,14 +23,16 @@ div.z-row-content span {
 .heavy {\r
        font-weight:bold;\r
 }\r
-div.z-row-content .rating {\r
-       font-weight:bold;\r
-       color: #0093f9;\r
-}\r
 \r
 .details {\r
     padding: 5px;\r
     line-height: 1.5em;\r
+       font-size: 10px;\r
+       border-bottom: 1px solid #ebebeb;\r
+}\r
+.relevant {\r
+    padding: 8px;\r
+       font-size: 10px;\r
 }\r
        </style>\r
        <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.SearchModel')">\r
@@ -49,13 +51,16 @@ div.z-row-content .rating {
                                                </toolbar>\r
                                        </groupbox>\r
                                        <groupbox vflex="true" closable="false">\r
-                                               <grid id="itemResults" sizedByContent="false" span="true" vflex="true" hflex="true" mold="paging" autopaging="false"\r
+                                               <grid id="itemsGrid" sizedByContent="false" span="true" vflex="true" hflex="true" mold="paging" autopaging="false"\r
                                                        model="@load(vm.searchResult)" activePage="@bind(vm.activePage)" emptyMessage="Nincs találat!"\r
-                                                       style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
-                                                       onAfterRender="@command('onPaging')">\r
+                                                       onAfterRender="@command('onPaging')"\r
+                                                       style="border: none; background: white !important;" oddRowSclass="listbox-odd-style">\r
                                                        <columns>\r
                                                                <column hflex="min">\r
-                                                                       <checkbox checked="@bind(vm.rowsExpanded)"/>\r
+                                                                       <checkbox checked="@bind(vm.rowsExpanded)" />\r
+                                                               </column>\r
+                                                               <column hflex="min">\r
+                                                                       <checkbox checked="@bind(vm.allSelected)" />\r
                                                                </column>\r
                                                                <column label="ID" hflex="min" align="left" />\r
                                                                <column label="Cím" align="left" />\r
@@ -64,25 +69,32 @@ div.z-row-content .rating {
                                                        </columns>\r
                                                        <rows id="rows">\r
                                                                <template name="model">\r
-                                                                       <row>\r
-                                                                               <detail open="@load(vm.rowsExpanded)">\r
+                                                                       <row onClick="@command('selectMediaArchive', selectedObject=each)">\r
+<!--                                                                           <attribute name="style" if="${vm.isSelected(each)}"> -->\r
+<!--                                                                                   background: green; -->\r
+<!--                                                                           </attribute>                                                                                             -->\r
+<!--                                                                           <attribute name="style" if="${not vm.isSelected(each)}"> -->\r
+<!--                                                                                   background: white; -->\r
+<!--                                                                           </attribute>                                                                                             -->\r
+                                                                               <detail open="@load(vm.rowsExpanded)" style="border-bottom: 1px solid gray">\r
                                                                                        <hlayout>\r
-                                                                                               <image tooltiptext="Kattints a lejátszáshoz!" width="140px" height="90px" sclass="myimg" content="@load(each.media.poster) @converter('user.jobengine.zk.model.ByToImageConverter')" onClick="@command('selectMediaArchive', selectedObject=each)" />\r
+                                                                                               <image tooltiptext="Kattints a lejátszáshoz!" width="140px" height="90px" \r
+                                                                                               sclass="myimg" content="@load(each.media.poster) @converter('user.jobengine.zk.model.ByToImageConverter')" \r
+                                                                                               onClick="@command('selectMediaArchive', selectedObject=each)" />\r
                                                                                                <div sclass="details">\r
                                                                                                        <div>\r
-                                                                                                               <label value="Típus:" sclass="heavy" />\r
-                                                                                                               <label value="@load(each.media.itemType.name)" />\r
-                                                                                                       </div>\r
-                                                                                                       <div>\r
-                                                                                                               <label value="Gyűjtő:" sclass="heavy" />\r
-                                                                                                               <label value="@load(each.item.title)" />\r
-                                                                                                       </div>\r
-                                                                                                       <div>\r
-                                                                                                               <label value="@load(each.relevant)" />\r
+                                                                                                               <label style="border-left: 1px solid #008AC8; border-bottom: 1px solid #008AC8; padding: 4px; margin: 2px" value="@load(each.media.itemType.name)" />\r
+                                                                                                               <label style="font: 20px Century Gothic; color: #008AC8;" value="@load(each.item.title)" />\r
                                                                                                        </div>\r
+                                                                                                       <html sclass="relevant">\r
+                                                                                                       <![CDATA[\r
+                                                                                                           <div>${each.relevant}</div>\r
+                                                                                                       ]]>\r
+                                                                                                       </html>                                                                                                 \r
                                                                                                </div>\r
                                                                                        </hlayout>\r
                                                                                </detail>\r
+                                                                               <checkbox checked="@save(vm.itemSelected) @validator(vm.itemSelectedValidator, arg=each)" />\r
                                                                                <label value="@load(each.media.houseId)" />\r
                                                                                <label value="@load(each.media.title)" />\r
                                                                                <label value="@load(each.media.houseId)" />\r
@@ -164,6 +176,5 @@ div.z-row-content .rating {
                        </center>\r
                </borderlayout>\r
 \r
-\r
        </div>\r
 </zk>
\ No newline at end of file
index 493571b581955691b56607cc2856dd8f9ca264d2..31802809299c6c61f0f00807ab356f44892010e6 100644 (file)
@@ -1,4 +1,4 @@
-version=2.3.1\r
+version=2.3.3\r
 footer=2016 © Copyright User Rendszerház Kft.\r
 \r
 login_info=Információ\r
index af423de1d990349210e0681a43f20f17d943ee8f..a247c0368bf01917a19a17da5c2b0bb75fb5397b 100644 (file)
@@ -1,42 +1,92 @@
 package user.jobengine.zk.model;\r
 \r
-import org.zkoss.bind.annotation.BindingParam;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.BindUtils;\r
+import org.zkoss.bind.annotation.AfterCompose;\r
 import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zk.ui.Component;\r
 import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zk.ui.select.Selectors;\r
 import org.zkoss.zk.ui.select.annotation.Wire;\r
 import org.zkoss.zul.Include;\r
+import org.zkoss.zul.Menuitem;\r
 import org.zkoss.zul.Window;\r
 \r
+import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class MenuModel extends BaseModel {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String PAGES_RETRIEVEBATCHSELECTOR_ZUL = "/pages/retrievebatchselector.zul";\r
+       private String basketMenuLabel = "(0)";\r
 \r
        @Wire\r
        Include includeContent;\r
+       private List<ArchivedMedia> basketItems;\r
+\r
+       @Wire\r
+       Menuitem basketIMenuItem;\r
 \r
        public MenuModel() {\r
-               //Messagebox.setTemplate("/pages/messagebox.zul");\r
+               SessionUtil.setAttribute(SessionUtil.MENUMODEL, this);\r
+       }\r
 \r
+       @AfterCompose\r
+       public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+               Selectors.wireComponents(view, this, false);\r
+               Selectors.wireEventListeners(view, this);\r
+               //Clients.showNotification("Új funkció, kötegelt visszaigényléshez.", "info", basketIMenuItem, "end_center", 3000);\r
        }\r
 \r
        @Command\r
-       public void doLogout(@BindingParam("window") Window window) {\r
+       public void doLogout() {\r
                SessionUtil.logout();\r
-               //              SessionUtil.setAttribute(SessionUtil.USERPROFILE, null);\r
-               //window.detach();\r
                Executions.sendRedirect("/");\r
-               //includeContent.setSrc("/pages/joblist.zul");\r
        }\r
 \r
-       public String getHeaderUser() {\r
-               return "Media archivum user"; //String.format(Labels.getLabel("header.userformat"), SessionUtil.getUserProfile().getDisplayName(), SessionUtil.getUserProfile().getUserName().toUpperCase());\r
+       public String getBasketMenuLabel() {\r
+               return basketMenuLabel;\r
        }\r
 \r
-       public void redirectToDocs() {\r
-               String serverName = Executions.getCurrent().getLocalAddr();\r
-               String serverName1 = Executions.getCurrent().getRemoteAddr();\r
-               String serverName2 = Executions.getCurrent().getBrowser();\r
+       public List<ArchivedMedia> getBasketItems() {\r
+               return basketItems;\r
+       }\r
+\r
+       @NotifyChange("basketMenuLabel")\r
+       public void selectArchivedMedia(ArchivedMedia item, boolean select) {\r
+               if (item == null) {\r
+                       logger.warn("Item to select is null");\r
+                       return;\r
+               }\r
+               if (basketItems == null)\r
+                       basketItems = new ArrayList<>();\r
+               if (select) {\r
+                       if (!basketItems.contains(item))\r
+                               basketItems.add(item);\r
+               } else {\r
+                       if (basketItems.contains(item))\r
+                               basketItems.remove(item);\r
+               }\r
+               logger.info("SelectedItems: {}", basketItems.size());\r
+               basketMenuLabel = String.format("(%d)", basketItems.size());\r
+               BindUtils.postNotifyChange(null, null, this, "basketMenuLabel");\r
+       }\r
 \r
+       @Command\r
+       public void showBasket() {\r
+               Map<String, Object> arguments = new HashMap<String, Object>();\r
+               arguments.put("selectedItems", basketItems);\r
+               Window window = (Window) Executions.createComponents(PAGES_RETRIEVEBATCHSELECTOR_ZUL, null, arguments);\r
+               window.doModal();\r
        }\r
 \r
 }
\ No newline at end of file
index 6970d0ed6bf7bc63bcf8af7a2a3b00ca4cb6cd3d..36fbc9c7c90a4dc2fda8601091beb35abd51676a 100644 (file)
@@ -38,6 +38,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        private static final String IMPORT_DISABLED = "importDisabled";\r
        private static final String IMPORT_TEMPLATE = "import-morpheus-missing-materials.xml";\r
        private static final String RETRIEVE_TEMPLATE = "retrieve-missing-material.xml";\r
+       private static final String TEMPLATE = "template";\r
        private ListModelList<BasicDBObject> jobList = new ListModelList<BasicDBObject>();\r
        private Set<BasicDBObject> selectedJobs;\r
        private IJobEngine jobEngine = null;\r
@@ -105,7 +106,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                List<BasicDBObject> jobs = NoSQLUtils.asList(scheduler.getScheduleJobs());\r
                BasicDBObject importJob = null;\r
                for (BasicDBObject job : jobs) {\r
-                       if (isImportJob(job.getString(IMPORT_TEMPLATE))) {\r
+                       if (isImportJob(job.getString(TEMPLATE))) {\r
                                importJob = job;\r
                                //logger.info(job.toString());\r
                                break;\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java
new file mode 100644 (file)
index 0000000..461ac69
--- /dev/null
@@ -0,0 +1,107 @@
+package user.jobengine.zk.model;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.AfterCompose;\r
+import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
+import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.util.resource.Labels;\r
+import org.zkoss.zk.ui.Component;\r
+import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zk.ui.select.Selectors;\r
+import org.zkoss.zk.ui.select.annotation.Wire;\r
+import org.zkoss.zul.Messagebox;\r
+import org.zkoss.zul.Window;\r
+\r
+import user.commons.ListUtils;\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobEngine;\r
+import user.jobengine.zk.util.SessionUtil;\r
+\r
+public class RetrieveBatchSelectorModel extends BaseModel {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String KILLDATEDAYS = "killDateDays";\r
+       private static final String MEDIACUBEMEDIA = "mediaCubeMedia";\r
+       private static final String SUCCESSRECIPIENT = "successRecipient";\r
+       private static final String GENERICOUTPUTPATH = "genericOutputPath";\r
+       private static final String OCTOPUSOUTPUTPATH = "octopusOutputPath";\r
+       private static final String TRAFFICOUTPUTPATH = "trafficOutputPath";\r
+       private static final String HOUSEID = "houseId";\r
+       private static final String RESTORE = "Visszatöltés";\r
+       private static final String JOBTEMPLATE = "retrieve-ondemand.xml";\r
+\r
+       @Wire()\r
+       private Window wndRetrieveBatch;\r
+       private Media selectedMedia;\r
+       private String houseId;\r
+       private String email;\r
+\r
+       @AfterCompose\r
+       public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+               Selectors.wireComponents(view, this, false);\r
+       }\r
+\r
+       @Command\r
+       public void close() {\r
+               wndRetrieveBatch.detach();\r
+       }\r
+\r
+       @Command\r
+       public void execute() {\r
+               try {\r
+                       if (StringUtils.isBlank(houseId))\r
+                               throw new Exception("Az azonosító megadása kötelező!");\r
+                       if (StringUtils.isBlank(email))\r
+                               throw new Exception("Az értesítési cím megadása kötelező!");\r
+                       String trafficOutputPath = "/mnt/ISILON/PLAYOUT_NLE";\r
+                       String octopusOutputPath = "/mnt/ISILON/OCTOPUS";\r
+                       String genericOutputPath = "/mnt/ISILON/ARCHIVE_RESTORE";\r
+                       Map<String, Object> parameters = ListUtils.asMap(TRAFFICOUTPUTPATH, trafficOutputPath, OCTOPUSOUTPUTPATH, octopusOutputPath, GENERICOUTPUTPATH,\r
+                                       genericOutputPath, MEDIACUBEMEDIA, this.selectedMedia, HOUSEID, houseId, SUCCESSRECIPIENT, email, KILLDATEDAYS, 7);\r
+                       IJobEngine jobEngine = JobEngine.getInstance();\r
+                       IJobRuntime runtime1 = jobEngine.submit(JOBTEMPLATE, RESTORE, parameters);\r
+                       close();\r
+               } catch (Exception e) {\r
+                       Messagebox.show(e.getMessage(), Labels.getLabel("dialogger.warning"), Messagebox.OK, Messagebox.ERROR, defaultOKEventListener);\r
+                       logger.catching(e);\r
+               }\r
+\r
+       }\r
+\r
+       public List<ArchivedMedia> getBasketItems() {\r
+               MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
+               return model.getBasketItems();\r
+       }\r
+\r
+       public String getEmail() {\r
+               return email;\r
+       }\r
+\r
+       public String getHouseId() {\r
+               return houseId;\r
+       }\r
+\r
+       @Init\r
+       public void init() {\r
+               Map<?, ?> args = Executions.getCurrent().getArg();\r
+               this.selectedMedia = (Media) args.get(MEDIACUBEMEDIA);\r
+               setEmail(SessionUtil.getUserPrincipal().getEmail());\r
+       }\r
+\r
+       public void setEmail(String email) {\r
+               this.email = email;\r
+       }\r
+\r
+       public void setHouseId(String houseId) {\r
+               this.houseId = houseId;\r
+       }\r
+}
\ No newline at end of file
index 1603ecfa545a0da71ada2d44c709da4eb2d1aee1..726cd1db3a00f981de9c0805679af6a658197ac2 100644 (file)
@@ -23,7 +23,10 @@ import org.zkoss.zk.ui.Component;
 import org.zkoss.zk.ui.Executions;\r
 import org.zkoss.zk.ui.select.Selectors;\r
 import org.zkoss.zk.ui.select.annotation.Wire;\r
+import org.zkoss.zul.Checkbox;\r
+import org.zkoss.zul.Grid;\r
 import org.zkoss.zul.Messagebox;\r
+import org.zkoss.zul.Row;\r
 import org.zkoss.zul.Rows;\r
 import org.zkoss.zul.Window;\r
 \r
@@ -34,6 +37,7 @@ import user.jobengine.db.IItemManager;
 import user.jobengine.db.Media;\r
 import user.jobengine.db.MediaFile;\r
 import user.jobengine.db.Store;\r
+import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class SearchModel extends AsyncBaseModel {\r
        private static final Logger logger = LogManager.getLogger();\r
@@ -45,12 +49,18 @@ public class SearchModel extends AsyncBaseModel {
        private CachedListModel searchResult = null;\r
        private ArchivedMedia selectedObject = null;\r
        private Validator allFilterCheckedValidator;\r
+       private Validator itemSelectedValidator;\r
        private Map<String, Object> typeFilters;\r
        private boolean allChecked = true;\r
        private int activePage;\r
        private boolean rowsExpanded = true;\r
+       private boolean allSelected;\r
+       private boolean itemSelected;\r
+\r
        @Wire\r
        Rows rows;\r
+       @Wire\r
+       Grid itemsGrid;\r
 \r
        public SearchModel() {\r
                typeFilters = new LinkedHashMap<>();\r
@@ -81,6 +91,22 @@ public class SearchModel extends AsyncBaseModel {
                                updateAllChecked();\r
                        }\r
                };\r
+\r
+               itemSelectedValidator = new Validator() {\r
+                       @Override\r
+                       public void validate(ValidationContext ctx) {\r
+                               try {\r
+\r
+                                       ArchivedMedia item = (ArchivedMedia) ctx.getValidatorArg("arg");\r
+                                       boolean select = (boolean) ctx.getProperty().getValue();\r
+                                       MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
+                                       model.selectArchivedMedia(item, select);\r
+                               } catch (Exception e) {\r
+\r
+                               }\r
+                               updateAllChecked();\r
+                       }\r
+               };\r
        }\r
 \r
        @AfterCompose\r
@@ -144,6 +170,10 @@ public class SearchModel extends AsyncBaseModel {
                return selectedObject != null;\r
        }\r
 \r
+       public Validator getItemSelectedValidator() {\r
+               return itemSelectedValidator;\r
+       }\r
+\r
        public String getLowresMediaFilePath() throws Exception {\r
                String ret = PAGES_MEDIAPLAYER;\r
                Media media = getMedia();\r
@@ -229,6 +259,14 @@ public class SearchModel extends AsyncBaseModel {
                return allChecked;\r
        }\r
 \r
+       public boolean isAllSelected() {\r
+               return allSelected;\r
+       }\r
+\r
+       public boolean isItemSelected() {\r
+               return itemSelected;\r
+       }\r
+\r
        public boolean isRowsExpanded() {\r
                return rowsExpanded;\r
        }\r
@@ -239,6 +277,12 @@ public class SearchModel extends AsyncBaseModel {
                //                      Clients.scrollIntoView(rows);\r
        }\r
 \r
+       //      public void rowSelected(@BindingParam("item") Object media, @BindingParam("isChecked") boolean isChecked) {\r
+       @Command\r
+       public void rowSelected(@BindingParam("isChecked") boolean isChecked) {\r
+               logger.info(isChecked);\r
+       }\r
+\r
        @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
        public void selectedMediaArchive(ArchivedMedia selectedObject) {\r
                this.selectedObject = selectedObject;\r
@@ -265,6 +309,34 @@ public class SearchModel extends AsyncBaseModel {
                this.allFilterCheckedValidator = allFilterCheckedValidator;\r
        }\r
 \r
+       public void setAllSelected(boolean allSelected) {\r
+               this.allSelected = allSelected;\r
+               //itemsGrid.renderAll();\r
+               List<Component> components = itemsGrid.getRows().getChildren();\r
+               for (Component obj : components) {\r
+                       Row row = (Row) obj;\r
+                       List<Component> children = row.getChildren();\r
+                       if (children.size() < 2)\r
+                               continue;\r
+                       Component component = children.get(1);\r
+                       if (!(component instanceof Checkbox))\r
+                               continue;\r
+                       Checkbox ck = (Checkbox) component;\r
+                       ck.setChecked(allSelected);\r
+                       MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
+                       model.selectArchivedMedia(row.getValue(), allSelected);\r
+               }\r
+\r
+       }\r
+\r
+       public void setItemSelected(boolean itemSelected) {\r
+               this.itemSelected = itemSelected;\r
+       }\r
+\r
+       public void setItemSelectedValidator(Validator itemSelectedValidator) {\r
+               this.itemSelectedValidator = itemSelectedValidator;\r
+       }\r
+\r
        public void setRowsExpanded(boolean rowsExpanded) {\r
                this.rowsExpanded = rowsExpanded;\r
        }\r
index 576e2bafb3670cd60e78122a8432943ab0f4c29c..fdc333d9e1d0bab593bd33c5432146ed28972f2a 100644 (file)
@@ -16,6 +16,7 @@ import user.jobengine.server.IJobChangedListener;
 import user.jobengine.server.JobEngine;\r
 \r
 public class SessionUtil {\r
+       private static final String SELECTED_ARCHIVED_MEDIAS = "selectedArchivedMedias";\r
        private static Logger logger = LogManager.getLogger();\r
        private static final String AUTH_ENABLED = "auth_enabled";\r
        private static final String LOCAL_USERS = "local_users";\r
@@ -24,24 +25,22 @@ public class SessionUtil {
        private static final String USERPRINCIPAL = "userPrincipal";\r
        private static final String AUTH_LOCATION = "mediacube.auth.location";\r
        public static final String JOBLISTENER = "joblistener";\r
-\r
-       static public void registerJobChangedListener(IJobChangedListener listener) {\r
-               cleanup();\r
-               JobEngine.getInstance().addJobChangedEventListener(listener);\r
-               setAttribute(JOBLISTENER, listener);\r
-       }\r
+       public static final String MENUMODEL = "menuModel";\r
 \r
        public static boolean authenticate(String account, String password) {\r
                Properties cfg = getConfiguration();\r
                UserPrincipal userPrincipal = null;\r
-               if (authenticateLocal(account, password, cfg, LOCAL_ADMINS)) {\r
-                       userPrincipal = new UserPrincipal(account, true, true, false);\r
+               String localUsers = cfg.getProperty(LOCAL_ADMINS);\r
+               if (authenticateLocal(account, password, localUsers)) {\r
+                       userPrincipal = createLocalPrincipal(account, password, true, true, false, localUsers);\r
                } else {\r
-                       if (authenticateLocal(account, password, cfg, LOCAL_JOBSUBMITTERS)) {\r
-                               userPrincipal = new UserPrincipal(account, false, true, false);\r
+                       localUsers = cfg.getProperty(LOCAL_JOBSUBMITTERS);\r
+                       if (authenticateLocal(account, password, localUsers)) {\r
+                               userPrincipal = createLocalPrincipal(account, password, false, true, false, localUsers);\r
                        } else {\r
-                               if (authenticateLocal(account, password, cfg, LOCAL_USERS)) {\r
-                                       userPrincipal = new UserPrincipal(account, false, false, false);\r
+                               localUsers = cfg.getProperty(LOCAL_USERS);\r
+                               if (authenticateLocal(account, password, localUsers)) {\r
+                                       userPrincipal = createLocalPrincipal(account, password, false, false, false, localUsers);\r
                                } else {\r
                                        LDAPHandler h = new LDAPHandler(account, password, cfg);\r
                                        userPrincipal = h.getUserPrincipal();\r
@@ -56,13 +55,12 @@ public class SessionUtil {
                return true;\r
        }\r
 \r
-       private static boolean authenticateLocal(String account, String password, Properties cfg, String usersKey) {\r
+       private static boolean authenticateLocal(String account, String password, String users) {\r
                if (StringUtils.isBlank(account) || account.length() < 3)\r
                        return false;\r
                if (StringUtils.isBlank(password) || password.length() < 3)\r
                        return false;\r
 \r
-               String users = cfg.getProperty(usersKey);\r
                if (StringUtils.isBlank(users) || users.length() < 7)\r
                        return false;\r
 \r
@@ -75,6 +73,22 @@ public class SessionUtil {
                        JobEngine.getInstance().removeJobChangedEventListener(listener);\r
                        setAttribute(SessionUtil.JOBLISTENER, null);\r
                }\r
+               //setAttribute(SessionUtil.MENUMODEL, null);\r
+               //setAttribute(SessionUtil.USERPRINCIPAL, null);\r
+       }\r
+\r
+       private static UserPrincipal createLocalPrincipal(String account, String password, boolean isAdmin, boolean isJobSubmitter, boolean isAnonymous,\r
+                       String users) {\r
+               UserPrincipal result = new UserPrincipal(account, isAdmin, isJobSubmitter, isAnonymous);\r
+               String[] userList = users.split(";");\r
+               for (String user : userList) {\r
+                       if (!authenticateLocal(account, password, user))\r
+                               continue;\r
+                       String[] userInfo = user.split(":");\r
+                       if (userInfo.length > 2)\r
+                               result.setEmail(userInfo[2]);\r
+               }\r
+               return result;\r
        }\r
 \r
        static public Object getAttribute(String name) {\r
@@ -127,6 +141,12 @@ public class SessionUtil {
                setAttribute(SessionUtil.USERPRINCIPAL, null);\r
        }\r
 \r
+       static public void registerJobChangedListener(IJobChangedListener listener) {\r
+               cleanup();\r
+               JobEngine.getInstance().addJobChangedEventListener(listener);\r
+               setAttribute(JOBLISTENER, listener);\r
+       }\r
+\r
        static public void setAttribute(String name, Object obj) {\r
                //HttpSession session = (HttpSession) (Executions.getCurrent()).getDesktop().getSession().getNativeSession();\r
                Session zkSession = Sessions.getCurrent();\r