#108 Nexio listában recorddate helyett a modified értéke van
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 28 Jan 2019 15:40:16 +0000 (15:40 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 28 Jan 2019 15:40:16 +0000 (15:40 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31395

server/-configuration/run-mediacube-server-bsh.launch
server/-dependencies/pom.xml
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/api/ClipImpl.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/server/protocol/GetExtendedFieldGetModifiedTimestampCommand.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/server/protocol/GetExtendedFieldGetRecordDateTimestampCommand.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/server/protocol/GetExtendedFieldTimestampCommand.java [new file with mode: 0644]

index 60593dc90510dad5c338af841d50f81381337d3c..b5abf0ffe55d8ad00ee38d4d145901763bb6d9ae 100644 (file)
@@ -19,7 +19,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=false&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;"/>\r
 <stringAttribute key="pde.version" value="3.3"/>\r
 <booleanAttribute key="show_selected_only" value="false"/>\r
 <stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
index b39ff8fec22d4042fd33140d5c950530e4b64c9a..89bfc1247a425ee1b4717f828296a0e88aa87421 100644 (file)
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<project\r
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"\r
-       xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
        <modelVersion>4.0.0</modelVersion>\r
        <groupId>hu.user.chronos</groupId>\r
        <artifactId>hu.user.chronos.dependencies</artifactId>\r
                        <plugin>\r
                                <groupId>org.reficio</groupId>\r
                                <artifactId>p2-maven-plugin</artifactId>\r
-                               <version>1.3.0</version>\r
+                               <version>1.2.0-SNAPSHOT</version>\r
                                <executions>\r
                                        <execution>\r
                                                <id>default-cli</id>\r
                                                <configuration>\r
                                                        <artifacts>\r
-<!--                                                           <artifact> -->\r
-<!--                                                                   <id>org.apache.solr:solr-sorlj:7.5.0</id> -->\r
-<!--                                                           </artifact> -->\r
+                                                               <!-- <artifact> -->\r
+                                                               <!-- <id>org.apache.solr:solr-sorlj:7.5.0</id> -->\r
+                                                               <!-- </artifact> -->\r
                                                                <artifact>\r
                                                                        <id>humble.video:linux:0.2.1</id>\r
                                                                </artifact>\r
                                                                <artifact>\r
                                                                        <id>com.google.guava:guava:18.0</id>\r
                                                                </artifact>\r
-                                                       \r
+\r
                                                                <artifact>\r
                                                                        <id>com.fasterxml.jackson.core:jackson-core:${fasterxml-jackson-core}</id>\r
                                                                </artifact>\r
index d2ed899f0e8265b5f17424c2c4dd9fe7b5718971..01d515c1485f01b2a13b71f7bf8f1abc58f1b82a 100644 (file)
@@ -5,6 +5,7 @@ import java.sql.DriverManager;
 import java.sql.PreparedStatement;\r
 import java.sql.ResultSet;\r
 import java.sql.SQLException;\r
+import java.sql.Timestamp;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.List;\r
@@ -298,8 +299,15 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
                                clip.put(VIDEOBITRATE, rs.getString(VIDEOBITRATE));\r
                                clip.put(VIDEOFORMAT, rs.getString(VIDEOFORMAT));\r
                                clip.put(DURATION, rs.getLong(DURATION));\r
-                               clip.put(MODIFIEDTIMESTAMP, rs.getTimestamp(MODIFIEDTIMESTAMP));\r
-                               clip.put(RECORDDATE, rs.getTimestamp(RECORDTIMESTAMP));\r
+\r
+                               Timestamp record = rs.getTimestamp(RECORDTIMESTAMP);\r
+                               clip.put(RECORDDATE, record);\r
+                               //NEXIO GW modified date nem jo a regi klippeknel\r
+                               Timestamp modified = rs.getTimestamp(MODIFIEDTIMESTAMP);\r
+                               if (modified.before(record))\r
+                                       clip.put(MODIFIEDTIMESTAMP, record);\r
+                               else\r
+                                       clip.put(MODIFIEDTIMESTAMP, modified);\r
                                clip.put(KILLDATE, rs.getTimestamp(KILLDATE));\r
                                collection.insert(clip);\r
                                count++;\r
index 7c63f705c2fdd8d4eae5c9fae616b9ea8c47608a..e6c0ddaf3d830bd70cf83f426d266f6eae9fbf1b 100644 (file)
@@ -155,35 +155,35 @@ public class NexioDispatcher implements ClipEventListener {
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
-\r
                try {\r
-                       jsClip.put(KILLDATE, clip.getKillDate().getTime());\r
+                       jsClip.put(MODIFIEDTIMESTAMP, clip.getModifiedTimestamp().getTime());\r
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
                try {\r
-                       jsClip.put(MODIFIEDTIMESTAMP, clip.getModifiedTimestamp().getTime());\r
+                       jsClip.put(RECORDDATE, clip.getRecordDateTimestamp().getTime());\r
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
+\r
                try {\r
-                       jsClip.put(VIDEO_FORMAT, clip.getVideoFormat());\r
+                       jsClip.put(KILLDATE, clip.getKillDate().getTime());\r
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
                try {\r
-                       jsClip.put(VIDEO_BITRATE, clip.getVideoBitrate());\r
+                       jsClip.put(VIDEO_FORMAT, clip.getVideoFormat());\r
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
                try {\r
-                       String agency = new String(clip.getExtendedField(GetExtendedFieldCommand.FN_AGENCY), INexioAPI.ENCODING);\r
-                       jsClip.put(EXTAGENCY, agency);\r
+                       jsClip.put(VIDEO_BITRATE, clip.getVideoBitrate());\r
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
                try {\r
-                       jsClip.put(RECORDDATE, clip.getRecordDateTimestamp().getTime());\r
+                       String agency = new String(clip.getExtendedField(GetExtendedFieldCommand.FN_AGENCY), INexioAPI.ENCODING);\r
+                       jsClip.put(EXTAGENCY, agency);\r
                } catch (Exception e) {\r
                        //                      System.out.println(e);\r
                }\r
@@ -209,7 +209,7 @@ public class NexioDispatcher implements ClipEventListener {
                                String agency = jsonClip.getString(EXTAGENCY);\r
                                int duration = jsonClip.getInt(DURATION);\r
                                if (fileName != null && !"".equals(fileName)) {\r
-                                       logger.debug("Found NEXIO clip: {} duration: {} agency: {}", fileName, duration, agency);\r
+                                       logger.info("Found NEXIO clip: {} duration: {} agency: {}", fileName, duration, agency);\r
                                        this.saveClipIntoMongo(jsonClip);\r
                                } else {\r
                                        logger.debug("Found NEXIO clip: {} XID IS MISSING!!", clip.getId());\r
index 3eeb9c5411b97fccbec4949240aac9bb76c69cb8..295b9730880cf6ab11ebf87e24603af3c53ddb91 100644 (file)
@@ -21,7 +21,8 @@ class ClipImpl implements Clip {
        private Xid xid = null;
        private final NexioServerProtocol protocol;
        private byte[] metadata = null;
-       private Calendar timestamp = null;
+       private Calendar modified = null;
+       private Calendar record = null;
        private long fileSize = -1;
 
        ClipImpl(NexioServerProtocol protocol, Id id) {
@@ -124,22 +125,20 @@ class ClipImpl implements Clip {
 
        @Override
        public Calendar getModifiedTimestamp() throws ClipNotFoundException, IOException, ProtocolException {
-               if (timestamp == null) {
-                       timestamp = protocol.executeGetExtendedFieldGetModifiedTimestamp(id);
-                       checkClipExists(timestamp);
+               if (modified == null) {
+                       modified = protocol.executeGetExtendedFieldGetModifiedTimestamp(id);
+                       checkClipExists(modified);
                }
-               return timestamp;
+               return modified;
        }
 
        @Override
        public Calendar getRecordDateTimestamp() throws ClipNotFoundException, IOException, ProtocolException {
-               if (timestamp == null) {
-                       //TODO
-                       timestamp = protocol.executeGetExtendedFieldGetModifiedTimestamp(id);
-                       //timestamp = protocol.executeGetExtendedFieldGetRecordDateTimestamp(id);
-                       checkClipExists(timestamp);
+               if (record == null) {
+                       record = protocol.executeGetExtendedFieldGetRecordDateTimestamp(id);
+                       checkClipExists(record);
                }
-               return timestamp;
+               return record;
        }
 
        @Override
index 26f6867e3ef1e3a35a1f827773f0c3c7e8062996..a6303d69b46941f906cb39e0b899df60f5220be1 100644 (file)
@@ -1,79 +1,14 @@
 package user.commons.nexio.server.protocol;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Calendar;
-
-public class GetExtendedFieldGetModifiedTimestampCommand extends Command {
-
-       private final static byte[] GET_EXTENDED_FIELD = { (byte) 0xc9, (byte) 0xc3 };
+public class GetExtendedFieldGetModifiedTimestampCommand extends GetExtendedFieldTimestampCommand {
        private final static byte[] EXTENDED_FIELD_NUMBER = { (byte) 20 };
 
-       private byte[] buffer;
-       private byte filetime[];
-
        public GetExtendedFieldGetModifiedTimestampCommand(Connection connection) {
                super(connection);
        }
 
-       private Calendar convertFromFILETIME(byte[] filetime) {
-               Calendar result = Calendar.getInstance();
-
-               ByteBuffer b = ByteBuffer.wrap(filetime);
-               b.order(ByteOrder.LITTLE_ENDIAN);
-               int lo = b.asIntBuffer().get(0);
-               int hi = b.asIntBuffer().get(1);
-
-               long wFILETIME = ((long) hi << 32) + lo;
-
-               final long EPOCH_DIFF = 11644473600000L;
-               final long ms_since_16010101 = wFILETIME / (10000);
-               final long ms_since_19700101 = ms_since_16010101 - EPOCH_DIFF;
-
-               result.setTimeInMillis(ms_since_19700101);
-
-               return result;
-       }
-
-       public Calendar execute(Id id) throws IOException, ProtocolException {
-
-               Calendar ret = null;
-
-               connection.write(GET_EXTENDED_FIELD);
-               connection.write(id.get().getBytes());
-               connection.write(EXTENDED_FIELD_NUMBER);
-               connection.flush();
-
-               buffer = new byte[2];
-               int c = connection.read(buffer, 0, 2);
-               if (c < 2) {
-                       throw getException_InvalidResponseLength(c, 2, 2);
-               }
-
-               // Not found
-               if (buffer[0] == (byte) 0xd0 && buffer[1] == (byte) 0xc3) {
-                       throw new ProtocolException("ID handle is not found!");
-               } else
-               // 1. Found
-               if (buffer[0] == (byte) 0xdf && buffer[1] == (byte) 0xc3) {
-
-                       // 2. read NOF BYTES
-                       buffer = new byte[1];
-                       c = connection.read(buffer, 0, 1);
-
-                       int toRead = buffer[0];
-                       if (toRead != 8) {
-                               throw new ProtocolException("Invalid ModifiedTimeStamp's data length: " + toRead);
-                       } else {
-                               filetime = new byte[8];
-                               c = connection.read(filetime, 0, 8);
-                               if (c != 8) {
-                                       throw getException_InvalidResponseLength(c, 8, 8);
-                               }
-                               ret = convertFromFILETIME(filetime);
-                       }
-               }
-               return ret;
+       @Override
+       protected byte[] getExtendedFieldNumber() {
+               return EXTENDED_FIELD_NUMBER;
        }
 }
index e73016060b3b9ea03df8c3288fd5798fd27245d7..ed17ab69fd1796f14d99d44abb5c9e43492ee250 100644 (file)
@@ -1,79 +1,14 @@
 package user.commons.nexio.server.protocol;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Calendar;
-
-public class GetExtendedFieldGetRecordDateTimestampCommand extends Command {
-
-       private final static byte[] GET_EXTENDED_FIELD = { (byte) 0xc9, (byte) 0xc3 };
+public class GetExtendedFieldGetRecordDateTimestampCommand extends GetExtendedFieldTimestampCommand {
        private final static byte[] EXTENDED_FIELD_NUMBER = { (byte) 0 };
 
-       private byte[] buffer;
-       private byte filetime[];
-
        public GetExtendedFieldGetRecordDateTimestampCommand(Connection connection) {
                super(connection);
        }
 
-       private Calendar convertFromFILETIME(byte[] filetime) {
-               Calendar result = Calendar.getInstance();
-
-               ByteBuffer b = ByteBuffer.wrap(filetime);
-               b.order(ByteOrder.LITTLE_ENDIAN);
-               int lo = b.asIntBuffer().get(0);
-               int hi = b.asIntBuffer().get(1);
-
-               long wFILETIME = ((long) hi << 32) + lo;
-
-               final long EPOCH_DIFF = 11644473600000L;
-               final long ms_since_16010101 = wFILETIME / (10000);
-               final long ms_since_19700101 = ms_since_16010101 - EPOCH_DIFF;
-
-               result.setTimeInMillis(ms_since_19700101);
-
-               return result;
-       }
-
-       public Calendar execute(Id id) throws IOException, ProtocolException {
-
-               Calendar ret = null;
-
-               connection.write(GET_EXTENDED_FIELD);
-               connection.write(id.get().getBytes());
-               connection.write(EXTENDED_FIELD_NUMBER);
-               connection.flush();
-
-               buffer = new byte[2];
-               int c = connection.read(buffer, 0, 2);
-               if (c < 2) {
-                       throw getException_InvalidResponseLength(c, 2, 2);
-               }
-
-               // Not found
-               if (buffer[0] == (byte) 0xd0 && buffer[1] == (byte) 0xc3) {
-                       throw new ProtocolException("ID handle is not found!");
-               } else
-               // 1. Found
-               if (buffer[0] == (byte) 0xdf && buffer[1] == (byte) 0xc3) {
-
-                       // 2. read NOF BYTES
-                       buffer = new byte[1];
-                       c = connection.read(buffer, 0, 1);
-
-                       int toRead = buffer[0];
-                       if (toRead != 8) {
-                               throw new ProtocolException("Invalid ModifiedTimeStamp's data length: " + toRead);
-                       } else {
-                               filetime = new byte[8];
-                               c = connection.read(filetime, 0, 8);
-                               if (c != 8) {
-                                       throw getException_InvalidResponseLength(c, 8, 8);
-                               }
-                               ret = convertFromFILETIME(filetime);
-                       }
-               }
-               return ret;
+       @Override
+       protected byte[] getExtendedFieldNumber() {
+               return EXTENDED_FIELD_NUMBER;
        }
 }
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nexio/server/protocol/GetExtendedFieldTimestampCommand.java b/server/user.jobengine.osgi.commons/src/user/commons/nexio/server/protocol/GetExtendedFieldTimestampCommand.java
new file mode 100644 (file)
index 0000000..638ba2a
--- /dev/null
@@ -0,0 +1,78 @@
+package user.commons.nexio.server.protocol;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Calendar;
+
+public abstract class GetExtendedFieldTimestampCommand extends Command {
+       private final static byte[] GET_EXTENDED_FIELD = { (byte) 0xc9, (byte) 0xc3 };
+       private byte[] buffer;
+       private byte filetime[];
+
+       public GetExtendedFieldTimestampCommand(Connection connection) {
+               super(connection);
+       }
+
+       private Calendar convertFromFILETIME(byte[] filetime) {
+               Calendar result = Calendar.getInstance();
+
+               ByteBuffer b = ByteBuffer.wrap(filetime);
+               b.order(ByteOrder.LITTLE_ENDIAN);
+               int lo = b.asIntBuffer().get(0);
+               int hi = b.asIntBuffer().get(1);
+
+               long wFILETIME = ((long) hi << 32) + lo;
+
+               final long EPOCH_DIFF = 11644473600000L;
+               final long ms_since_16010101 = wFILETIME / (10000);
+               final long ms_since_19700101 = ms_since_16010101 - EPOCH_DIFF;
+
+               result.setTimeInMillis(ms_since_19700101);
+
+               return result;
+       }
+
+       public Calendar execute(Id id) throws IOException, ProtocolException {
+
+               Calendar ret = null;
+
+               connection.write(GET_EXTENDED_FIELD);
+               connection.write(id.get().getBytes());
+               connection.write(getExtendedFieldNumber());
+               connection.flush();
+
+               buffer = new byte[2];
+               int c = connection.read(buffer, 0, 2);
+               if (c < 2) {
+                       throw getException_InvalidResponseLength(c, 2, 2);
+               }
+
+               // Not found
+               if (buffer[0] == (byte) 0xd0 && buffer[1] == (byte) 0xc3) {
+                       throw new ProtocolException("ID handle is not found!");
+               } else
+               // 1. Found
+               if (buffer[0] == (byte) 0xdf && buffer[1] == (byte) 0xc3) {
+
+                       // 2. read NOF BYTES
+                       buffer = new byte[1];
+                       c = connection.read(buffer, 0, 1);
+
+                       int toRead = buffer[0];
+                       if (toRead != 8) {
+                               throw new ProtocolException("Invalid TimeStamp's data length: " + toRead);
+                       } else {
+                               filetime = new byte[8];
+                               c = connection.read(filetime, 0, 8);
+                               if (c != 8) {
+                                       throw getException_InvalidResponseLength(c, 8, 8);
+                               }
+                               ret = convertFromFILETIME(filetime);
+                       }
+               }
+               return ret;
+       }
+
+       protected abstract byte[] getExtendedFieldNumber();
+}