{"joblist":[\r
{\r
"active": false,\r
- "name" : "Statisztika importálása",\r
+ "name" : "Híranyag statisztika importálása",\r
"template": "import-statistics.xml",\r
"executeimmediate": false,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"executeimmediate": false,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
- {"name": "csvFilePath", "value": "c:/temp/morpheus", "type": "java.lang.String"},\r
+ {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"},\r
{"name": "processedFolder", "value": "DONE", "type": "java.lang.String"},\r
- {"name": "targetPath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE_RESTORE", "type": "java.lang.String"}\r
+ {"name": "targetPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"}\r
]\r
},\r
{\r
"active": false,\r
- "name" : "Felhasználói archiválás",\r
+ "executeimmediate": false,\r
+ "name" : "Archiválás az ISILON/ARCHIVE mappából",\r
"template": "archive-ondemand.xml",\r
- "executeimmediate": true,\r
- "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "cronexpression": "0 0 23 * * ?",\r
"parameters": [ \r
{"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"},\r
{"name": "globalSourcePath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"},\r
},\r
{\r
"active": false,\r
- "name" : "NEXIO anyagok másolása az ISILON/ARCHIVE mappába",\r
+ "executeimmediate": false,\r
+ "name" : "NEXIO bejátszók másolása az ISILON/ARCHIVE mappába",\r
"template": "copyforarchive-nexio-materials.xml",\r
- "executeimmediate": true,\r
- "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "cronexpression": "0 0 10 * * ?",\r
"parameters": [ \r
{"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"},\r
{"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"},\r
{"name": "nexioPassword", "value": "system", "type": "java.lang.String"},\r
- {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"},\r
+ {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE", "type": "java.lang.String"},\r
{"name": "archiveUserName", "value": "mediacube", "type": "java.lang.String"},\r
{"name": "archivePassword", "value": "Broadca5T", "type": "java.lang.String"},\r
{"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"},\r
}, \r
{\r
"active": false,\r
- "name" : "NEXIO rögzített anyagok másolása az ISILON/ARCHIVE mappába",\r
+ "name" : "NEXIO visszarögzített anyagok másolása az ISILON/ARCHIVE mappába",\r
"template": "copyforarchive-nexio-recordings.xml",\r
"executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"active": false,\r
"name" : "TRAFFIC anyagok visszatöltése",\r
"template": "retrieve-traffic-missing-materials.xml",\r
- "executeimmediate": true,\r
+ "executeimmediate": false,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [\r
{"name": "dbUrl", "value": "jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "type": "java.lang.String"},\r
}, \r
{\r
"active": false,\r
- "name" : "Anyagok törlése",\r
+ "executeimmediate": false,\r
+ "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése",\r
"template": "delete-materials.xml",\r
- "executeimmediate": true,\r
- "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "cronexpression": "0 0 5 * * ?",\r
"parameters": [ \r
- {"name": "sourcePath", "value": "q:/TEST", "type": "java.lang.String"}\r
+ {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}\r
]\r
}, \r
{\r
{"joblist":[\r
{\r
+ "active": false,\r
+ "name" : "Híranyag statisztika importálása",\r
+ "template": "import-statistics.xml",\r
+ "executeimmediate": false,\r
+ "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "parameters": [ \r
+ {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "name" : "MORPHEUS 'missing materials' importálása",\r
+ "template": "import-morpheus-missing-materials.xml",\r
+ "executeimmediate": false,\r
+ "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "parameters": [ \r
+ {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"},\r
+ {"name": "processedFolder", "value": "DONE", "type": "java.lang.String"},\r
+ {"name": "targetPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"}\r
+ ]\r
+ },\r
+ {\r
"active": true,\r
"executeimmediate": true,\r
"name" : "OCTOPUS adatok szinkronizálása",\r
"name" : "Teszt folyamat",\r
"template": "fake.xml",\r
"cronexpression": "0/10 * * ? * *",\r
+ "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "name" : "Teszt fork-párhuzamosított folyamat",\r
+ "template": "fake-noparams.xml",\r
+ "executeimmediate": false,\r
+ "cronexpression": "0 40 22 * * ?",\r
"parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
}\r
]}\r
import java.net.URI;\r
import java.text.ParseException;\r
import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
import java.util.Calendar;\r
import java.util.Date;\r
import java.util.List;\r
private static final String MEDIATYPE = "Visszarögzített";\r
private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
private static final String STARTTIME_FORMAT = "HHmm";\r
+ private static final String RUNDOWNDATE_FORMAT = "yyyyMMdd";\r
private static final Logger logger = LogManager.getLogger();\r
private static final String UTF_8 = "utf-8";\r
private static final String JSON_EXT = ".json";\r
private static final String EXTAGENCY = "extagency";\r
private static final String RECORDDATE = "recorddate";\r
private static final SimpleDateFormat startTimeformat = new SimpleDateFormat(STARTTIME_FORMAT);\r
+ private static final SimpleDateFormat rundownDateformat = new SimpleDateFormat(RUNDOWNDATE_FORMAT);\r
\r
private OctopusAPI octopusAPI;\r
private IItemManager manager;\r
}\r
\r
private void copyFile(FileArchive fileArchive, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception {\r
- String origFileName = fileArchive.getFileName();\r
- String videoFileName = transferFile(origFileName);\r
+ String sourceFileName = fileArchive.getFileName();\r
+ String targetFileName = getTargetFileName(rundownArchive, sourceFileName);\r
+ transferFile(sourceFileName, targetFileName);\r
BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive);\r
- transferMetadata(videoFileName, metadata);\r
- createSourceKillDateFile(rundownArchive, origFileName);\r
+ transferMetadata(targetFileName, metadata);\r
+ createSourceKillDateFile(rundownArchive, sourceFileName);\r
}\r
\r
private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) {\r
return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime();\r
}\r
\r
- private String getTargetFileName(String sourceFileName, String[] names) {\r
- String result = sourceFileName + MXFEXT;\r
- if (names == null || names.length == 0)\r
- return result;\r
- List<String> remoteNames = new ArrayList<>();\r
- for (String name : names) {\r
- if (name != null)\r
- remoteNames.add(name.toLowerCase());\r
- }\r
- int version = 1;\r
- while (remoteNames.contains(result.toLowerCase())) {\r
- result = String.format("%s-%d%s", sourceFileName, version, MXFEXT);\r
- }\r
- return result;\r
+ private String getTargetFileName(RundownArchive rundownArchive, String sourceFileName) {\r
+ String date = rundownDateformat.format(rundownArchive.getScheduleDate());\r
+ return String.format("%s-%s%s", date, sourceFileName, MXFEXT);\r
}\r
\r
private RundownArchive processClip(BasicDBObject clip) {\r
\r
}\r
\r
- private String transferFile(String sourceFileName) throws Exception {\r
- String result = null;\r
+ private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
int reply = 0;\r
logger.info("Transfer clip {}", sourceFileName);\r
try {\r
sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect();\r
targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
\r
- result = getTargetFileName(sourceFileName, targetFtp.listNames());\r
-\r
if (!targetFtp.enterRemotePassiveMode())\r
throw new Exception("!PASV");\r
\r
if (!targetFtp.setFileType(FTP.BINARY_FILE_TYPE))\r
throw new Exception("!TARGET TYPE");\r
\r
- reply = targetFtp.stor(result);\r
+ reply = targetFtp.stor(targetFileName);\r
if (!FTPReply.isPositivePreliminary(reply))\r
throw new Exception("STOR parancs válasza: " + sourceFtp.getReplyString());\r
\r
targetUri.cleanUp();\r
}\r
\r
- return result;\r
}\r
\r
private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception {\r
\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
-import org.apache.logging.log4j.message.Message;\r
\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
Object[] result = { itemID + 1 };\r
\r
//logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
- Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
- logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
+ // Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
+ // logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
try {\r
for (int i = 0; i < count; i++) {\r
//sb.append("Sikeres iteráció : ")\r
import org.apache.logging.log4j.Logger;\r
import org.apache.logging.log4j.Marker;\r
\r
+import com.ibm.nosql.json.api.BasicDBList;\r
import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
import com.ibm.nosql.json.api.DBObject;\r
\r
import user.commons.CalendarUtils;\r
public class ImportStatisticsStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
+ private static final String NEXIOCLIPS = "nexioclips";\r
+ private static final String LONGNAMEID = "longnameid";\r
+ private static final String DURATION = "duration";\r
private IOctopusAPI octopusAPI;\r
private Marker marker;\r
+ private int overall;\r
+ private int current;\r
+ private DB db;\r
+ private DBCollection clipCollection;\r
\r
private void createAPI(IJobRuntime jobRuntime) throws Exception {\r
try {\r
}\r
}\r
\r
+ private BasicDBObject createFieldsObject() {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put(IOctopusAPI._ID, 0);\r
+ result.put(IOctopusAPI.ID, 1);\r
+ result.put(IOctopusAPI.NAME, 1);\r
+ result.put(IOctopusAPI.REF_RUNDOWN, 1);\r
+ result.put(IOctopusAPI.REF_STORYFOLDER, 1);\r
+ result.put(IOctopusAPI.MOS_OBJECTS, 1);\r
+ result.put(IOctopusAPI.PARENT_STORY_ID, 1);\r
+ result.put(IOctopusAPI.SCHEDULEFROM, 1);\r
+ result.put(IOctopusAPI.REPORTERS, 1);\r
+ return result;\r
+ }\r
+\r
@StepEntry\r
public Object[] execute(int daysBeforeNow, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
marker = jobRuntime.getMarker();\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ clipCollection = db.getCollection(NEXIOCLIPS);\r
+\r
createAPI(jobRuntime);\r
\r
- Calendar scheduledDate = Calendar.getInstance();\r
+ Calendar scheduledDate = CalendarUtils.createZeroCalendar(Calendar.getInstance());\r
scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow);\r
List<DBObject> rundowns = octopusAPI.getRundowns(scheduledDate.getTime());\r
- if (rundowns == null) {\r
- logger.warn(marker, "Nem található adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate));\r
- return null;\r
- }\r
- Map<Long, BasicDBObject> stories = processRundowns(rundowns);\r
+ if (rundowns == null)\r
+ logger.warn(marker, "Nincs adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate));\r
+ else\r
+ overall += rundowns.size();\r
\r
List<DBObject> folders = octopusAPI.getStoryFolders();\r
+ if (folders == null)\r
+ logger.warn(marker, "Nincs gyűjtőmappa.");\r
+ else\r
+ overall += folders.size();\r
+\r
+ Map<Long, BasicDBObject> stories = processRundowns(rundowns);\r
+ logger.info(jobRuntime.getMarker(), "Adástükörben megtalálható anyagok száma {}", stories.size());\r
Map<Long, BasicDBObject> folderStories = processFolders(folders, scheduledDate);\r
stories.putAll(folderStories);\r
+ logger.info(jobRuntime.getMarker(), "Gyűjtőkben megtalálható anyagok száma {}", stories.size());\r
\r
+ store(scheduledDate, stories);\r
return null;\r
}\r
\r
try {\r
folderID = NoSQLUtils.asLong(folder, IOctopusAPI.ID);\r
folderName = folder.getString(IOctopusAPI.NAME);\r
- List<DBObject> stories = octopusAPI.getStoryFolderStories(folderID);\r
- if (stories != null)\r
- result.putAll(processStories(stories, scheduledDate));\r
+ List<DBObject> folderStories = octopusAPI.getStoryFolderStories(folderID, createFieldsObject());\r
+ if (folderStories != null) {\r
+\r
+ Map<Long, BasicDBObject> stories = processStories(folderStories, scheduledDate);\r
+ result.putAll(stories);\r
+ }\r
} catch (Exception e) {\r
logger.catching(e);\r
logger.error(marker, String.format("A %s %s mappa feldolgozása nem lehetséges. A rendszer üzenete: %s", folderID, folderName, e.getMessage()));\r
+ throw e;\r
}\r
+ current++;\r
+ setProgress(current * 100 / overall);\r
}\r
return result;\r
}\r
String start = CalendarUtils.toString(CalendarUtils.createCalendar(scheduledStart), SCHEDULED_FORMAT);\r
//String rundownName = NoSQLUtils.asString(rundown, IOctopusAPI.NAME);\r
rundownName = String.format("%s %s %s", start, name, channel);\r
- List<DBObject> stories = octopusAPI.getRundownStories(rundownID);\r
+ List<DBObject> stories = octopusAPI.getRundownStories(rundownID, createFieldsObject());\r
if (stories != null)\r
result.putAll(processStories(stories, null));\r
} catch (Exception e) {\r
logger.catching(e);\r
logger.error(marker,\r
String.format("A %s %s tükör feldolgozása nem lehetséges. A rendszer üzenete: %s", rundownID, rundownName, e.getMessage()));\r
+ throw e;\r
}\r
+ current++;\r
+ setProgress(current * 100 / overall);\r
}\r
return result;\r
}\r
Map<Long, BasicDBObject> result = new HashMap<>();\r
for (DBObject storyObject : stories) {\r
BasicDBObject story = (BasicDBObject) storyObject;\r
- BasicDBObject mosObjects = NoSQLUtils.asDBObject(story, IOctopusAPI.MOS_OBJECTS);\r
- if (mosObjects == null || mosObjects.isEmpty())\r
- continue;\r
+\r
long storyID = NoSQLUtils.asLong(story, IOctopusAPI.ID);\r
if (storyID == 0)\r
continue;\r
\r
if (scheduledDate != null) {\r
- //story.get\r
+ Date scheduleFrom = story.getDate(IOctopusAPI.SCHEDULEFROM);\r
+ if (scheduleFrom == null)\r
+ continue;\r
+ if (scheduleFrom.getTime() != scheduledDate.getTime().getTime())\r
+ continue;\r
+ }\r
\r
+ List<BasicDBObject> mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS);\r
+ if (mosObjects == null || mosObjects.isEmpty())\r
+ continue;\r
+\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
+ mosObject.put("duration", duration);\r
+ }\r
+ }\r
}\r
\r
if (!result.containsKey(storyID))\r
return result;\r
}\r
\r
+ private void store(Calendar scheduledDate, Map<Long, BasicDBObject> stories) {\r
+ BasicDBObject dailyHistory = new BasicDBObject();\r
+ dailyHistory.put("dateTime", scheduledDate.getTime());\r
+ dailyHistory.put("rawData", new BasicDBList(stories.values()));\r
+ DBCollection collection = db.getCollection("daily_news_history");\r
+ BasicDBObject existingHistory = (BasicDBObject) collection.findOne(new BasicDBObject("dateTime", scheduledDate.getTime()));\r
+ if (existingHistory != null)\r
+ dailyHistory.put(IOctopusAPI._ID, existingHistory.getID());\r
+ collection.save(dailyHistory);\r
+ }\r
+\r
}\r
package user.jobengine.server.steps;\r
\r
import java.io.File;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.Date;\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
-import user.jobengine.db.IItemManager;\r
import user.jobengine.db.Item;\r
+import user.jobengine.db.ItemManager;\r
import user.jobengine.db.ItemType;\r
import user.jobengine.db.Media;\r
import user.jobengine.server.IJobEngine;\r
* @author robi\r
*/\r
public class MetadataTransformStep extends JobStep {\r
+ private static final String CONFLICT = "CONFLICT";\r
private static final Logger logger = LogManager.getLogger();\r
private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null";\r
public static final String DEFAULT_MEDIATYPE = "Generic";\r
+ private ItemManager itemManager;\r
\r
@StepEntry\r
- public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Media mediaCubeMedia = null;\r
try {\r
- IItemManager itemManager = jobEngine.getItemManager();\r
+ itemManager = (ItemManager) jobEngine.getItemManager();\r
if (itemManager == null)\r
throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
+\r
+ File sourceMediaFile = new File(archiveItem.getMediaFile());\r
+ String sourceFileName = sourceMediaFile.getName();\r
+\r
+ if (itemManager.isMediaFileExists(sourceFileName)) {\r
+ try {\r
+ Path sourcePath = Paths.get(archiveItem.getMediaFile());\r
+ Path parent = sourcePath.getParent();\r
+ EscortFiles.ensureUNCFolder(parent.toString(), CONFLICT);\r
+ Files.move(sourcePath, Paths.get(parent.toString(), sourceFileName + (new Date()).getTime()));\r
+ } catch (Exception e1) {\r
+ logger.catching(e1);\r
+ logger.error(getMarker(), "Hiba az állomány {} mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
+ }\r
+ throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges.");\r
+ }\r
+\r
Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId());\r
jobRuntime.incrementProgress(50);\r
\r
return;\r
if (newIDs != null && newIDs.size() > 0)\r
oldIDs.removeAll(newIDs);\r
+\r
+ if (disableWrite)\r
+ return;\r
+\r
DBCollection collection = db.getCollection(collectionName);\r
for (long id : oldIDs) {\r
logger.info("Deleting {} from {}", id, collectionName);\r
storeRundowns(rundowns);\r
storeStoryFolders(storyFolders);\r
\r
- if (disableWrite)\r
- return;\r
-\r
deleteDiff(currentRundowns.keySet(), rundownIDs, IOctopusAPI.RUNDOWN_COLLECTION);\r
deleteDiff(currentFolder.keySet(), folderIDs, IOctopusAPI.FOLDER_COLLECTION);\r
deleteDiff(currentStories.keySet(), storyIDs, IOctopusAPI.STORY_COLLECTION);\r
"lcd ..\" ^\r
"lcd %LOCAL_CONFIG_LOCATION%" ^\r
"synchronize remote -filemask=config.xml" ^\r
- "cd .." ^\r
- "synchronize remote -filemask=scheduledjobs.json" ^\r
"exit"\r
\r
ECHO *** Completed ***\r
@ECHO ON\r
\r
+REM "cd .." ^\r
+REM "synchronize remote -filemask=scheduledjobs.json" ^\r
\r
import java.util.Date;\r
import java.util.List;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
import com.ibm.nosql.json.api.DBObject;\r
\r
public interface IOctopusAPI {\r
static final String _ID = "_id";\r
static final String STORYID = "storyId";\r
static final String FORMAT = "format";\r
+ static final String REPORTERS = "reporters";\r
\r
DBObject getRundown(Date scheduledDate);\r
\r
\r
List<DBObject> getRundownStories(long id);\r
\r
+ List<DBObject> getRundownStories(long id, BasicDBObject fields);\r
+\r
List<DBObject> getStories();\r
\r
List<DBObject> getStoriesByID(String id);\r
List<DBObject> getStoryFoldersByPlaceHolderID(String placeHolderID);\r
\r
List<DBObject> getStoryFolderStories(long storyFolderID);\r
+\r
+ List<DBObject> getStoryFolderStories(long storyFolderId, BasicDBObject fields);\r
}\r
return result;\r
}\r
\r
+ @Override\r
+ public List<DBObject> getRundownStories(long id, BasicDBObject fields) {\r
+ List<DBObject> result = null;\r
+ DBCollection collection = db.getCollection(STORY_COLLECTION);\r
+ DBCursor find = collection.find(new BasicDBObject(REF_RUNDOWN, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, id))), fields)\r
+ .sort(new BasicDBObject("name", 1));\r
+ if (find.hasNext())\r
+ result = find.toArray();\r
+ return result;\r
+ }\r
+\r
@Override\r
public List<DBObject> getStories() {\r
List<DBObject> result = null;\r
result = find.toArray();\r
return result;\r
}\r
+\r
+ @Override\r
+ public List<DBObject> getStoryFolderStories(long storyFolderId, BasicDBObject fields) {\r
+ List<DBObject> result = null;\r
+ DBCollection collection = db.getCollection(STORY_COLLECTION);\r
+ DBCursor find = collection.find(new BasicDBObject(REF_STORYFOLDER, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, storyFolderId))), fields)\r
+ .sort(new BasicDBObject(NAME, 1));\r
+ if (find.hasNext())\r
+ result = find.toArray();\r
+ return result;\r
+ }\r
+\r
}\r
import java.io.FileInputStream;\r
import java.lang.invoke.MethodHandles;\r
import java.net.URL;\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
import java.sql.SQLException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
import java.util.List;\r
+import java.util.Map;\r
import java.util.Properties;\r
+import java.util.Set;\r
\r
import javax.ws.rs.core.Response;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r
import org.junit.BeforeClass;\r
// assertEquals(2, m1.get("1"));\r
// }\r
\r
+ @Test\r
+ public void test3() throws Exception {\r
+ List<String> allDeleted = Files.readAllLines(Paths.get("c:\\Temp\\all_deleted.log"));\r
+ List<String> deletedNames = new ArrayList<>();\r
+ List<String> dirNames = new ArrayList<>();\r
+ for (String line : allDeleted) {\r
+ if (StringUtils.isBlank(line))\r
+ continue;\r
+\r
+ int pos = line.indexOf(' ', 107);\r
+ String name = line.substring(107, pos);\r
+ deletedNames.add(name);\r
+ //System.out.println(name);\r
+ }\r
+ List<String> allDir = Files.readAllLines(Paths.get("c:\\Temp\\all_dir.csv"));\r
+ for (String line : allDir) {\r
+ if (StringUtils.isBlank(line))\r
+ continue;\r
+\r
+ int pos = line.indexOf(';');\r
+ String name = line.substring(0, pos);\r
+ dirNames.add(name);\r
+ //System.out.println(name);\r
+ }\r
+\r
+ for (String deletedName : deletedNames) {\r
+ if (dirNames.contains(deletedName))\r
+ System.out.println(deletedName);\r
+ }\r
+ }\r
+\r
+ @Test\r
+ public void test4() throws Exception {\r
+ List<String> all = Files.readAllLines(Paths.get("c:\\Temp\\restorables.txt"));\r
+ SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd. HH:mm:ss");\r
+ Map<String, List<Date>> dates = new HashMap<>();\r
+ for (String line : all) {\r
+ if (StringUtils.isBlank(line))\r
+ continue;\r
+\r
+ int pos = line.indexOf('\t');\r
+ String d = line.substring(0, pos);\r
+ Date date = df.parse(d);\r
+ String name = line.substring(pos + 1);\r
+ List<Date> list = dates.get(name);\r
+ if (list == null) {\r
+ list = new ArrayList<>();\r
+ dates.put(name, list);\r
+ }\r
+ list.add(date);\r
+ }\r
+ Date limit = new Date(2018 - 1900, 1, 19, 6, 0, 0);\r
+ Set<String> keys = dates.keySet();\r
+ int count = 0;\r
+ for (String name : keys) {\r
+\r
+ boolean haslower = false;\r
+ boolean hasupper = false;\r
+ //System.out.println("processing " + name);\r
+\r
+ for (Date date : dates.get(name)) {\r
+\r
+ if (date.before(limit))\r
+ haslower = true;\r
+ if (date.after(limit))\r
+ hasupper = true;\r
+ //System.out.println("checked " + df.format(date) + " " + haslower + " " + hasupper);\r
+ }\r
+\r
+ if (haslower && hasupper) {\r
+ System.out.println(name);\r
+ count++;\r
+ }\r
+ }\r
+ System.out.println(count);\r
+ }\r
+\r
@Test\r
public void testClient() {\r
ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.28/services/rest/octopus/");\r
<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">\r
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>\r
-<stringAttribute key="M2_GOALS" value="clean deploy"/>\r
+<stringAttribute key="M2_GOALS" value="clean install"/>\r
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>\r
<booleanAttribute key="M2_OFFLINE" value="true"/>\r
<stringAttribute key="M2_PROFILES" value=""/>\r
--- /dev/null
+select * from mediafile where houseid = 'M009781A-0.MXF'\r
+\r
+select *, replace(mediafilehouseid, concat('-',itemhouseid), '') from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+select count(distinct(replace(mediafilehouseid, concat('-',itemhouseid), ''))) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+select count(distinct(mediahouseid)) 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%'\r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'Echo TV%'\r
+\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%'\r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%'\r
+\r
+select mediatitle, count(*) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' group by mediatitle\r
+\r
+select * from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'\r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%' \r
+\r
+select * from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and itemhouseid != itemtitle\r
+\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and itemhouseid != itemtitle\r
+\r
+\r
--- /dev/null
+--Összes klip\r
+select * from vw_items where mediacreated like '2018-01%'\r
+select distinct(mediafilehouseid) from vw_items where mediacreated like '2018-01%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediacreated like '2018-01%'\r
+select count(distinct(mediafilehouseid)) from vw_items\r
+\r
+--Octopus ID-hez rendelt klip \r
+select * from vw_items where itemtitle like 'Echo TV%' and mediacreated like '2018-01%'\r
+select count(distinct(mediahouseid)) from vw_items where itemtitle like 'Echo TV%' and mediacreated like '2018-01%'\r
+\r
+--Automatikusan archivált bejátszók\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%' and mediacreated like '2018-01%' \r
+\r
+--Automatikusan archivált visszarögzítések\r
+select * from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and (mediatitle like '%CLN%' or mediatitle like '%PGM%') and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and (mediatitle like '%CLN%' or mediatitle like '%PGM%') and mediacreated like '2018-01%' \r
+\r
+--ID-hez nem rendelt manuálisan archivált egyéb klip (magazin vagy forgatott)\r
+select * from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where itemtitle like 'MC-%' and mediahouseid like 'MC-%'and mediacreated like '2018-01%' \r
+\r
+--Migrált archívum\r
+select i.created, i.houseid as ihouse, i.title as ititle, m.houseid as mhouse, m.title as mtitle from item i left outer join media m on (m.itemid = i.id) where i.houseid not like 'MC-%' and m.houseid like 'MC-%' \r
+\r
+--Reklám ID-hez rendelt klip\r
+select * from vw_items where mediahouseid like 'R%'and mediacreated like '2018-01%' \r
+select count(distinct(mediafilehouseid)) from vw_items where mediahouseid like 'R%'and mediacreated like '2018-01%' \r
+\r
+--Promo ID-hez rendelt klip\r
+select * from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%'\r
+select count(distinct(mediahouseid)) from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' \r
+\r
+\r
+--select mediafilehouseid, count(*) from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' group by mediafilehouseid\r
+--select * from vw_items where mediahouseid like 'P%'and mediacreated like '2018-01%' and (mediafilehouseid='P001473A.MXF' or mediafilehouseid='P001479A.MXF')\r
+\r
+--Mûsor ID-hez rendelt klip\r
+select * from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+\r
+-- Egyéb ?\r
+select * from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid not like 'M%' and mediahouseid not like 'P%' and mediahouseid not like 'R%' and mediafilehouseid not like 'MC%' and mediacreated like '2018-01%'\r
+and itemtitle not like '%Echo TV%' and itemtitle not like '2%' and mediatitle not like '%CLN%' and mediatitle not like '%PGM%'\r
+\r
+-----------------------------------------------------------------\r
+\r
+\r
+\r
+select * from vw_items where mediahouseid like 'P%'\r
+select count(distinct(mediahouseid)) from vw_items where mediahouseid like 'P%'\r
+select mediafilehouseid, count(*) from vw_items where mediahouseid like 'P%' group by mediafilehouseid\r
+\r
+select mediafilehouseid, count(*) from vw_items where mediahouseid like 'R%' group by mediafilehouseid\r
+select * from vw_items where mediahouseid like 'R%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediahouseid like 'R%'\r
+\r
+\r
+select mediafilehouseid, count(*) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%' group by mediafilehouseid\r
+select * from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%'\r
+select count(distinct(mediafilehouseid)) from vw_items where mediafilehouseid like 'M%' and mediafilehouseid not like 'MC%'\r
+\r
+-----------------------------------------------------------------\r
+\r
+select * from mediafile where houseid = 'M009713A.MXF'\r
\r
List<WorkflowAction> getWorkflowActions(Date date);\r
\r
+ boolean isMediaFileExists(String houseid);\r
+\r
void merge(IEntityBase entity);\r
\r
void mergeItemStructure(Item item);\r
import org.apache.logging.log4j.Logger;\r
\r
import sqlj.runtime.ref.DefaultContext;\r
-import user.commons.ListUtils;\r
\r
public class ItemDAOEx {\r
private static final Logger logger = LogManager.getLogger();\r
String query = "select m.ID, m.TITLE, m.DESCRIPTION, m.ITEMID, m.ITEMTYPEID, m.HOUSEID, m.LENGTH, m.CREATED, m.ARCHIVED, m.POSTER from MEDIA m right outer join VW_MEDIAFILES f on (f.MEDIAID = m.ID) where m.CREATED > '2017-12-14' and f.MEDIAFILECOUNT = 1";\r
st = connection.prepareStatement(query);\r
rs = st.executeQuery();\r
- MediaDAO dao = (MediaDAO) manager.getBaseDAO(Media.class);\r
- result = ListUtils.cast(dao.entities(context, rs));\r
- if (result != null)\r
- result.forEach(m -> m.setPersister(manager));\r
+\r
+ while (rs.next()) {\r
+ Media m = new Media();\r
+ m.setPersister(manager);\r
+ m.setId(rs.getLong("id"));\r
+ m.setTitle(rs.getString("title"));\r
+ m.setDescription(rs.getString("description"));\r
+ m.setItemId(rs.getLong("itemid"));\r
+ m.setItemTypeId(rs.getLong("itemtypeid"));\r
+ m.setHouseId(rs.getString("houseid"));\r
+ m.setLength(rs.getLong("length"));\r
+ m.setCreated(rs.getTimestamp("created"));\r
+ m.setArchived(rs.getTimestamp("archived"));\r
+ m.setPoster(rs.getBytes("poster"));\r
+ if (result == null)\r
+ result = new ArrayList<>();\r
+ result.add(m);\r
+ }\r
+\r
connection.commit();\r
} catch (Exception e) {\r
try {\r
connection.rollback();\r
} catch (Exception e1) {\r
- e1.printStackTrace();\r
}\r
manager.throwError(e);\r
} finally {\r
package user.jobengine.db;\r
\r
import java.net.URI;\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
import java.sql.Statement;\r
dbPassword = System.getProperty(DBPASSWORD);\r
}\r
\r
+ @Override\r
+ public boolean isMediaFileExists(String houseid) {\r
+ boolean result = false;\r
+ ResultSet rs = null;\r
+ PreparedStatement st = null;\r
+ DefaultContext context = getDbContext();\r
+ Connection connection = context.getConnection();\r
+ try {\r
+\r
+ String query = String.format("select count(*) as c from MEDIAFILE where HOUSEID = '%s'", houseid);\r
+ st = connection.prepareStatement(query);\r
+ rs = st.executeQuery();\r
+ if (rs.next()) {\r
+ long versions = rs.getLong("c");\r
+ result = versions > 0;\r
+ }\r
+\r
+ connection.commit();\r
+ } catch (Exception e) {\r
+ try {\r
+ connection.rollback();\r
+ } catch (Exception e1) {\r
+ }\r
+ throwError(e);\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
+ putDbContext(context);\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
@Override\r
public void merge(IEntityBase entity) {\r
traceIn();\r
logger.error(exc);\r
}\r
}\r
+\r
}\r
import java.sql.DriverManager;\r
import java.sql.PreparedStatement;\r
import java.sql.ResultSet;\r
-import java.sql.ResultSetMetaData;\r
-import java.sql.Types;\r
import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\r
import java.util.Date;\r
\r
// [clIFsp_EC_MAM] @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null,\r
// @@StrParam1 varchar(200)=Null, @@StrParam2 varchar(max)=Null, @@DateParam1 datetime=Null, @@DateParam2 datetime=Null\r
-\r
- try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, 7, ?, ?, ?, ?, ?, ?, ?)}")) {\r
- stmt.setNull(1, Types.INTEGER);\r
- stmt.setNull(2, Types.INTEGER);\r
- stmt.setNull(3, Types.INTEGER);\r
- stmt.setNull(4, Types.INTEGER);\r
- stmt.setNull(5, Types.VARCHAR);\r
- stmt.setNull(6, Types.VARCHAR);\r
- stmt.setDate(7, new java.sql.Date(new Date().getTime()));\r
+ try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, Null, Null)}")) {\r
try (ResultSet rs = stmt.executeQuery()) {\r
while (rs.next()) {\r
-\r
- ResultSetMetaData rsmd = rs.getMetaData();\r
- for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {\r
- System.out.println(rsmd.getColumnLabel(i));\r
- }\r
- break;\r
+ result.add(rs.getString("v_MediaID"));\r
}\r
}\r
} catch (Exception e) {\r
--- /dev/null
+package user.jobengine.db;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+\r
+import org.junit.Test;\r
+\r
+import sqlj.runtime.ref.DefaultContext;\r
+\r
+public class TestSearch extends TestBase {\r
+\r
+ public boolean isMediaFileExists(String houseid) {\r
+ boolean result = false;\r
+ ItemManager itemManager = (ItemManager) manager;\r
+ ResultSet rs = null;\r
+ PreparedStatement st = null;\r
+ DefaultContext context = itemManager.getDbContext();\r
+ Connection connection = context.getConnection();\r
+ try {\r
+\r
+ String query = String.format("select count(*) as c from MEDIAFILE where HOUSEID = '%s'", houseid);\r
+ st = connection.prepareStatement(query);\r
+ rs = st.executeQuery();\r
+ if (rs.next()) {\r
+ long versions = rs.getLong("c");\r
+ result = versions > 0;\r
+ }\r
+\r
+ connection.commit();\r
+ } catch (Exception e) {\r
+ try {\r
+ connection.rollback();\r
+ } catch (Exception e1) {\r
+ }\r
+ itemManager.throwError(e);\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.putDbContext(context);\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ @Test\r
+ public void testSearchItemByMediaFileHouseID() {\r
+ assertTrue(isMediaFileExists("170807_DEMO_GULYAS_SZG.MXF1"));\r
+ assertTrue(isMediaFileExists("170807_DEMO_GULYAS_SZG.MXF"));\r
+ }\r
+\r
+}\r
<menu sclass="whitemenu" label="Archívum" >\r
<menupopup>\r
<menuitem sclass="rozsda" label="Keresés" onClick='includeContent.src="/pages/search_items.zul"' disabled="false" />\r
- <menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
<menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
<menuitem sclass="rozsda" label="Hiányzó anyagok" onClick='includeContent.src="/pages/missingmaterials.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
- <menuitem sclass="rozsda" label="Test" onClick='includeContent.src="/pages/database.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
+<!-- <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
+ <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
</menupopup>\r
</menu>\r
\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<zk xmlns="http://www.zkoss.org/2005/zul">\r
+ <vlayout hflex="1" vflex="1" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.NewsHistoryModel')">\r
+ <hbox height="10px" hflex="1" />\r
+ <hlayout hflex="1">\r
+ <space bar="false" />\r
+ <datebox id="chartDateSelector" width="150px" format="yyyy.MM.dd" lenient="false" compact="false" buttonVisible="true" disabled="false" />\r
+ <button id="btnShowChart" label="Megjelenít" />\r
+ </hlayout>\r
+ <hbox height="10px" hflex="1" />\r
+ <hlayout hflex="1" vflex="1" style="background: red;">\r
+ <tabbox hflex="1" vflex="1">\r
+ <tabs>\r
+ <tab label="Adatok" closable="false" />\r
+ <tab label="Grafikonok" closable="false" />\r
+ </tabs>\r
+ <tabpanels>\r
+ <tabpanel>\r
+ <grid model="@load(vm.dataList)" mold="default" sizedByContent="default" vflex="1" hflex="1">\r
+ <columns sizable="true">\r
+ <column forEach="${vm.columnList}" label="${each}"></column>\r
+ </columns>\r
+ <template name="model" var="r">\r
+ <row>\r
+ <label forEach="${vm.columnList}" value="${r.get(each)}"></label>\r
+ </row>\r
+ </template>\r
+ </grid>\r
+ </tabpanel>\r
+ <tabpanel>\r
+ </tabpanel>\r
+ </tabpanels>\r
+ </tabbox>\r
+ </hlayout>\r
+ </vlayout>\r
+</zk>
\ No newline at end of file
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.Init;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+\r
+import user.commons.ListUtils;\r
+import user.commons.nosql.NoSQLUtils;\r
+\r
+//http://zkfiddle.org/sample/3op451q/12-Dynamic-Columns#source-1\r
+public class NewsHistoryModel {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ private List<BasicDBObject> dataList;\r
+ private List<String> columnList;\r
+ private DB db = null;\r
+\r
+ private DBCollection collection;\r
+\r
+ public List<String> getColumnList() {\r
+ return columnList;\r
+ }\r
+\r
+ public List<BasicDBObject> getDataList() {\r
+ return dataList;\r
+ }\r
+\r
+ @Init\r
+ public void init() {\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ collection = db.getCollection("sessionlogs");\r
+\r
+ BasicDBObject first = (BasicDBObject) collection.findOne();\r
+ columnList = new ArrayList<>(first.keySet());\r
+\r
+ dataList = ListUtils.cast(collection.find().sort(new BasicDBObject("dateTime", -1)).toArray());\r
+ }\r
+\r
+ public void setColumnList(List<String> columnList) {\r
+ this.columnList = columnList;\r
+ }\r
+\r
+ public void setDataList(List<BasicDBObject> dataList) {\r
+ this.dataList = dataList;\r
+ }\r
+\r
+}\r