<logger name="org.jboss.resteasy.specimpl" level="debug" />\r
<logger name="org.jboss.resteasy.plugins.server" level="debug" />\r
<logger name="org.jboss.resteasy.plugins.providers" level="debug" />\r
+ <logger name="user.commons.nexio.api" level="debug" />\r
</Loggers>\r
</Configuration>
\ No newline at end of file
{"joblist":[\r
{\r
"active": false,\r
- "name" : "On-demand archiválás",\r
+ "name" : "Felhasználói archiválás",\r
"template": "archive-ondemand.xml",\r
"executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
},\r
{\r
"active": false,\r
- "name" : "NEXIO adatok szinkronizása",\r
- "template": "nexio-sync.xml",\r
+ "name" : "Anyagok törlése",\r
+ "template": "delete-materials.xml",\r
"executeimmediate": true,\r
- "cronexpression": "0/20 * * ? * *"\r
+ "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "parameters": [ \r
+ {"name": "inputFolder", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"},\r
+ {"name": "userName", "value": "mediacube", "type": "java.lang.String"},\r
+ {"name": "password", "value": "Broadca5T", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
+ "active": false,\r
+ "name" : "NEXIO anyagok törlése",\r
+ "template": "delete-nexio-materials.xml",\r
+ "executeimmediate": true,\r
+ "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "parameters": [ \r
+ {"name": "port", "value": 21, "type": "java.lang.Integer"},\r
+ {"name": "userName", "value": "dani", "type": "java.lang.String"},\r
+ {"name": "password", "value": "dani", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
+ "active": false,\r
+ "name" : "OCTOPUS adatok szinkronizálása",\r
+ "template": "sync-octopus.xml",\r
+ "executeimmediate": true,\r
+ "cronexpression": "0 0 0/1 1/1 * ? *"\r
}, \r
{\r
"active": false,\r
<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
-<?pde version="3.8"?><target name="JobEngine" sequenceNumber="229">\r
+<?pde version="3.8"?><target name="JobEngine" sequenceNumber="233">\r
<locations>\r
<location path="${eclipse_home}" type="Profile"/>\r
<location path="${workspace_loc}/-dependencies/target/repository/plugins" type="Directory"/>\r
<plugin id="org.eclipse.osgi" version="3.11.2.v20161107-1947"/>\r
<plugin id="org.eclipse.osgi.services" version="3.2.100.v20100503"/>\r
<plugin id="org.eclipse.osgi.util"/>\r
+<plugin id="org.glassfish.jersey.core.jersey-common" version="2.23.2"/>\r
<plugin id="org.glassfish.web.javax.servlet.jsp"/>\r
<plugin id="org.glassfish.web.javax.servlet.jsp.jstl"/>\r
<plugin id="org.hamcrest.core" version="1.3.0.v201303031735"/>\r
<?xml version="1.0" encoding="UTF-8"?>\r
<executors>\r
- <executor className="user.jobengine.server.steps.ArchiveItemSubmitStep" maxConcurrent="1"/>\r
+ <executor className="user.jobengine.server.steps.ArchiveMaterialSubmitStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.FakeStep" maxConcurrent="10"/>\r
<executor className="user.jobengine.server.steps.MetadataTransformStep" maxConcurrent="1"/>\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Kézi archiválás">\r
+<jobtemplate name="Felhasználói archiválás">\r
<declarations>\r
<parameters>\r
<parameter name="inputFolder" type="java.lang.String"/>\r
</outputs>\r
</calljobstep>\r
\r
- <calljobstep id="step2" type="user.jobengine.server.steps.ArchiveItemSubmitStep" weight="1">\r
+ <calljobstep id="step2" type="user.jobengine.server.steps.ArchiveMaterialSubmitStep" weight="1">\r
<inputs>\r
<input>\r
<parameter name="globalInputFolder" />\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Anyagok törlése">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="inputFolder" type="java.lang.String"/>\r
+ <parameter name="userName" type="java.lang.String"/>\r
+ <parameter name="password" type="java.lang.String"/>\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" type="user.jobengine.server.steps.DeleteMaterialsStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="inputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="userName" />\r
+ </input>\r
+ <input>\r
+ <parameter name="password" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="NEXIO anyagok törlése">\r
+ <declarations>\r
+ <parameters>\r
+<!-- A host név 'nexio.host' rendszerparaméter -->\r
+ <parameter name="port" type="java.lang.Integer"/>\r
+ <parameter name="userName" type="java.lang.String"/>\r
+ <parameter name="password" type="java.lang.String"/>\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" type="user.jobengine.server.steps.DeleteNEXIOMaterialsStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="port" />\r
+ </input>\r
+ <input>\r
+ <parameter name="userName" />\r
+ </input>\r
+ <input>\r
+ <parameter name="password" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="OCTOPUS adatok szinkronizálása">\r
+ <commands>\r
+ <calljobstep id="id1" type="user.jobengine.server.steps.OCTOPUSDataMinerStep" weight="1" />\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
public class ArchiveListBuilderStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
// private static final String UTF8 = "utf-8";\r
- private static final String CATCHED = "catched";\r
private static final String STATUSFOLDER = ".STATUS";\r
private static final String MEDIAEXT = ".mxf";\r
private static final String JSONEXT = ".json";\r
*\r
* @author robi\r
*/\r
-public class ArchiveItemSubmitStep extends JobStep {\r
+public class ArchiveMaterialSubmitStep extends JobStep {\r
private static final String GLOBAL_INPUT_FOLDER = "globalInputFolder";\r
private static final Logger logger = LogManager.getLogger();\r
- private static final String JOBTEMPLATE = "archive-item.xml";\r
+ private static final String JOBTEMPLATE = "archive-material.xml";\r
private static final String ARCHIVE_ITEM = "archiveItem";\r
\r
@StepEntry\r
package user.jobengine.server.steps;\r
\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
\r
public class DeleteMaterialsStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
- private static final String UTF8 = "utf-8";\r
private static final String STATUSFOLDER = ".STATUS";\r
- private static final String MEDIAEXT = ".mxf";\r
- private static final String KILLDATE = ".catched";\r
+ private static final String KILLDATE = ".killdate";\r
+ private static final String MXFFILTER = "*.mxf";\r
+ private StoreUri sourceUri;\r
\r
@StepEntry\r
public Object[] execute(String inputFolder, String userName, String password, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
- //"\\\\10.10.1.100\\BRAAVOS\\ARCHIVE"\r
- //"mediacube"\r
- //"Broadca5T"\r
+ if (StringUtils.isBlank(inputFolder)) {\r
+ logger.error(getMarker(), "A folyamat 'inputFolder' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'inputFolder' input parameter missing.");\r
+ }\r
IItemManager manager = jobEngine.getItemManager();\r
- StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.SMB, inputFolder);\r
+ sourceUri = manager.createStoreUri(RemoteStoreProtocol.SMB, inputFolder);\r
sourceUri.setUserName(userName);\r
sourceUri.setPassword(password);\r
try {\r
- sourceUri.getRemoteFiles(f -> processPathItem(f));\r
+ sourceUri.getRemoteFiles(MXFFILTER, f -> processPathItem(f));\r
} catch (Exception e) {\r
- logger.error("", e);\r
- } finally {\r
+ logger.error(getMarker(), "Általános folyamat hiba. A rendszer hibaüzenete: {}", e.getMessage());\r
}\r
return null;\r
}\r
\r
private boolean processPathItem(RemoteFile remoteFile) {\r
//KILLDATE\r
- //{0}.{1}.KILLDATE\r
+ String killDateFileName = String.format("%s.*%s", remoteFile.getName(), KILLDATE);\r
+ logger.debug("Checking {}", killDateFileName);\r
+ List<RemoteFile> remoteKillDateFiles = null;\r
+ try {\r
+ sourceUri.setCurrentPath(STATUSFOLDER);\r
+ remoteKillDateFiles = sourceUri.getRemoteFiles(killDateFileName);\r
+ } catch (Exception e) {\r
+ //logger.error(getMarker(), "A {} fájl 'killdate' állományai nem kérdezhetőek le. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage());\r
+ return true;\r
+ }\r
+\r
+ if (remoteKillDateFiles == null || remoteKillDateFiles.size() == 0)\r
+ return true;\r
+\r
+ if (remoteKillDateFiles.size() != 1) {\r
+ logger.error(getMarker(), "A {} fájlhoz több 'killdate' állomány található, így nem eldönthető törölhető e.", remoteFile.getName());\r
+ return true;\r
+ }\r
+ RemoteFile killDateFile = remoteKillDateFiles.get(0);\r
+ String strKillDate = killDateFile.getName().toLowerCase().replace(remoteFile.getName().toLowerCase() + ".", "").replace(KILLDATE.toLowerCase(), "");\r
+ if (!StringUtils.isNumeric(strKillDate)) {\r
+ logger.error(getMarker(), "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", remoteFile.getName(), strKillDate);\r
+ return true;\r
+ }\r
+\r
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");\r
+ Date killDate = null;\r
+ try {\r
+ killDate = dateFormat.parse(strKillDate);\r
+ } catch (ParseException e) {\r
+ logger.error(getMarker(), "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", remoteFile.getName(),\r
+ strKillDate);\r
+ return true;\r
+ }\r
+\r
+ if (killDate.after(new Date()))\r
+ return true;\r
+\r
+ try {\r
+ sourceUri.setCurrentPath(null);\r
+ sourceUri.delete(remoteFile);\r
+ } catch (Exception e) {\r
+ logger.error(getMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage());\r
+ return true;\r
+ }\r
\r
- //MODIFIED\r
+ try {\r
+ sourceUri.setCurrentPath(STATUSFOLDER);\r
+ sourceUri.delete(killDateFile);\r
+ } catch (Exception e) {\r
+ logger.error(getMarker(), "A {} 'killdate' állománya nem törölhető. A rendszer hibaüzenete: {}", killDateFile.getName(), e.getMessage());\r
+ }\r
\r
- //NAME PATTERN\r
+ logger.info(getMarker(), "A {} fájl törlése a {} killdate alapján sikeresen megtörtént.", remoteFile.getName(), killDateFile.getName());\r
\r
return true;\r
}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.regex.Pattern;\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 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 user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class DeleteNEXIOMaterialsStep extends JobStep {\r
+ private static final String NEXIOCLIPS = "nexioclips";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String MODIFIEDTIMESTAMP = "modifiedtimestamp";\r
+ private static final String EXTAGENCY = "extagency";\r
+ private static final String LONGNAMEID = "longnameid";\r
+ private StoreUri sourceUri;\r
+ private String fileNameRegex = "1$";\r
+ private Date modified = new Date();\r
+ private String agency = "";\r
+\r
+ @StepEntry\r
+ public Object[] execute(int port, String userName, String password, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ String nexioHost = System.getProperty("nexio.host");\r
+ nexioHost = "localhost";\r
+ if (StringUtils.isBlank(nexioHost)) {\r
+ logger.error(getMarker(), "A 'nexio.host' rendszer paraméter nem található.");\r
+ throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
+ }\r
+\r
+ DB db = NoSQLUtils.getDB();\r
+\r
+ DBCollection collection = db.getCollection(NEXIOCLIPS);\r
+ //https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html\r
+ //http://www.vogella.com/tutorials/JavaRegularExpressions/article.html\r
+ QueryBuilder queryBuilder = QueryBuilder.start();\r
+ if (StringUtils.isNotBlank(fileNameRegex))\r
+ queryBuilder.and(QueryBuilder.start(LONGNAMEID).regex(Pattern.compile(fileNameRegex)).get());\r
+ if (StringUtils.isNotBlank(agency))\r
+ queryBuilder.and(QueryBuilder.start(EXTAGENCY).all(agency).get());\r
+ if (modified != null)\r
+ queryBuilder.and(QueryBuilder.start(MODIFIEDTIMESTAMP).lessThan(modified).get());\r
+ DBCursor cursor = collection.find(queryBuilder.get());\r
+ if (!cursor.hasNext())\r
+ return null;\r
+\r
+ IItemManager manager = jobEngine.getItemManager();\r
+ sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost);\r
+ sourceUri.setPortNumber(21);\r
+ sourceUri.setUserName(userName);\r
+ sourceUri.setPassword(password);\r
+\r
+ List<DBObject> clips = cursor.toArray();\r
+ for (DBObject dbObject : clips) {\r
+ String name = String.valueOf(dbObject.get(LONGNAMEID));\r
+ delete(name);\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private void delete(String name) {\r
+ RemoteFile remoteFile = null;\r
+ try {\r
+ remoteFile = sourceUri.getRemoteFile(name);\r
+ if (remoteFile == null)\r
+ throw new NullPointerException("File not exists: " + name);\r
+ sourceUri.delete(remoteFile);\r
+ logger.info(getMarker(), "A {} fájl törlése sikeres volt.", remoteFile.getName());\r
+ } catch (Exception e) {\r
+ logger.error(getMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage());\r
+ }\r
+ }\r
+\r
+}\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import user.commons.RemoteFile;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
-public class NexioDeleteMaterialsStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
-\r
- @StepEntry\r
- public Object[] execute(String inputFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
-\r
- try {\r
- } catch (Exception e) {\r
- logger.error("", e);\r
- } finally {\r
- }\r
- return null;\r
- }\r
-\r
- private boolean processPathItem(RemoteFile remoteFile) {\r
- //MODIFIED\r
-\r
- //NAME PATTERN\r
-\r
- //AGENCY\r
-\r
- return true;\r
- }\r
-}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.octopus.OctopusDataMiner;\r
+import user.commons.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.ProgressEvent;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class OCTOPUSDataMinerStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private IProgressEventListener progressListener;\r
+\r
+ private IProgressEventListener createListener(final IJobRuntime jobRuntime) {\r
+ return new IProgressEventListener() {\r
+ @Override\r
+ public void progressChanged(ProgressEvent evt) {\r
+ logger.info("Progress changed to " + evt.getProgress() + "%");\r
+ jobRuntime.incrementProgress(evt.getProgress());\r
+ }\r
+ };\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(IJobEngine jobEngine, final IJobRuntime jobRuntime) {\r
+ OctopusDataMiner dataMiner = null;\r
+ try {\r
+ progressListener = createListener(jobRuntime);\r
+ dataMiner = new OctopusDataMiner();\r
+ dataMiner.addProgressListener(progressListener);\r
+ dataMiner.run();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ if (dataMiner != null)\r
+ dataMiner.removeProgressListener(progressListener);\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
private Store store;\r
private FileType fileType;\r
\r
- public SelenioLowresTranscodeStep() {\r
+ public SelenioLowresTranscodeStep() throws Exception {\r
try {\r
address = System.getProperty("jobengine.selenio.address");\r
if (StringUtils.isBlank(address))\r
transcoder = service.getTranscodeMgrWSPort();\r
} catch (Exception e) {\r
logger.catching(e);\r
+ throw e;\r
}\r
}\r
\r
Export-Package: user.commons,
user.commons.logging,
user.commons.nexio,
+ user.commons.nosql,
user.commons.octopus,
user.commons.rcc,
user.commons.remotestore,
private EventListenerList progressListenerList;
private EventListenerList statusListenerList;
private int percent;
+ private IDirectoryLister lister;
public StoreUri() {
super();
statusListenerList.add(IStatusEventListener.class, listener);
}
+ public void cleanUp() {
+ if (lister != null)
+ try {
+ lister.cleanUp();
+ } catch (Exception e) {
+ logger.catching(e);
+ }
+ }
+
public void clearListeners() {
this.progressListenerList = new EventListenerList();
this.statusListenerList = new EventListenerList();
throw new Exception("InputStream is null!");
result = new RemoteFile();
- // Kitesztelni a helyes f�jlv�gz�d�seket!
String targetFileName = targetName;
if (StringUtils.isEmpty(targetFileName))
targetFileName = source.getName();
return result;
}
+ public void delete(RemoteFile remoteFile) throws Exception {
+ ensureLister();
+ lister.delete(remoteFile);
+ }
+
+ private void ensureLister() throws Exception {
+ if (lister == null)
+ lister = RemoteFileHandler.createLister(this);
+ if (lister == null)
+ throw new Exception("InputLister is null.");
+ }
+
public void fireProgressEvent(ProgressEvent evt) {
Object[] listeners = progressListenerList.getListenerList();
for (int i = 0; i < listeners.length; i += 2) {
return delivery;
}
- // public String getFullPath() {
- // return getFullPath(true);
- // }
- //
- // public String getFullPath(boolean trimProtocol) {
- // String uri = DirectoryUtils.checkSlash("/", getUri(), false, true);
- // String root = DirectoryUtils.checkSlash("/", getRootPath(), false, true);
- // String currentPath = DirectoryUtils.checkSlash("/", getCurrentPath(),
- // false, true);
- // String result = uri + root + currentPath;
- // if (trimProtocol)
- // result = result.substring(result.indexOf("://") + 3);
- // return result.replace("\\", "/");
- // }
-
public String getFilter() {
return filter;
}
return protocol;
}
- public RemoteFile getRemoteFile(String fileName) {
- RemoteFile result = null;
- try {
- IDirectoryLister inputLister = RemoteFileHandler.createLister(this);
- if (inputLister == null)
- throw new Exception("InputLister is null.");
- result = inputLister.get(fileName);
- } catch (Exception e) {
- logger.error(e);
- }
- return result;
+ public RemoteFile getRemoteFile(String fileName) throws Exception {
+ ensureLister();
+ return lister.get(fileName);
}
public List<RemoteFile> getRemoteFiles() throws Exception {
- List<RemoteFile> result = null;
- IDirectoryLister lister = RemoteFileHandler.createLister(this);
- if (lister != null)
- result = lister.list();
- return result;
+ ensureLister();
+ return lister.list();
}
public void getRemoteFiles(IRemoteFileListCallback callback) throws Exception {
- List<RemoteFile> result = null;
- IDirectoryLister lister = RemoteFileHandler.createLister(this);
- if (lister != null)
- lister.list(callback);
+ ensureLister();
+ lister.list(callback);
+ }
+
+ public List<RemoteFile> getRemoteFiles(String wildCard) throws Exception {
+ ensureLister();
+ return lister.list(wildCard);
+ }
+
+ public void getRemoteFiles(String wildCard, IRemoteFileListCallback callback) throws Exception {
+ ensureLister();
+ lister.list(wildCard, callback);
}
public String getRootPath() {
}
public RemoteFile transferFrom(StoreUri targetStoreUri, RemoteFile remoteFile, String targetName) throws Exception {
- IDirectoryLister inputLister = RemoteFileHandler.createLister(this);
- if (inputLister == null)
- throw new Exception("InputLister is null.");
+ ensureLister();
IDirectoryLister outputLister = RemoteFileHandler.createLister(targetStoreUri);
if (outputLister == null)
throw new Exception("OutputLister is null.");
- return copy(inputLister, outputLister, remoteFile, targetName);
+ return copy(lister, outputLister, remoteFile, targetName);
}
public RemoteFile transferFrom(StoreUri targetStoreUri, String fileName, String targetName) throws Exception {
- logger.info("transferFrom");
- IDirectoryLister inputLister = RemoteFileHandler.createLister(this);
- if (inputLister == null)
- throw new Exception("InputLister is null.");
- logger.info("InputLister is selected!");
- RemoteFile remoteFile = inputLister.get(fileName);
+ ensureLister();
+ RemoteFile remoteFile = lister.get(fileName);
if (remoteFile == null)
throw new Exception("RemoteFile is null.");
- // N�v �s m�ret ki�rat�sa
logger.info("RemoteFile:" + remoteFile.getName() + " " + remoteFile.getSize());
IDirectoryLister outputLister = RemoteFileHandler.createLister(targetStoreUri);
if (outputLister == null)
throw new Exception("OutputLister is null.");
- logger.info("OutputLister is selected!");
-
- return copy(inputLister, outputLister, remoteFile, targetName);
+ return copy(lister, outputLister, remoteFile, targetName);
}
}
\ No newline at end of file
//KONSTRUKTOR\r
public NexioClipEventDispatcher() {\r
try {\r
+ this.db = NoSQLUtils.getDB();\r
+\r
+ // BasicDBObject jsClip = new BasicDBObject();\r
+ // jsClip.put(ID, "%00001"); //Unique internal ID\r
+ // jsClip.put(LONGNAMEID, "valami1"); //Extended ID (Filename)\r
+ // jsClip.put(DURATION, 100);\r
+ // jsClip.put(MODIFIEDTIMESTAMP, new Date());\r
+ // jsClip.put(EXTAGENCY, "TEST1");\r
+ // Map<String, BasicDBObject> emptyMap = new HashMap<String, BasicDBObject>();\r
+ // this.saveClipIntoMongo(jsClip, emptyMap);\r
+\r
//nexio init\r
this.controller = new Controller(NEXIO_HOST);\r
this.controller.connect();\r
logger.info("NexioClipEventDispatcher nexio server is connected.");\r
\r
this.progressListenerList = new EventListenerList();\r
- this.db = NoSQLUtils.getDB();\r
this.dropAllClipsFromMongo();\r
this.ensureIndexes();\r
\r
* @throws Exception\r
*/\r
private void copyClipsIntoMongo() throws Exception {\r
+ logger.info("Starting initial NEXIO metadata import.");\r
Map<String, BasicDBObject> emptyMap = new HashMap<String, BasicDBObject>();\r
Iterator<Clip> clips = controller.getMediabase().getClips();\r
while (clips.hasNext()) {\r
Clip clip = clips.next();\r
BasicDBObject jsonClip = convertClipToJSON(clip);\r
+ logger.info("Found NEXIO clip: {} {}", clip.getId(), clip.getXid());\r
this.saveClipIntoMongo(jsonClip, emptyMap);\r
}\r
+ logger.info("NEXIO metadata import completed.");\r
}\r
\r
public void dropAllClipsFromMongo() {\r
}\r
\r
/*\r
-\r
+ \r
int c = connection.read(buffer, 0, 2);\r
//2 bytes hosszan az idokozben hozzaadott id-k szamossaga\r
if (c < 2) {\r
throw new ProtocolException("c, 2, 2");\r
}\r
//MSB, LSB\r
-\r
+ \r
return nofIds;\r
*/\r
return ret;\r
package user.commons.nexio.api;\r
\r
import java.util.ArrayList;\r
-import java.util.Iterator;\r
\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
import user.commons.nexio.server.protocol.TCPConnection;\r
\r
/**\r
- * Szeparalt konnekcion feliratkozik a nexio change notification eventekre.\r
- * 1. send CHANGE_NOTIFICATION_REQ + mask (add+delete)\r
- * 2. read (2 bytes) ACK\r
- * 3. blocking read (4 bytes) CHANGE_NOTIFICATION_RESP 4 bytes, \r
- * az utolso biten mondja meg, hogy add vagy delete NN(notification number)\r
- * 4. send ACK\r
- * 5. send LIST_FIRST_ID_LIST_ADDED vagy LIST_FIRST_ID_LIST_DELETED a 3. pont NN valasza alapjan\r
- * 6. read LIST_FIRST.. response (2 bytes), elvart valasz: D84C\r
- * 7. read first id (8 bytes)\r
- * 8. send LIST_NEXT_ID_LIST\r
- * 8b. read list next.. response(2 bytes) elvart valasz: D84D, ha nincs tobb akkor: D04D -> 9. pont\r
- * 8c. read NEXT ID (8 bytes) ha D84D volt a 9. pont valasza\r
- * 8d. vissza 8. pontra\r
- * 9. ismetles a 3. ponttol \r
+ * Szeparalt konnekcion feliratkozik a nexio change notification eventekre. 1. send CHANGE_NOTIFICATION_REQ + mask (add+delete) 2. read (2 bytes) ACK 3.\r
+ * blocking read (4 bytes) CHANGE_NOTIFICATION_RESP 4 bytes, az utolso biten mondja meg, hogy add vagy delete NN(notification number) 4. send ACK 5. send\r
+ * LIST_FIRST_ID_LIST_ADDED vagy LIST_FIRST_ID_LIST_DELETED a 3. pont NN valasza alapjan 6. read LIST_FIRST.. response (2 bytes), elvart valasz: D84C 7. read\r
+ * first id (8 bytes) 8. send LIST_NEXT_ID_LIST 8b. read list next.. response(2 bytes) elvart valasz: D84D, ha nincs tobb akkor: D04D -> 9. pont 8c. read NEXT\r
+ * ID (8 bytes) ha D84D volt a 9. pont valasza 8d. vissza 8. pontra 9. ismetles a 3. ponttol\r
+ *\r
* @author robi\r
*/\r
\r
-public class MediaListener implements Runnable{\r
+public class MediaListener implements Runnable {\r
\r
static private final char[] hexArray = "0123456789ABCDEF".toCharArray();\r
static private final Logger logger = LogManager.getLogger();\r
//MASK REQ RESP_NOT_NUM\r
//00 00 00 01 0x00 IDs in Added List BC=0x01, NN=0x00, DATA=none\r
//00 00 00 02 0x01 IDs in Deleted List BC=0x01, NN=0x01, DATA=none\r
- static private final byte[] CHANGE_NOTIFICATION_REQ = { (byte) 0xC4, (byte)0xA5, 0,0,0,0x03}; //C4A5 + MASK=ADD+DELETE\r
+ static private final byte[] CHANGE_NOTIFICATION_REQ = { (byte) 0xC4, (byte) 0xA5, 0, 0, 0, 0x03 }; //C4A5 + MASK=ADD+DELETE\r
//10 01 response immediately\r
- static private final byte[] ACK = { (byte) 0x10, (byte)0x01};\r
- //CF A6 BC NN DATA NN=0 -> IDs are in added list, NN=1 -> IDs are in deleted list \r
- static private final byte[] CHANGE_NOTIFICATION_RESP = { (byte) 0xCF, (byte)0xA6};\r
- //List First ID List (C1 4C) \r
- static private final byte[] LIST_FIRST_ID_LIST_ADDED = { (byte) 0xC1, (byte)0x4C, (byte)0x02}; //2 added, 3 deleted\r
- static private final byte[] LIST_FIRST_ID_LIST_DELETED = { (byte) 0xC1, (byte)0x4C, (byte)0x03}; //2 added, 3 deleted\r
- //List First ID List (C0 4D) \r
- static private final byte[] LIST_NEXT_ID_LIST = { (byte) 0xC0, (byte)0x4D};\r
- \r
+ static private final byte[] ACK = { (byte) 0x10, (byte) 0x01 };\r
+ //CF A6 BC NN DATA NN=0 -> IDs are in added list, NN=1 -> IDs are in deleted list\r
+ static private final byte[] CHANGE_NOTIFICATION_RESP = { (byte) 0xCF, (byte) 0xA6 };\r
+ //List First ID List (C1 4C)\r
+ static private final byte[] LIST_FIRST_ID_LIST_ADDED = { (byte) 0xC1, (byte) 0x4C, (byte) 0x02 }; //2 added, 3 deleted\r
+ static private final byte[] LIST_FIRST_ID_LIST_DELETED = { (byte) 0xC1, (byte) 0x4C, (byte) 0x03 }; //2 added, 3 deleted\r
+ //List First ID List (C0 4D)\r
+ static private final byte[] LIST_NEXT_ID_LIST = { (byte) 0xC0, (byte) 0x4D };\r
+\r
static private final String LIST_FIRST_ID_LIST_FOUND = "D84C";\r
static private final String LIST_FIRST_ID_LIST_NOT_FOUND = "D04C";\r
- \r
+\r
static private final String LIST_NEXT_ID_LIST_FOUND = "D84D";\r
static private final String LIST_NEXT_ID_LIST_NOT_FOUND = "D04D";\r
- \r
- static private final int NN_ID_ADDED = 0;\r
- static private final int NN_ID_DELETED = 1;\r
- \r
+\r
+ static private final int NN_ID_ADDED = 0;\r
+ static private final int NN_ID_DELETED = 1;\r
+\r
+ public static String bytesToHex(byte[] bytes) {\r
+ char[] hexChars = new char[bytes.length * 2];\r
+ for (int j = 0; j < bytes.length; j++) {\r
+ int v = bytes[j] & 0xFF;\r
+ hexChars[j * 2] = hexArray[v >>> 4];\r
+ hexChars[j * 2 + 1] = hexArray[v & 0x0F];\r
+ }\r
+ return new String(hexChars);\r
+ }\r
+\r
private ArrayList<ClipEventListener> clipEventListeners = new ArrayList<ClipEventListener>();\r
private boolean isRunning = false;\r
- private Mediabase mediaBase = null;\r
\r
+ private Mediabase mediaBase = null;\r
private int nexioPort = 557;\r
private String nexioHost = null;\r
+\r
private Connection connection = null;\r
- \r
+\r
//KONSTRUKTOR\r
- public MediaListener(Mediabase _mediaBase, String _nexioHost, int _nexioPort){\r
+ public MediaListener(Mediabase _mediaBase, String _nexioHost, int _nexioPort) {\r
this.mediaBase = _mediaBase;\r
this.nexioHost = _nexioHost;\r
this.nexioPort = _nexioPort;\r
startListener();\r
}\r
- \r
- public void startListener(){\r
- try{\r
- createNexioConnection();\r
- this.isRunning = true;\r
- Thread t = new Thread(this, "MediaListener");\r
- t.start();\r
- logger.info("Nexio MediaListener is starting...");\r
- }catch(Exception exc){\r
- logger.error("", exc);\r
+\r
+ public void addClipEventListener(ClipEventListener listener) {\r
+ this.clipEventListeners.add(listener);\r
+ }\r
+\r
+ private void createNexioConnection() throws Exception {\r
+ this.connection = TCPConnection.getInstance(this.nexioHost, this.nexioPort);\r
+ logger.info("Nexio MediaListener is connected to NEXIO " + this.nexioHost + " : " + this.nexioPort);\r
+ }\r
+\r
+ private void fireEvent(String idString, int notificationNumber) throws Exception {\r
+ Id id = new Id(idString);\r
+ ClipEvent evt = null;\r
+ if (notificationNumber == NN_ID_ADDED) {\r
+ evt = new ClipEvent(mediaBase.getClip(id), ClipEventType.CLIP_ADDED);\r
+ } else if (notificationNumber == NN_ID_DELETED) {\r
+ evt = new ClipEvent(mediaBase.getClip(id), ClipEventType.CLIP_DELETED);\r
+ }\r
+ for (ClipEventListener cel : this.clipEventListeners) {\r
+ cel.clipEventPerformed(evt);\r
+ }\r
+ }\r
+\r
+ private byte[] readBytes(int numberOfBytes) throws Exception {\r
+ try {\r
+ byte[] ret = new byte[numberOfBytes];\r
+ this.connection.read(ret, 0, numberOfBytes);\r
+ return ret;\r
+ } catch (Exception e) {\r
+ restartListener();\r
+ throw e;\r
}\r
}\r
\r
- public void stopListener(){\r
+ public void removeClipEventListener(ClipEventListener listener) {\r
+ this.clipEventListeners.remove(listener);\r
+ }\r
+\r
+ private void restartListener() throws Exception {\r
this.isRunning = false;\r
+ Thread.sleep(3000);\r
+ try {\r
+ Thread.currentThread().interrupt();\r
+ } catch (Exception e) {\r
+ }\r
+ try {\r
+ if (this.connection != null) {\r
+ this.connection.disconnect();\r
+ }\r
+ } catch (Exception e) {\r
+ }\r
+ //new connection / new thread\r
+ startListener();\r
}\r
- \r
\r
- \r
- public void run(){\r
- try{\r
+ @Override\r
+ public void run() {\r
+ try {\r
//SEND CHANGE NOTIFICATION REQ\r
writeBytes(CHANGE_NOTIFICATION_REQ);\r
- \r
+\r
//ACK\r
byte[] buffer = readBytes(2);\r
logger.info("Nexio MediaListener is waiting for events..");\r
- \r
- while(isRunning){\r
- try{\r
+\r
+ while (isRunning) {\r
+ try {\r
//CHANGE_NOTIFICATION_RESP (BLOCKING READ!)\r
- buffer = readBytes(4); //CFA6 BC NN->0=added, 1=deleted\r
+ buffer = readBytes(4); //CFA6 BC NN->0=added, 1=deleted\r
int notificationNumber = buffer[3];\r
logger.debug("Nexio MediaListener notification: " + bytesToHex(buffer));\r
- \r
+\r
//SEND ACK\r
-// writeBytes(ACK);\r
- \r
+ // writeBytes(ACK);\r
+\r
//LIST_FIRST_ID_LIST\r
/*\r
0x01 Main ID Handle List D8 4C ID\r
0x22 ID Handles/Extended IDs Added List DF 4C BC ID XID *\r
0x23 ID Handles/Extended IDs Deleted List DF 4C BC ID XID *\r
*/\r
- if(notificationNumber == NN_ID_ADDED){\r
+\r
+ boolean handled = false;\r
+ if (notificationNumber == NN_ID_ADDED) {\r
writeBytes(LIST_FIRST_ID_LIST_ADDED);\r
- }else\r
- if(notificationNumber == NN_ID_DELETED){\r
+ handled = true;\r
+ }\r
+\r
+ if (notificationNumber == NN_ID_DELETED) {\r
//SEND ACK\r
writeBytes(ACK);\r
writeBytes(LIST_FIRST_ID_LIST_DELETED);\r
+ handled = true;\r
}\r
- \r
+\r
+ if (!handled) {\r
+ writeBytes(ACK);\r
+ logger.debug("Unhandled notification: {}", bytesToHex(buffer));\r
+ continue;\r
+ }\r
+\r
//LIST_FIRST_ID_LIST response\r
buffer = readBytes(2);\r
- if(LIST_FIRST_ID_LIST_FOUND.equals(bytesToHex(buffer))){\r
- \r
+ if (LIST_FIRST_ID_LIST_FOUND.equals(bytesToHex(buffer))) {\r
+\r
//read first id\r
buffer = readBytes(8);\r
String stringId = new String(buffer);\r
logger.debug("Nexio MediaListener first id: " + stringId);\r
fireEvent(stringId, notificationNumber);\r
- \r
+\r
//read next ids\r
writeBytes(LIST_NEXT_ID_LIST);\r
- for(buffer=readBytes(2); LIST_NEXT_ID_LIST_FOUND.equals(bytesToHex(buffer)) && isRunning; buffer=readBytes(2)){\r
- \r
+ for (buffer = readBytes(2); LIST_NEXT_ID_LIST_FOUND.equals(bytesToHex(buffer)) && isRunning; buffer = readBytes(2)) {\r
+\r
byte[] idBuffer = readBytes(8);\r
stringId = new String(idBuffer);\r
logger.debug("Nexio MediaListener next id: " + stringId);\r
fireEvent(stringId, notificationNumber);\r
- \r
+\r
writeBytes(LIST_NEXT_ID_LIST);\r
}\r
logger.debug("Nexio MediaListener end of id list: " + bytesToHex(buffer));\r
//SEND ACK\r
- writeBytes(ACK); \r
- \r
- }else\r
- if(LIST_FIRST_ID_LIST_NOT_FOUND.equals(bytesToHex(buffer))){\r
+ writeBytes(ACK);\r
+\r
+ } else if (LIST_FIRST_ID_LIST_NOT_FOUND.equals(bytesToHex(buffer))) {\r
logger.debug("Nexio MediaListener LIST_FIRST_ID_LIST ID not found!");\r
- }else{\r
- logger.debug("Nexio MediaListener unknown answer has arrived for LIST_FIRST_ID_LIST: " + bytesToHex( buffer));\r
+ } else {\r
+ logger.debug("Nexio MediaListener unknown answer has arrived for LIST_FIRST_ID_LIST: " + bytesToHex(buffer));\r
}\r
- }catch(Exception exc){\r
+ } catch (Exception exc) {\r
logger.error("", exc);\r
}\r
}\r
this.connection.disconnect();\r
- }catch(Exception e){\r
+ } catch (Exception e) {\r
logger.error("", e);\r
}\r
}\r
\r
- private void fireEvent(String idString, int notificationNumber) throws Exception{\r
- Id id = new Id(idString);\r
- ClipEvent evt = null;\r
- if(notificationNumber == NN_ID_ADDED){\r
- evt = new ClipEvent(mediaBase.getClip(id), ClipEventType.CLIP_ADDED);\r
- }else\r
- if(notificationNumber == NN_ID_DELETED){\r
- evt = new ClipEvent(mediaBase.getClip(id), ClipEventType.CLIP_DELETED);\r
- }\r
- for(ClipEventListener cel : this.clipEventListeners){\r
- cel.clipEventPerformed(evt);\r
+ public void startListener() {\r
+ try {\r
+ createNexioConnection();\r
+ this.isRunning = true;\r
+ Thread t = new Thread(this, "MediaListener");\r
+ t.start();\r
+ logger.info("Nexio MediaListener is starting...");\r
+ } catch (Exception exc) {\r
+ logger.error("", exc);\r
}\r
}\r
\r
- private byte[] readBytes(int numberOfBytes) throws Exception{\r
- try{\r
- byte[] ret = new byte[numberOfBytes];\r
- this.connection.read(ret, 0, numberOfBytes);\r
- return ret;\r
- }catch(Exception e){\r
- restartListener();\r
- throw e;\r
- }\r
+ public void stopListener() {\r
+ this.isRunning = false;\r
}\r
- \r
- private void writeBytes(byte[] toWrite) throws Exception{\r
- try{\r
+\r
+ private void writeBytes(byte[] toWrite) throws Exception {\r
+ try {\r
this.connection.write(toWrite);\r
this.connection.flush();\r
- }catch(Exception e){\r
+ } catch (Exception e) {\r
restartListener();\r
throw e;\r
}\r
}\r
\r
- \r
- private void createNexioConnection() throws Exception{\r
- this.connection = TCPConnection.getInstance(this.nexioHost, this.nexioPort);\r
- logger.info("Nexio MediaListener is connected to NEXIO " + this.nexioHost + " : " + this.nexioPort);\r
- }\r
- \r
- \r
- private void restartListener() throws Exception{\r
- this.isRunning = false;\r
- Thread.sleep(3000);\r
- try{\r
- Thread.currentThread().interrupt();\r
- }catch(Exception e){}\r
- try{\r
- if(this.connection != null){\r
- this.connection.disconnect();\r
- }\r
- }catch(Exception e){}\r
- //new connection / new thread\r
- startListener();\r
- }\r
- \r
- \r
- public void addClipEventListener(ClipEventListener listener){\r
- this.clipEventListeners.add(listener);\r
- }\r
-\r
- public void removeClipEventListener(ClipEventListener listener){\r
- this.clipEventListeners.remove(listener);\r
- }\r
- \r
- public static String bytesToHex(byte[] bytes) {\r
- char[] hexChars = new char[bytes.length * 2];\r
- for ( int j = 0; j < bytes.length; j++ ) {\r
- int v = bytes[j] & 0xFF;\r
- hexChars[j * 2] = hexArray[v >>> 4];\r
- hexChars[j * 2 + 1] = hexArray[v & 0x0F];\r
- }\r
- return new String(hexChars);\r
- }\r
- \r
- \r
}\r
import java.util.HashSet;\r
import java.util.List;\r
\r
+import javax.swing.event.EventListenerList;\r
import javax.ws.rs.client.Invocation.Builder;\r
import javax.ws.rs.core.Response;\r
\r
import com.ibm.nosql.json.api.WriteResult;\r
\r
import user.commons.nosql.NoSQLUtils;\r
+import user.commons.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.ProgressEvent;\r
\r
public class OctopusDataMiner implements Runnable {\r
private static final Logger logger = LogManager.getLogger();\r
private String apiUser;\r
private String apiPwd;\r
private HashSet<Long> storyIDs = new HashSet<>();\r
+ private EventListenerList progressListenerList;\r
+ private ProgressEvent progressEvent = new ProgressEvent(this, 0);\r
\r
public OctopusDataMiner() {\r
String jdbcUrl = System.getProperty("jobengine.nosql.db.url");\r
webTarget = client.target(apiAddress).register(new BasicAuthentication(apiUser, apiPwd));\r
}\r
\r
- @Override\r
- public void run() {\r
- logger.info(STARTING);\r
- try {\r
- ensureIndexes();\r
- Date lastUpdateTime = getLastUpdateTime();\r
- setLastUpdateTime(new Date());\r
- BasicDBList rundowns = queryRundowns(lastUpdateTime);\r
- if (rundowns != null)\r
- storeRundowns(rundowns, lastUpdateTime);\r
- BasicDBList storyFolders = queryStoryFolders(lastUpdateTime);\r
- if (storyFolders != null)\r
- storeStoryFolders(storyFolders, lastUpdateTime);\r
- deleteOrphanStories();\r
- } catch (Exception e) {\r
- logger.error(e);\r
+ public void addProgressListener(IProgressEventListener listener) {\r
+ progressListenerList.add(IProgressEventListener.class, listener);\r
+ }\r
+\r
+ private BasicDBList asDBList(BasicDBObject obj, String name) {\r
+ BasicDBList result = null;\r
+ if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBList))\r
+ result = (BasicDBList) obj.get(name);\r
+ return result;\r
+ }\r
+\r
+ private BasicDBObject asDBObject(BasicDBObject obj, String name) {\r
+ BasicDBObject result = null;\r
+ if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBObject))\r
+ result = (BasicDBObject) obj.get(name);\r
+ return result;\r
+ }\r
+\r
+ private void checkAndStoreStory(BasicDBObject modifiedStory, Date lastUpdateTime, long storyID, int position, long referenceID, String referenceName,\r
+ DBCollection collection) {\r
+ boolean isContains = storyIDs.contains(storyID);\r
+ if (!isContains)\r
+ storyIDs.add(storyID);\r
+ if (lastUpdateTime != null && !isModified(lastUpdateTime, modifiedStory, MODIFIED))\r
+ return;\r
+ if (isContains) {\r
+ logger.trace(PROCESSING_MULTI_REFERENCED_STORY_ID + storyID);\r
+ modifiedStory = (BasicDBObject) collection.findOne(new BasicDBObject(ID, storyID));\r
}\r
- logger.trace(FINISHED);\r
+ BasicDBList references = asDBList(modifiedStory, referenceName);\r
+ if (references == null) {\r
+ references = new BasicDBList();\r
+ modifiedStory.append(referenceName, references);\r
+ }\r
+ references.add(new BasicDBObject(ID, referenceID).append(POSITION, position));\r
+ logger.info(String.format(SAVING_STORY_D, storyID));\r
+ collection.save(modifiedStory);\r
+ }\r
+\r
+ public void clear() {\r
+ db.getCollection(RUNDOWN_COLLECTION_NAME).remove();\r
+ db.getCollection(STORY_COLLECTION_NAME).remove();\r
+ db.getCollection(STORY_FOLDER_COLLECTION_NAME).remove();\r
+ db.getCollection(TIME_COLLECTION_NAME).remove();\r
+ }\r
+\r
+ private String concatParentsToStoryFolder(BasicDBObject actual, String name) {\r
+\r
+ String fields = "name,id,parent";\r
+ Response response = query("StoryFolder/" + actual.getLong("id"), fields).get();\r
+ String json = response.readEntity(String.class);\r
+ BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
+ BasicDBObject res = (BasicDBObject) resultObject.get("result");\r
+ BasicDBObject parent = (BasicDBObject) res.get("parent");\r
+ if (parent == null || parent.isEmpty())\r
+ return name;\r
+ String parentName = parent.getString("name");\r
+ String actualName = actual.getString("name");\r
+ String newName = String.format("%s/%s", parentName, actualName);\r
+ return concatParentsToStoryFolder(parent, newName);\r
}\r
\r
private void deleteOrphanStories() {\r
}\r
}\r
\r
- private BasicDBList queryStoryFolders(Date lastUpdateTime) {\r
- logger.trace(ENTER);\r
- BasicDBList result = null;\r
- String fields = ID_NAME_MODIFIED;\r
- Response response = query(STORY_FOLDER, fields).get();\r
- String json = response.readEntity(String.class);\r
- BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
- if (resultObject != null)\r
- result = asDBList(resultObject, RESULT);\r
- \r
- /*teszt*/\r
- List<BasicDBObject> list = NoSQLUtils.asList(result);\r
- for(BasicDBObject actual : list) {\r
- String fullName = concatParentsToStoryFolder(actual, actual.getString("name"));\r
- logger.info(String.format("fullname %s", fullName));\r
- actual.remove("name");\r
- actual.append("name", fullName);\r
+ private void ensureIndexes() {\r
+ DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
+ if (collection.count() == 0)\r
+ collection.ensureIndex(ID);\r
+ collection = db.getCollection(RUNDOWN_COLLECTION_NAME);\r
+ if (collection.count() == 0) {\r
+ collection.ensureIndex(ID);\r
+ collection.ensureIndex(SCHEDULED_START);\r
}\r
- \r
- logger.trace(EXIT);\r
- return result;\r
- }\r
- \r
- private String concatParentsToStoryFolder(BasicDBObject actual, String name) {\r
- String fields = "name,id,parent";\r
- Response response = query("StoryFolder/"+actual.getLong("id"), fields).get();\r
- String json = response.readEntity(String.class);\r
- BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
- BasicDBObject res = (BasicDBObject) resultObject.get("result");\r
- BasicDBObject parent = (BasicDBObject) res.get("parent");\r
- if(parent == null || parent.isEmpty())\r
- return name;\r
- String parentName = parent.getString("name");\r
- String actualName = actual.getString("name");\r
- String newName = String.format("%s/%s", parentName, actualName);\r
- return concatParentsToStoryFolder(parent, newName);\r
+ collection = db.getCollection(STORY_COLLECTION_NAME);\r
+ if (collection.count() == 0)\r
+ collection.ensureIndex(ID);\r
}\r
\r
- private void storeStoryFolders(BasicDBList storyFolders, Date lastUpdateTime) {\r
- logger.trace(ENTER);\r
- List<BasicDBObject> storyFolderList = NoSQLUtils.asList(storyFolders);\r
- int idx = 1;\r
- for (BasicDBObject storyFolder : storyFolderList) {\r
- logger.info(\r
- String.format(CHECKING_STORY_FOLDER_S_D_D, storyFolder.getLong(ID), storyFolderList.size(), idx));\r
- storeStoryFolder(storyFolder, lastUpdateTime);\r
- idx++;\r
+ private void fireProgressEvent(ProgressEvent evt) {\r
+ logger.debug("Progress changed to " + evt.getProgress() + "%");\r
+ Object[] listeners = progressListenerList.getListenerList();\r
+ for (int i = 0; i < listeners.length; i += 2) {\r
+ if (listeners[i] == IProgressEventListener.class)\r
+ ((IProgressEventListener) listeners[i + 1]).progressChanged(evt);\r
}\r
- logger.trace(EXIT);\r
}\r
\r
- private void storeStoryFolder(BasicDBObject storyFolder, Date lastUpdateTime) {\r
- logger.trace(ENTER);\r
- long storyFolderID = storyFolder.getLong(ID);\r
+ private Date getLastUpdateTime() {\r
+ Date result = null;\r
+ DBCollection collection = db.getCollection(TIME_COLLECTION_NAME);\r
+ DBObject timeObject = collection.findOne();\r
+ if (timeObject != null)\r
+ result = (Date) timeObject.get(LASTUPDATE_TIME);\r
+ return result;\r
+ }\r
\r
- BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolderID);\r
- BasicDBList stories = asDBList(storyFoldersWithStories, STORIES);\r
- if (stories != null)\r
- storeStoryFolderStories(stories, storyFolderID, storyFolderID, lastUpdateTime);\r
- storyFolder.put(MODIFIED, toDate(storyFolder, MODIFIED));\r
- DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
- if (lastUpdateTime == null || (lastUpdateTime != null && isModifiedRundown(lastUpdateTime, storyFolder))) {\r
- logger.trace(String.format("saving storyFolder %d", storyFolderID));\r
- collection.save(storyFolder);\r
- }\r
- logger.trace(EXIT);\r
+ private boolean isModified(Date date, BasicDBObject object, String name) {\r
+ Date actualModifiedString = toDate(object, name);\r
+ if (actualModifiedString == null)\r
+ logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL);\r
+ int result = date.compareTo(actualModifiedString);\r
+ return result <= 0;\r
}\r
\r
- private void storeStoryFolderStories(BasicDBList stories, long storyFolderID, long referenceID,\r
- Date lastUpdateTime) {\r
- logger.trace(ENTER);\r
- List<BasicDBObject> list = NoSQLUtils.asList(stories);\r
- for (BasicDBObject story : list)\r
- storeStory(story, 0, referenceID, STORYFOLDER, lastUpdateTime);\r
- logger.trace(EXIT);\r
+ private boolean isModifiedRundown(Date date, BasicDBObject object) {\r
+ Date modified = (Date) object.get(MODIFIED);\r
+ int result = date.compareTo(modified);\r
+ return result <= 0;\r
}\r
\r
private Builder query(String path, String fields) {\r
return result;\r
}\r
\r
- private BasicDBList queryRundowns(Date lastUpdateTime) {\r
+ private BasicDBObject queryRundown(long id) {\r
logger.trace(ENTER);\r
- BasicDBList result = null;\r
- String fields = ID_NAME_MODIFIED_SCHEDULED_START;\r
- Response response = query(RUNDOWN, fields).get();\r
+ BasicDBObject result = null;\r
+ String fields = SLUGS_FIELDS;\r
+ Response response = query(String.format("%s/", RUNDOWN) + id, fields).get();\r
String json = response.readEntity(String.class);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
if (resultObject != null)\r
- result = asDBList(resultObject, RESULT);\r
+ result = asDBObject(resultObject, RESULT);\r
logger.trace(EXIT);\r
return result;\r
}\r
\r
- private BasicDBObject queryRundown(long id) {\r
+ private BasicDBList queryRundowns(Date lastUpdateTime) {\r
logger.trace(ENTER);\r
- BasicDBObject result = null;\r
- String fields = SLUGS_FIELDS;\r
- Response response = query(String.format("%s/", RUNDOWN) + id, fields).get();\r
+ BasicDBList result = null;\r
+ String fields = ID_NAME_MODIFIED_SCHEDULED_START;\r
+ Response response = query(RUNDOWN, fields).get();\r
String json = response.readEntity(String.class);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
if (resultObject != null)\r
- result = asDBObject(resultObject, RESULT);\r
+ result = asDBList(resultObject, RESULT);\r
logger.trace(EXIT);\r
return result;\r
}\r
return result;\r
}\r
\r
- private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) {\r
+ private BasicDBList queryStoryFolders(Date lastUpdateTime) {\r
logger.trace(ENTER);\r
- List<BasicDBObject> rundownsList = NoSQLUtils.asList(rundowns);\r
- int idx = 1;\r
- for (BasicDBObject rundown : rundownsList) {\r
- logger.info(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx));\r
- storeRundown(rundown, lastUpdateTime);\r
- idx++;\r
+ BasicDBList result = null;\r
+ String fields = ID_NAME_MODIFIED;\r
+ Response response = query(STORY_FOLDER, fields).get();\r
+ String json = response.readEntity(String.class);\r
+ BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
+ if (resultObject != null)\r
+ result = asDBList(resultObject, RESULT);\r
+\r
+ /*teszt*/\r
+ List<BasicDBObject> list = NoSQLUtils.asList(result);\r
+ for (BasicDBObject actual : list) {\r
+ String fullName = concatParentsToStoryFolder(actual, actual.getString("name"));\r
+ logger.info(String.format("fullname %s", fullName));\r
+ actual.remove("name");\r
+ actual.append("name", fullName);\r
}\r
+\r
logger.trace(EXIT);\r
+ return result;\r
+ }\r
+\r
+ public void removeProgressListener(IProgressEventListener listener) {\r
+ progressListenerList.remove(IProgressEventListener.class, listener);\r
+ }\r
+\r
+ @Override\r
+ public void run() {\r
+ logger.info(STARTING);\r
+ try {\r
+ ensureIndexes();\r
+ Date lastUpdateTime = getLastUpdateTime();\r
+ setLastUpdateTime(new Date());\r
+ BasicDBList rundowns = queryRundowns(lastUpdateTime);\r
+ if (rundowns != null)\r
+ storeRundowns(rundowns, lastUpdateTime);\r
+ else {\r
+ progressEvent.setProgress(50);\r
+ fireProgressEvent(progressEvent);\r
+ }\r
+\r
+ BasicDBList storyFolders = queryStoryFolders(lastUpdateTime);\r
+ if (storyFolders != null)\r
+ storeStoryFolders(storyFolders, lastUpdateTime);\r
+ else {\r
+ progressEvent.setProgress(100);\r
+ fireProgressEvent(progressEvent);\r
+ }\r
+ deleteOrphanStories();\r
+ } catch (Exception e) {\r
+ logger.error(e);\r
+ }\r
+ logger.trace(FINISHED);\r
+ }\r
+\r
+ public void setLastUpdateTime(Date lastUpdateTime) {\r
+ DBCollection collection = db.getCollection(OctopusAPI.TIME_COLLECTION_NAME);\r
+ DBObject timeObject = collection.findOne();\r
+ if (timeObject == null)\r
+ timeObject = new BasicDBObject();\r
+ timeObject.put(LASTUPDATE_TIME, lastUpdateTime);\r
+\r
+ collection.save(timeObject);\r
}\r
\r
private void storeRundown(BasicDBObject rundown, Date lastUpdateTime) {\r
logger.trace(EXIT);\r
}\r
\r
- private void storeRundownStories(BasicDBList slugs, long referenceID, Date lastUpdateTime) {\r
+ private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) {\r
logger.trace(ENTER);\r
- List<BasicDBObject> slugsList = NoSQLUtils.asList(slugs);\r
- for (BasicDBObject slug : slugsList) {\r
- if (slug.containsKey(STORY))\r
- storeStory((BasicDBObject) slug.get(STORY), slug.getInt(POSITION), referenceID, RUNDOWN2,\r
- lastUpdateTime);\r
- }\r
- logger.trace(EXIT);\r
- }\r
+ List<BasicDBObject> rundownsList = NoSQLUtils.asList(rundowns);\r
+ int idx = 1;\r
+ for (BasicDBObject rundown : rundownsList) {\r
+ logger.info(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx));\r
+ storeRundown(rundown, lastUpdateTime);\r
+ int progress = idx * 50 / rundownsList.size();\r
+ if (progress - progressEvent.getProgress() > 0) {\r
+ progressEvent.setProgress(progress);\r
+ fireProgressEvent(progressEvent);\r
+ }\r
\r
- private void storeStory(BasicDBObject story, int position, long referenceID, String referenceName,\r
- Date lastUpdateTime) {\r
- logger.trace(ENTER);\r
- try {\r
- // a run v�g�n lek�rj�k az �sszes storyID-t az adatb�zisb�l\r
- // �s ha van olyan eleme annak a list�nak, ami nincs benne a\r
- // mem�ri�ban t�rolt storyIDs setben, t�r�lj�k adatb�zisb�l\r
- long storyID = story.getLong(ID);\r
- DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
- BasicDBObject modifiedStory = story;\r
- // boolean trashed = story.getBoolean(TRASHED);\r
- // modifiedStory.remove(TRASHED);\r
- // nem m�k�dik\r
- /*\r
- * if (trashed) { modifiedStory = (BasicDBObject)\r
- * collection.findOne(new BasicDBObject(ID, storyID), new\r
- * BasicDBObject(_ID, 1)); collection.remove(modifiedStory); } else\r
- */\r
- checkAndStoreStory(modifiedStory, lastUpdateTime, storyID, position, referenceID, referenceName,\r
- collection);\r
- } catch (Exception e) {\r
- logger.error(e);\r
- throw e;\r
+ idx++;\r
}\r
logger.trace(EXIT);\r
}\r
\r
- private void checkAndStoreStory(BasicDBObject modifiedStory, Date lastUpdateTime, long storyID, int position,\r
- long referenceID, String referenceName, DBCollection collection) {\r
- boolean isContains = storyIDs.contains(storyID);\r
- if (!isContains)\r
- storyIDs.add(storyID);\r
- if (lastUpdateTime != null && !isModified(lastUpdateTime, modifiedStory, MODIFIED))\r
- return;\r
- if (isContains) {\r
- logger.trace(PROCESSING_MULTI_REFERENCED_STORY_ID + storyID);\r
- modifiedStory = (BasicDBObject) collection.findOne(new BasicDBObject(ID, storyID));\r
- }\r
- BasicDBList references = asDBList(modifiedStory, referenceName);\r
- if (references == null) {\r
- references = new BasicDBList();\r
- modifiedStory.append(referenceName, references);\r
- }\r
- references.add(new BasicDBObject(ID, referenceID).append(POSITION, position));\r
- logger.info(String.format(SAVING_STORY_D, storyID));\r
- collection.save(modifiedStory);\r
- }\r
-\r
- private BasicDBList asDBList(BasicDBObject obj, String name) {\r
- BasicDBList result = null;\r
- if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBList))\r
- result = (BasicDBList) obj.get(name);\r
- return result;\r
- }\r
-\r
- private BasicDBObject asDBObject(BasicDBObject obj, String name) {\r
- BasicDBObject result = null;\r
- if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBObject))\r
- result = (BasicDBObject) obj.get(name);\r
- return result;\r
- }\r
-\r
- private Date toDate(BasicDBObject obj, String name) {\r
- Date result = null;\r
- if (obj.containsKey(name)) {\r
- String dt = obj.getString(name);\r
- if (dt != null) {\r
- // create jodatime from date\r
- DateTime jdt = new DateTime(dt);\r
- result = jdt.toDate();\r
- }\r
- }\r
- return result;\r
- }\r
-\r
// private void insertStoryFoldersToDB2() {\r
// DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
// Set<String> storyKeys = storyFolders.keySet();\r
// storyFolders = converter.convertBasicDBObjectFromJson(result);\r
// }\r
\r
- public void clear() {\r
- db.getCollection(RUNDOWN_COLLECTION_NAME).remove();\r
- db.getCollection(STORY_COLLECTION_NAME).remove();\r
- db.getCollection(STORY_FOLDER_COLLECTION_NAME).remove();\r
- db.getCollection(TIME_COLLECTION_NAME).remove();\r
+ private void storeRundownStories(BasicDBList slugs, long referenceID, Date lastUpdateTime) {\r
+ logger.trace(ENTER);\r
+ List<BasicDBObject> slugsList = NoSQLUtils.asList(slugs);\r
+ for (BasicDBObject slug : slugsList) {\r
+ if (slug.containsKey(STORY))\r
+ storeStory((BasicDBObject) slug.get(STORY), slug.getInt(POSITION), referenceID, RUNDOWN2, lastUpdateTime);\r
+ }\r
+ logger.trace(EXIT);\r
}\r
\r
- private void ensureIndexes() {\r
- DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
- if (collection.count() == 0)\r
- collection.ensureIndex(ID);\r
- collection = db.getCollection(RUNDOWN_COLLECTION_NAME);\r
- if (collection.count() == 0) {\r
- collection.ensureIndex(ID);\r
- collection.ensureIndex(SCHEDULED_START);\r
+ private void storeStory(BasicDBObject story, int position, long referenceID, String referenceName, Date lastUpdateTime) {\r
+ logger.trace(ENTER);\r
+ try {\r
+ // a run v�g�n lek�rj�k az �sszes storyID-t az adatb�zisb�l\r
+ // �s ha van olyan eleme annak a list�nak, ami nincs benne a\r
+ // mem�ri�ban t�rolt storyIDs setben, t�r�lj�k adatb�zisb�l\r
+ long storyID = story.getLong(ID);\r
+ DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+ BasicDBObject modifiedStory = story;\r
+ // boolean trashed = story.getBoolean(TRASHED);\r
+ // modifiedStory.remove(TRASHED);\r
+ // nem m�k�dik\r
+ /*\r
+ * if (trashed) { modifiedStory = (BasicDBObject)\r
+ * collection.findOne(new BasicDBObject(ID, storyID), new\r
+ * BasicDBObject(_ID, 1)); collection.remove(modifiedStory); } else\r
+ */\r
+ checkAndStoreStory(modifiedStory, lastUpdateTime, storyID, position, referenceID, referenceName, collection);\r
+ } catch (Exception e) {\r
+ logger.error(e);\r
+ throw e;\r
}\r
- collection = db.getCollection(STORY_COLLECTION_NAME);\r
- if (collection.count() == 0)\r
- collection.ensureIndex(ID);\r
+ logger.trace(EXIT);\r
}\r
\r
- private Date getLastUpdateTime() {\r
- Date result = null;\r
- DBCollection collection = db.getCollection(TIME_COLLECTION_NAME);\r
- DBObject timeObject = collection.findOne();\r
- if (timeObject != null)\r
- result = (Date) timeObject.get(LASTUPDATE_TIME);\r
- return result;\r
- }\r
+ private void storeStoryFolder(BasicDBObject storyFolder, Date lastUpdateTime) {\r
+ logger.trace(ENTER);\r
+ long storyFolderID = storyFolder.getLong(ID);\r
\r
- public void setLastUpdateTime(Date lastUpdateTime) {\r
- DBCollection collection = db.getCollection(OctopusAPI.TIME_COLLECTION_NAME);\r
- DBObject timeObject = collection.findOne();\r
- if (timeObject == null)\r
- timeObject = new BasicDBObject();\r
- timeObject.put(LASTUPDATE_TIME, lastUpdateTime);\r
+ BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolderID);\r
+ BasicDBList stories = asDBList(storyFoldersWithStories, STORIES);\r
+ if (stories != null)\r
+ storeStoryFolderStories(stories, storyFolderID, storyFolderID, lastUpdateTime);\r
+ storyFolder.put(MODIFIED, toDate(storyFolder, MODIFIED));\r
+ DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
+ if (lastUpdateTime == null || (lastUpdateTime != null && isModifiedRundown(lastUpdateTime, storyFolder))) {\r
+ logger.trace(String.format("saving storyFolder %d", storyFolderID));\r
+ collection.save(storyFolder);\r
+ }\r
+ logger.trace(EXIT);\r
+ }\r
\r
- collection.save(timeObject);\r
+ private void storeStoryFolders(BasicDBList storyFolders, Date lastUpdateTime) {\r
+ logger.trace(ENTER);\r
+ List<BasicDBObject> storyFolderList = NoSQLUtils.asList(storyFolders);\r
+ int idx = 1;\r
+ for (BasicDBObject storyFolder : storyFolderList) {\r
+ logger.info(String.format(CHECKING_STORY_FOLDER_S_D_D, storyFolder.getLong(ID), storyFolderList.size(), idx));\r
+ storeStoryFolder(storyFolder, lastUpdateTime);\r
+ int progress = 50 + (idx * 50 / storyFolderList.size());\r
+ if (progress - progressEvent.getProgress() > 0) {\r
+ progressEvent.setProgress(progress);\r
+ fireProgressEvent(progressEvent);\r
+ }\r
+ idx++;\r
+ }\r
+ logger.trace(EXIT);\r
}\r
\r
- private boolean isModified(Date date, BasicDBObject object, String name) {\r
- Date actualModifiedString = toDate(object, name);\r
- if (actualModifiedString == null)\r
- logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL);\r
- int result = date.compareTo(actualModifiedString);\r
- return result <= 0;\r
+ private void storeStoryFolderStories(BasicDBList stories, long storyFolderID, long referenceID, Date lastUpdateTime) {\r
+ logger.trace(ENTER);\r
+ List<BasicDBObject> list = NoSQLUtils.asList(stories);\r
+ for (BasicDBObject story : list)\r
+ storeStory(story, 0, referenceID, STORYFOLDER, lastUpdateTime);\r
+ logger.trace(EXIT);\r
}\r
\r
- private boolean isModifiedRundown(Date date, BasicDBObject object) {\r
- Date modified = (Date) object.get(MODIFIED);\r
- int result = date.compareTo(modified);\r
- return result <= 0;\r
+ private Date toDate(BasicDBObject obj, String name) {\r
+ Date result = null;\r
+ if (obj.containsKey(name)) {\r
+ String dt = obj.getString(name);\r
+ if (dt != null) {\r
+ // create jodatime from date\r
+ DateTime jdt = new DateTime(dt);\r
+ result = jdt.toDate();\r
+ }\r
+ }\r
+ return result;\r
}\r
\r
}\r
}\r
\r
@Override\r
- public void delete(RemoteFile remoteFile) {\r
- // TODO Auto-generated method stub\r
-\r
+ public void delete(RemoteFile remoteFile) throws Exception {\r
+ if (remoteFile.getSourceObject() instanceof FTPFile) {\r
+ FTPFile ftpFile = (FTPFile) remoteFile.getSourceObject();\r
+ ftpClient.deleteFile(ftpFile.getName());\r
+ }\r
}\r
\r
@Override\r
FTPFile[] files = ftpClient.listFiles(fileName);\r
if (files != null && files.length == 1)\r
result = toRemoteFile(files[0]);\r
- cleanUp();\r
+ // cleanUp();\r
}\r
if (result == null)\r
throw new Exception("File not exists: " + fileName + " on uri " + storeUri);\r
file.setSize(ftpFile.getSize());\r
result.add(file);\r
}\r
- cleanUp();\r
+ // cleanUp();\r
}\r
return result;\r
}\r
throw new NotImplementedException();\r
}\r
\r
+ @Override\r
+ public List<RemoteFile> list(String wildCard) throws Exception {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public void list(String wildCard, IRemoteFileListCallback callback) throws Exception {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
private RemoteFile toRemoteFile(FTPFile file) {\r
RemoteFile result = new RemoteFile();\r
result.setName(file.getName());\r
result.setModify(new Timestamp(file.getTimestamp().getTimeInMillis()));\r
result.setIsFolder(file.isDirectory());\r
result.setSize(file.getSize());\r
+ result.setSourceObject(file);\r
return result;\r
}\r
\r
\r
void list(IRemoteFileListCallback callback) throws Exception;\r
\r
+ List<RemoteFile> list(String wildCard) throws Exception;\r
+\r
+ void list(String wildCard, IRemoteFileListCallback callback) throws Exception;\r
+\r
}\r
throw new NotImplementedException();\r
}\r
\r
+ @Override\r
+ public List<RemoteFile> list(String wildCard) throws Exception {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public void list(String wildCard, IRemoteFileListCallback callback) throws Exception {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
private RemoteFile toRemoteFile(File file) {\r
RemoteFile result = new RemoteFile();\r
result.setName(file.getName());\r
}\r
}\r
\r
+ @Override\r
+ public List<RemoteFile> list(String wildCard) throws Exception {\r
+ List<RemoteFile> result = new ArrayList<RemoteFile>();\r
+ NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, storeUri.getUserName(), storeUri.getPassword());\r
+ String path = "smb:" + storeUri.toString(true).replace("\\", "/");\r
+ SmbFile smbFile = new SmbFile(path, auth);\r
+ SmbFile[] list = smbFile.listFiles(wildCard);\r
+ for (SmbFile smb : list) {\r
+ RemoteFile file = toRemoteFile(smb);\r
+ result.add(file);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public void list(String wildCard, IRemoteFileListCallback callback) throws Exception {\r
+ NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, storeUri.getUserName(), storeUri.getPassword());\r
+ String path = "smb:" + storeUri.toString(true).replace("\\", "/");\r
+ SmbFile smbFile = new SmbFile(path, auth);\r
+ SmbFile[] list = smbFile.listFiles(wildCard);\r
+ for (SmbFile smb : list) {\r
+ RemoteFile file = toRemoteFile(smb);\r
+ if (callback != null) {\r
+ if (!callback.onRemoteFile(file))\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
private RemoteFile toRemoteFile(SmbFile file) throws Exception {\r
RemoteFile result = new RemoteFile();\r
result.setName(file.getName());\r
throw new NotImplementedException();\r
}\r
\r
+ @Override\r
+ public List<RemoteFile> list(String wildCard) throws Exception {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public void list(String wildCard, IRemoteFileListCallback callback) throws Exception {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
private RemoteFile toRemoteFile(TSMBackupFileObject file) {\r
RemoteFile result = new RemoteFile();\r
result.setName(file.getLowLevelName());\r
//ResultSetIterImpl iter = null;\r
#sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME \r
FROM JOB WHERE TEMPLATE = :template\r
- AND STATUS IN ('EXECUTING', 'WAIT_EXECUTOR', 'WAIT_SUSPEND', 'SUSPENDED', 'RUNABLE')};\r
+ AND STATUS IN ('EXECUTING', 'WAIT_EXECUTOR', 'WAIT_SUSPEND', 'RUNABLE')};\r
result = getList(context, iter, false);\r
} catch (Exception e) {\r
throw new ItemManagerException(e);\r
import org.apache.commons.lang.ArrayUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+import org.apache.logging.log4j.MarkerManager;\r
\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
public void cleanup() {\r
}\r
\r
+ protected Marker getMarker() {\r
+ return MarkerManager.getMarker(getRuntimeName());\r
+ }\r
+\r
+ protected String getRuntimeName() {\r
+ return jobRuntime.getName();\r
+ }\r
+\r
@Override\r
public Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Exception {\r
Object[] result = null;\r