import javax.activation.DataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
+import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
private void sendEmail(final String to, final String subject, byte[] content, String contentType) {
try {
message.setSubject(subject);
+ message.setRecipients(RecipientType.TO, to);
final String encoding = getEncoding(content, contentType);
final byte[] encodedBytes = encodeContentToBytes(content, encoding);
final InternetHeaders headers = getHeaders(contentType, encoding);
private void sendEvents(final String to, final String subject, final Layout<?> layout, final List<LogEvent> events) {
try {
final byte[] rawBytes = formatContentToBytes(events, layout);
- final String contentType = layout.getContentType();
- sendEmail(to, subject, rawBytes, contentType);
+ //final String contentType = layout.getContentType();
+
+ sendEmail(to, subject, rawBytes, "text/html; charset=utf-8");
} catch (Exception e) {
logError("Caught exception while sending e-mail notification.", e);
throw new LoggingException("Error occurred while sending email", e);
}
protected void writeBuffer(List<LogEvent> events, final Layout<?> layout, final OutputStream out) throws IOException {
+ out.write("<html>".getBytes());
+ out.write("<body>".getBytes());
+
+ out.write("<table>".getBytes());
for (final LogEvent priorEvent : events) {
+ out.write("<tr><td>".getBytes());
final byte[] bytes = layout.toByteArray(priorEvent);
out.write(bytes);
+ out.write("</td></tr>".getBytes());
}
+ out.write("</table>".getBytes());
+ out.write("</body>".getBytes());
+ out.write("</html>".getBytes());
}
private void writeContent(final List<LogEvent> events, final Layout<?> layout, final ByteArrayOutputStream out) throws IOException {
parameters.put(HOUSEID, houseId);\r
parameters.put(RECIPIENT, recipient);\r
IJobRuntime child = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, String.format("Visszatöltés %s részére", recipient), parameters);\r
+ ((MediaCubeMarker) child.getMarker()).setTo(recipient);\r
} catch (Exception e) {\r
logger.catching(e);\r
logger.error(marker, "Hiba a kötegelt visszatöltésben. A rendszer üzenete: {}", e.getMessage());\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
return false;\r
}\r
\r
+ private Marker marker;\r
+\r
final int[] allCount = { 0 };\r
final int[] currentCount = { 0 };\r
\r
\r
@StepEntry\r
public Object[] execute(String sourceFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getMarker();\r
sourcePath = Paths.get(sourceFolder);\r
DirectoryStream<Path> directoryStream = null;\r
if (StringUtils.isBlank(sourcePath.toString())) {\r
- logger.error(getMarker(), "A folyamat 'sourcePath' bemeneti paramétere üres.");\r
+ logger.error(marker, "A folyamat 'sourcePath' bemeneti paramétere üres.");\r
throw new NullPointerException("System is not configured properly, 'sourceFolder' input parameter missing.");\r
}\r
\r
if (!sourcePath.toFile().exists() || !sourcePath.toFile().isDirectory()) {\r
- logger.error(getMarker(), "A {} mappa nem létezik.", sourceFolder);\r
+ logger.error(marker, "A {} mappa nem létezik.", sourceFolder);\r
throw new NullPointerException(String.format("Directory %s not exists.", sourceFolder));\r
}\r
try {\r
Files.walkFileTree(sourcePath, this);\r
} catch (Exception e) {\r
logger.catching(e);\r
- logger.error(getMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+ logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
throw e;\r
} finally {\r
if (directoryStream != null) {\r
try {\r
result = dateFormat.parse(strKillDate);\r
} catch (ParseException e) {\r
- logger.error(getMarker(), "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", fileName,\r
- strKillDate);\r
+ logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", fileName, strKillDate);\r
return null;\r
}\r
} else\r
- logger.error(getMarker(), "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", fileName, strKillDate);\r
+ logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", fileName, strKillDate);\r
return result;\r
}\r
\r
if (!removeExistingSpecialDirectory(dir, STATUSFOLDER))\r
return FileVisitResult.CONTINUE;\r
if (removeFile(dir))\r
- logger.info(getMarker(), "A {} üres mappa törlése sikeres.", dir);\r
+ logger.info(marker, "A {} üres mappa törlése sikeres.", dir);\r
\r
}\r
return FileVisitResult.CONTINUE;\r
return;\r
\r
if (killDateFiles.size() != 1)\r
- logger.warn(getMarker(), "A {} fájlhoz több 'killdate' állomány található, a legújabb dátum határozza meg a törlés időpontját.", filePath);\r
+ logger.warn(marker, "A {} fájlhoz több 'killdate' állomány található, a legújabb dátum határozza meg a törlés időpontját.", filePath);\r
\r
Date killDate = checkExpiration(killDateFiles);\r
if (killDate == null)\r
return;\r
\r
if (removeFiles(filePath, killDateFiles))\r
- logger.info(getMarker(), "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján sikeresen törlődtek.", filePath.getFileName(),\r
+ logger.info(marker, "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján sikeresen törlődtek.", filePath.getFileName(),\r
dateFormat.format(killDate));\r
else\r
- logger.warn(getMarker(), "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján csak részlegesen vagy egyáltalán nem törlődtek.",\r
+ logger.warn(marker, "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján csak részlegesen vagy egyáltalán nem törlődtek.",\r
filePath.getFileName(), dateFormat.format(killDate));\r
}\r
\r
if (projectPath.exists() && projectPath.isDirectory()) {\r
FileUtils.deleteDirectory(projectPath);\r
if (projectPath.exists()) {\r
- logger.warn(getMarker(), "A {} alatti {} mappa törlése nem sikerült.", dir, folderName);\r
+ logger.warn(marker, "A {} alatti {} mappa törlése nem sikerült.", dir, folderName);\r
return false;\r
}\r
}\r
if (file.exists())\r
result = file.delete();\r
} catch (Exception e) {\r
- logger.error(getMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath, e.getMessage());\r
+ logger.error(marker, "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath, e.getMessage());\r
}\r
return result;\r
}\r
\r
@Override\r
public FileVisitResult visitFileFailed(Path file, IOException e) throws IOException {\r
- logger.error(getMarker(), "A {} fájl nem érhető el. A rendszer hibaüzenete: {}", file.toString(), e.getMessage());\r
+ logger.error(marker, "A {} fájl nem érhető el. A rendszer hibaüzenete: {}", file.toString(), e.getMessage());\r
return FileVisitResult.CONTINUE;\r
}\r
}\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import user.commons.MediaCubeMarker;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = { itemID + 1 };\r
\r
- //logransger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
+ ((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net");\r
+\r
+ //logger.info(jobRuntime.getMarker(), "<a href='UNC://\\10.10.1.100\\BRAAVOS\\ARCHIVE' target='blank'>usefullink</a>");\r
+ logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
// Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
//logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
try {\r
public MediaCubeFinishMarker(MediaCubeMarker parent) {\r
setSessionID(parent.getSessionID());\r
setSessionName(parent.getSessionName());\r
+ setTo(parent.getTo());\r
}\r
\r
public MediaCubeFinishMarker(MediaCubeMarker parent, String to) {\r
\r
StringBuilder sql = new StringBuilder();\r
sql.append("SELECT * FROM ((");\r
- sql.append("SELECT DISTINCT m.id, m.title FROM ITEM i, MEDIA m, MEDIAFILE mf");\r
+ sql.append("SELECT DISTINCT m.id, m.title,m.itemtypeid,m.archived FROM ITEM i, MEDIA m, MEDIAFILE mf");\r
sql.append(" WHERE ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1)) AND m.itemid = i.id AND mf.mediaid = m.id");\r
if (typeIDs != null)\r
sql.append(" AND m.itemtypeid IN ").append(typeCriteria.toString());\r
sql.append(")UNION(");\r
- sql.append("SELECT DISTINCT m2.id,m2.title FROM ITEM i2, MEDIA m2, MEDIAFILE mf2");\r
+ sql.append("SELECT DISTINCT m2.id,m2.title,m2.itemtypeid,m2.archived FROM ITEM i2, MEDIA m2, MEDIAFILE mf2");\r
sql.append(" WHERE ((CONTAINS(m2.title, ?) >= 1) OR (CONTAINS(m2.description, ?) >= 1)) AND m2.itemid = i2.id AND mf2.mediaid = m2.id");\r
if (typeIDs != null)\r
sql.append(" AND m2.itemtypeid IN ").append(typeCriteria.toString());\r
sql.append(")UNION(");\r
- sql.append("SELECT DISTINCT m3.id,m3.title FROM ITEM i3, MEDIA m3, MEDIAFILE mf3");\r
+ sql.append("SELECT DISTINCT m3.id,m3.title,m3.itemtypeid,m3.archived FROM ITEM i3, MEDIA m3, MEDIAFILE mf3");\r
sql.append(" WHERE (CONTAINS(mf3.houseId, ?) >= 1) AND m3.itemid = i3.id AND mf3.mediaid = m3.id");\r
if (typeIDs != null)\r
sql.append(" AND m3.itemtypeid IN ").append(typeCriteria.toString());\r
- sql.append(")) ORDER BY title");\r
+ sql.append(")) ORDER BY itemtypeid,archived desc");\r
\r
String query = sql.toString();\r
PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
<url-pattern>/test</url-pattern>\r
</servlet-mapping>\r
\r
- <session-config>\r
- <session-timeout>120</session-timeout>\r
- </session-config>\r
+<!-- <session-config> -->\r
+<!-- <session-timeout>120</session-timeout> -->\r
+<!-- </session-config> -->\r
<welcome-file-list>\r
<welcome-file>index.html</welcome-file>\r
<welcome-file>index.htm</welcome-file>\r
<timeout-message>Lejárt a munkamenet, kérem töltse be újra az alkalmazást.</timeout-message>\r
<!-- timeout-uri>/timeout.zul</timeout-uri -->\r
<automatic-timeout/>\r
+ <session-timeout>900</session-timeout>\r
</session-config>\r
\r
<system-config>\r
<west border="none" size="60%" splittable="true" minsize="500">\r
<div height="100%" width="100%">\r
<groupbox vflex="min" closable="false">\r
- <hbox hflex="1" pack="center" align="center">\r
- <button hflex="min" label="Típusok" popup="filter"/>\r
- <textbox focus="true" width="300px" instant="true" value="@bind(vm.searchValue)" tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')" />\r
- <button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" />\r
- <popup id="filter">\r
- <vlayout vflex="min">\r
- <checkbox label="Összes típus" checked="@bind(vm.allChecked)" />\r
- <separator/>\r
- <forEach items="@load(vm.typeFilterNames)" >\r
- <checkbox label="@load(each)" checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
- </forEach> \r
- </vlayout> \r
- </popup> \r
+ <vlayout>\r
+ <hbox pack="left" align="top">\r
+ <checkbox checked="@bind(vm.allChecked)" style="font-size:10px" />\r
+ <vlayout>\r
+ <toolbar style="padding:1px;background:none;border:0px;">\r
+ <forEach items="@load(vm.topTypeFilterNames)">\r
+ <toolbarbutton image="@load(c:cat('/img/types/', vm.typeIcons[each]))" style="font-size:9px;padding:0px;margin:0px;background:none;" label="@load(each)" mode="toggle"\r
+ checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
+ </forEach>\r
+ </toolbar>\r
+ <toolbar style="padding:1px;background:none;border:0px;">\r
+ <forEach items="@load(vm.bottomTypeFilterNames)">\r
+ <toolbarbutton image="@load(c:cat('/img/types/', vm.typeIcons[each]))" style="font-size:9px;padding:0px;margin:0px;background:none;" label="@load(each)" mode="toggle"\r
+ checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
+ </forEach>\r
+ </toolbar>\r
+ </vlayout>\r
+ </hbox>\r
+ </vlayout>\r
+ <hbox width="100%" pack="center" align="center">\r
+ <textbox hflex="1" focus="true" instant="true" value="@bind(vm.searchValue)"\r
+ tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')" />\r
+ <button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" style="width:40px" />\r
</hbox>\r
-<!-- <toolbar style="font-size:8px"> -->\r
-<!-- <checkbox checked="@bind(vm.allChecked)" /> -->\r
-<!-- <forEach items="@load(vm.typeFilterNames)" > -->\r
-<!-- <toolbarbutton label="@load(each)" mode="toggle" checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" /> -->\r
-<!-- </forEach> -->\r
-<!-- </toolbar> -->\r
</groupbox>\r
<groupbox vflex="true" closable="false">\r
<grid id="itemsGrid" sizedByContent="false" span="true" vflex="true" hflex="true" mold="paging" autopaging="false"\r
model="@load(vm.searchResult)" activePage="@bind(vm.activePage)" emptyMessage="Nincs találat!"\r
- onAfterRender="@command('onPaging')"\r
+ onAfterRender="@command('onPaging')" pageSize="50"\r
style="border: none; background: white !important;" oddRowSclass="listbox-odd-style">\r
<columns>\r
<column hflex="min">\r
<column label="ID" hflex="min" align="left" />\r
<column label="Cím" align="left" />\r
<column label="Fájlnév" hflex="min" align="left" />\r
- <column label="Megtekinthető" hflex="min" align="right" />\r
+ <column label="Hossz" hflex="min" align="right" />\r
</columns>\r
<rows id="rows" style="cursor: pointer;" >\r
<template name="model">\r
sclass="myimg" content="@load(each.media.poster) @converter('user.jobengine.zk.model.ByToImageConverter')" \r
onClick="@command('selectMediaArchive', selectedObject=each)" />\r
<div sclass="details">\r
- <div>\r
- <label style="font: 20px Century Gothic; color: #008AC8;" value="@load(each.item.title)" />\r
- <label style="" value="@load(each.media.length)" />\r
- <label style="border-left: 1px solid #008AC8; border-bottom: 1px solid #008AC8; padding: 4px;" value="@load(each.media.itemType.name)" />\r
- </div>\r
+ <hlayout>\r
+ <div style="width:80px; border-left:1px solid #008AC8; border-bottom:1px solid #008AC8; padding:4px;">\r
+ <label style="font-size: 10px;" value="@load(each.media.itemType.name)" />\r
+ </div>\r
+ <label style="font:20px Century Gothic; color:#008AC8;" value="@load(each.item.title)" />\r
+ </hlayout>\r
<html sclass="relevant">\r
<![CDATA[\r
<div style='width: 90%'>${each.relevant}</div>\r
<label value="@load(each.media.houseId)" />\r
<label value="@load(each.media.title)" />\r
<label value="@load(each.media.mediaFilesName)" />\r
- <checkbox checked="@load(each.media.mediaFilesCount > 1)" w:onCheck="this.setChecked(!this.isChecked())" />\r
+ <cell>\r
+ <label style="font-size:14px" value="@load(each.media.length) @converter('user.jobengine.zk.model.TCConverter')" />\r
+ <image src="/img/ic_visibility_black_18dp.png" style="margin-left:4px;margin-top:2px;vertical-align:top;">\r
+ <attribute name="visible" if="${each.media.mediaFilesCount lt 2}">\r
+ false\r
+ </attribute> \r
+ </image>\r
+ <image src="/img/ic_visibility_off_black_18dp.png" style="margin-left:4px;margin-top:2px;vertical-align:top;">\r
+ <attribute name="visible" if="${each.media.mediaFilesCount gt 1}">\r
+ false\r
+ </attribute> \r
+ </image>\r
+ </cell>\r
</row>\r
</template>\r
</rows>\r
-version=2.3.4\r
+version=2.3.5\r
footer=2016 © Copyright User Rendszerház Kft.\r
\r
login_info=Információ\r
import user.jobengine.zk.util.SessionUtil;\r
\r
public class SearchModel extends AsyncBaseModel {\r
+ private static final String ARG = "arg";\r
+ private static final String GENERIC = "Egyéb";\r
+ private static final String RECORDING = "Visszarögzített";\r
+ private static final String RAW_AD = "Reklám nyers";\r
+ private static final String AD = "Reklám";\r
+ private static final String RAW_PROMO = "Promo nyers";\r
+ private static final String PROMO = "Promo";\r
+ private static final String RAW_MATERIAL = "Műsor nyers";\r
+ private static final String MATERIAL = "Műsor";\r
+ private static final String RAW_NEWS_MATERIAL = "Hír nyers";\r
+ private static final String NEWS_MATERIAL = "Hír bejátszó";\r
private static final Logger logger = LogManager.getLogger();\r
- private static final String MEDIACUBEMEDIA = "mediaCubeMedia";\r
- private static final String PAGES_RETRIEVESELECTOR_ZUL = "/pages/retrieveselector.zul";\r
private static final String PAGES_MEDIAPLAYER = "/pages/mediaplayer.jsp?mediaurl=";\r
- private List<String> typeFilterNames;\r
+ private String[] topTypeFilterNames;\r
+ private String[] bottomTypeFilterNames;\r
private String searchValue = null;\r
private CachedListModel searchResult = null;\r
private ArchivedMedia selectedObject = null;\r
private Validator allFilterCheckedValidator;\r
private Validator itemSelectedValidator;\r
- private Map<String, Object> typeFilters;\r
+ private Map<String, Boolean> typeFilters;\r
+ private Map<String, String> typeIcons;\r
private boolean allChecked = true;\r
private int activePage;\r
private boolean rowsExpanded = true;\r
\r
public SearchModel() {\r
typeFilters = new LinkedHashMap<>();\r
- typeFilters.put("Hír bejátszó", true);\r
- typeFilters.put("Hír nyersanyag", true);\r
- typeFilters.put("Műsor", true);\r
- typeFilters.put("Műsor nyersanyag", true);\r
- typeFilters.put("Promo", true);\r
- typeFilters.put("Promo nyersanyag", true);\r
- typeFilters.put("Reklám", true);\r
- typeFilters.put("Reklám nyersanyag", true);\r
- typeFilters.put("Visszarögzített", true);\r
- typeFilters.put("Egyéb", true);\r
- typeFilterNames = new ArrayList<>(typeFilters.keySet());\r
+ typeFilters.put(NEWS_MATERIAL, true);\r
+ typeFilters.put(RAW_NEWS_MATERIAL, true);\r
+ typeFilters.put(MATERIAL, true);\r
+ typeFilters.put(RAW_MATERIAL, true);\r
+ typeFilters.put(PROMO, true);\r
+ typeFilters.put(RAW_PROMO, true);\r
+ typeFilters.put(AD, true);\r
+ typeFilters.put(RAW_AD, true);\r
+ typeFilters.put(RECORDING, true);\r
+ typeFilters.put(GENERIC, true);\r
+ topTypeFilterNames = new String[] { NEWS_MATERIAL, RAW_NEWS_MATERIAL, RECORDING, GENERIC };\r
+ bottomTypeFilterNames = new String[] { MATERIAL, RAW_MATERIAL, PROMO, RAW_PROMO, AD, RAW_AD };\r
+\r
+ typeIcons = new LinkedHashMap<>();\r
+ typeIcons.put(NEWS_MATERIAL, "ic_language_black_18dp.png");\r
+ typeIcons.put(RAW_NEWS_MATERIAL, "ic_perm_camera_mic_black_18dp.png");\r
+ typeIcons.put(MATERIAL, "ic_theaters_black_18dp.png");\r
+ typeIcons.put(RAW_MATERIAL, "ic_invert_colors_black_18dp.png");\r
+ typeIcons.put(PROMO, "ic_picture_in_picture_black_18dp.png");\r
+ typeIcons.put(RAW_PROMO, "ic_bug_report_black_18dp.png");\r
+ typeIcons.put(AD, "ic_picture_in_picture_alt_black_18dp.png");\r
+ typeIcons.put(RAW_AD, "ic_settings_brightness_black_18dp.png");\r
+ typeIcons.put(RECORDING, "ic_group_work_black_18dp.png");\r
+ typeIcons.put(GENERIC, "ic_view_quilt_black_18dp.png");\r
\r
allFilterCheckedValidator = new Validator() {\r
@Override\r
public void validate(ValidationContext ctx) {\r
try {\r
\r
- ArchivedMedia item = (ArchivedMedia) ctx.getValidatorArg("arg");\r
+ ArchivedMedia item = (ArchivedMedia) ctx.getValidatorArg(ARG);\r
boolean select = (boolean) ctx.getProperty().getValue();\r
MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
model.selectArchivedMedia(item, select);\r
return allFilterCheckedValidator;\r
}\r
\r
+ public String[] getBottomTypeFilterNames() {\r
+ return bottomTypeFilterNames;\r
+ }\r
+\r
public boolean getHasLowresMediaFile() {\r
boolean ret = false;\r
Media media = getMedia();\r
List<String> result = null;\r
if (!allChecked) {\r
for (String label : typeFilters.keySet()) {\r
- boolean isChecked = (boolean) typeFilters.get(label);\r
+ boolean isChecked = typeFilters.get(label);\r
if (!isChecked)\r
continue;\r
if (result == null)\r
return selectedObject;\r
}\r
\r
+ public String[] getTopTypeFilterNames() {\r
+ return topTypeFilterNames;\r
+ }\r
+\r
public String getTSMMediaFilePath() throws Exception {\r
String ret = "";\r
Media media = getMedia();\r
return ret;\r
}\r
\r
- public List<String> getTypeFilterNames() {\r
- return typeFilterNames;\r
+ public Map<String, Boolean> getTypeFilters() {\r
+ return typeFilters;\r
}\r
\r
- public Map<String, Object> getTypeFilters() {\r
- return typeFilters;\r
+ public Map<String, String> getTypeIcons() {\r
+ return typeIcons;\r
}\r
\r
private void highlight(ArchivedMedia am, boolean highlight) {\r
this.activePage = activePage;\r
}\r
\r
- @NotifyChange("*")\r
+ @NotifyChange("typeFilters")\r
public void setAllChecked(boolean allChecked) {\r
this.allChecked = allChecked;\r
for (String key : typeFilters.keySet())\r
this.selectedObject = selectedObject;\r
}\r
\r
- public void setTypeFilterNames(List<String> typeFilterNames) {\r
- this.typeFilterNames = typeFilterNames;\r
- }\r
-\r
- public void setTypeFilters(Map<String, Object> typeFilters) {\r
- this.typeFilters = typeFilters;\r
- }\r
-\r
public void updateAllChecked() {\r
final boolean[] check = { true };\r
for (String key : typeFilters.keySet()) {\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import org.zkoss.bind.BindContext;\r
+import org.zkoss.bind.Converter;\r
+import org.zkoss.zul.Label;\r
+\r
+public class TCConverter implements Converter<String, Long, Label> {\r
+\r
+ @Override\r
+ public Long coerceToBean(String text, Label label, BindContext context) {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public String coerceToUi(Long frames, Label label, BindContext context) {\r
+ double reminder = frames;\r
+ int hour = (int) Math.floor(reminder / (60 * 60 * 25));\r
+ reminder = reminder % (60 * 60 * 25);\r
+ int minute = (int) Math.floor(reminder / (60 * 25));\r
+ reminder = reminder % (60 * 25);\r
+ int sec = (int) Math.floor(reminder / 25);\r
+ reminder = reminder % 25;\r
+ int frame = (int) Math.floor(reminder);\r
+ return String.format("%02d:%02d:%02d:%02d", hour, minute, sec, frame);\r
+ }\r
+\r
+}\r