git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 24 Apr 2020 14:39:26 +0000 (14:39 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 24 Apr 2020 14:39:26 +0000 (14:39 +0000)
34 files changed:
server/-configuration/run-mediacube-server-mv.launch
server/-configuration/scheduledjobs.json
server/user.jobengine.executors/jobtemplates/cancelable.xml [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java [moved from server/user.jobengine.executors/obsolate/obsolate/AFakeStep.java with 80% similarity]
server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeStep.java
server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java
server/user.jobengine.osgi.db/META-INF/MANIFEST.MF
server/user.jobengine.osgi.db/migrations/scripts/007_add_alternate_store.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/SearchOptions.java
server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java
server/user.jobengine.osgi.server/WEB-INF/web.xml
server/user.jobengine.osgi.server/js/searchitems.js
server/user.jobengine.osgi.server/pages/icons.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/pages/jobselector.zul
server/user.jobengine.osgi.server/pages/menu.zul
server/user.jobengine.osgi.server/pages/searchitems.zul
server/user.jobengine.osgi.server/pages/searchitems/details.zul
server/user.jobengine.osgi.server/pages/searchitems/filters.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/ScheduledJob.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/CachedListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobSelectorModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java
server/user.jobengine.osgi.services/WEB-INF/web.xml
server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/MediaFileServlet.java

index 648b19a4bcd2e4cd9b1dc353bdfc7b92bda0a79f..43a0b0c9a0ff19be46fa2507839f24035c9ad093 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.11.1.90: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.11.1.90: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.transcoder.address=http://10.11.1.111:65445/api/json/v1/&#13;&#10;-Djobengine.transcoder.template=MP4&#13;&#10;-Djobengine.transcoder.version=1&#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;-Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;&#13;&#10;-Djobengine.planair.db.user=MAM&#13;&#10;-Djobengine.planair.db.password=VDani&#13;&#10;-Dnexio.host=192.168.0.12&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=false&#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;-Djobengine.maestro.config=&quot;${workspace_loc}/-configuration/maestro.json&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Dgui.statistics.disable=true&#13;&#10;-Dgui.help.disable=true&#13;&#10;-Dgui.editor.disable=true&#13;&#10;-Djobengine.mediafinder.external=false"/>\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.11.1.90: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.11.1.90: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.transcoder.address=http://10.11.1.111:65445/api/json/v1/&#13;&#10;-Djobengine.transcoder.template=MP4&#13;&#10;-Djobengine.transcoder.version=1&#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;-Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;&#13;&#10;-Djobengine.planair.db.user=MAM&#13;&#10;-Djobengine.planair.db.password=VDani&#13;&#10;-Dnexio.host=192.168.0.12&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=false&#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;-Djobengine.maestro.config=&quot;${workspace_loc}/-configuration/maestro.json&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Dgui.statistics.disable=true&#13;&#10;-Dgui.help.disable=true&#13;&#10;-Dgui.editor.disable=true&#13;&#10;-Djobengine.mediafinder.external=false"/>\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.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.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-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.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@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.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.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,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.jackson2-provider@default:default,org.jboss.resteasy.jaxrs-api@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
index 44221188e6d4f3a66239c017bc7222c59d3c86b9..fa3564911d903bceab8f89a6557c17d8f50ba855 100644 (file)
@@ -1,4 +1,7 @@
 {"joblist":[\r
+       {\r
+      "template": "cancelable.xml"\r
+       },      \r
        {\r
          "name" : "Proxy pótlása",\r
       "template": "create-lowres-ondemand.xml",\r
       "executeimmediate": false,\r
          "name" : "Teszt folyamat",\r
       "template": "fake.xml",\r
-      "cronexpression": "0 46-50/1 * * * ?",\r
+      "cronexpression": "0/20 * * * * ?",\r
       "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
        },\r
        {\r
diff --git a/server/user.jobengine.executors/jobtemplates/cancelable.xml b/server/user.jobengine.executors/jobtemplates/cancelable.xml
new file mode 100644 (file)
index 0000000..899a3c1
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true">\r
+       <commands>\r
+               <calljobstep id="step1" type="user.jobengine.server.steps.CancelableStep" weight="1" />\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
similarity index 80%
rename from server/user.jobengine.executors/obsolate/obsolate/AFakeStep.java
rename to server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
index 71a9256ec11a4d258af5e1344065ee350f5916ed..3b5f9ec1c7faa3f3c53fed2a0efd84d68acbb5a4 100644 (file)
@@ -1,10 +1,10 @@
-package obsolate;\r
+package user.jobengine.server.steps;\r
 \r
 import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.steps.JobStep;\r
 import user.jobengine.server.steps.StepEntry;\r
 \r
-public class AFakeStep extends JobStep {\r
+public class CancelableStep extends JobStep {\r
        int count = 10;\r
        \r
        @StepEntry\r
index 775a94ce77683436d4ba8e3533c52c485bdbcbe2..97ade7dfa0ad0b33d2277a3e42292bbe77e53092 100644 (file)
@@ -1,9 +1,5 @@
 package user.jobengine.server.steps;\r
 \r
-import java.nio.file.Files;\r
-import java.nio.file.Paths;\r
-import java.nio.file.StandardOpenOption;\r
-\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
@@ -23,8 +19,8 @@ public class FakeStep extends JobStep {
        public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                Object[] result = { itemID + 1 };\r
 \r
-               Files.copy(Paths.get("/etc/security/limits.conf"), Paths.get("/etc/security/limits.conf.bak"));\r
-               Files.write(Paths.get("/etc/security/limits.conf"), new byte[0], StandardOpenOption.TRUNCATE_EXISTING);\r
+               //              Files.copy(Paths.get("/etc/security/limits.conf"), Paths.get("/etc/security/limits.conf.bak"));\r
+               //              Files.write(Paths.get("/etc/security/limits.conf"), new byte[0], StandardOpenOption.TRUNCATE_EXISTING);\r
 \r
                //test();\r
 \r
@@ -40,7 +36,9 @@ public class FakeStep extends JobStep {
                                if (!canContinue())\r
                                        break;\r
                                jobRuntime.incrementProgress((i + 1) * count);\r
-                               Thread.sleep(100);\r
+                               for (int j = 0; j < 100; j++) {\r
+                                       Thread.sleep(1000);\r
+                               }\r
 \r
                                //jobEngine.sendMessage(new CancelRequest(jobRuntime.getId()));\r
                                logger.info("Progress {}", jobRuntime.getProgress());\r
index bcb2ac9065e77981af66435316de0ecf47096037..6c172d78374942ebc4e9a64cd03369b256243160 100644 (file)
@@ -15,6 +15,8 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
 \r
 import user.commons.FFAStransAPI;\r
 import user.commons.IFFAStransAPI;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.FileType;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Media;\r
@@ -36,12 +38,11 @@ public class TranscodeFFAStranStep extends JobStep {
 \r
        @StepEntry\r
        public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderAddress, String transcoderTemplateName,\r
-                       String globalHiresSourcePath, String localLowresTargetPath, String webPath, boolean deleteSource, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
-                       throws Exception {\r
+                       String globalHiresSourcePath, String localLowresTargetPath, boolean deleteSource, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
 \r
                this.marker = jobRuntime.getMarker();\r
                this.manager = jobEngine.getItemManager();\r
-               this.store = check(manager.getSystemStore(true), "lowres Store");\r
+               this.store = check(manager.getCurrentLowresStore(), "lowres Store");\r
                this.fileType = check(manager.getFileType(LOWRES_FILETYPE), "lowres FileType");\r
                this.mediaCubeMedia = check(mediaCubeMedia, "mediaCubeMedia");\r
                check(archiveItem, "archiveItem");\r
@@ -49,12 +50,18 @@ public class TranscodeFFAStranStep extends JobStep {
                check(transcoderTemplateName, "transcoderTemplateName");\r
                check(globalHiresSourcePath, "globalHiresSourcePath");\r
                check(localLowresTargetPath, "localLowresTargetPath");\r
-               check(webPath, "webPath");\r
 \r
                File sourceMediaFile = new File(archiveItem.getMediaFile());\r
                logger.info("Transcoding {}", archiveItem.getMediaFile());\r
                String sourceFileName = sourceMediaFile.getName();\r
                String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
+\r
+               StoreUri storeUri = store.getTargetStoreUri(RemoteStoreProtocol.LOCAL);\r
+               if (storeUri == null)\r
+                       throw new Exception("Can not detect proxy folder.");\r
+\r
+               String webPath = storeUri.toString(true);\r
+\r
                Path targetPath = null;\r
                try {\r
                        String targetFileName = FilenameUtils.removeExtension(sourceFileName) + MP4EXT;\r
index d4bf472d5a841cb79480ffcc610148133f9921b4..7b5407c38b0f92cbcb4860ae764768d765530b32 100644 (file)
@@ -1,8 +1,6 @@
 package user.jobengine.server.steps;\r
 \r
 import java.io.File;\r
-import java.io.IOException;\r
-import java.net.MalformedURLException;\r
 import java.net.URL;\r
 import java.nio.file.Files;\r
 import java.nio.file.Path;\r
@@ -20,6 +18,8 @@ import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.message.Message;\r
 import org.apache.logging.log4j.message.ParameterizedMessage;\r
 \r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.commons.selenio.wsclient.AudioSource;\r
 import user.commons.selenio.wsclient.Clip;\r
 import user.commons.selenio.wsclient.ClipList;\r
@@ -54,8 +54,8 @@ public class TranscodeSELENIOStep extends JobStep {
        private Store store;\r
        private FileType fileType;\r
        private String transcoderTargetPath;\r
-       private String webPath;\r
        private Marker marker;\r
+       private StoreUri storeUri;\r
 \r
        private TranscodeRequest buildTranscodeRequest(String projectFilePath, String sourceFilePath) throws java.lang.Exception {\r
                Clip clip = new Clip();\r
@@ -90,13 +90,13 @@ public class TranscodeSELENIOStep extends JobStep {
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(String globalSourcePath, ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderTargetPath, String webPath,\r
-                       IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+       public Object[] execute(String globalSourcePath, ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderTargetPath, IJobEngine jobEngine,\r
+                       IJobRuntime jobRuntime) throws Exception {\r
                marker = jobRuntime.getMarker();\r
                String sourceFileName = null;\r
 \r
                try {\r
-                       setAndCheck(globalSourcePath, transcoderTargetPath, webPath, jobEngine);\r
+                       setAndCheck(globalSourcePath, transcoderTargetPath, jobEngine);\r
 \r
                        File sourceMediaFile = new File(archiveItem.getMediaFile());\r
                        sourceFileName = sourceMediaFile.getName();\r
@@ -170,8 +170,9 @@ public class TranscodeSELENIOStep extends JobStep {
                        }\r
                }\r
 \r
+               String webPath = null;\r
                try {\r
-\r
+                       webPath = storeUri.toString(true);\r
                        outFile = outFile.substring(outFile.lastIndexOf("\\") + 1);\r
                        if (outFile.indexOf(".") > 2) {\r
                                Path subdir = Paths.get(outFile.substring(0, 1), outFile.substring(1, 2), outFile.substring(2, 3));\r
@@ -184,7 +185,7 @@ public class TranscodeSELENIOStep extends JobStep {
                                manager.createMediaFile(outFile, fileType, store, mediaCubeMedia).add();\r
                                Files.move(Paths.get(transcoderTargetPath, outFile), Paths.get(webPath, outFile), StandardCopyOption.REPLACE_EXISTING);\r
                        }\r
-               } catch (IOException e) {\r
+               } catch (Exception e) {\r
                        logger.catching(e);\r
                        logger.error(marker, "Az '{}' állomány mozgatása a '{}' mappába nem sikerült.", outFile, webPath);\r
                }\r
@@ -203,7 +204,7 @@ public class TranscodeSELENIOStep extends JobStep {
                }\r
        }\r
 \r
-       private void setAndCheck(String globalSourcePath, String transcoderTargetPath, String webPath, IJobEngine jobEngine) throws MalformedURLException {\r
+       private void setAndCheck(String globalSourcePath, String transcoderTargetPath, IJobEngine jobEngine) throws Exception {\r
                address = System.getProperty("jobengine.selenio.address");\r
                if (StringUtils.isBlank(address))\r
                        throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
@@ -219,10 +220,14 @@ public class TranscodeSELENIOStep extends JobStep {
                        throw new NullPointerException("System is not configured properly, 'globalInputFolder' parameter missing.");\r
                manager = jobEngine.getItemManager();\r
 \r
-               store = manager.getSystemStore(true);\r
+               store = manager.getCurrentLowresStore();\r
                if (store == null)\r
                        throw new NullPointerException("System is not configured properly, low-res system store definition missing.");\r
 \r
+               storeUri = store.getTargetStoreUri(RemoteStoreProtocol.LOCAL);\r
+               if (storeUri == null)\r
+                       throw new Exception("Can not detect proxy folder.");\r
+\r
                fileType = manager.getFileType(LOWRES_FILETYPE);\r
                if (fileType == null)\r
                        throw new NullPointerException("System is not configured properly, low-res file type definition missing.");\r
@@ -231,9 +236,6 @@ public class TranscodeSELENIOStep extends JobStep {
                        throw new NullPointerException("System is not configured properly, 'transcoderTargetPath' parameter missing.");\r
                this.transcoderTargetPath = transcoderTargetPath;\r
 \r
-               if (StringUtils.isBlank(webPath))\r
-                       throw new NullPointerException("System is not configured properly, 'webPath' parameter missing.");\r
-               this.webPath = webPath;\r
        }\r
 \r
 }\r
index 34e3f0f6e720d85c2c1c0821c0688804c71cbcc4..5a68f813861e4b806f7814cf3013f8af078c6f19 100644 (file)
@@ -16,14 +16,14 @@ public class TranscodeStep extends JobStep {
                switch (version) {\r
                case 0: {\r
                        TranscodeSELENIOStep selenioStep = new TranscodeSELENIOStep();\r
-                       selenioStep.execute(globalSourcePath, archiveItem, mediaCubeMedia, transcoderTargetPath, webPath, jobEngine, jobRuntime);\r
+                       selenioStep.execute(globalSourcePath, archiveItem, mediaCubeMedia, transcoderTargetPath, jobEngine, jobRuntime);\r
                        break;\r
                }\r
                case 1: {\r
                        TranscodeFFAStranStep ffaStransStep = new TranscodeFFAStranStep();\r
                        String transcoderAddress = System.getProperty("jobengine.transcoder.address");\r
                        String transcoderTemplateName = System.getProperty("jobengine.transcoder.template");\r
-                       ffaStransStep.execute(archiveItem, mediaCubeMedia, transcoderAddress, transcoderTemplateName, globalSourcePath, transcoderTargetPath, webPath, false,\r
+                       ffaStransStep.execute(archiveItem, mediaCubeMedia, transcoderAddress, transcoderTemplateName, globalSourcePath, transcoderTargetPath, false,\r
                                        jobEngine, jobRuntime);\r
                        break;\r
                }\r
index 76eb57056ee7e676fbc270df2791463d08fc3925..5c3f94d5981a33b233d422caa42086f1bb1d48ce 100644 (file)
@@ -46,6 +46,8 @@ public class StoreUri extends EntityBase implements Serializable {
        private int percent;
        private IDirectoryLister lister;
        private boolean showDirectories;
+       //1-magas, n-alacsony
+       private int priority;
 
        public StoreUri() {
                super();
@@ -216,6 +218,10 @@ public class StoreUri extends EntityBase implements Serializable {
                return portNumber;
        }
 
+       public int getPriority() {
+               return priority;
+       }
+
        public RemoteStoreProtocol getProtocol() {
                return protocol;
        }
@@ -309,6 +315,10 @@ public class StoreUri extends EntityBase implements Serializable {
                this.portNumber = portNumber;
        }
 
+       public void setPriority(int priority) {
+               this.priority = priority;
+       }
+
        public void setProtocol(RemoteStoreProtocol protocol) {
                this.protocol = protocol;
        }
index 5ceaaa3fc74b68b9d4f9b8a732606f856d6707fd..dae95dba1d8416b430763294dec3746a28844c2f 100644 (file)
@@ -16,6 +16,7 @@ Bundle-ActivationPolicy: lazy
 Import-Package: com.fasterxml.jackson.annotation;version="2.4.5",
  javax.ws.rs.client,
  javax.ws.rs.core,
+ org.apache.commons.io;version="2.2.0",
  org.apache.logging.log4j;version="2.8.2"
 Export-Package: user.jobengine.db,
  user.jobengine.search
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/007_add_alternate_store.sql b/server/user.jobengine.osgi.db/migrations/scripts/007_add_alternate_store.sql
new file mode 100644 (file)
index 0000000..ed0e1ed
--- /dev/null
@@ -0,0 +1,39 @@
+--
+--    Copyright 2010-2016 the original author or authors.
+--
+--    Licensed under the Apache License, Version 2.0 (the "License");
+--    you may not use this file except in compliance with the License.
+--    You may obtain a copy of the License at
+--
+--       http://www.apache.org/licenses/LICENSE-2.0
+--
+--    Unless required by applicable law or agreed to in writing, software
+--    distributed under the License is distributed on an "AS IS" BASIS,
+--    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+--    See the License for the specific language governing permissions and
+--    limitations under the License.
+--
+
+-- // Insert alternate lowres store
+-- Migration SQL that makes the change goes here.
+
+INSERT INTO STORE (NAME, ISSYSTEM, ISLOWRES) VALUES ('Alternate Low-res', 'N', 'N') 
+@
+
+INSERT INTO STOREURI (STOREID, PROTOCOL, URI, ISSTREAM, ISSOURCE, ISTARGET) 
+       VALUES 
+((SELECT ID FROM STORE WHERE NAME='Alternate Low-res'), 'HTTP', '/services/proxy/', 'Y', 'Y', 'N')
+@
+
+INSERT INTO STOREURI (STOREID, PROTOCOL, URI, ISSTREAM, ISSOURCE, ISTARGET) 
+       VALUES 
+((SELECT ID FROM STORE WHERE NAME='Alternate Low-res'), 'LOCAL', '/mediacube/data/lowres/www/video/ITF3', 'N', 'Y', 'Y')
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+DELETE FROM STOREURI WHERE ID=(SELECT ID FROM STORE WHERE NAME='Alternate Low-res') 
+@
+
+DELETE FROM STORE WHERE NAME='Alternate Low-res' 
+@
index 82804bebc4fda5756fb03355b0711eaf4dd24e15..99a60ef22de7a85ffac6ebc15d9edad766450a76 100644 (file)
@@ -145,6 +145,8 @@ public interface IItemManager extends IEntityPersister {
 \r
        Break getBreak(long id);\r
 \r
+       Store getCurrentLowresStore() throws Exception;\r
+\r
        DefaultContext getDbContext();\r
 \r
        /**\r
index 460617201faadea26f1d584d89802ad96e475800..419efda76800f00756c1796ce1c6cd439945932b 100644 (file)
@@ -15,7 +15,9 @@ import java.util.Date;
 import java.util.Hashtable;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.stream.Collectors;\r
 \r
+import org.apache.commons.io.FileSystemUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
@@ -26,6 +28,7 @@ import user.commons.BaseType;
 import user.commons.CalendarUtils;\r
 import user.commons.IEntityBase;\r
 import user.commons.Job;\r
+import user.commons.ListUtils;\r
 import user.commons.StoreUri;\r
 import user.commons.pool.ConnectionPoolProperties;\r
 import user.commons.pool.ContextPool;\r
@@ -575,6 +578,34 @@ public class ItemManager extends MemoryCache implements IItemManager {
                return (Break) get(Break.class, id);\r
        }\r
 \r
+       @Override\r
+       public Store getCurrentLowresStore() throws Exception {\r
+               Store result = null;\r
+               Store sysLowres = getSystemStore(true);\r
+               StoreUri lowresUri = selectLowresUri(sysLowres);\r
+               if (lowresUri == null) {\r
+                       //az elsodlegesen tul keves a hely\r
+                       StoreDAO dao = (StoreDAO) getBaseDAO(Store.class);\r
+                       List<Store> stores = ListUtils.cast(dao.getAll());\r
+                       for (Store store : stores) {\r
+                               //kompatibilitas miatt ez maradt\r
+                               if (store.isLowres() || store.isSystem())\r
+                                       continue;\r
+                               lowresUri = selectLowresUri(store);\r
+                               if (lowresUri != null) {\r
+                                       result = store;\r
+                                       break;\r
+                               }\r
+                       }\r
+               } else\r
+                       result = sysLowres;\r
+\r
+               //nincs mas\r
+               if (result == null)\r
+                       result = sysLowres;\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public DefaultContext getDbContext() {\r
                DefaultContext context = null;\r
@@ -1097,6 +1128,26 @@ public class ItemManager extends MemoryCache implements IItemManager {
                return result;\r
        }\r
 \r
+       //min 5 GB szabad hely eseten ad vissza LOCAL uri-t\r
+       public StoreUri selectLowresUri(Store store) throws Exception {\r
+               StoreUri result = null;\r
+               List<StoreUri> uris = store.getStoreUris();\r
+               if (uris != null && uris.size() > 1) {\r
+                       uris = uris.stream().filter(u -> u.getProtocol() == RemoteStoreProtocol.LOCAL && u.isTarget()).sorted((u1, u2) -> {\r
+                               return Integer.compare(u1.getPriority(), u2.getPriority());\r
+                       }).collect(Collectors.toList());\r
+\r
+                       for (StoreUri uri : uris) {\r
+                               //min 5GB\r
+                               if (FileSystemUtils.freeSpaceKb(uri.toString(true)) > 5000000) {\r
+                                       result = uri;\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public void signal(long id, SignalType signalType, StaticTables staticTable) {\r
                if (signalServer != null) {\r
index ab582b5b8752ce5070aa7611c2626bcfdd88be0f..a2041947e20d511c8b303e271c52d0ad916d3c42 100644 (file)
@@ -10,15 +10,17 @@ public class SearchOptions {
        final private Date searchTo;\r
        final private String orderBy;\r
        final private boolean orderAscending;\r
+       final private boolean missingProxy;\r
        private long mediaId;\r
        private int fromResult;\r
        private int toResult;\r
 \r
-       public SearchOptions(String text, List<String> filters, Date searchFrom, Date searchTo, String orderBy, boolean orderAscending) {\r
+       public SearchOptions(String text, List<String> filters, Date searchFrom, Date searchTo, boolean missingProxy, String orderBy, boolean orderAscending) {\r
                this.text = text;\r
                this.filters = filters;\r
                this.searchFrom = searchFrom;\r
                this.searchTo = searchTo;\r
+               this.missingProxy = missingProxy;\r
                this.orderBy = orderBy;\r
                this.orderAscending = orderAscending;\r
        }\r
@@ -71,4 +73,8 @@ public class SearchOptions {
                this.toResult = toResult;\r
        }\r
 \r
+       public boolean isMissingProxy() {\r
+               return missingProxy;\r
+       }\r
+\r
 }\r
index 9e3e25704a922ae683f84cc84cab9db4eb6a40f5..61909434643aca79f9acc60b34aa9eee34c6e458 100644 (file)
@@ -6,7 +6,6 @@ import java.sql.ResultSet;
 import java.sql.SQLException;\r
 import java.text.SimpleDateFormat;\r
 import java.util.ArrayList;\r
-import java.util.Date;\r
 import java.util.List;\r
 \r
 import org.apache.logging.log4j.LogManager;\r
@@ -23,14 +22,13 @@ import user.jobengine.db.SearchOptions;
 public class MediaFinder implements IMediaFinder {\r
        private static final Logger logger = LogManager.getLogger();\r
        private ItemManager manager = null;\r
-       private SimpleDateFormat df = new SimpleDateFormat("YYYY-mm-dd");\r
+       private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");\r
 \r
        public MediaFinder(ItemManager manager) {\r
                this.manager = manager;\r
        }\r
 \r
-       private PreparedStatement createStatement(Connection connection, String criteria, List<String> typeIDs, Date searchFrom, Date searchTo, String orderBy,\r
-                       boolean orderAscending) throws SQLException {\r
+       private PreparedStatement createStatement(Connection connection, String criteria, List<String> typeIDs, SearchOptions options) throws SQLException {\r
                StringBuilder typeCriteria = getTypeCriterias(typeIDs);\r
 \r
                String criteriasPattern = getCriteriasRegexPattern(criteria);\r
@@ -60,26 +58,30 @@ public class MediaFinder implements IMediaFinder {
                if (criteria != null && criteria.trim().length() > 0)\r
                        sql.append(" AND CONTAINS(md.description, ?) >= 1");\r
 \r
-               if (searchFrom != null) {\r
-                       sql.append(String.format(" AND m.archived > '%s'", df.format(searchFrom)));\r
+               if (options.getSearchFrom() != null) {\r
+                       sql.append(String.format(" AND m.archived > '%s'", df.format(options.getSearchFrom())));\r
                }\r
-               if (searchTo != null) {\r
-                       sql.append(String.format(" AND m.archived < '%s'", df.format(searchTo)));\r
+               if (options.getSearchTo() != null) {\r
+                       sql.append(String.format(" AND m.archived < '%s'", df.format(options.getSearchTo())));\r
                }\r
 \r
-               sql.append(" ORDER BY ");\r
+               if (options.isMissingProxy())\r
+                       sql.append(" AND vw_mf.mediafilecount=1");\r
 \r
-               if (orderBy == null) {\r
+               sql.append(" ORDER BY ");\r
+               if (options.getOrderBy() == null) {\r
                        sql.append("itemtitle desc, mediaitemtypeid");\r
                } else {\r
-                       sql.append(orderBy);\r
-                       sql.append(orderAscending ? " ASC" : " DESC");\r
+                       sql.append(options.getOrderBy());\r
+                       sql.append(options.isOrderAscending() ? " ASC" : " DESC");\r
                }\r
 \r
                String query = sql.toString();\r
                logger.info(query);\r
                PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
-               st.setString(1, criteria);\r
+\r
+               if (criteria != null && criteria.trim().length() > 0)\r
+                       st.setString(1, criteria);\r
                return st;\r
        }\r
 \r
@@ -89,7 +91,7 @@ public class MediaFinder implements IMediaFinder {
                for (String c : specials) {\r
                        result = result.replace(c, "\\" + c);\r
                }\r
-               if (!(result.startsWith("\"") && result.endsWith("\"")))\r
+               if (!(result.startsWith("\"") && result.endsWith("\"")) && result.length() != 0)\r
                        result += "*";\r
                return result;\r
        }\r
@@ -149,7 +151,7 @@ public class MediaFinder implements IMediaFinder {
                Connection connection = context.getConnection();\r
                try {\r
                        String text = formatSearchValue(options.getText());\r
-                       st = createStatement(connection, text, typeIDs, options.getSearchFrom(), options.getSearchTo(), options.getOrderBy(), options.isOrderAscending());\r
+                       st = createStatement(connection, text, typeIDs, options);\r
                        rs = st.executeQuery();\r
                        rs.last();\r
                        result.setItemCount(rs.getRow());\r
index cc052fb43d97db1bd64c6731c749e634ed8396f5..a5f81153b4e3c9968e1c224b91aee015c66e0a42 100644 (file)
@@ -70,7 +70,6 @@
                <welcome-file>index.zhtml</welcome-file>\r
        </welcome-file-list>\r
 <!-- Enable http to https redirect -->\r
-<!-- \r
        <security-constraint>\r
                <web-resource-collection>\r
                        <web-resource-name>Everything on the app</web-resource-name>\r
@@ -80,5 +79,4 @@
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>\r
                </user-data-constraint>\r
        </security-constraint>\r
- -->\r
 </web-app>\r
index 2ccd6dd02394d305619aa9e47388d4e3399a2615..e8b14946afe00e6f1bb85f39c6ae2b7b29f6f0a9 100644 (file)
@@ -22,6 +22,11 @@ function setSource(src) {
 \r
 setSource(null);\r
 \r
+//player.src({\r
+//     type : 'application/x-mpegURL',\r
+//     src : '/services/proxy/media1/index.m3u8'\r
+//});\r
+\r
 function pushTcIn() {\r
        var current = player.currentTime();\r
        console.log("pushTcIn", current);\r
@@ -42,7 +47,7 @@ function pushTcOut() {
        });\r
 }\r
 \r
-/* Címke kezelés */\r
+/* Címke kezelés \r
 var input = document.querySelector('textarea[name=tags2]'), tagify = new Tagify(\r
                input, \r
                {\r
@@ -68,3 +73,6 @@ function onTag(e) {
                toServer : true\r
        });\r
 }\r
+*/\r
+function addTags(tags, current) {\r
+}
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.server/pages/icons.zul b/server/user.jobengine.osgi.server/pages/icons.zul
new file mode 100644 (file)
index 0000000..0f63419
--- /dev/null
@@ -0,0 +1,408 @@
+<zk xmlns:h="native">\r
+<h:link href="//netdna.bootstrapcdn.com/font-awesome/4.0.1/css/font-awesome.css" rel="stylesheet" />\r
+\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-glass         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-music         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-search                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-envelope-o    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-heart         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-star          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-star-o                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-user          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-film          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-th-large      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-th                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-th-list               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-check         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-times         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-search-plus   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-search-minus" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-power-off     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-signal                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gear          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-trash-o               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-home          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-file-o                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-clock-o               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-road          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-download                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-o-down                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-o-up                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-inbox                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-play-circle-o                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rotate-right                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-repeat                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-refresh                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-list-alt                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-lock                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-flag          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-headphones    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-volume-off    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-volume-down   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-volume-up     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-qrcode                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-barcode               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tag                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tags          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-book          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bookmark      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-print                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-camera                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-font                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bold                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-italic                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-text-height           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-text-width            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-align-left            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-align-center  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-align-right           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-align-justify " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-list                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-dedent                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-outdent                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-indent                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-video-camera  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-picture-o             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pencil                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-map-marker            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-adjust                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tint                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-edit                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pencil-square-o       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-share-square-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-check-square-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-move                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-step-backward                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-fast-backward                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-backward                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-play                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pause                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-stop                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-forward                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-fast-forward  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-step-forward  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-eject                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-left  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-right " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-plus-circle           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-minus-circle  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-times-circle  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-check-circle  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-question-circle                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-info-circle                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-crosshairs                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-times-circle-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-check-circle-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-ban                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-left                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-right                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-up                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-down                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-mail-forward                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-share         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-resize-full                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-resize-small          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-plus                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-minus                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-asterisk                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-exclamation-circle                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gift          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-leaf          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-fire          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-eye                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-eye-slash     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-warning                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-exclamation-triangl" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-plane                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-calendar              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-random                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-comment                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-magnet                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-up            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-down  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-retweet                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-shopping-cart " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-folder                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-folder-open           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-resize-vertical       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-resize-horizontal" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bar-chart-o           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-twitter-square        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-facebook-square       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-camera-retro  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-key                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gears                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cogs                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-comments              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-thumbs-o-up           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-thumbs-o-down " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-star-half             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-heart-o                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sign-out              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-linkedin-square       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-thumb-tack            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-external-link " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sign-in                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-trophy                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-github-square " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-upload                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-lemon-o                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-phone                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-square-o              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bookmark-o            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-phone-square  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-twitter                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-facebook              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-github                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-unlock                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-credit-card           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rss                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-hdd-o                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bullhorn              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bell                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-certificate           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-hand-o-right  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-hand-o-left           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-hand-o-up             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-hand-o-down           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-left             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-right            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-up                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-down             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-globe                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-wrench                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tasks                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-filter                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-briefcase             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-fullscreen            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-group                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chain                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-link                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cloud                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-flask                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cut                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-scissors              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-copy                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-files-o                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-paperclip             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-save                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-floppy-o              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-square                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-reorder                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-list-ul                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-list-ol                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-strikethrough " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-underline             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-table                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-magic                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-truck                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pinterest             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pinterest-square                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-google-plus-square                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-google-plus                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-money                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-down                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-up                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-left                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-right                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-columns                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-unsorted                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-down                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-asc              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-up                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-desc                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-envelope                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-linkedin                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rotate-left                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-undo                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-legal                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gavel                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-dashboard                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tachometer            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-comment-o                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-comments-o                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-flash                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bolt                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sitemap                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-umbrella                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-paste                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-clipboard                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-lightbulb-o                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-exchange                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cloud-download                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cloud-upload          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-user-md                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-stethoscope                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-suitcase                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bell-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-coffee                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cutlery                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-file-text-o           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-building              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-hospital              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-ambulance             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-medkit                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-fighter-jet           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-beer                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-h-square                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-plus-square                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-double-left     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-double-right    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-double-up               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-double-down     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-left                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-right                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-up                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-angle-down                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-desktop                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-laptop                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tablet                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-mobile-phone                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-mobile                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-circle-o                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-quote-left                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-quote-right                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-spinner                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-circle                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-mail-reply            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-reply                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-github-alt            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-folder-o              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-folder-open-o " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-expand-o              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-collapse-o            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-smile-o                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-frown-o                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-meh-o                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gamepad                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-keyboard-o            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-flag-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-flag-checkered        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-terminal              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-code                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-reply-all                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-mail-reply-all                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-star-half-empty                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-star-half-f" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-location-arrow                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-crop                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-code-fork                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-unlink                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chain-broken          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-question                      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-info                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-exclamation           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-superscript           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-subscript             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-eraser                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-puzzle-piece  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-microphone            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-microphone-slash" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-shield                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-calendar-o            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-fire-extinguisher" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rocket                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-maxcdn                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-circle-left           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-circle-right  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-circle-up             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-chevron-circle-down           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-html5                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-css3                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-anchor                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-unlock-o              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bullseye              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-ellipsis-horizontal           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-ellipsis-vertical             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rss-square            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-play-circle           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-ticket                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-minus-square  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-minus-square-o        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-level-up              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-level-down            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-check-square  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pencil-square " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-external-link-square  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-share-square                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-compass                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-toggle-down                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-square-o-" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-toggle-up                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-square-o-" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-toggle-right                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-squar" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-euro                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-eur                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gbp                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-dollar                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-usd                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rupee         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-inr                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-cny                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rmb                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-ruble                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-rouble                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-won                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-krw                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bitcoin               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-btc                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-file          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-file-text                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-alpha-asc                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-alpha-desc               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-amount-asc               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-amount-desc      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-numeric-asc      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sort-numeric-desc     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-thumbs-up                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-thumbs-down                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-youtube-square                " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-youtube                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-xing                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-xing-square           " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-youtube-play  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-dropbox                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-stack-overflow        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-instagram             " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-flickr                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-adn                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bitbucket                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bitbucket-square      " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tumblr                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-tumblr-square         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-long-arrow-down               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-long-arrow-up         " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-long-arrow-left               " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-long-arrow-right              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-apple                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-windows                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-android                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-linux                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-dribbble              " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-skype                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-foursquare            " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-trello                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-female                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-male                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-gittip                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-sun-o                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-moon-o                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-archive                       " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-bug                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-vk                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-weibo                 " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-renren                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-pagelines                     " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-stack-exchange                        " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-o-right                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-arrow-circle-o-left                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-toggle-left                   " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-caret-square-o-" />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-dot-circle-o                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-wheelchair                    " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-vimeo-square          " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-turkish-lira                  " />\r
+       <button onClick="Clients.log(self.iconSclass)" iconSclass="z-icon-try           " />\r
+</zk>
\ No newline at end of file
index 6257366aa71c5b0bbd13ff0cf440230a35e57b3a..f1b1b7efe3cbc886e5a828cbe47d9e17a5e68c07 100644 (file)
        <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')">\r
                <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')" />\r
 \r
-               <space bar="false" />\r
-\r
-               <div align="left" width="100%">\r
-                       <space bar="false" />\r
-                       <spinner constraint="no empty,min 1 max 10" value="@bind(jlm.newPriority)" width="60px" disabled="@load(jlm.updatePriorityDisabled)" />\r
-                       <button label="Repriorizálás" onClick="@command('changeJobsPriority')" autodisable="self" disabled="@load(jlm.updatePriorityDisabled)" />\r
-                       <button label="Futtatás" onClick="@command('executeJob')" />\r
-                       <checkbox label="Engedélyezés" checked="@bind(jlm.executionEnabled)" />\r
-                       <button sclass="buttonboldfont" label="Leállítás" onClick="@command('shutdown')" autodisable="self" disabled="@load(jlm.shutdownDisabled)" />\r
-                       <button sclass="buttonboldfont" label="Elindítás" onClick="@command('startup')" autodisable="self" disabled="@load(jlm.startupDisabled)" />\r
-                       <button sclass="buttonboldfont" label="Takarítás" onClick="@command('cleanupSuspended')" autodisable="self" />\r
-                       <button sclass="buttonboldfont" label="NEXIO szinkronizálás" onClick="@command('restartNexio')" visible="${not sessionScope.nexioDisable}" />\r
-               </div>\r
+               <toolbar>\r
+                       <spinner constraint="no empty,min 1 max 50" value="@bind(jlm.newPriority)" width="60px" disabled="@load(jlm.updatePriorityDisabled)" />\r
+                       <toolbarbutton label="Repriorizálás" iconSclass="z-icon-asterisk" onClick="@command('changeJobsPriority')" disabled="@load(jlm.updatePriorityDisabled)" autodisable="self"/>\r
+                       <separator orient="vertical"/>\r
+                       <toolbarbutton label="Futtatás" iconSclass="z-icon-play" onClick="@command('executeJob')" autodisable="self"/>\r
+                       <toolbarbutton label="Összes letiltása" iconSclass="z-icon-ban" mode="toggle" checked="@bind(jlm.allExecutionDisabled)" autodisable="self"/>\r
+                       <toolbarbutton label="Időzítettek letiltása" iconSclass="z-icon-clock-o" mode="toggle" checked="@bind(jlm.scheduledExecutionDisabled)" autodisable="self"/>\r
+                       <separator orient="vertical"/>\r
+                       <toolbarbutton label="Leállítás" iconSclass="z-icon-level-down" onClick="@command('shutdown')" disabled="@load(jlm.shutdownDisabled)" autodisable="self"/>\r
+                       <toolbarbutton label="Elindítás" iconSclass="z-icon-level-up" onClick="@command('startup')" disabled="@load(jlm.startupDisabled)" autodisable="self"/>\r
+                       <separator orient="vertical"/>\r
+                       <toolbarbutton label="Takarítás" iconSclass="z-icon-eraser" onClick="@command('cleanupSuspended')" autodisable="self"/>\r
+                       <separator orient="vertical"/>\r
+                       <toolbarbutton label="NEXIO szinkronizálás" iconSclass="z-icon-renren" onClick="@command('restartNexio')" visible="${not sessionScope.nexioDisable}" autodisable="self"/>\r
+               </toolbar>\r
 \r
 \r
-               <div height="100%" width="100%" style="background: #e3e3e3" align="left">\r
+               <div height="100%" width="100%">\r
                        <groupbox height="94%" closable="false">\r
                                <caption sclass="boldfont" label="Aktív folyamatok" />\r
                                <!--                            <borderlayout> -->\r
                                                </listitem>\r
                                        </template>\r
                                </listbox>\r
-\r
-                               <!--                                    </center> -->\r
-                               <!--                                    <east title="Részletek" size="25%" flex="true" splittable="true" collapsible="true"> -->\r
-                               <!--                                            <grid sizedByContent="false" span="true" model="@load(jlm.selectedJobs)" -->\r
-                               <!--                                                    vflex="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" -->\r
-                               <!--                                                    sclass="listbox-normal-style" emptyMessage="A részletek megtekintéséhez jelöljön ki egy folyamatot." > -->\r
-                               <!--                                                    <columns> -->\r
-                               <!--                                                            <column label="ID" hflex="1" align="left" /> -->\r
-                               <!--                                                    </columns> -->\r
-                               <!--                                                    <rows> -->\r
-                               <!--                                                            <template name="model"> -->\r
-                               <!--                                                                    <row> -->\r
-                               <!--                                                                            <label value="@load(each.parameters)" /> -->\r
-                               <!--                                                                    </row> -->\r
-                               <!--                                                            </template> -->\r
-                               <!--                                                    </rows> -->\r
-                               <!--                                            </grid> -->\r
-                               <!--                                    </east> -->\r
-                               <!--                            </borderlayout> -->\r
-\r
                        </groupbox>\r
                </div>\r
 \r
index 871521ee214027f41f31beb544f59cf2604e4266..a3980f006a01ed5d366c2cf9cf38e67b52bb8338 100644 (file)
@@ -10,7 +10,7 @@
 \r
                                <template name="model">\r
                                        <listitem onDoubleClick="@command('execute')">\r
-                                               <listcell label="@load(each.name)" />\r
+                                               <listcell label="@load(empty each.name ? each.template : each.name)" />\r
                                        </listitem>\r
                                </template>\r
                        </listbox>\r
index c253c1944ce76d51b79739ec99fbbff1518a230b..0efbf9d920bda992d0c685335e99eebeb485d8fb 100644 (file)
        </style>\r
        <div apply="org.zkoss.bind.BindComposer" viewModel="@id('lm') @init('user.jobengine.zk.model.MenuModel')">\r
                <menubar id="menubar" hflex="max" sclass="redmenubar">\r
-                       <menu sclass="whitemenu" label="Archívum" >\r
+                       <menuitem sclass="whitemenu" label="Keresés" onClick="@command('navigate', action='/')" disabled="false" />\r
+                       <menuitem sclass="whitemenu" label="Folyamatok" onClick="@command('navigate', action='jobs')" disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
+                       <menuitem sclass="whitemenu" label="Maestro" onClick="@command('navigate', action='maestro')" visible="${lm.maestroAvailable}" />\r
+                       <menu sclass="whitemenu" label="Egyéb" >\r
                                <menupopup>\r
-                                       <menuitem sclass="rozsda" label="Keresés" onClick="@command('navigate', action='/')" disabled="false" />\r
-                                       <menuitem sclass="rozsda" label="Maestro" onClick="@command('navigate', action='maestro')" visible="${lm.maestroAvailable}" />\r
-                                       <menuitem sclass="rozsda" label="Folyamatok" onClick="@command('navigate', action='jobs')" disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
-                                       <menuitem sclass="rozsda" label="Hiányzó anyagok" onClick="@command('navigate', action='missingmaterials')" disabled="${not sessionScope.userPrincipal.submitter or sessionScope.userPrincipal.anonymous}" />\r
+                                       <menuitem sclass="rozsda" label="Hiányzó anyagok" onClick="@command('navigate', action='missingmaterials')" disabled="${not sessionScope.userPrincipal.submitter or sessionScope.userPrincipal.anonymous}" />\r
+                                       <menuitem sclass="rozsda" label="Folyamat tevékenységek" onClick="@command('navigate', action='statistics')" disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
+                                       <menuitem sclass="rozsda" label="Híranyag gyártás" onClick="@command('navigate', action='newshistory')" disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                                </menupopup>\r
                        </menu>\r
                        <menu sclass="whitemenu" label="Statisztikák" visible="${not sessionScope.guiStatisticsDisable}">\r
                                        <menuitem sclass="rozsda" label="Híranyag gyártás" onClick="@command('navigate', action='newshistory')" disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                                </menupopup>\r
                        </menu>\r
-       \r
                        <menu sclass="whitemenu" label="${labels.menu_help}" visible="${not sessionScope.guiHelpDisable}">\r
                                <menupopup>\r
                                        <menuitem sclass="rozsda" label="${labels.menu_content}" href="http://10.10.1.27:90/docs" target="_blank" />\r
                                        <menuitem sclass="rozsda" label="${labels.menu_version}" href="/resource/help.html" target="_blank" />\r
                                </menupopup>\r
                        </menu>\r
+\r
                        <menuitem id="basketIMenuItem" image="/img/ic_shopping_cart_black_24dp.png" sclass="whitemenu" style="float: right" label="@load(lm.basketMenuLabel)" onClick="@command('showBasket')" disabled="false" />\r
                        <menuitem sclass="whitemenu" style="float: right" label="Kilépés" onClick="@command('doLogout')" disabled="false" />\r
                </menubar>\r
index 2806a86903386d7b59641996044c0971d93911fe..c75274b57392b6da33b1ec72efcd77c283991059 100644 (file)
@@ -55,7 +55,6 @@
                                        <north border="none" size="60%" splittable="true" minsize="250" collapsible="true">\r
                                                <div align="center" height="100%" width="100%">\r
                                                        <h:video-js id="myVideoDiv" class="video-js vjs-default-skin vjs-big-play-centered" style="width: 100%;height: 100%">\r
-<!--                                                           <h:source src="/services/proxy/media1/index.m3u8" type="application/x-mpegURL" /> -->\r
                                                        </h:video-js>\r
                                                        <div id="videoListener" onTcOut="@command('onTcOut')" onTcIn="@command('onTcIn')" />\r
                                                </div>\r
index e0069a4434acfedaac9e3cf00ee665cfdb39244f..af5aed5e803dd0cad6985db9d01767c5fd71a28e 100644 (file)
                                        <label multiline="true" value="@load(vm.selectedObject.media.description)" />\r
                                </div>\r
                        </div>\r
-                       <div>\r
-                               <h:textarea name='tags2' placeholder='Címkék'></h:textarea>\r
-                               <div id="listenerDiv" onChange="@command('onTag')" />\r
+<!--                   <div> -->\r
+<!--                           <h:textarea name='tags2' placeholder='Címkék'></h:textarea> -->\r
+<!--                           <div id="listenerDiv" onChange="@command('onTag')" /> -->\r
 \r
-                       </div>\r
+<!--                   </div> -->\r
                </div>\r
        </div>\r
 </zk>
\ No newline at end of file
index 98000a3ad9a65d919a2d14988daf5b61f291ec4f..107845fc0f626fef31c81e6fe61c12037519bc38 100644 (file)
@@ -1,35 +1,24 @@
 <zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:c="client" height="100%" width="100%">\r
-       <script type="text/javascript">\r
-               function _doKeyDown(evt) {\r
-                       console.log("xxx", evt.keyCode);\r
-                       var keyCode = evt.keyCode;\r
-                       if (keyCode !=13) {\r
-                               this.$_doKeyDown(evt);\r
-                       } else {\r
-                               if (window.getSelection) {\r
-                                       if (window.getSelection().empty) {  // Chrome\r
-                                       window.getSelection().empty();\r
-                                       } else if (window.getSelection().removeAllRanges) {  // Firefox\r
-                                       window.getSelection().removeAllRanges();\r
-                               }\r
-                               } else if (document.selection) {  // IE?\r
-                                 document.selection.empty();\r
-                               }\r
-                       } \r
-               }                                               \r
-       </script>\r
-\r
-\r
+       <menupopup id="searchSettings">\r
+               <menuitem label="10 találat oldalanként" value="10" checked="true" onClick="@command('setPageSize', source=self)" />\r
+               <menuitem label="25 találat oldalanként" value="25" checked="true" onClick="@command('setPageSize', source=self)" />\r
+               <menuitem label="50 találat oldalanként" value="50" checked="true" onClick="@command('setPageSize', source=self)" />\r
+               <menuitem label="100 találat oldalanként" value="100" checked="true" onClick="@command('setPageSize', source=self)" />\r
+               <menuitem label="200 találat oldalanként" value="200" checked="true" onClick="@command('setPageSize', source=self)" />\r
+               <menuseparator />\r
+               <menuitem label="Előzmények törlése" onClick="@command('clearHistory')" />\r
+       </menupopup>\r
+       <menupopup id="calendarSettings" >\r
+               <menuitem label="Ma" checkmark="true" checked="@bind(vm.selectedDateOption eq self.value)" value="1" onClick="@command('setCalendar', source=self)" />\r
+               <menuitem label="Hét" checkmark="true" checked="@bind(vm.selectedDateOption eq self.value)" value="2" onClick="@command('setCalendar', source=self)" />\r
+               <menuitem label="Hónap" checkmark="true" checked="@bind(vm.selectedDateOption eq self.value)" value="3" onClick="@command('setCalendar', source=self)" />\r
+<!--           <menuseparator /> -->\r
+<!--           <menuitem label="Előző" value="100" onClick="@command('setCalendar', source=self)" /> -->\r
+<!--           <menuitem label="Következő" value="200" onClick="@command('setCalendar', source=self)" /> -->\r
+               <menuseparator />\r
+               <menuitem label="Törlés" value="300" onClick="@command('setCalendar', source=self)" />\r
+       </menupopup>\r
        <toolbar id="tb" width="100%" style="background: transparent">\r
-               <menupopup id="searchSettings">\r
-                       <menuitem label="10 találat oldalanként" value="10" checked="true" onClick="@command('        ', source=self)" />\r
-                       <menuitem label="25 találat oldalanként" value="25" checked="true" onClick="@command('setPageSize', source=self)" />\r
-                       <menuitem label="50 találat oldalanként" value="50" checked="true" onClick="@command('setPageSize', source=self)" />\r
-                       <menuitem label="100 találat oldalanként" value="100" checked="true" onClick="@command('setPageSize', source=self)" />\r
-                       <menuitem label="200 találat oldalanként" value="200" checked="true" onClick="@command('setPageSize', source=self)" />\r
-                       <menuseparator />\r
-                       <menuitem label="Előzmények törlése" onClick="@command('clearHistory')" />\r
-               </menupopup>\r
                <toolbarbutton iconSclass="z-icon-caret-down" mode="toggle">\r
                        <attribute name="onCheck">\r
                                serachDetails.open = !serachDetails.open;\r
                        </attribute>\r
            </toolbarbutton>\r
         <toolbarbutton iconSclass="z-icon-th" popup="searchSettings, after_start" />\r
+               <separator orient="vertical" />\r
+               <toolbarbutton iconSclass="z-icon-calendar"  popup="calendarSettings, after_start" />\r
+               \r
         <datebox id="searchFrom" value="@bind(vm.searchFrom)"/>\r
         <datebox id="searchTo" value="@bind(vm.searchTo)"/>\r
                <combobox id="search" sclass="search" hflex="1" focus="true" model="@load(vm.searchHistory)" autodrop="true" buttonVisible="false"\r
-                       tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')" w:_doKeyDown="_doKeyDown">\r
+                       tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')">\r
+                               <attribute w:name="_doKeyDown">\r
+                                       <![CDATA[ \r
+                                                 function (evt) {\r
+                                                         var keyCode = evt.keyCode;\r
+                                                         if (keyCode !=13) {\r
+                                                                 this.$_doKeyDown(evt);\r
+                                                         } else{\r
+                                                                 if(window.getSelection) {\r
+                                                                         if (window.getSelection().empty) {  // Chrome\r
+                                                                           window.getSelection().empty();\r
+                                                                         } else if (window.getSelection().removeAllRanges) {  // Firefox\r
+                                                                           window.getSelection().removeAllRanges();\r
+                                                                         }\r
+                                                                       } else if (document.selection) {  // IE?\r
+                                                                         document.selection.empty();\r
+                                                                       }\r
+                                                         } \r
+                                                 } ]]>\r
+                               </attribute>\r
                        <template name="model">\r
                                <comboitem label="${each}" />\r
                        </template>\r
                </combobox>\r
-       <toolbarbutton iconSclass="z-icon-search" onClick="@command('doSearch')" />\r
+       <toolbarbutton iconSclass="z-icon-search" label="Keresés" onClick="@command('doSearch')" />\r
        </toolbar>\r
 \r
        <panel id="serachDetails" title="" border="none" open="false" collapsible="true">\r
                <panelchildren>\r
-                       <hbox pack="left" align="top" height="min" id="searchFiltersMenu">\r
-                               <toolbar class="toolbar" style="width: 40px;">\r
-                                       <toolbarbutton label="Mind" style="font-size:9px;padding:0px;margin:0px 10px 0px 0px;background:none;" mode="toggle"\r
-                                               checked="@bind(vm.allChecked)" />\r
-                               </toolbar>\r
-                               <vlayout>\r
-                                       <toolbar class="toolbar">\r
-                                               <forEach items="@load(vm.topTypeFilters)">\r
-                                                       <toolbarbutton label="@load(each.getName())" mode="toggle" image="@load(c:cat('/img/types/', each.getIcon()))"\r
-                                                               checked="@bind(each.checked) @validator(vm.allFilterCheckedValidator)" class="@load(c:cat(each.getColor(), ' typefilter'))" />\r
-                                               </forEach>\r
-                                       </toolbar>\r
-                                       <toolbar class="toolbar">\r
-                                               <forEach items="@load(vm.bottomTypeFilters)">\r
-                                                       <toolbarbutton label="@load(each.getName())" mode="toggle" image="@load(c:cat('/img/types/', each.getIcon()))"\r
-                                                               checked="@bind(each.checked) @validator(vm.allFilterCheckedValidator)" class="@load(c:cat(each.getColor(), ' typefilter'))" />\r
-                                               </forEach>\r
-                                       </toolbar>\r
-                               </vlayout>\r
-                       </hbox>\r
+                       <vbox width="100%">\r
+                               <groupbox>\r
+                                       <caption label="Anyag típus" />\r
+       \r
+                                       <hbox pack="left" align="top" height="min" id="searchFiltersMenu">\r
+                                               <toolbar class="toolbar" style="width: 40px;">\r
+                                                       <toolbarbutton label="Mind" style="font-size:9px;padding:0px;margin:0px 10px 0px 0px;background:none;" mode="toggle"\r
+                                                               checked="@bind(vm.allChecked)" />\r
+                                               </toolbar>\r
+                                               <vlayout>\r
+                                                       <toolbar class="toolbar">\r
+                                                               <forEach items="@load(vm.topTypeFilters)">\r
+                                                                       <toolbarbutton label="@load(each.getName())" mode="toggle" image="@load(c:cat('/img/types/', each.getIcon()))"\r
+                                                                               checked="@bind(each.checked) @validator(vm.allFilterCheckedValidator)" class="@load(c:cat(each.getColor(), ' typefilter'))" />\r
+                                                               </forEach>\r
+                                                       </toolbar>\r
+                                                       <toolbar class="toolbar">\r
+                                                               <forEach items="@load(vm.bottomTypeFilters)">\r
+                                                                       <toolbarbutton label="@load(each.getName())" mode="toggle" image="@load(c:cat('/img/types/', each.getIcon()))"\r
+                                                                               checked="@bind(each.checked) @validator(vm.allFilterCheckedValidator)" class="@load(c:cat(each.getColor(), ' typefilter'))" />\r
+                                                               </forEach>\r
+                                                       </toolbar>\r
+                                               </vlayout>\r
+                                       </hbox>\r
+                                       \r
+                               </groupbox>\r
+                               <groupbox>\r
+                                       <caption label="Egyéb" />\r
+                                       <checkbox label="Hiányzó proxy" checked="@bind(vm.missingProxy)"/>\r
+                               </groupbox>\r
+                       </vbox>\r
                </panelchildren>\r
        </panel>\r
 \r
index e44865ae30306dd54c3a40c52fc4300d9de66fd5..ccf142dcafd2bd7f1218e9620917e6897bc5f6d6 100644 (file)
@@ -65,10 +65,12 @@ public interface IJobEngine {
 
        IUserMessageQueues getUserMessageQueues();
 
-       boolean isEnabled();
+       boolean isAllExecutionDisabled();
 
        boolean isRunning();
 
+       boolean isScheduledExecutionDisabled();
+
        void loadExecutors();
 
        void loadProgram(String fileName) throws Exception;
@@ -105,10 +107,12 @@ public interface IJobEngine {
 
        void sendMessage(IJobMessage jobMessage);
 
-       void setEnabled(boolean isEnabled);
+       void setAllExecutionDisabled(boolean isDisabled);
 
        void setItemManager(IItemManager itemManager);
 
+       void setScheduledExecutionDisabled(boolean isDisabled);
+
        void shutdown();
 
        void startup();
index 60ba35be6f6f4cb59e8ea29cd2c61c195f99ad8d..de6b25d9bea0c8ea6f014e5fb1a1cc9921cbf9bb 100644 (file)
@@ -155,7 +155,8 @@ public class JobEngine implements IJobEngine {
        }
 
        private volatile boolean isRunning;
-       private volatile boolean isEnabled;
+       private volatile boolean isAllExecutionDisabled;
+       private volatile boolean isScheduledExecutionDisabled;
 
        private final BlockingQueue<IJobRuntime> runQueue;
        private final BlockingQueue<IJobMessage> messageQueue;
@@ -193,8 +194,6 @@ public class JobEngine implements IJobEngine {
                if (instance != null)
                        throw new RuntimeException("Multiple JobEngine instances are not supported!");
                instance = this;
-
-               isEnabled = true;
                //logger.info("JobEngine created");
        }
 
@@ -461,8 +460,8 @@ public class JobEngine implements IJobEngine {
        }
 
        @Override
-       public boolean isEnabled() {
-               return isEnabled;
+       public boolean isAllExecutionDisabled() {
+               return isAllExecutionDisabled;
        }
 
        private void isRunnable(IProgram program) throws JobEngineException {
@@ -486,6 +485,11 @@ public class JobEngine implements IJobEngine {
                return isRunning;
        }
 
+       @Override
+       public boolean isScheduledExecutionDisabled() {
+               return isScheduledExecutionDisabled;
+       }
+
        private void jobCleanup(IJobRuntime jobRuntime) {
                statusMachine.processAction(JobAction.FINISH, jobRuntime);
        }
@@ -749,8 +753,8 @@ public class JobEngine implements IJobEngine {
        }
 
        @Override
-       public void setEnabled(boolean isEnabled) {
-               this.isEnabled = isEnabled;
+       public void setAllExecutionDisabled(boolean isDisabled) {
+               this.isAllExecutionDisabled = isDisabled;
        }
 
        @Override
@@ -758,6 +762,11 @@ public class JobEngine implements IJobEngine {
                itemManager = _itemManager;
        }
 
+       @Override
+       public void setScheduledExecutionDisabled(boolean isDisabled) {
+               this.isScheduledExecutionDisabled = isDisabled;
+       }
+
        @Override
        public void shutdown() {
                isRunning = false;
@@ -863,7 +872,7 @@ public class JobEngine implements IJobEngine {
        @Override
        public IJobRuntime submit(String template, String name, Map<String, Object> parameters) throws JobEngineException {
                //Az ütemezett task-okat configból a Quartz futtatja
-               if (!isEnabled()) {
+               if (isAllExecutionDisabled) {
                        logger.info("JobEngine is disabled, can not submit job '{}'", name);
                        return null;
                }
index aa73c258cc45e9dc760f1bdc5f680b51dfeec87f..a202ebf271b62784fdbe17eb88210dbb6013fac2 100644 (file)
@@ -34,13 +34,25 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
        private Map<String, Object> jobParameters = new HashMap<String, Object>();\r
 \r
        public IJobRuntime doJob() throws JobEngineException {\r
+               if (jobEngine.isScheduledExecutionDisabled()) {\r
+                       logger.warn("Scheduled execution is temporarly disabled, skipping execution of '{}'", jobName);\r
+                       return null;\r
+               }\r
                return jobEngine.submit(templateName, jobName, getJobParameters());\r
        }\r
 \r
        public IJobRuntime doJob(IJobStatusChangedListener statusListener) throws JobEngineException {\r
+               if (jobEngine.isScheduledExecutionDisabled()) {\r
+                       logger.warn("Scheduled execution is temporarly disabled, skipping execution of '{}'", jobName);\r
+                       return null;\r
+               }\r
                return jobEngine.submit(null, statusListener, templateName, jobName, getJobParameters());\r
        }\r
 \r
+       public IJobRuntime doManualJob() throws JobEngineException {\r
+               return jobEngine.submit(templateName, jobName, getJobParameters());\r
+       }\r
+\r
        @Override\r
        public void execute(JobExecutionContext context) throws JobExecutionException {\r
                JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();\r
index e8a0611cfcc69c92ee9d4263679ab5e2ed994d1a..3f7c217b87e04ff72f810813f552f59ee4b6a898 100644 (file)
@@ -130,48 +130,44 @@ public class CachedListModel extends ListModelList<ArchivedMedia> {
         * indexhez kepest\r
         */\r
        private void loadCache(int forIndex) {\r
-               try {\r
-                       clearCache();\r
-                       int halfSize = this.cacheSize / 2;\r
-                       int rowLimit = this.cacheSize; // 200\r
-                       int startPos = 0;\r
-                       if ((forIndex - halfSize) > 0) { // forIndex=60 startPos=0\r
-                                                                                                       // cache=0-200, forIndex=150\r
-                                                                                               // startPos=50 cache=50-250\r
-                               startPos = (forIndex - halfSize);\r
-                       }\r
+               clearCache();\r
+               int halfSize = this.cacheSize / 2;\r
+               int rowLimit = this.cacheSize; // 200\r
+               int startPos = 0;\r
+               if ((forIndex - halfSize) > 0) { // forIndex=60 startPos=0\r
+                                                                                               // cache=0-200, forIndex=150\r
+                                                                                       // startPos=50 cache=50-250\r
+                       startPos = (forIndex - halfSize);\r
+               }\r
 \r
-                       int endPos = (startPos + rowLimit);\r
-                       endPos = ((this.resultSetSize < 0) || (endPos <= this.resultSetSize)) ? endPos : this.resultSetSize;\r
+               int endPos = (startPos + rowLimit);\r
+               endPos = ((this.resultSetSize < 0) || (endPos <= this.resultSetSize)) ? endPos : this.resultSetSize;\r
 \r
-                       SearchResult<ArchivedMedia> sr = createSearchResult(startPos, endPos);\r
+               SearchResult<ArchivedMedia> sr = createSearchResult(startPos, endPos);\r
 \r
-                       if (sr != null) {\r
+               if (sr != null) {\r
 \r
-                               if (this.resultSetSize < 0) {\r
-                                       this.resultSetSize = (int) sr.getItemCount();\r
-                               }\r
+                       if (this.resultSetSize < 0) {\r
+                               this.resultSetSize = (int) sr.getItemCount();\r
+                       }\r
 \r
-                               List<ArchivedMedia> resList = sr.getItems();\r
-                               if (resList != null) {\r
-                                       for (int c = 0; c < resList.size(); c++) {\r
-                                               cache.put(startPos + c, resList.get(c));\r
-                                               cache.put(startPos + c, resList.get(c));\r
-                                               // logger.debug("CachedListMode.cached idx: " +\r
-                                               // (startPos + c));\r
-                                       }\r
+                       List<ArchivedMedia> resList = sr.getItems();\r
+                       if (resList != null) {\r
+                               for (int c = 0; c < resList.size(); c++) {\r
+                                       cache.put(startPos + c, resList.get(c));\r
+                                       cache.put(startPos + c, resList.get(c));\r
+                                       // logger.debug("CachedListMode.cached idx: " +\r
+                                       // (startPos + c));\r
                                }\r
-                               // logger.debug("CachedListMode.cacheSize: " + cache.size());\r
-\r
-                               cacheStart = startPos + 1;\r
-                               cacheEnd = cacheStart + (cache.size() == 0 ? 0 : (cache.size() - 1));\r
-                               BindUtils.postNotifyChange(null, null, this, "*");\r
-                               fireLoadCacheEvent();\r
                        }\r
+                       // logger.debug("CachedListMode.cacheSize: " + cache.size());\r
 \r
-               } catch (Exception e) {\r
-                       logger.error("", e);\r
+                       cacheStart = startPos + 1;\r
+                       cacheEnd = cacheStart + (cache.size() == 0 ? 0 : (cache.size() - 1));\r
+                       BindUtils.postNotifyChange(null, null, this, "*");\r
+                       fireLoadCacheEvent();\r
                }\r
+\r
        }\r
 \r
        // kintrol is hivhatjak\r
index 42cb6e0bb62fd6973f9da59eb780cce47f2e5e67..e13ca2f6448c461ebef7e0ded4d7751276165130 100644 (file)
@@ -37,7 +37,8 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        private int newPriority = 1;\r
        private boolean shutdownDisabled;\r
        private boolean startupDisabled;\r
-       private boolean executionEnabled;\r
+       private boolean allExecutionDisabled;\r
+       private boolean scheduledExecutionDisabled;\r
        private Collection<BasicDBObject> selectedJobs;\r
 \r
        @Command\r
@@ -98,7 +99,8 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                        SessionUtil.registerJobChangedListener(this);\r
 \r
                        initializeList();\r
-                       setExecutionEnabled(jobEngine.isEnabled());\r
+                       setAllExecutionDisabled(jobEngine.isAllExecutionDisabled());\r
+                       setScheduledExecutionDisabled(jobEngine.isScheduledExecutionDisabled());\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
                        setStartupDisabled(true);\r
@@ -113,8 +115,12 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                //Collections.sort(jobList, (o1, o2) -> compare(o1, o2));\r
        }\r
 \r
-       public boolean isExecutionEnabled() {\r
-               return executionEnabled;\r
+       public boolean isAllExecutionDisabled() {\r
+               return allExecutionDisabled;\r
+       }\r
+\r
+       public boolean isScheduledExecutionDisabled() {\r
+               return scheduledExecutionDisabled;\r
        }\r
 \r
        public boolean isShutdownDisabled() {\r
@@ -183,6 +189,17 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                t.start();\r
        }\r
 \r
+       //      @Command\r
+       //      public void restart() {\r
+       //              startupDisabled = true;\r
+       //              try {\r
+       //                      jobEngine.startup();\r
+       //              } catch (Exception e) {\r
+       //              }\r
+       //              shutdownDisabled = false;\r
+       //              initializeList();\r
+       //      }\r
+\r
        @Command\r
        public void restartNexio() {\r
                INexioAPI nexioAPI = ComponentBinder.getNexioAPI();\r
@@ -223,20 +240,9 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
 \r
        }\r
 \r
-       //      @Command\r
-       //      public void restart() {\r
-       //              startupDisabled = true;\r
-       //              try {\r
-       //                      jobEngine.startup();\r
-       //              } catch (Exception e) {\r
-       //              }\r
-       //              shutdownDisabled = false;\r
-       //              initializeList();\r
-       //      }\r
-\r
-       public void setExecutionEnabled(boolean executionEnabled) {\r
-               this.executionEnabled = executionEnabled;\r
-               jobEngine.setEnabled(executionEnabled);\r
+       public void setAllExecutionDisabled(boolean allExecutionDisabled) {\r
+               this.allExecutionDisabled = allExecutionDisabled;\r
+               jobEngine.setAllExecutionDisabled(allExecutionDisabled);\r
        }\r
 \r
        public void setJobList(ListModelList<IJobRuntime> jobList) {\r
@@ -247,6 +253,11 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                this.newPriority = newPriority;\r
        }\r
 \r
+       public void setScheduledExecutionDisabled(boolean isDisabled) {\r
+               this.scheduledExecutionDisabled = isDisabled;\r
+               jobEngine.setScheduledExecutionDisabled(scheduledExecutionDisabled);\r
+       }\r
+\r
        @NotifyChange({ "updatePriorityDisabled" })\r
        public void setSelectedJobs(Collection<BasicDBObject> selectedJobs) {\r
                this.selectedJobs = selectedJobs;\r
index db532ba7c43ce4db01c6c86ff5ca08f752b4db33..90c37feb66d3364efb62b3df1b2665d56256213c 100644 (file)
@@ -56,7 +56,7 @@ public class JobSelectorModel extends BaseModel {
                ScheduledJob scheduledJob = scheduler.createScheduledJob(selectedJob);\r
                scheduledJob.setJobEngine(jobEngine);\r
                try {\r
-                       scheduledJob.doJob();\r
+                       scheduledJob.doManualJob();\r
                } catch (Exception e) {\r
                        Messagebox.show(e.getMessage());\r
                }\r
index 37a0ab05c83a23f639ef311673120259f0967bf5..3da7756559a44a6e663ea1fdbb95bc7affb612e6 100644 (file)
@@ -1,7 +1,15 @@
 package user.jobengine.zk.model;\r
 \r
-import java.net.URL;\r
+import static java.time.temporal.TemporalAdjusters.firstDayOfMonth;\r
+import static java.time.temporal.TemporalAdjusters.firstDayOfNextMonth;\r
+import static java.time.temporal.TemporalAdjusters.firstDayOfNextYear;\r
+import static java.time.temporal.TemporalAdjusters.firstDayOfYear;\r
+\r
 import java.nio.file.Paths;\r
+import java.time.LocalDate;\r
+import java.time.ZoneId;\r
+import java.time.ZonedDateTime;\r
+import java.time.temporal.ChronoField;\r
 import java.util.ArrayList;\r
 import java.util.Date;\r
 import java.util.HashMap;\r
@@ -43,7 +51,6 @@ import org.zkoss.zul.Hlayout;
 import org.zkoss.zul.ListModelList;\r
 import org.zkoss.zul.Menuitem;\r
 import org.zkoss.zul.Menupopup;\r
-import org.zkoss.zul.Messagebox;\r
 import org.zkoss.zul.Paging;\r
 import org.zkoss.zul.Row;\r
 import org.zkoss.zul.Timer;\r
@@ -111,6 +118,8 @@ public class SearchModel extends AsyncBaseModel {
        private Map<String, String> columnOrder;\r
        private Date searchFrom;\r
        private Date searchTo;\r
+       private boolean missingProxy;\r
+       private int selectedDateOption;\r
 \r
        public SearchModel() {\r
                this.itemManager = ItemManager.getInstance();\r
@@ -255,8 +264,9 @@ public class SearchModel extends AsyncBaseModel {
                        itemsGrid.setActivePage(0);\r
                        searchValue = search.getText();\r
                        setSelectedObject(null);\r
-                       if (StringUtils.isBlank(searchValue) || searchValue.length() < 3)\r
-                               throw new Exception("Legalább 3 karakter megadása kötelező!");\r
+                       if ((StringUtils.isBlank(searchValue) || searchValue.length() < 3) && searchFrom == null && searchTo == null && !missingProxy) {\r
+                               throw new Exception("Legalább 3 karakter keresőszöveg, a 'hiányzó proxy' beállítás vagy egy dátum kitöltése szükséges!");\r
+                       }\r
 \r
                        List<String> searchFilters = getSelectedFilters();\r
                        if (SessionUtil.getUserColumnOrder() != null) {\r
@@ -264,7 +274,7 @@ public class SearchModel extends AsyncBaseModel {
                                orderAscending = columnOrder.entrySet().iterator().next().getValue().equals("ascending");\r
                        }\r
 \r
-                       SearchOptions options = new SearchOptions(searchValue, searchFilters, searchFrom, searchTo, orderBy, orderAscending);\r
+                       SearchOptions options = new SearchOptions(searchValue, searchFilters, searchFrom, searchTo, missingProxy, orderBy, orderAscending);\r
                        searchResult = new CachedListModel(options);\r
                        setSelectedObject(null);\r
 \r
@@ -275,7 +285,8 @@ public class SearchModel extends AsyncBaseModel {
 \r
                        SessionUtil.putUserSearchFilter(searchFilters);\r
                } catch (Exception e) {\r
-                       Messagebox.show(e.getMessage(), "Hiba", Messagebox.OK, Messagebox.ERROR);\r
+                       Clients.showNotification(e.getMessage(), "error", search, "start_center", 2000);\r
+                       //Messagebox.show(e.getMessage(), "Hiba", Messagebox.OK, Messagebox.ERROR);\r
                        logger.error(e);\r
                }\r
        }\r
@@ -370,11 +381,20 @@ public class SearchModel extends AsyncBaseModel {
                        if (mediaFiles != null) {\r
                                for (MediaFile mf : mediaFiles) {\r
                                        Store store = mf.getStore();\r
-                                       if (store.isLowres()) {\r
-                                               StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP);\r
-                                               URL base = new URL(sourceStoreUri.toString());\r
-                                               String relative = mf.getRelativePath().replace("\\", "/");\r
-                                               ret = new URL(base, relative).toString();\r
+                                       //TODO a tartalek nem tud lowres lenni, de a TSM-nek nincs HTTP bejegyzese\r
+                                       //                                      if (store.isLowres()) {\r
+                                       //                                              StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP);\r
+                                       //                                              URL base = new URL(sourceStoreUri.toString());\r
+                                       //                                              String relative = mf.getRelativePath().replace("\\", "/");\r
+                                       //                                              ret = new URL(base, relative).toString();\r
+                                       //                                              break;\r
+                                       //                                      }\r
+\r
+                                       //relative cim a sajat kiszolgalo miatt\r
+                                       StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP);\r
+\r
+                                       if (sourceStoreUri != null && sourceStoreUri.isStream()) {\r
+                                               ret = sourceStoreUri.toString(true);\r
                                                break;\r
                                        }\r
                                }\r
@@ -399,6 +419,10 @@ public class SearchModel extends AsyncBaseModel {
                return searchTo;\r
        }\r
 \r
+       public int getSelectedDateOption() {\r
+               return selectedDateOption;\r
+       }\r
+\r
        private List<String> getSelectedFilters() {\r
                List<String> result = null;\r
                if (!allChecked) {\r
@@ -479,6 +503,10 @@ public class SearchModel extends AsyncBaseModel {
                return itemSelected;\r
        }\r
 \r
+       public boolean isMissingProxy() {\r
+               return missingProxy;\r
+       }\r
+\r
        public boolean isRowsExpanded() {\r
                return rowsExpanded;\r
        }\r
@@ -628,6 +656,52 @@ public class SearchModel extends AsyncBaseModel {
 \r
        }\r
 \r
+       @Command\r
+       @NotifyChange({ "searchFrom", "searchTo", "selectedDateOption" })\r
+       public void setCalendar(@BindingParam("source") Menuitem source) {\r
+               int value = Integer.parseInt(source.getValue());\r
+               LocalDate now = LocalDate.now();\r
+               ZoneId zoneId = ZoneId.systemDefault();\r
+               //az elozo, kovetkezo lepteteshez kell\r
+               selectedDateOption = value;\r
+               switch (value) {\r
+               //nap\r
+               case 1:\r
+                       searchFrom = Date.from(now.atStartOfDay(zoneId).toInstant());\r
+                       searchTo = Date.from(now.plusDays(1).atStartOfDay(zoneId).toInstant());\r
+                       break;\r
+               //het\r
+               case 2:\r
+                       ZonedDateTime zdt = now.atStartOfDay(zoneId);\r
+                       // ISO 8601, Monday is first day of week\r
+                       ZonedDateTime firstOfWeek = zdt.with(ChronoField.DAY_OF_WEEK, 1);\r
+                       searchFrom = Date.from(firstOfWeek.toInstant());\r
+                       ZonedDateTime firstOfNextWeek = firstOfWeek.plusWeeks(1);\r
+                       searchTo = Date.from(firstOfNextWeek.toInstant());\r
+                       break;\r
+               //honap\r
+               case 3:\r
+                       searchFrom = Date.from(now.with(firstDayOfMonth()).atStartOfDay(zoneId).toInstant());\r
+                       searchTo = Date.from(now.with(firstDayOfNextMonth()).atStartOfDay(zoneId).toInstant());\r
+                       break;\r
+               //ev\r
+               case 4:\r
+                       searchFrom = Date.from(now.with(firstDayOfYear()).atStartOfDay(zoneId).toInstant());\r
+                       searchTo = Date.from(now.with(firstDayOfNextYear()).atStartOfDay(zoneId).toInstant());\r
+                       break;\r
+               //elozo\r
+               case 100:\r
+                       break;\r
+               //kovetkezo\r
+               case 200:\r
+                       break;\r
+               case 300:\r
+                       searchFrom = null;\r
+                       searchTo = null;\r
+                       break;\r
+               }\r
+       }\r
+\r
        private void setColumnOrder() {\r
                if (SessionUtil.getUserColumnOrder() != null) {\r
                        columnOrder = new HashMap<>();\r
@@ -644,15 +718,8 @@ public class SearchModel extends AsyncBaseModel {
                this.itemSelectedValidator = itemSelectedValidator;\r
        }\r
 \r
-       @Command\r
-       public void setPageSize(@BindingParam("source") Menuitem source) {\r
-               if (source.isChecked())\r
-                       return;\r
-               int pageSize = Integer.parseInt(source.getValue());\r
-               setSettingsPageSize(pageSize);\r
-               itemsGrid.setPageSize(pageSize);\r
-               itemsGrid.setActivePage(0);\r
-               SessionUtil.putUserPageSize(pageSize);\r
+       public void setMissingProxy(boolean missingProxy) {\r
+               this.missingProxy = missingProxy;\r
        }\r
 \r
        public void setRowsExpanded(boolean rowsExpanded) {\r
@@ -671,6 +738,10 @@ public class SearchModel extends AsyncBaseModel {
                this.searchTo = searchTo;\r
        }\r
 \r
+       public void setSelectedDateOption(int selectedDateOption) {\r
+               this.selectedDateOption = selectedDateOption;\r
+       }\r
+\r
        @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
        public void setSelectedObject(ArchivedMedia selectedObject) {\r
                this.selectedObject = selectedObject;\r
@@ -681,7 +752,7 @@ public class SearchModel extends AsyncBaseModel {
                        try {\r
                                String video = getLowresMediaFilePath();\r
                                if (video == null) {\r
-                                       Clients.evalJavaScript("setSource('/img/mediacube_logo_v2_50x50.png')");\r
+                                       Clients.evalJavaScript("setSource(null)");\r
                                } else {\r
                                        Clients.evalJavaScript("setSource('" + video + "')");\r
                                }\r
@@ -733,7 +804,7 @@ public class SearchModel extends AsyncBaseModel {
        private void showExternalMediaID() {\r
                String mediaID = SessionUtil.getQueryParameter(MEDIA_ID);\r
                if (mediaID != null) {\r
-                       SearchOptions options = new SearchOptions(searchValue, null, searchFrom, searchTo, orderBy, orderAscending);\r
+                       SearchOptions options = new SearchOptions(searchValue, null, searchFrom, searchTo, false, orderBy, orderAscending);\r
                        options.setMediaId(Long.parseLong(mediaID));\r
                        searchResult = new InitializedCachedListModel(options);\r
                }\r
index c99124b7fa2b433edbf54257ba7135970588da49..750c58b3a6da1135044ae5361a00fdd740a8b345 100644 (file)
@@ -1,18 +1,24 @@
 package user.jobengine.server.IT;\r
 \r
+import static org.junit.Assert.assertEquals;\r
+\r
 import java.util.Date;\r
 import java.util.List;\r
 \r
+import org.apache.commons.io.FileSystemUtils;\r
 import org.junit.AfterClass;\r
 import org.junit.BeforeClass;\r
 import org.junit.Test;\r
 \r
+import user.commons.StoreUri;\r
 import user.commons.logging.LogUtils;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Item;\r
 import user.jobengine.db.ItemManager;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
 import user.jobengine.search.LuceneMediaFinder;\r
 \r
 public class SupportTest {\r
@@ -33,10 +39,10 @@ public class SupportTest {
                System.setProperty("jobengine.octopus.stories.name", "stories180620");\r
                System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620");\r
 \r
-               System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;");\r
                System.setProperty("jobengine.nosql.db.user", "db2admin");\r
                System.setProperty("jobengine.nosql.db.password", "password");\r
-               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
                System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
                System.setProperty(ItemManager.DBPASSWORD, "password");\r
                System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
@@ -51,6 +57,27 @@ public class SupportTest {
                manager.disconnect();\r
        }\r
 \r
+       @Test\r
+       public void get_free_space() throws Exception {\r
+               System.out.println(FileSystemUtils.freeSpaceKb("/opt"));\r
+       }\r
+\r
+       //      @Test\r
+       //      public void getLocalTargetStoreUriByFreeSpace() throws Exception {\r
+       //              Store s = new Store();\r
+       //              for (int i = 0; i < 5; i++) {\r
+       //                      StoreUri su = new StoreUri();\r
+       //                      su.setProtocol(RemoteStoreProtocol.LOCAL);\r
+       //                      su.setPriority(i);\r
+       //                      su.setUri("/opt");\r
+       //                      su.setTarget(true);\r
+       //                      s.appendStoreUri(su);\r
+       //              }\r
+       //\r
+       //              StoreUri uri = s.getLocalTargetStoreUriByFreeSpace();\r
+       //              assertEquals(uri.getPriority(), 0);\r
+       //      }\r
+\r
        @Test\r
        public void mergeItemStructure() throws Exception {\r
                Item item = manager.createItem("Default", "Item1", "Itemdesc1", "Itemhouseid1");\r
@@ -64,6 +91,13 @@ public class SupportTest {
                // manager.mergeItemStructure(item);\r
        }\r
 \r
+       @Test\r
+       public void select_storeuri() throws Exception {\r
+               Store store = manager.getSystemStore(true);\r
+               StoreUri uri = store.getTargetStoreUri(RemoteStoreProtocol.LOCAL);\r
+               assertEquals(1, uri.getPriority());\r
+       }\r
+\r
        @Test\r
        public void tryLuceneSearch() throws Exception {\r
                // Item item = manager.createItem("Default", "Item1", "Itemdesc1",\r
@@ -84,5 +118,4 @@ public class SupportTest {
                // luceneSearch.search(item.getDescription(), dummy, "", true, 1, 10);\r
                luceneSearch.search(null);\r
        }\r
-\r
 }\r
index fdc0687ad683800288193ea27ce70cd94ca20384..4e13f8e7999b895649f3671601163d6e35fd43c5 100644 (file)
                <url-pattern>/proxy/*</url-pattern>\r
        </servlet-mapping>\r
 \r
+       <security-constraint>\r
+               <web-resource-collection>\r
+                       <web-resource-name>Everything on the app</web-resource-name>\r
+                       <url-pattern>/proxy/*</url-pattern>\r
+               </web-resource-collection>\r
+               <user-data-constraint>\r
+                       <transport-guarantee>CONFIDENTIAL</transport-guarantee>\r
+               </user-data-constraint>\r
+       </security-constraint>\r
 \r
 <!--   <security-constraint> -->\r
 <!--     <web-resource-collection> -->\r
index 47c91f8cd067334e8eef12fcdc463431f87543d1..cb3f689e4d28c7628eb2ccebdf33ab4ddc1924bc 100644 (file)
@@ -8,7 +8,7 @@ import javax.servlet.http.HttpServletRequest;
 import org.omnifaces.servlet.FileServlet;\r
 \r
 public class MediaFileServlet extends FileServlet {\r
-\r
+       private String root = System.getProperty("jobengine.mediacube.service.proxyroot", "/temp");\r
        private File folder;\r
 \r
        @Override\r
@@ -24,7 +24,7 @@ public class MediaFileServlet extends FileServlet {
 \r
        @Override\r
        public void init() throws ServletException {\r
-               folder = new File("c:\\opt");\r
+               folder = new File(root);\r
        }\r
 \r
 }
\ No newline at end of file