<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 -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -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 -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -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 -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Djobengine.mediacube.service.proxyroot="/opt" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -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
{"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
--- /dev/null
+<?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
-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
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
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
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
\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
\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
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
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
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
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
}\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
}\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
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
}\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
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
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
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
private int percent;
private IDirectoryLister lister;
private boolean showDirectories;
+ //1-magas, n-alacsony
+ private int priority;
public StoreUri() {
super();
return portNumber;
}
+ public int getPriority() {
+ return priority;
+ }
+
public RemoteStoreProtocol getProtocol() {
return protocol;
}
this.portNumber = portNumber;
}
+ public void setPriority(int priority) {
+ this.priority = priority;
+ }
+
public void setProtocol(RemoteStoreProtocol protocol) {
this.protocol = protocol;
}
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
--- /dev/null
+--
+-- 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'
+@
\r
Break getBreak(long id);\r
\r
+ Store getCurrentLowresStore() throws Exception;\r
+\r
DefaultContext getDbContext();\r
\r
/**\r
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
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
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
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
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
this.toResult = toResult;\r
}\r
\r
+ public boolean isMissingProxy() {\r
+ return missingProxy;\r
+ }\r
+\r
}\r
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
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
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
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
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
<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
<transport-guarantee>CONFIDENTIAL</transport-guarantee>\r
</user-data-constraint>\r
</security-constraint>\r
- -->\r
</web-app>\r
\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
});\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
toServer : true\r
});\r
}\r
+*/\r
+function addTags(tags, current) {\r
+}
\ No newline at end of file
--- /dev/null
+<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
<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
\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
</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
<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
<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
<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
IUserMessageQueues getUserMessageQueues();
- boolean isEnabled();
+ boolean isAllExecutionDisabled();
boolean isRunning();
+ boolean isScheduledExecutionDisabled();
+
void loadExecutors();
void loadProgram(String fileName) throws Exception;
void sendMessage(IJobMessage jobMessage);
- void setEnabled(boolean isEnabled);
+ void setAllExecutionDisabled(boolean isDisabled);
void setItemManager(IItemManager itemManager);
+ void setScheduledExecutionDisabled(boolean isDisabled);
+
void shutdown();
void startup();
}
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;
if (instance != null)
throw new RuntimeException("Multiple JobEngine instances are not supported!");
instance = this;
-
- isEnabled = true;
//logger.info("JobEngine created");
}
}
@Override
- public boolean isEnabled() {
- return isEnabled;
+ public boolean isAllExecutionDisabled() {
+ return isAllExecutionDisabled;
}
private void isRunnable(IProgram program) throws JobEngineException {
return isRunning;
}
+ @Override
+ public boolean isScheduledExecutionDisabled() {
+ return isScheduledExecutionDisabled;
+ }
+
private void jobCleanup(IJobRuntime jobRuntime) {
statusMachine.processAction(JobAction.FINISH, jobRuntime);
}
}
@Override
- public void setEnabled(boolean isEnabled) {
- this.isEnabled = isEnabled;
+ public void setAllExecutionDisabled(boolean isDisabled) {
+ this.isAllExecutionDisabled = isDisabled;
}
@Override
itemManager = _itemManager;
}
+ @Override
+ public void setScheduledExecutionDisabled(boolean isDisabled) {
+ this.isScheduledExecutionDisabled = isDisabled;
+ }
+
@Override
public void shutdown() {
isRunning = false;
@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;
}
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
* 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
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
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
//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
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
\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
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
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
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
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
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
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
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
\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
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
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
return itemSelected;\r
}\r
\r
+ public boolean isMissingProxy() {\r
+ return missingProxy;\r
+ }\r
+\r
public boolean isRowsExpanded() {\r
return rowsExpanded;\r
}\r
\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
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
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
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
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
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
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
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
// 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
// luceneSearch.search(item.getDescription(), dummy, "", true, 1, 10);\r
luceneSearch.search(null);\r
}\r
-\r
}\r
<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
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
\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