Author: DavidK Date: 2010-02-14 17:06:15 +0100 (Sun, 14 Feb 2010) New Revision: 1723 Added: trunk/server/webServer2/WebContent/js/components/layout/ trunk/server/webServer2/WebContent/js/components/layout/layoutListComponent.js trunk/server/webServer2/WebContent/js/components/user/ trunk/server/webServer2/WebContent/js/components/user/userLabelComponent.js trunk/server/webServer2/WebContent/secured/components/user/ trunk/server/webServer2/WebContent/secured/components/user/userLabelComponent.xhtml trunk/server/webServer2/WebContent/styles/components/layout/ trunk/server/webServer2/WebContent/styles/components/layout/layoutListComponent.css trunk/server/webServer2/WebContent/styles/components/user/ trunk/server/webServer2/WebContent/styles/components/user/layoutListComponent.css Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/debug/DebugBean.java trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/PlanningModalBean.java trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalDocumentBean.java trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalVideoBean.java trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/PlanDocumentBLImpl.java trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/Rectangle.java trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalBL.java trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalSpecBL.java trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalBLImpl.java trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalDocumentBLImpl.java trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalVideoBLImpl.java trunk/server/webServer2/WebContent/WEB-INF/elvystags.xml trunk/server/webServer2/WebContent/secured/components/layoutListComponent.xhtml trunk/server/webServer2/WebContent/secured/components/layoutSelectAndCloseComp.xhtml trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml trunk/server/webServer2/WebContent/secured/plug/planningModalDocument.xhtml trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentInnerModal.xhtml trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentTooltip.xhtml trunk/server/webServer2/WebContent/secured/plug/planningModalVideo.xhtml trunk/server/webServer2/WebContent/secured/plug/planningModalVideoInnerModal.xhtml trunk/server/webServer2/WebContent/secured/plug/planningModalVideoTooltip.xhtml trunk/server/webServer2/WebContent/styles/planning/planDocuments.css Log: DB changed - version 25 (part.4): - abstraktni predek planovani souboru - datum zmeny u timeline, uzivatel, ktery zmenu provedl - datum zalozeni a modifikace layoutu, uzivatel, ktery provedl posl. modif. - type_plug identity Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/debug/DebugBean.java =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/debug/DebugBean.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/debug/DebugBean.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -18,6 +18,7 @@ import cz.elvys.webServer.HIBgen.File; import cz.elvys.webServer.HIBgen.Layout; import cz.elvys.webServer.HIBgen.Panel; +import cz.elvys.webServer.HIBgen.User; import cz.elvys.webServer.HIBgen.Video; import cz.elvys.webServer.HIBgen.VideoContent; import cz.elvys.webServer.bl.api.Factory; @@ -123,36 +124,42 @@ } - + // assign category to group cbl.assignCategoryDefinitionToGroup(categoryDefId, elvys.getElvysGroup().getId()); + // get category planning Category category = cbl.getCatByCatDefAndGroupMakeSession(categoryDefId, elvys.getElvysGroup().getId()); if (category == null) { throw new NullPointerException("added cateogry"); } - CategoryPlanning cp = category.getCategoryPlanning(); if (cp == null) { throw new NullPointerException("added cateogryPlanning"); } + // add panel cbl.addPanelMakeSession(cp.getId()); + // check that there are 2 panels exactly List<Panel> panels = cbl.listPanelsForCatPlanningMakeSession(cp.getId()); if (panels.size() != 2) { throw new RuntimeException("panel count != 2"); } + // prepare user + User modifyingUser = BeanManager.getUser().getUser(); + // documentContentType preparation ContentType documentCt = new ContentType(); documentCt.setId(1); documentCt.setType("document"); + // videoContentType preparation ContentType videoCt = new ContentType(); videoCt.setId(5); videoCt.setType("video"); - + // dateFrom-dateTo preparation Calendar calendar = new GregorianCalendar(); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, 3); @@ -165,11 +172,21 @@ if (file1 != null && file1 instanceof Document) { DocumentContent docc = new DocumentContent(); docc.setContentType(documentCt); - docc.setDocument((Document)file1); + docc.setFile((Document)file1); docc.setNumPreviewPage("1"); docc.setPageList("1-1"); List<ValidationMessageHolder> validationres = - pmbl.store("tajne", cp.getId(), 1, layout.getId(), 1, null, begin, end, new Date(), docc); + pmbl.store("tajne", + cp.getId(), + 1, + layout.getId(), + 1, + null, + begin, + end, + new Date(), + docc, + modifyingUser); checkValidationResp(validationres); } @@ -177,11 +194,21 @@ if (video1 != null && video1 instanceof Video) { VideoContent vidc = new VideoContent(); vidc.setContentType(videoCt); - vidc.setVideo((Video)video1); + vidc.setFile((Video)video1); vidc.setAutostart(true); vidc.setStartPosMs(1500); List<ValidationMessageHolder> validationres = - pmbl.store("tajne", cp.getId(), 1, layout.getId(), 2, null, begin, end, new Date(), vidc); + pmbl.store("tajne", + cp.getId(), + 1, + layout.getId(), + 2, + null, + begin, + end, + new Date(), + vidc, + modifyingUser); checkValidationResp(validationres); } @@ -191,11 +218,21 @@ if (file2 != null && file2 instanceof Document) { DocumentContent docc = new DocumentContent(); docc.setContentType(documentCt); - docc.setDocument((Document)file2); + docc.setFile((Document)file2); docc.setNumPreviewPage("1"); docc.setPageList("1-1"); List<ValidationMessageHolder> validationres = - pmbl.store("tajne", cp.getId(), 2, layout.getId(), 3, null, begin, end, new Date(), docc); + pmbl.store("tajne", + cp.getId(), + 2, + layout.getId(), + 3, + null, + begin, + end, + new Date(), + docc, + modifyingUser); checkValidationResp(validationres); } @@ -203,11 +240,21 @@ if (video2 != null && video2 instanceof Video) { VideoContent vidc = new VideoContent(); vidc.setContentType(videoCt); - vidc.setVideo((Video)video2); + vidc.setFile((Video)video2); vidc.setAutostart(false); vidc.setStartPosMs(1500); List<ValidationMessageHolder> validationres = - pmbl.store("tajne", cp.getId(), 2, layout.getId(), 4, null, begin, end, new Date(), vidc); + pmbl.store("tajne", + cp.getId(), + 2, + layout.getId(), + 4, + null, + begin, + end, + new Date(), + vidc, + modifyingUser); checkValidationResp(validationres); } Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/PlanningModalBean.java =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/PlanningModalBean.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/PlanningModalBean.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -20,6 +20,7 @@ import cz.elvys.webServer.HIBgen.ContentType; import cz.elvys.webServer.HIBgen.FrameContent; import cz.elvys.webServer.HIBgen.Timeline; +import cz.elvys.webServer.HIBgen.User; import cz.elvys.webServer.beans.planningrel.plug.PlanningModalSpecBean; import cz.elvys.webServer.bl.api.Factory; import cz.elvys.webServer.db.InitSessionFactory; @@ -377,9 +378,12 @@ // get data from specific part of planning FrameContent formValues = innerBean.getFormData(); + // concat dates (2x2parts) formShowStart = concatDateAndTime(formShowStart, formShowStartTime); formShowEnd = concatDateAndTime(formShowEnd, formShowEndTime); + // prepare user + User modifyingUser = BeanManager.getUser().getUser(); PlanningModalBL bl = Factory.getPlanningModalBL(); // list of validation messages @@ -394,7 +398,8 @@ formShowStart, formShowEnd, nowDate, - formValues); + formValues, + modifyingUser); } catch (Exception e) { String message = ERR_NOT_STORED; log.error(message,e); Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalDocumentBean.java =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalDocumentBean.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalDocumentBean.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -2,9 +2,14 @@ import javax.faces.event.ActionEvent; +import org.apache.log4j.Logger; + + import cz.elvys.webServer.HIBgen.ContentType; +import cz.elvys.webServer.HIBgen.Document; import cz.elvys.webServer.HIBgen.DocumentContent; import cz.elvys.webServer.HIBgen.FrameContent; +import cz.elvys.webServer.toSpring.exception.ExecuteException; /** * Bean connected with the DOC planning view. @@ -13,11 +18,17 @@ public class PlanningModalDocumentBean extends PlanningModalSpecBean { // formular fields private DocumentContent formData; + private static Logger log; + + + static { + log = Logger.getLogger(PlanningModalDocumentBean.class); + } @Override public void initPlanningModalSpecBean(ContentType type) { formData = new DocumentContent(); - formData.setDocument(null); + formData.setFile(null); formData.setNumPreviewPage(""); formData.setPageList(""); formData.setContentType(type); @@ -27,7 +38,7 @@ public void initPlanningModalSpecBean(FrameContent frc) { DocumentContent dcc = (DocumentContent) frc; formData = new DocumentContent(); - formData.setDocument(dcc.getDocument()); + formData.setFile(dcc.getFile()); formData.setNumPreviewPage(dcc.getNumPreviewPage()); formData.setPageList(dcc.getPageList()); formData.setContentType(dcc.getContentType()); @@ -43,11 +54,22 @@ * @param event */ public void afterDocumentSelected(ActionEvent event){ - // set page range - int pageCount = formData.getDocument().getPageCount(); - String range = "1-"+pageCount; - formData.setPageList(range); - // set page for preview - formData.setNumPreviewPage("1"); + try { + // set page range + if (formData.getFile() == null) { + throw new ExecuteException("no selected file"); + } + if (!(formData.getFile() instanceof Document)) { + throw new ExecuteException("selected file is not pdf document"); + } + int pageCount = ((Document)formData.getFile()).getPageCount(); + String range = "1-"+pageCount; + formData.setPageList(range); + // set page for preview + formData.setNumPreviewPage("1"); + } catch (Exception e) { + log.error(e); + throw new RuntimeException(e); + } } } Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalVideoBean.java =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalVideoBean.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/plug/PlanningModalVideoBean.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -18,7 +18,7 @@ formData.setBrightness(0); formData.setPlaySound(false); formData.setStartPosMs(1); - formData.setVideo(null); + formData.setFile(null); formData.setContentType(type); } @@ -30,7 +30,7 @@ formData.setBrightness(vcn.getBrightness()); formData.setPlaySound(vcn.isPlaySound()); formData.setStartPosMs(vcn.getStartPosMs()); - formData.setVideo(vcn.getVideo()); + formData.setFile(vcn.getFile()); formData.setContentType(vcn.getContentType()); } Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties 2010-02-14 16:06:15 UTC (rev 1723) @@ -122,16 +122,16 @@ layout.list.body.title=Seznam rozvr\u017Een\u00ED layout.list.id=ID layout.list.name=Jm\u00E9no -layout.list.numposition=\# pozic +layout.list.numposition=Pozic +layout.list.revision=Revize +layout.list.modified=Modifikov\u00E1no +layout.list.created=Vytvo\u0159eno layout.list.preview=N\u00E1hled layout.list.previewtooltip=Zobraz\u00ED n\u00E1hled rozvr\u017Een\u00ED dokument\u016F -layout.list.selectdaylayout=Zvolen\u00ED denn\u00EDho rozvr\u017Een\u00ED dokument\u016F -layout.list.selectnightlayout=Zvolen\u00ED no\u010Dn\u00EDho rozvr\u017Een\u00ED dokument\u016F layout.list.newlayouttooltip=Nov\u00E9 rozvr\u017Een\u00ED -layout.list.editlayout=Editace -layout.list.editlayouttooltip=Spust\u00ED n\u00E1stroj pro editaci rozvr\u017Een\u00ED dokument\u016F -layout.list.deletelayout=Smaz\u00E1n\u00ED -layout.list.deletelayouttooltip=Sma\u017Ee dan\u00E9 rozvr\u017Een\u00ED dokument\u016F +layout.list.operations=Operace +layout.list.editlayouttooltip=Editovat +layout.list.deletelayouttooltip=Smazat layout.list.createlayouttooltip=Nov\u00E9 rozvr\u017Een\u00ED dokument\u016F layout.list.modal.delete=Maz\u00E1n\u00ED rozvr\u017Een\u00ED layout.list.modal.deletequestion=Opravdu smazat toto rozvr\u017Een\u00ED @@ -142,8 +142,7 @@ layout.create.header=Editor rozvr\u017Een\u00ED layout.modalselectcomp.header=Rozvr\u017Een\u00ED obrazovky layout.modalselectcomp.list.header=Zvolte rozvr\u017Een\u00ED obrazovky -layout.modalselectcomp.list.select.tooltip=Zvol\u00ED vybran\u00E9 rozvr\u017Een\u00ED obrazovky -layout.modalselectcomp.list.select=Zvolit +layout.modalselectcomp.list.select.tooltip=Zvolit rozvr\u017Een\u00ED obrazovky catdef.list.title=Seznam kategori\u00ED @@ -310,6 +309,7 @@ elvys.plan.component.tooltip.videotype=Video elvys.plan.component.tooltip.occupied.from=Od elvys.plan.component.tooltip.occupied.to=Do +elvys.plan.component.tooltip.lastmodified=Posledn\u00ED modifikace elvys.plan.modal.create.header=Napl\u00E1novat dokument elvys.plan.modal.modify.header=Zm\u011Bna pl\u00E1nov\u00E1n\u00ED elvys.plan.modal.form.showStart=Za\u010D\u00E1tek Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/PlanDocumentBLImpl.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/PlanDocumentBLImpl.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/PlanDocumentBLImpl.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -39,7 +39,17 @@ // need to get end of this time gap Date gapEnd = findEndOfGap(panelPl, panelOrd, layoutPos, scheduleTo); - Rectangle wholePeriod= new Rectangle(panelPl, panelOrd, layoutPos, layoutId, null, scheduleFrom, scheduleTo, gapStart, gapEnd, componentWidth, null); + Rectangle wholePeriod= new Rectangle(panelPl, + panelOrd, + layoutPos, + layoutId, + null, + scheduleFrom, + scheduleTo, + gapStart, + gapEnd, + componentWidth, + null); result.add(wholePeriod); return result; } @@ -52,7 +62,17 @@ // there is a space between component border and first rectangle // need to get start of this time gap Date gapStart = findStartOfGap(panelPl, panelOrd, layoutPos, scheduleFrom); - Rectangle spaceBeforeFirst = new Rectangle(panelPl, panelOrd, layoutPos, layoutId, null, scheduleFrom, timelines.get(0).getShowStart(), gapStart, timelines.get(0).getShowStart(), widthBefore, null); + Rectangle spaceBeforeFirst = new Rectangle(panelPl, + panelOrd, + layoutPos, + layoutId, + null, + scheduleFrom, + timelines.get(0).getShowStart(), + gapStart, + timelines.get(0).getShowStart(), + widthBefore, + null); result.add(spaceBeforeFirst); } @@ -83,14 +103,35 @@ width= 1; // just to be able to see very small event } FrameContent frc = timelines.get(i).getFrameContent(); - Rectangle plannedDocument = new Rectangle(panelPl, panelOrd, layoutPos, layoutId, timelines.get(i), rectStart, rectEnd, realStart, realEnd, width, frc); + // rectangle of plannedDocument + Rectangle plannedDocument = new Rectangle(panelPl, + panelOrd, + layoutPos, + layoutId, + timelines.get(i), + rectStart, + rectEnd, + realStart, + realEnd, + width, + frc); result.add(plannedDocument); if (i!= last){ // manage space after particular planned document int widthBetween; if ((widthBetween=computeWidthOftimePeriod(timelines.get(i).getShowEnd(), timelines.get(i+1).getShowStart(), wholeScheduleDuration, componentWidth)) > 1) { - Rectangle spaceBetween = new Rectangle(panelPl, panelOrd, layoutPos, layoutId, null, timelines.get(i).getShowEnd(),timelines.get(i+1).getShowStart(), timelines.get(i).getShowEnd(),timelines.get(i+1).getShowStart(), widthBetween, null); + Rectangle spaceBetween = new Rectangle(panelPl, + panelOrd, + layoutPos, + layoutId, + null, + timelines.get(i).getShowEnd(), + timelines.get(i+1).getShowStart(), + timelines.get(i).getShowEnd(), + timelines.get(i+1).getShowStart(), + widthBetween, + null); result.add(spaceBetween); } } @@ -103,7 +144,17 @@ // there is a space after end of last rectangle and component border // need to get end of this time gap Date gapEnd = findEndOfGap(panelPl, panelOrd, layoutPos, scheduleTo); - Rectangle spaceAfter = new Rectangle(panelPl, panelOrd, layoutPos, layoutId, null, timelines.get(last).getShowEnd(), scheduleTo, timelines.get(last).getShowEnd(), gapEnd, widthAfter, null); + Rectangle spaceAfter = new Rectangle(panelPl, + panelOrd, + layoutPos, + layoutId, + null, + timelines.get(last).getShowEnd(), + scheduleTo, + timelines.get(last).getShowEnd(), + gapEnd, + widthAfter, + null); result.add(spaceAfter); } Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/Rectangle.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/Rectangle.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/Rectangle.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -7,6 +7,7 @@ import cz.elvys.webServer.HIBgen.FrameContent; import cz.elvys.webServer.HIBgen.Timeline; +import cz.elvys.webServer.HIBgen.User; import cz.elvys.webServer.utils.plug.PlugablePlanningTypeBeanUtils; @@ -33,8 +34,9 @@ private String realToText = null; // width of rectangle in pixels private int width = 0; + private User lastModifiedUser; + private Date lastModificationDate; - // describes CONTENT. If it's null, then deals with free rectangle FrameContent frameContent = null; @@ -152,10 +154,20 @@ public void setLayoutId(Integer layoutId) { this.layoutId = layoutId; } + public User getLastModifiedUser() { + return lastModifiedUser; + } + public void setLastModifiedUser(User lastModifiedUser) { + this.lastModifiedUser = lastModifiedUser; + } + public Date getLastModificationDate() { + return lastModificationDate; + } + public void setLastModificationDate(Date lastModificationDate) { + this.lastModificationDate = lastModificationDate; + } - - /** * TODO do i need both? timeline and content?? * Don't be afraid of this constructor. There's nothing bad :). Just info, what is needed by planning.. @@ -171,7 +183,18 @@ * @param content Depends on content. NULLABLE (free layout frame) * @throws ClassCastException */ - public Rectangle(Integer panelPl, Integer panelOrd, Integer layoutPos, Integer layoutId, Timeline origTimeline, Date from, Date to, Date realStart, Date realEnd, int width, FrameContent content) throws ClassCastException { + public Rectangle(Integer panelPl, + Integer panelOrd, + Integer layoutPos, + Integer layoutId, + Timeline origTimeline, + Date from, + Date to, + Date realStart, + Date realEnd, + int width, + FrameContent content) throws ClassCastException { + this.panelPl = panelPl; this.panelOrd = panelOrd; this.layoutPos = layoutPos; @@ -196,6 +219,14 @@ } else { tooltipViewRef = emptyTooltip; } + + if (origTimeline != null) { + this.lastModifiedUser = origTimeline.getUser(); + this.lastModificationDate = origTimeline.getModified(); + } else { + this.lastModificationDate = null; + this.lastModifiedUser = null; + } } private String makeStringFromDate(Date aDate) { Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalBL.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalBL.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalBL.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -7,6 +7,8 @@ import cz.elvys.webServer.HIBgen.FrameContent; import cz.elvys.webServer.HIBgen.Timeline; +import cz.elvys.webServer.HIBgen.User; +import cz.elvys.webServer.toSpring.exception.ExecuteException; import cz.elvys.webServer.utils.type.ValidationMessageHolder; public interface PlanningModalBL { @@ -36,7 +38,7 @@ Date valueDateFrom, Date valueDateTo, Date now, - FrameContent formValues) throws Exception; + FrameContent formValues) throws ExecuteException; public List<Timeline> getConflictingBeginInside( @@ -47,7 +49,7 @@ Date valueDateFrom, Date valueDateTo, Session sess, - Integer modifyingTimelineId); + Integer modifyingTimelineId) throws ExecuteException; public List<Timeline> getConflictingEndInside( Integer panelPl, @@ -57,7 +59,7 @@ Date valueDateFrom, Date valueDateTo, Session sess, - Integer modifyingTimelineId); + Integer modifyingTimelineId) throws ExecuteException; public List<Timeline> getConflictingEmbrace( Integer panelPl, @@ -67,7 +69,7 @@ Date valueDateFrom, Date valueDateTo, Session sess, - Integer modifyingTimelineId); + Integer modifyingTimelineId) throws ExecuteException; /** * Stores planning. Stores either new planning or modified planning. @@ -82,6 +84,7 @@ * @param valueDateTo value of the form - planning to * @param now point in time when planning started (e.g. showing planning component or sth. like this) * @param formValues form values (DocumentContent, TextContent,... depends on the selected type) + * @param modifyingUser user who is modifying timeline * @return list of validation messages. Empty means 'everything went ok, stored' */ public List<ValidationMessageHolder> store( @@ -94,6 +97,7 @@ Date valueDateFrom, Date valueDateTo, Date now, - FrameContent formValues) throws Exception; + FrameContent formValues, + User modifyingUser) throws ExecuteException; } Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalSpecBL.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalSpecBL.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalSpecBL.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -3,6 +3,7 @@ import java.util.List; import cz.elvys.webServer.HIBgen.FrameContent; +import cz.elvys.webServer.toSpring.exception.ExecuteException; import cz.elvys.webServer.utils.type.ValidationMessageHolder; public interface PlanningModalSpecBL { @@ -13,6 +14,7 @@ * @param formName name of form on view page * @return list of validation holders. Empty if everything was ok. */ - public List<ValidationMessageHolder> validate(FrameContent formValues, String formName); + public List<ValidationMessageHolder> validate(FrameContent formValues, + String formName) throws ExecuteException; } Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalBLImpl.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalBLImpl.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalBLImpl.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -14,7 +14,9 @@ import cz.elvys.webServer.HIBgen.Layout; import cz.elvys.webServer.HIBgen.Panel; import cz.elvys.webServer.HIBgen.Timeline; +import cz.elvys.webServer.HIBgen.User; import cz.elvys.webServer.db.InitSessionFactory; +import cz.elvys.webServer.toSpring.exception.ExecuteException; import cz.elvys.webServer.toSpring.planning.api.PlanningModalBL; import cz.elvys.webServer.toSpring.planning.api.PlanningModalSpecBL; import cz.elvys.webServer.utils.plug.PlugablePlanningTypeBeanUtils; @@ -42,9 +44,15 @@ public List<ValidationMessageHolder> validate(String formName, - Integer panelPl, Integer panelOrd, Integer layoutID, Integer positionID, - Timeline oldTimeline, Date valueDateFrom, Date valueDateTo, Date now, - FrameContent formValues) throws Exception { + Integer panelPl, + Integer panelOrd, + Integer layoutID, + Integer positionID, + Timeline oldTimeline, + Date valueDateFrom, + Date valueDateTo, + Date now, + FrameContent formValues) throws ExecuteException { if (now == null) throw new RuntimeException("now is null"); String formDateStartId = formName+":"+startFormId; @@ -157,9 +165,13 @@ public List<Timeline> getConflictingBeginInside(Integer panelPl, - Integer panelOrd, Integer layoutID, Integer positionID, - Date valueDateFrom, Date valueDateTo, Session sess, - Integer modifyingTimelineId) { + Integer panelOrd, + Integer layoutID, + Integer positionID, + Date valueDateFrom, + Date valueDateTo, + Session sess, + Integer modifyingTimelineId) throws ExecuteException { Query query1 = sess.createQuery("from Timeline tl " + "where tl.panel.id.planning = :panelPl " + @@ -183,9 +195,13 @@ public List<Timeline> getConflictingEndInside(Integer panelPl, - Integer panelOrd, Integer layoutID, Integer positionID, - Date valueDateFrom, Date valueDateTo, Session sess, - Integer modifyingTimelineId) { + Integer panelOrd, + Integer layoutID, + Integer positionID, + Date valueDateFrom, + Date valueDateTo, + Session sess, + Integer modifyingTimelineId) throws ExecuteException { Query query2 = sess.createQuery("from Timeline tl " + "where tl.panel.id.planning = :panelPl " + @@ -208,9 +224,13 @@ public List<Timeline> getConflictingEmbrace(Integer panelPl, - Integer panelOrd, Integer layoutID, Integer positionID, - Date valueDateFrom, Date valueDateTo, Session sess, - Integer modifyingTimelineId) { + Integer panelOrd, + Integer layoutID, + Integer positionID, + Date valueDateFrom, + Date valueDateTo, + Session sess, + Integer modifyingTimelineId) throws ExecuteException{ Query query3 = sess.createQuery("from Timeline tl " + "where tl.panel.id.planning = :panelPl " + " and tl.panel.id.orderNum = :panelOrd " + @@ -232,9 +252,16 @@ public List<ValidationMessageHolder> store(String formName, - Integer panelPl, Integer panelOrd, Integer layoutID, Integer positionID, - Timeline oldTimeline, Date valueDateFrom, Date valueDateTo, Date now, - FrameContent formValues) throws Exception { + Integer panelPl, + Integer panelOrd, + Integer layoutID, + Integer positionID, + Timeline oldTimeline, + Date valueDateFrom, + Date valueDateTo, + Date now, + FrameContent formValues, + User modifyingUser) throws ExecuteException { // validation List<ValidationMessageHolder> messages = validate(formName, @@ -259,8 +286,6 @@ Timeline timeline = new Timeline(); timeline.setFrameContent(formValues); timeline.setId(formValues.getId()); - // TODO taby - //timeline.setElvys(elvys); Panel panel = cbl.getPanelById(panelPl, panelOrd, sess); @@ -271,6 +296,8 @@ timeline.setLayoutPos(positionID.byteValue()); timeline.setShowStart(valueDateFrom); timeline.setShowEnd(valueDateTo); + timeline.setUser(modifyingUser); + timeline.setModified(new Date()); try { sess.save(timeline); tx.commit(); @@ -299,6 +326,8 @@ oldTimeline.setFrameContent(formValues); oldTimeline.setShowStart(valueDateFrom); oldTimeline.setShowEnd(valueDateTo); + oldTimeline.setUser(modifyingUser); + oldTimeline.setModified(new Date()); sess.update(oldTimeline); // TODO do db udelat nejaky trigger. nebo aspon zacistovaci metodu, ktera to po ulozeni jeste jednou projede a kdyztak smaze vlozeny Timeline @@ -315,6 +344,4 @@ return emptyList; } - - } Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalDocumentBLImpl.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalDocumentBLImpl.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalDocumentBLImpl.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -7,8 +7,12 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import cz.elvys.commons.utils.CommonUtils; +import cz.elvys.webServer.HIBgen.Document; import cz.elvys.webServer.HIBgen.DocumentContent; +import cz.elvys.webServer.HIBgen.File; import cz.elvys.webServer.HIBgen.FrameContent; +import cz.elvys.webServer.toSpring.exception.ExecuteException; import cz.elvys.webServer.toSpring.planning.api.PlanningModalSpecBL; import cz.elvys.webServer.utils.type.ValidationMessageHolder; @@ -22,25 +26,35 @@ private static final String ERROR_CATCH_DocPlanningPagePreviewField = "DocPlanningPagePreviewField_input"; private static final String ERROR_MESSAGEREF_DocPlanningPagePreviewField = "elvys.plan.modal.document.badpreviewnum"; + // messages + private static final String ERROR_BAD_FILE_TYPE = "Bad file type"; public List<ValidationMessageHolder> validate( - FrameContent formValues, String formName) { + FrameContent formValues, String formName) throws ExecuteException { DocumentContent content = (DocumentContent) formValues; List<ValidationMessageHolder> messages = new ArrayList<ValidationMessageHolder>(); // validate PRESENCE - if (content.getDocument() == null) { + if (content.getFile() == null) { ValidationMessageHolder message = new ValidationMessageHolder(); message.setMessageRef(ERROR_MESSAGEREF_ChosenDocumentName); message.setComponentId(formName + ":" + ERROR_CATCH_ChosenDocumentName); messages.add(message); } - if (content.getDocument() != null) { - - + if (content.getFile() != null) { + File file = content.getFile(); + if (!(file instanceof Document)) { + String message = CommonUtils.prepareErrorMessage( + ERROR_BAD_FILE_TYPE, "name", file.getOrigName(), "hash", file.getHashcode(), "fileType", file.getFileType().getType()); + throw new ExecuteException(message); + } + Document doc = (Document)file; + int pageCount = doc.getPageCount(); + + // validate PAGES-LIST boolean pageListOK = true; List<int[]> bounds = new LinkedList<int[]>(); @@ -60,7 +74,7 @@ if (isType1) { // SIMPLE for example: 5 or 12 or 18 int value = Integer.parseInt(pagesSpec); - if (lastOne < value) { + if (value <= pageCount && lastOne < value) { lastOne = value; } else { pageListOK = false; @@ -73,7 +87,7 @@ // COMPLEX for example: 10-12 or 15-28 int value1 = Integer.parseInt(pagesSpec.substring(0,pagesSpec.indexOf('-'))); int value2 = Integer.parseInt(pagesSpec.substring(pagesSpec.indexOf('-')+1)); - if (value1 <= value2 && lastOne < value1 && value2 <= content.getDocument().getPageCount()) { + if (value1 <= value2 && lastOne < value1 && value2 <= pageCount) { lastOne = value2; } else { pageListOK = false; Modified: trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalVideoBLImpl.java =================================================================== --- trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalVideoBLImpl.java 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalVideoBLImpl.java 2010-02-14 16:06:15 UTC (rev 1723) @@ -1,13 +1,8 @@ package cz.elvys.webServer.toSpring.planning.impl; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; -import java.util.StringTokenizer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import cz.elvys.webServer.HIBgen.DocumentContent; import cz.elvys.webServer.HIBgen.FrameContent; import cz.elvys.webServer.HIBgen.VideoContent; import cz.elvys.webServer.toSpring.planning.api.PlanningModalSpecBL; @@ -28,13 +23,13 @@ // validate PRESENCE - if (content.getVideo() == null) { + if (content.getFile() == null) { ValidationMessageHolder message = new ValidationMessageHolder(); message.setMessageRef(ERROR_MESSAGEREF_ChosenDocumentName); message.setComponentId(formName + ":" + ERROR_CATCH_ChosenDocumentName); messages.add(message); } - + return messages; } } Modified: trunk/server/webServer2/WebContent/WEB-INF/elvystags.xml =================================================================== --- trunk/server/webServer2/WebContent/WEB-INF/elvystags.xml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/WEB-INF/elvystags.xml 2010-02-14 16:06:15 UTC (rev 1723) @@ -31,6 +31,10 @@ <source>../secured/components/timeSpinnerComponent.xhtml</source> </tag> <tag> + <tag-name>userLabel</tag-name> + <source>../secured/components/user/userLabelComponent.xhtml</source> + </tag> + <tag> <tag-name>fileListComponent</tag-name> <source>../secured/plug/file-choose.xhtml</source> </tag> Added: trunk/server/webServer2/WebContent/js/components/layout/layoutListComponent.js =================================================================== Added: trunk/server/webServer2/WebContent/js/components/user/userLabelComponent.js =================================================================== Modified: trunk/server/webServer2/WebContent/secured/components/layoutListComponent.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/components/layoutListComponent.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/components/layoutListComponent.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -34,15 +34,12 @@ |- target1 |- toRerender1 |- chListenerTooltip1 - |- columnLabel1 | | -||- for #2 ======== remaining are NOT WORKING - - | setLayoutValueBinding | value binding for store selected layout to it | if empty, select button won't be generated @@ -58,6 +55,12 @@ - layoutPreviewComponent --> + + +<a4j:loadStyle src="/styles/components/layout/layoutListComponent.css"/> +<script type="text/javascript" language="javascript" src="/webServer2/js/components/layout/layoutListComponent.js"/> + + <elvys:layoutListInitTagHandler companyID="#{companyID}" notSelectLayouts="#{notSelectLayouts}" @@ -80,6 +83,24 @@ <f:facet name="header">#{lbl['layout.list.numposition']}</f:facet> <h:outputText value="#{layout.sectCount}" /> </h:column> + <h:column> + <f:facet name="header">#{lbl['layout.list.modified']}</f:facet> + <h:outputText value="#{layout.modified}" > + <f:convertDateTime pattern="dd.MM.yyyy HH:mm" timeZone="#{user.defaultTimezone}" type="both" timeStyle="short"/> + </h:outputText> + <br/> + <elvys:userLabel id="usrLbl" value="#{layout.userByModifiedBy}"/> + </h:column> + <h:column> + <f:facet name="header">#{lbl['layout.list.revision']}</f:facet> + <h:outputText value="#{layout.revision}" /> + </h:column> + <h:column> + <f:facet name="header">#{lbl['layout.list.created']}</f:facet> + <h:outputText value="#{layout.created}" > + <f:convertDateTime pattern="dd.MM.yyyy HH:mm" timeZone="#{user.defaultTimezone}" type="both" timeStyle="short"/> + </h:outputText> + </h:column> <!-- SHOW IMAGE BUTTON --> <h:column rendered="#{showSchema == true}"> <f:facet name="header">#{lbl['layout.list.preview']}</f:facet> @@ -95,70 +116,78 @@ <rich:toolTip for="ShowLayoutImgButton" value="#{lbl['layout.list.previewtooltip']}" /> </h:column> - <!-- FIRE LISTENER 1 --> - <h:column rendered="#{not empty chooseListener1}"> - <f:facet name="header">#{columnLabel1}</f:facet> - <a4j:commandButton id="ChooseButton1" - image="/images/icons/select.png" - reRender="#{toRerender1}"> - <f:setPropertyActionListener value="#{layout}" - target="#{target1}" /> - <f:setPropertyActionListener value="#{chooseListener1}" - target="#{layoutListComponentBean.chooseListener1}"/> - <f:actionListener type="cz.elvys.webServer.component.layoutrel.LayoutListComponentBean$doAction1ActionListener" /> - </a4j:commandButton> - <rich:toolTip for="ChooseButton1" - value="#{chListenerTooltip1}" - direction="top-left" styleClass="short_tooltip" /> + + <!-- EDIT AND DELETE LAYOUT --> + <h:column> + <f:facet name="header">#{lbl['layout.list.operations']}</f:facet> + <!-- FIRE LISTENER 1 --> + <div class="l-op-main"> + <h:panelGroup styleClass="l-op-item" + rendered="#{not empty chooseListener1}"> + <a4j:commandButton id="ChooseButton1" + image="/images/icons/select.png" + reRender="#{toRerender1}"> + <f:setPropertyActionListener value="#{layout}" + target="#{target1}" /> + <f:setPropertyActionListener value="#{chooseListener1}" + target="#{layoutListComponentBean.chooseListener1}"/> + <f:actionListener type="cz.elvys.webServer.component.layoutrel.LayoutListComponentBean$doAction1ActionListener" /> + </a4j:commandButton> + <rich:toolTip for="ChooseButton1" + value="#{chListenerTooltip1}" + direction="top-left" styleClass="short_tooltip" /> + </h:panelGroup> + <!-- FIRE LISTENER 2 --> + <h:panelGroup styleClass="l-op-item" + rendered="#{not empty chooseListener2}"> + <a4j:commandButton id="ChooseButton2" + image="/images/icons/select.png" + reRender="#{toRerender2}"> + <f:setPropertyActionListener value="#{layout}" + target="#{target2}" /> + <f:setPropertyActionListener value="#{chooseListener2}" + target="#{layoutListComponentBean.chooseListener2}"/> + <f:actionListener type="cz.elvys.webServer.component.layoutrel.LayoutListComponentBean$doAction2ActionListener" /> + </a4j:commandButton> + <rich:toolTip for="ChooseButton2" + value="#{chListenerTooltip2}" + direction="top-left" styleClass="short_tooltip" /> + </h:panelGroup> + <!-- EDIT --> + <h:panelGroup styleClass="l-op-item" + rendered="#{showEdit}"> + <a4j:commandButton id="EditLayoutButton" + image="/images/icons/edit.png" + oncomplete="showLayoutEditor(this)" + reRender="#{id}"> + <f:setPropertyActionListener value="#{layout}" + target="#{layoutEditBean.layoutToEdit}" /> + <f:actionListener type="cz.elvys.webServer.beans.layoutrel.LayoutEditBean$StartEditingLayoutListener"/> + </a4j:commandButton> + <rich:toolTip for="EditLayoutButton" + value="#{lbl['layout.list.editlayouttooltip']}" + direction="top-left" styleClass="short_tooltip" /> + </h:panelGroup> + <!-- DELETE --> + <h:panelGroup styleClass="l-op-item" + rendered="#{showDelete == true}"> + <a4j:commandButton + id="DeleteLayoutButton" + image="/images/icons/delete.gif" + reRender="DeleteLayoutForm" + onclick="Richfaces.showModalPanel('DeleteLayoutModal',{left:300, top:300})"> + <f:setPropertyActionListener value="#{layout.id}" + target="#{layoutListComponentBean.layoutId}" /> + <f:setPropertyActionListener value="#{layout.name}" + target="#{layoutListComponentBean.layoutName}" /> + </a4j:commandButton> + <rich:toolTip for="DeleteLayoutButton" + value="#{lbl['layout.list.deletelayouttooltip']}" + direction="top-left" styleClass="short_tooltip" /> + </h:panelGroup> + </div> </h:column> - <!-- FIRE LISTENER 2 --> - <h:column rendered="#{not empty chooseListener2}"> - <f:facet name="header">#{columnLabel2}</f:facet> - <a4j:commandButton id="ChooseButton2" - image="/images/icons/select.png" - reRender="#{toRerender2}"> - <f:setPropertyActionListener value="#{layout}" - target="#{target2}" /> - <f:setPropertyActionListener value="#{chooseListener2}" - target="#{layoutListComponentBean.chooseListener2}"/> - <f:actionListener type="cz.elvys.webServer.component.layoutrel.LayoutListComponentBean$doAction2ActionListener" /> - </a4j:commandButton> - <rich:toolTip for="ChooseButton2" - value="#{chListenerTooltip2}" - direction="top-left" styleClass="short_tooltip" /> - </h:column> - <!-- EDIT LAYOUT --> - <h:column rendered="#{showEdit}"> - <f:facet name="header">#{lbl['layout.list.editlayout']}</f:facet> - <a4j:commandButton id="EditLayoutButton" - image="/images/icons/edit.png" - oncomplete="showLayoutEditor(this)" - reRender="#{id}"> - <f:setPropertyActionListener value="#{layout}" - target="#{layoutEditBean.layoutToEdit}" /> - <f:actionListener type="cz.elvys.webServer.beans.layoutrel.LayoutEditBean$StartEditingLayoutListener"/> - </a4j:commandButton> - <rich:toolTip for="EditLayoutButton" - value="#{lbl['layout.list.editlayouttooltip']}" - direction="top-left" styleClass="short_tooltip" /> - </h:column> - <!-- DELETE LAYOUT --> - <h:column rendered="#{showDelete == true}"> - <f:facet name="header">#{lbl['layout.list.deletelayout']}</f:facet> - <a4j:commandButton - id="DeleteLayoutButton" - image="/images/icons/delete.gif" - reRender="DeleteLayoutForm" - onclick="Richfaces.showModalPanel('DeleteLayoutModal',{left:300, top:300})"> - <f:setPropertyActionListener value="#{layout.id}" - target="#{layoutListComponentBean.layoutId}" /> - <f:setPropertyActionListener value="#{layout.name}" - target="#{layoutListComponentBean.layoutName}" /> - </a4j:commandButton> - <rich:toolTip for="DeleteLayoutButton" - value="#{lbl['layout.list.deletelayouttooltip']}" - direction="top-left" styleClass="short_tooltip" /> - </h:column> + <!-- FOOTER --> <f:facet name="footer"> <rich:datascroller renderIfSinglePage="false" for="#{id}" ajaxSingle="true" immediate="true" /> @@ -186,7 +215,7 @@ <!-- hidden refresh link --> <h:commandButton id="LayoutListComponentRefreshHiddenLink" image="/images/clearpixel.gif" - actionListener="#{layoutEditBean.reload}" + actionListener="#{layoutListBean.reload}" style="border: 0px;" alt="refresh" reRender="LayoutListForm" /> Modified: trunk/server/webServer2/WebContent/secured/components/layoutSelectAndCloseComp.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/components/layoutSelectAndCloseComp.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/components/layoutSelectAndCloseComp.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -91,9 +91,7 @@ chooseListener1="layoutSelectAndCloseCompBean.doActionsOnClose" target1="#{target}" toRerender1="#{modalWinContentId}" - chListenerTooltip1="#{lbl['layout.modalselectcomp.list.select.tooltip']}" - columnLabel1="#{lbl['layout.modalselectcomp.list.select']}" - /> + chListenerTooltip1="#{lbl['layout.modalselectcomp.list.select.tooltip']}"/> </h:panelGroup> </h:panelGroup> </rich:panel> Added: trunk/server/webServer2/WebContent/secured/components/user/userLabelComponent.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/components/user/userLabelComponent.xhtml (rev 0) +++ trunk/server/webServer2/WebContent/secured/components/user/userLabelComponent.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";> +<ui:component xmlns="http://www.w3.org/1999/xhtml"; + xmlns:h="http://java.sun.com/jsf/html"; + xmlns:f="http://java.sun.com/jsf/core"; + xmlns:ui="http://java.sun.com/jsf/facelets"; + xmlns:a4j="http://richfaces.org/a4j"; + xmlns:rich="http://richfaces.org/rich";> + +<!-- PROTOCOL +INPUT: + | -id (REQUIRED): + | id of the component + | -value (REQUIRED): + | cz.elvys.webServer.HIBgen.User value binding + --> + + +<a4j:loadStyle src="/styles/components/user/userLabelComponent.css"/> +<script type="text/javascript" language="javascript" src="/webServer2/js/components/user/userLabelComponent.js"/> + +<!-- BAD CONTRACT --> +<h:panelGroup + rendered="#{empty id + or empty value}"> + <h:outputText value="BAD CONTRACT" styleClass="error"/> +</h:panelGroup> + +<!-- USER LABEL --> +<h:panelGroup id="#{id}" + rendered="#{not empty id + and not empty value}"> + <b> + <h:outputText + value="#{value.realname} #{value.surname}"/> + </b> + (<h:outputText value="#{value.username}"/>) +</h:panelGroup> + +</ui:component> \ No newline at end of file Modified: trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -239,9 +239,13 @@ </a4j:commandLink> <rich:toolTip id="TT" for="VR" rendered="#{rect.frameContent == null}" followMouse="true" direction="bottom-right" showDelay="100"> - <h:outputText value="#{lbl['elvys.plan.component.tooltip.vacant']}"/><br/> - <h:outputText value="#{lbl['elvys.plan.component.tooltip.vacant.from']} #{rect.realFromText}"/><br/> - <h:outputText value="#{lbl['elvys.plan.component.tooltip.vacant.to']} #{rect.realToText}"/> + <div class="tt-all"> + <div class="tt-l"> + <h:outputText value="#{lbl['elvys.plan.component.tooltip.vacant']}"/><br/> + <h:outputText value="#{lbl['elvys.plan.component.tooltip.vacant.from']} #{rect.realFromText}"/><br/> + <h:outputText value="#{lbl['elvys.plan.component.tooltip.vacant.to']} #{rect.realToText}"/> + </div> + </div> <h:panelGroup id="VPR"></h:panelGroup> </rich:toolTip> <a4j:commandLink @@ -259,31 +263,44 @@ <f:actionListener type="cz.elvys.webServer.beans.planningrel.PlanningModalBean$PrepareFormActionListener" /> </a4j:commandLink> <rich:toolTip id="TTOR" for="OR" rendered="#{rect.frameContent != null}" - followMouse="true" direction="bottom-right" showDelay="100"> - <h:panelGroup rendered="#{rect.frameContent.contentType.type=='document'}"> - <ui:include src="/secured/plug/planningModalDocumentTooltip.xhtml"/> - <br/> - </h:panelGroup> - <h:panelGroup rendered="#{rect.frameContent.contentType.type=='url'}"> - <ui:include src="/secured/plug/planningModalUrlTooltip.xhtml"/> - <br/> - </h:panelGroup> - <h:panelGroup rendered="#{rect.frameContent.contentType.type=='text'}"> - <ui:include src="/secured/plug/planningModalTextTooltip.xhtml"/> - <br/> - </h:panelGroup> - <h:panelGroup rendered="#{rect.frameContent.contentType.type=='dynamic'}"> - <ui:include src="/secured/plug/planningModalDynamicTooltip.xhtml"/> - <br/> - </h:panelGroup> - <h:panelGroup rendered="#{rect.frameContent.contentType.type=='video'}"> - <ui:include src="/secured/plug/planningModalVideoTooltip.xhtml"/> - <br/> - </h:panelGroup> - <h:outputText value="#{lbl['elvys.plan.component.tooltip.occupied.from']}: #{rect.realFromText}"/> - <br/> - <h:outputText value="#{lbl['elvys.plan.component.tooltip.occupied.to']}: #{rect.realToText}"/> - <h:panelGroup id="OPR"></h:panelGroup> + followMouse="true" direction="bottom-right" showDelay="50"> + <div class="tt-all"> + <div class="tt-l"> + <h:panelGroup rendered="#{rect.frameContent.contentType.type=='document'}"> + <ui:include src="/secured/plug/planningModalDocumentTooltip.xhtml"/> + <br/> + </h:panelGroup> + <h:panelGroup rendered="#{rect.frameContent.contentType.type=='url'}"> + <ui:include src="/secured/plug/planningModalUrlTooltip.xhtml"/> + <br/> + </h:panelGroup> + <h:panelGroup rendered="#{rect.frameContent.contentType.type=='text'}"> + <ui:include src="/secured/plug/planningModalTextTooltip.xhtml"/> + <br/> + </h:panelGroup> + <h:panelGroup rendered="#{rect.frameContent.contentType.type=='dynamic'}"> + <ui:include src="/secured/plug/planningModalDynamicTooltip.xhtml"/> + <br/> + </h:panelGroup> + <h:panelGroup rendered="#{rect.frameContent.contentType.type=='video'}"> + <ui:include src="/secured/plug/planningModalVideoTooltip.xhtml"/> + <br/> + </h:panelGroup> + <h:outputText value="#{lbl['elvys.plan.component.tooltip.occupied.from']}: #{rect.realFromText}"/> + <br/> + <h:outputText value="#{lbl['elvys.plan.component.tooltip.occupied.to']}: #{rect.realToText}"/> + </div> + <div class="tt-r"> + <h:outputText value="#{lbl['elvys.plan.component.tooltip.lastmodified']}:"/> + <br/> + <elvys:userLabel id="usrLbl" value="#{rect.lastModifiedUser}"/> + <br/> + (<h:outputText value="#{rect.lastModificationDate}"> + <f:convertDateTime dateStyle="short" timeZone="#{user.defaultTimezone}" pattern="dd.MM.yyyy HH:mm" type="both"/> + </h:outputText>) + </div> + </div> + <h:panelGroup id="OPR"/> </rich:toolTip> </span> </ui:repeat> Modified: trunk/server/webServer2/WebContent/secured/plug/planningModalDocument.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/plug/planningModalDocument.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/plug/planningModalDocument.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -11,12 +11,12 @@ <h:outputLabel value="#{lbl['elvys.plan.modal.form.chosendocument']}: "></h:outputLabel> <h:outputLabel id="ChosenDocumentName" style="font-weight: bold;" - value="#{planningModalDocumentBean.formData.document.origName}" - rendered="#{not empty planningModalDocumentBean.formData.document}"/> + value="#{planningModalDocumentBean.formData.file.origName}" + rendered="#{not empty planningModalDocumentBean.formData.file}"/> <h:outputLabel id="ChosenDocumentNotPresent" style="font-weight: bold;" value="#{lbl['elvys.plan.modal.form.nochosendocument']} " - rendered="#{empty planningModalDocumentBean.formData.document}"/> + rendered="#{empty planningModalDocumentBean.formData.file}"/> <a4j:outputPanel ajaxRendered="true"> <h:message id="ChosenDocumentError" for="ChosenDocumentName" styleClass="error"/> </a4j:outputPanel> @@ -25,15 +25,15 @@ <!-- page count --> <h:outputLabel value="#{lbl['elvys.plan.modal.form.chosendocumentpagesnum']}: " - rendered="#{not empty planningModalDocumentBean.formData.document}"/> + rendered="#{not empty planningModalDocumentBean.formData.file}"/> <h:outputLabel style="font-weight: bold;" - value="#{planningModalDocumentBean.formData.document.pageCount}" - rendered="#{not empty planningModalDocumentBean.formData.document}"/> + value="#{planningModalDocumentBean.formData.file.pageCount}" + rendered="#{not empty planningModalDocumentBean.formData.file}"/> <br/> <!-- pages-list selector input --> - <h:panelGroup rendered="#{not empty planningModalDocumentBean.formData.document}"> + <h:panelGroup rendered="#{not empty planningModalDocumentBean.formData.file}"> <elvys:inputText id="DocPlanningPageListField" label="#{lbl['elvys.plan.modal.form.chosendocumentpages']}" value="#{planningModalDocumentBean.formData.pageList}" @@ -42,7 +42,7 @@ <br/> <!-- preview page number --> - <h:panelGroup rendered="#{not empty planningModalDocumentBean.formData.document}"> + <h:panelGroup rendered="#{not empty planningModalDocumentBean.formData.file}"> <elvys:inputText id="DocPlanningPagePreviewField" label="#{lbl['elvys.plan.modal.form.document.mainpage']}" value="#{planningModalDocumentBean.formData.numPreviewPage}" Modified: trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentInnerModal.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentInnerModal.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentInnerModal.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -11,7 +11,7 @@ <h:panelGroup id="ModalModalForDocument"> <elvys:fileListComponent fileList="#{fileListComponentBean.fileList}" - result="#{planningModalDocumentBean.formData.document}" + result="#{planningModalDocumentBean.formData.file}" afterSelectionListener="planningModalDocumentBean.afterDocumentSelected" tableHeader="#{lbl['elvys.plan.modal.choosedocument.choosedocument']}"/> </h:panelGroup> Modified: trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentTooltip.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentTooltip.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/plug/planningModalDocumentTooltip.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -10,5 +10,5 @@ <!-- document text tooltip --> <h:outputText value="#{lbl['elvys.plan.component.tooltip.documenttype']}:"/> <br/> - <h:outputLabel><strong>#{rect.frameContent.document.origName}</strong></h:outputLabel> + <h:outputLabel><strong>#{rect.frameContent.file.origName}</strong></h:outputLabel> </h:panelGroup> Modified: trunk/server/webServer2/WebContent/secured/plug/planningModalVideo.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/plug/planningModalVideo.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/plug/planningModalVideo.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -11,12 +11,12 @@ <h:outputLabel value="#{lbl['elvys.plan.modal.form.chosenvideo']}: "></h:outputLabel> <h:outputLabel id="ChosenVideoName" style="font-weight: bold;" - value="#{planningModalVideoBean.formData.video.origName}" - rendered="#{not empty planningModalVideoBean.formData.video}"/> + value="#{planningModalVideoBean.formData.file.origName}" + rendered="#{not empty planningModalVideoBean.formData.file}"/> <h:outputLabel id="ChosenVideoNotPresent" style="font-weight: bold;" value="#{lbl['elvys.plan.modal.form.nochosenvideo']} " - rendered="#{empty planningModalVideoBean.formData.video}"/> + rendered="#{empty planningModalVideoBean.formData.file}"/> <a4j:outputPanel ajaxRendered="true"> <h:message id="ChosenVideoError" for="ChosenVideoName" styleClass="error"/> </a4j:outputPanel> @@ -24,7 +24,7 @@ <!-- starting position at milisecond --> - <h:panelGroup rendered="#{not empty planningModalVideoBean.formData.video}"> + <h:panelGroup rendered="#{not empty planningModalVideoBean.formData.file}"> <!-- <elvys:inputText id="VideoPlanningStartPos" label="#{lbl['elvys.plan.modal.form.video.startat']}" value="#{planningModalVideoBean.formData.startPosMs}" Modified: trunk/server/webServer2/WebContent/secured/plug/planningModalVideoInnerModal.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/plug/planningModalVideoInnerModal.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/plug/planningModalVideoInnerModal.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -11,7 +11,7 @@ <h:panelGroup id="ModalModalForVideo"> <elvys:fileListComponent fileList="#{fileListComponentBean.fileList}" - result="#{planningModalVideoBean.formData.video}" + result="#{planningModalVideoBean.formData.file}" afterSelectionListener="planningModalVideoBean.afterVideoSelected" tableHeader="#{lbl['elvys.plan.modal.choosedocument.choosevideo']}"/> </h:panelGroup> Modified: trunk/server/webServer2/WebContent/secured/plug/planningModalVideoTooltip.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/plug/planningModalVideoTooltip.xhtml 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/secured/plug/planningModalVideoTooltip.xhtml 2010-02-14 16:06:15 UTC (rev 1723) @@ -10,6 +10,6 @@ <!-- video tooltip value --> <h:outputText value="#{lbl['elvys.plan.component.tooltip.videotype']}:"/> <br/> - <h:outputLabel><strong>#{rect.frameContent.video.origName}</strong></h:outputLabel> + <h:outputLabel><strong>#{rect.frameContent.file.origName}</strong></h:outputLabel> </ui:composition> \ No newline at end of file Added: trunk/server/webServer2/WebContent/styles/components/layout/layoutListComponent.css =================================================================== --- trunk/server/webServer2/WebContent/styles/components/layout/layoutListComponent.css (rev 0) +++ trunk/server/webServer2/WebContent/styles/components/layout/layoutListComponent.css 2010-02-14 16:06:15 UTC (rev 1723) @@ -0,0 +1,8 @@ +.l-op-main { + text-align: right; +} + +.l-op-item { + margin-right: 5px; + +} \ No newline at end of file Added: trunk/server/webServer2/WebContent/styles/components/user/layoutListComponent.css =================================================================== Modified: trunk/server/webServer2/WebContent/styles/planning/planDocuments.css =================================================================== --- trunk/server/webServer2/WebContent/styles/planning/planDocuments.css 2010-02-14 16:04:59 UTC (rev 1722) +++ trunk/server/webServer2/WebContent/styles/planning/planDocuments.css 2010-02-14 16:06:15 UTC (rev 1723) @@ -73,12 +73,31 @@ .layout-preview-main { } +/* for planning tooltips */ +.tt-all { + display: block; + overflow: auto; + width: 100%; + margin-bottom: 10px; +} +.tt-l { + float: left; + width: 66%; + text-align: left; +} +.tt-r { + float: right; + widht: 33%; + text-align: right; +} + + /* rectangles */ .rectangle_outer {padding-bottom:1px; float:left; } .rectangle { height: 20px; border:1px solid #000000; display:block; overflow:hidden; text-align:center;}