"template": "sys-import-morpheus-missing-materials.xml",\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
- {"name": "csvFilePath", "value": "/mnt/MORPHEUS", "type": "java.lang.String"},\r
+ {"name": "csvFilePath", "value": "c:\\temp\\__", "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
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.DBCursor;\r
import com.ibm.nosql.json.api.DBObject;\r
import com.ibm.nosql.json.api.NoSQLClient;\r
\r
public static List<DBObject> asList(DBCursor cursor) {\r
List<DBObject> result = null;\r
- if (cursor.hasNext())\r
- result = cursor.toArray();\r
- cursor.close();\r
- if (result == null)\r
- result = new ArrayList<>();\r
+ try {\r
+ cursor.lazyFetch();\r
+ while (cursor.hasNext()) {\r
+ DBObject obj = cursor.next();\r
+ if (result == null)\r
+ result = new ArrayList<>();\r
+ result.add(obj);\r
+ }\r
+ } finally {\r
+ cursor.close();\r
+ }\r
return result;\r
}\r
\r
return result;\r
}\r
\r
+ public static DBCollection collection(String name) {\r
+ return getNoSQLDB().getCollection(name);\r
+ }\r
+\r
public static DB getNoSQLDB() {\r
try {\r
// if (noSQLClient == null)\r
}\r
return noSQLClient;\r
}\r
-\r
}\r
static final String STORYID = "storyId";\r
static final String FORMAT = "format";\r
static final String REPORTERS = "reporters";\r
+ static final String $DATE = "$date";\r
+ static final String $ELEMMATCH = "$elemMatch";\r
\r
DBObject getRundown(Date scheduledDate);\r
\r
\r
public class OctopusAPI implements IOctopusAPI {\r
//private static final Logger logger = LogManager.getLogger();\r
- private static final String $DATE = "$date";\r
- private static final String $ELEMMATCH = "$elemMatch";\r
private DB db;\r
\r
public OctopusAPI() throws SQLException {\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}" /> \r
+ <label style="color:#e3e3e3; font-size:12px; font-weight:bold; cursor: help;" value="Bejelentkezve: ${sessionScope.userPrincipal.displayName}" /> \r
<attribute name="tooltip" if="${not empty sessionScope.userPrincipal.email}">\r
emailPopup, at_pointer\r
</attribute> \r
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>\r
<?init class="user.jobengine.zk.util.SubmitterAuthInitiator"?>\r
<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
+ <script>\r
+ window.history.pushState(null, "Hiányzó anyagok", "/actions/missingmaterials"); \r
+ </script>\r
<custom-attributes org.zkoss.zul.listbox.rod="true" />\r
<custom-attributes org.zkoss.zul.listbox.initRodSize="50" />\r
<custom-attributes org.zkoss.zul.listbox.preloadSize="50" />\r
<div align="left" width="100%">\r
<space bar="false" />\r
<button label="Importálás" onClick="@command('executeImportJob')" autodisable="self" disabled="@load(jlm.importDisabled)" />\r
- <button label="Visszaállítás" onClick="@command('executeRestoreJobs')" autodisable="self" disabled="false" />\r
+ <button label="Visszaállítás" onClick="@command('executeRestoreJobs')" autodisable="self" disabled="@load(jlm.selectedJobs eq null)" />\r
</div>\r
\r
<div height="100%" width="100%" style="background: #e3e3e3" align="left">\r
<groupbox height="94%" closable="false">\r
- <caption sclass="boldfont" label="Hiányzó adásanyagok" />\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"\r
- sclass="listbox-normal-style" emptyMessage="Nincs hiányzó anyag." selectedItems="@bind(jlm.selectedJobs)">\r
+ <caption sclass="boldfont" label="Adásanyagok" />\r
+ <listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top"\r
+ vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
+ emptyMessage="Nincs hiányzó anyag." selectedItems="@bind(jlm.selectedJobs)">\r
+ <auxhead sclass="category-center">\r
+ <auxheader colspan="4">\r
+ <toolbar vflex="min" style="font-size:8px; float: right;">\r
+ <toolbarbutton label="Lista törlése" image="/img/ic_delete_forever_black_18dp.png" autodisable="self" onClick="@command('clearList')" />\r
+ </toolbar>\r
+ </auxheader>\r
+ </auxhead>\r
<listhead sizable="true">\r
<listheader label="Adásbakerülés" hflex="min" align="left" sort="auto" />\r
<listheader label="Adásanyag" hflex="min" align="left" sort="auto" />\r
Selectors.wireComponents(view, this, false);\r
Selectors.wireEventListeners(view, this);\r
\r
- Map<String, Object> pathMap = ListUtils.asMap("jobs", "joblist");\r
+ Map<String, Object> pathMap = ListUtils.asMap("jobs", "joblist", "missingmaterials", "missingmaterials");\r
String parameter = Executions.getCurrent().getParameter("action");\r
String action = (String) pathMap.get(parameter);\r
if ("null".equals(parameter) || action == null) {\r
import org.zkoss.zul.Messagebox;\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
import com.ibm.nosql.json.api.DBCursor;\r
\r
+import user.commons.ListUtils;\r
import user.commons.morpheus.MorpheusStrings;\r
import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.db.ItemManagerData.SignalType;\r
private DBCollection collection;\r
private ScheduledJob importJob;\r
\r
+ @Command\r
+ public void clearList() {\r
+ resetLists();\r
+ collection.drop();\r
+ }\r
+\r
@Command\r
public void executeImportJob() {\r
try {\r
\r
@Command\r
public void executeRestoreJobs() {\r
+ if (selectedJobs == null)\r
+ return;\r
if (importJob == null) {\r
Messagebox.show("Nem található a rendszerben a 'import-morpheus-missing-materials.xml' folyamatsablon.");\r
return;\r
@Init\r
public void init() {\r
try {\r
+ collection = NoSQLUtils.collection(MorpheusStrings.COLLECTION_NAME);\r
jobList.setMultiple(true);\r
- SessionUtil.registerJobChangedListener(this);\r
this.jobEngine = JobEngine.getInstance();\r
if (jobEngine == null)\r
throw new Exception("Belső hiba! A JobEngine szolgáltatás elérhetetlen.");\r
\r
+ SessionUtil.registerJobChangedListener(this);\r
importJob = jobEngine.getScheduledJob(IMPORT_TEMPLATE);\r
\r
List<IJobRuntime> jobRuntimes = new ArrayList<>(jobEngine.getJobs().values());\r
}\r
\r
private void initializeList() {\r
- DB db = NoSQLUtils.getNoSQLDB();\r
- collection = db.getCollection(MorpheusStrings.COLLECTION_NAME);\r
+ resetLists();\r
DBCursor cursor = collection.find().sort(new BasicDBObject(MorpheusStrings.TIMETOAIR, -1)).limit(1000);\r
- if (selectedJobs != null)\r
- selectedJobs.clear();\r
- jobList.clear();\r
- while (cursor.hasNext())\r
- jobList.add((BasicDBObject) cursor.next());\r
-\r
+ jobList.addAll(ListUtils.cast(cursor.toArray()));\r
}\r
\r
public boolean isImportDisabled() {\r
}\r
}\r
\r
+ private void resetLists() {\r
+ if (selectedJobs != null)\r
+ selectedJobs.clear();\r
+ jobList.clear();\r
+ }\r
+\r
public void setImportDisabled(boolean importDisabled) {\r
this.importDisabled = importDisabled;\r
NotifyChange(IMPORT_DISABLED);\r
public void setSelectedJobs(Set<BasicDBObject> selectedJobs) {\r
this.selectedJobs = selectedJobs;\r
}\r
-\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
+import com.ibm.nosql.json.api.DBCursor;\r
import com.ibm.nosql.json.api.DBObject;\r
+import com.ibm.nosql.json.api.QueryBuilder;\r
\r
import sqlj.runtime.ref.DefaultContext;\r
import user.commons.CalendarUtils;\r
return result[0];\r
}\r
\r
+ private List<DBObject> getReferencedObjects(List<DBObject> stories, String referenceCollectionName, String referenceField) {\r
+ if (stories == null || stories.size() == 0)\r
+ return null;\r
+ List<Long> ids = null;\r
+ for (DBObject story : stories) {\r
+ if (story == null)\r
+ continue;\r
+ List<BasicDBObject> references = NoSQLUtils.asList((BasicDBObject) story, referenceField);\r
+ if (references == null)\r
+ continue;\r
+ for (BasicDBObject reference : references) {\r
+ if (reference == null || !reference.containsKey(IOctopusAPI.ID))\r
+ continue;\r
+ long id = reference.getLong(IOctopusAPI.ID);\r
+ if (ids == null)\r
+ ids = new ArrayList<>();\r
+ ids.add(id);\r
+ }\r
+ }\r
+ if (ids == null)\r
+ return null;\r
+ DBCollection rundownCollection = NoSQLUtils.collection(referenceCollectionName);\r
+ BasicDBObject query = (BasicDBObject) QueryBuilder.start().put(IOctopusAPI.ID).in(ids).get();\r
+ DBCursor cursor = rundownCollection.find(query);\r
+ return NoSQLUtils.asList(cursor);\r
+ }\r
+\r
private Item getRundownItem(BasicDBObject rundown) {\r
\r
StringBuilder query = new StringBuilder();\r
return result;\r
}\r
\r
+ public List<DBObject> getRundownsByPlaceHolderID(String id) {\r
+ DBCollection storyCollection = NoSQLUtils.collection(IOctopusAPI.STORY_COLLECTION);\r
+ BasicDBObject criteria = new BasicDBObject(IOctopusAPI.MOS_OBJECTS,\r
+ new BasicDBObject(IOctopusAPI.$ELEMMATCH, new BasicDBObject(IOctopusAPI.OBJ_ID, id)));\r
+ DBCursor find = storyCollection.find(criteria, new BasicDBObject(IOctopusAPI.REF_RUNDOWN, 1));\r
+ List<DBObject> rundowns = NoSQLUtils.asList(find);\r
+ return getReferencedObjects(rundowns, IOctopusAPI.RUNDOWN_COLLECTION, IOctopusAPI.REF_RUNDOWN);\r
+ }\r
+\r
private String getRundownTitle(BasicDBObject rundown) {\r
String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME);\r
if (StringUtils.isBlank(name))\r
\r
@Test\r
public void repairRundownChunks() throws Exception {\r
- OctopusAPI octopusAPI = new OctopusAPI();\r
Path sourcePath = Paths.get("c:\\Temp\\__");\r
final Set<String> names = new LinkedHashSet<>();\r
\r
\r
Media media = (Media) existing.keySet().toArray()[0];\r
List<String> itemTitles = (List<String>) existing.values().toArray()[0];\r
- List<BasicDBObject> rundowns = ListUtils.cast(octopusAPI.getRundownsByPlaceHolderID(splittedLine[1]));\r
+ List<BasicDBObject> rundowns = ListUtils.cast(getRundownsByPlaceHolderID(splittedLine[1]));\r
System.out.println(String.format("%s %d: ", splittedLine[1], media.getId()));\r
\r
for (BasicDBObject rd : rundowns) {\r
\r
@Test\r
public void repairRundownChunksNoLog() throws Exception {\r
- OctopusAPI octopusAPI = new OctopusAPI();\r
+ NoSQLUtils.collection(IOctopusAPI.RUNDOWN_COLLECTION).ensureIndex(new BasicDBObject(IOctopusAPI.ID, 1));\r
+\r
List<String> archivedFiles = getRundownMedias("2018-03-03", "2018-06-07");\r
+ int i = 1;\r
for (String file : archivedFiles) {\r
//lenyeli a duplikalt hozzadast, lekezelni. addig nem futtathato!!!!!!!\r
Map<Media, List<String>> existing = getExistingItemHouseIDs(file);\r
\r
Media media = (Media) existing.keySet().toArray()[0];\r
List<String> itemTitles = (List<String>) existing.values().toArray()[0];\r
- List<BasicDBObject> rundowns = ListUtils.cast(octopusAPI.getRundownsByPlaceHolderID(file));\r
- System.out.println(String.format("%s %d: ", file, media.getId()));\r
-\r
- if (rundowns == null)\r
- continue;\r
- for (BasicDBObject rd : rundowns) {\r
- String rundownTitle = getRundownTitle(rd);\r
- if (itemTitles.contains(rundownTitle) || rundownTitle.contains("00:00"))\r
- continue;\r
-\r
- Item item = getRundownItem(rd);\r
- if (item == null) {\r
- item = manager.createItem("Generic", rundownTitle, null, NoSQLUtils.asString(rd, IOctopusAPI.ID));\r
- item.add();\r
- System.out.print(String.format("* %s,", rundownTitle));\r
- } else {\r
- System.out.print(String.format("%s (%d),", rundownTitle, item.getId()));\r
- }\r
-\r
- List<MediaFile> mediaFiles = media.getMediaFiles();\r
- if (mediaFiles != null) {\r
- for (MediaFile mf : mediaFiles) {\r
- mf.setId(0);\r
- mf.setMediaId(0);\r
- }\r
- }\r
- media.setId(0);\r
- media.setItemId(item.getId());\r
- media.setPersister(manager);\r
- media.add();\r
-\r
- }\r
+ List<BasicDBObject> rundowns = ListUtils.cast(getRundownsByPlaceHolderID(file));\r
+ System.out.println(String.format("%d - %s %d: ", i, file, media.getId()));\r
+ i++;\r
+\r
+ // if (rundowns == null)\r
+ // continue;\r
+ // for (BasicDBObject rd : rundowns) {\r
+ // String rundownTitle = getRundownTitle(rd);\r
+ // if (itemTitles.contains(rundownTitle) || rundownTitle.contains("00:00"))\r
+ // continue;\r
+ //\r
+ // Item item = getRundownItem(rd);\r
+ // if (item == null) {\r
+ // item = manager.createItem("Generic", rundownTitle, null, NoSQLUtils.asString(rd, IOctopusAPI.ID));\r
+ // item.add();\r
+ // System.out.print(String.format("* %s,", rundownTitle));\r
+ // } else {\r
+ // System.out.print(String.format("%s (%d),", rundownTitle, item.getId()));\r
+ // }\r
+ //\r
+ // List<MediaFile> mediaFiles = media.getMediaFiles();\r
+ // if (mediaFiles != null) {\r
+ // for (MediaFile mf : mediaFiles) {\r
+ // mf.setId(0);\r
+ // mf.setMediaId(0);\r
+ // }\r
+ // }\r
+ // media.setId(0);\r
+ // media.setItemId(item.getId());\r
+ // media.setPersister(manager);\r
+ // media.add();\r
+ //\r
+ // }\r
}\r
}\r
\r
private void processMessage(BasicDBObject message) {
List<Session> deadSessions = null;
for (Session session : sessions) {
+ boolean sessionOpened = false;
try {
- NexioWSSocket.asyncSendResponse(session, message);
+ sessionOpened = session.isOpen();
+ if (sessionOpened)
+ NexioWSSocket.asyncSendResponse(session, message);
} catch (Exception e) {
logger.error(e);
+ sessionOpened = false;
+ }
+
+ if (!sessionOpened) {
if (deadSessions == null)
deadSessions = new ArrayList<>();
deadSessions.add(session);