[elvystrac] r1709 - better planning, part 3.

  • From: elvys@xxxxxxxxxxxxxxxxxxxxxx
  • To: elvystrac@xxxxxxxxxxxxx
  • Date: Thu, 11 Feb 2010 17:09:49 +0100

Author: DavidK
Date: 2010-02-11 17:09:49 +0100 (Thu, 11 Feb 2010)
New Revision: 1709

Modified:
   trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/UserBean.java
   
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/messages/messages_cs.properties
   
trunk/server/webServer2/JavaSource/cz/elvys/webServer/utils/PropertyManager.java
   
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/PlanDocumentBLImpl.java
   
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalBL.java
   
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalBLImpl.java
   trunk/server/webServer2/WebContent/js/components/timeSpinnerComponent.js
   
trunk/server/webServer2/WebContent/secured/components/timeSpinnerComponent.xhtml
   trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml
   trunk/server/webServer2/WebContent/secured/filerel/fileList.xhtml
   trunk/server/webServer2/WebContent/styles/components/timeSpinnerComponent.css
   trunk/server/webServer2/WebContent/styles/filerel/fileList.css
Log:
better planning, part 3.

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/UserBean.java
===================================================================
--- trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/UserBean.java   
2010-02-11 10:18:47 UTC (rev 1708)
+++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/UserBean.java   
2010-02-11 16:09:49 UTC (rev 1709)
@@ -2,6 +2,7 @@
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.TimeZone;
 
 import javax.faces.context.FacesContext;
 import javax.servlet.ServletRequest;
@@ -42,6 +43,7 @@
        private String companyName;
        private boolean loggedIn;
        private Company company;
+       private TimeZone defaultTimezone;
 
        
        // data for formular
@@ -114,7 +116,14 @@
        public boolean isLoggedIn() {
                return loggedIn;
        }
-       
+       public TimeZone getDefaultTimezone() {
+               return defaultTimezone;
+       }
+
+       public void setDefaultTimezone(TimeZone defaultTimezone) {
+               this.defaultTimezone = defaultTimezone;
+       }
+
        /**
         * says, whether competency of this user is USER
         * @return competency is USER?
@@ -150,6 +159,10 @@
                
//((HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true)).invalidate();
                
                
+               // set default timezone
+               defaultTimezone = TimeZone.getDefault();
+               
+               
                // verify password
                if (formPassword == null || formUsername.length() == 0 ||
                                formPassword == null || formUsername.length() 
== 0) {

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-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/debug/DebugBean.java
    2010-02-11 16:09:49 UTC (rev 1709)
@@ -168,7 +168,8 @@
                        docc.setDocument((Document)file1);
                        docc.setNumPreviewPage("1");
                        docc.setPageList("1-1");
-                       List<ValidationMessageHolder> validationres = 
pmbl.store("tajne", cp.getId(), 1, layout.getId(), 1, null, begin, end, docc);
+                       List<ValidationMessageHolder> validationres = 
+                               pmbl.store("tajne", cp.getId(), 1, 
layout.getId(), 1, null, begin, end, new Date(), docc);
                        checkValidationResp(validationres);
                }
                
@@ -179,7 +180,8 @@
                        vidc.setVideo((Video)video1);
                        vidc.setAutostart(true);
                        vidc.setStartPosMs(1500);
-                       List<ValidationMessageHolder> validationres = 
pmbl.store("tajne", cp.getId(), 1, layout.getId(), 2, null, begin, end, vidc);
+                       List<ValidationMessageHolder> validationres = 
+                               pmbl.store("tajne", cp.getId(), 1, 
layout.getId(), 2, null, begin, end, new Date(), vidc);
                        checkValidationResp(validationres);
                }
                
@@ -192,7 +194,8 @@
                        docc.setDocument((Document)file2);
                        docc.setNumPreviewPage("1");
                        docc.setPageList("1-1");
-                       List<ValidationMessageHolder> validationres = 
pmbl.store("tajne", cp.getId(), 2, layout.getId(), 3, null, begin, end, docc);
+                       List<ValidationMessageHolder> validationres = 
+                               pmbl.store("tajne", cp.getId(), 2, 
layout.getId(), 3, null, begin, end, new Date(), docc);
                        checkValidationResp(validationres);
                }
                
@@ -203,7 +206,8 @@
                        vidc.setVideo((Video)video2);
                        vidc.setAutostart(false);
                        vidc.setStartPosMs(1500);
-                       List<ValidationMessageHolder> validationres = 
pmbl.store("tajne", cp.getId(), 2, layout.getId(), 4, null, begin, end, vidc);
+                       List<ValidationMessageHolder> validationres = 
+                               pmbl.store("tajne", cp.getId(), 2, 
layout.getId(), 4, null, begin, end, new Date(), vidc);
                        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-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/planningrel/PlanningModalBean.java
      2010-02-11 16:09:49 UTC (rev 1709)
@@ -1,7 +1,9 @@
 package cz.elvys.webServer.beans.planningrel;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.List;
 
 import javax.faces.event.AbortProcessingException;
@@ -23,6 +25,7 @@
 import cz.elvys.webServer.db.InitSessionFactory;
 import cz.elvys.webServer.toSpring.elvysrel.Rectangle;
 import cz.elvys.webServer.toSpring.planning.api.PlanningModalBL;
+import cz.elvys.webServer.utils.PropertyManager;
 import cz.elvys.webServer.utils.faces.BeanManager;
 import cz.elvys.webServer.utils.faces.MessageUtils;
 import cz.elvys.webServer.utils.plug.PlugablePlanningTypeBeanUtils;
@@ -30,6 +33,10 @@
 
 public class PlanningModalBean {
 
+       private final static Long msInDay = 24L*60*60*1000;
+       
+       
+       
 // incomming params
        private Rectangle incommingParamRect;
        private boolean incommingParamModifying;
@@ -83,7 +90,10 @@
        private String viewRefInnerModal = "";
        // says whether validation went ok.. after store attempt. Used for 
prevent closing modal when validation failed.
        private boolean validationSuccessful;
+       // NOW date used for late storing
+       private Date nowDate;
        
+       
 // form fields
        // type of planning - linked with combo-box on page
        private ContentType formContentType;
@@ -222,19 +232,9 @@
                validationSuccessful = false;
                
                
-               // set Date form fields
-               formShowStart = rect.getRealFrom();
-               formShowEnd = rect.getRealTo();
                
-               // set Time form fields
-               formShowStartTime = rect.getRealFrom();
-               if (formShowStartTime == null) {
-                       formShowStartTime = new Date();
-               }
-               formShowEndTime = rect.getRealTo();
-               if (formShowEndTime == null) {
-                       formShowEndTime = new Date();
-               }
+               // prepare dates for the form
+               prepareFormDates(modifying);
                
                
                
@@ -286,7 +286,45 @@
        }
 
        
+       /**
+        * prepares date values for the form
+        */
+       private void prepareFormDates(boolean modifying) {
+               
+               Date now = new Date();
+               Date leftBorder = rect.getRealFrom();
+               Date rightBorder = rect.getRealTo();
+               Integer defaultLength = 
PropertyManager.getDefaultPlanningPeriod();
+               
+               if (!modifying) {
+                       // calculate borders
+                       if (leftBorder == null || now.after(leftBorder)) {
+                               // set left border to now
+                               leftBorder = now;
+                       }
+                       if (rightBorder == null) {
+                               // set right border to now + CONST
+                               rightBorder = new 
Date(leftBorder.getTime()+defaultLength*msInDay);
+                       }
+               }
+               
+
+               // set times and dates
+               formShowStart = leftBorder;
+               formShowStartTime = formShowStart;
+               formShowEnd = rightBorder;
+               formShowEndTime = formShowEnd;
+               
+               
+               // store actual NOW date (for purpose of unability to plan to 
the past)
+               Calendar cal = Calendar.getInstance();
+               cal.setTime(now);
+               cal.add(Calendar.MINUTE, -1);
+               nowDate = cal.getTime();
+       }
        
+       
+       
        /**
         * Prepares modal planning component after changing type of planning.
         * @param aev action event - not used
@@ -331,9 +369,18 @@
         * @param aev action event
         */
        public void store(ActionEvent aev) {
+               if (formShowStart == null || formShowStartTime == null
+                               || formShowEnd == null || formShowEndTime == 
null) {
+                       throw new RuntimeException("date null");
+               }
+               
                // get data from specific part of planning
                FrameContent formValues = innerBean.getFormData();
                
+               formShowStart = concatDateAndTime(formShowStart, 
formShowStartTime);
+               formShowEnd = concatDateAndTime(formShowEnd, formShowEndTime);
+               
+               
                PlanningModalBL bl = Factory.getPlanningModalBL();
                // list of validation messages
                List<ValidationMessageHolder> messages;
@@ -346,6 +393,7 @@
                                        modifying == true ? formerTimeline : 
null, 
                                        formShowStart, 
                                        formShowEnd,
+                                       nowDate,
                                        formValues);
                } catch (Exception e) {
                        String message = ERR_NOT_STORED;
@@ -365,9 +413,28 @@
                        invalidate(aev);
                }
        }
+
+       /**
+        * concatenates date and time into one Date object
+        * @param date Date object containing date part
+        * @param time Date object containing time part
+        * @return Date object containing date+time part
+        */
+       private Date concatDateAndTime(Date date, Date time) {
+               // calendar made by time
+               Calendar tcal = new GregorianCalendar();
+               tcal.setTime(time);
+               
+               // calendar made by date
+               Calendar dcal = new GregorianCalendar();
+               dcal.setTime(date);
+               dcal.set(Calendar.HOUR_OF_DAY, tcal.get(Calendar.HOUR_OF_DAY));
+               dcal.set(Calendar.MINUTE, tcal.get(Calendar.MINUTE));
+               
+               Date result = dcal.getTime();
+               return result;
+       }
        
-       
-       
        /**
         * Deletes selected planning
         * @param aev action event

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
       2010-02-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
       2010-02-11 16:09:49 UTC (rev 1709)
@@ -4,14 +4,15 @@
 
 login.bad=Neplatn\u00E9 p\u0159ihl\u00E1\u0161en\u00ED. Zkuste to pros\u00EDm 
znovu.
 
-elvys.list.modal.nightmode.badtime=\u010Cas mus\u00ED b\u00FDt ve 
form\u00E1tu\: "HH\:mm"
+elvys.list.modal.nightmode.badtime=\u010Cas mus\u00ED b\u00FDt ve 
form\u00E1tu\: "HH\:mm".
 
-elvys.plan.modal.badpageslist=Form\u00E1t mus\u00ED b\u00FDt nap\u0159\: 1, 
2-5, 8
+elvys.plan.modal.badpageslist=Form\u00E1t mus\u00ED b\u00FDt nap\u0159\: 1, 
2-5, 8.
 elvys.plan.modal.document.badpreviewnum=Neplatn\u00FD form\u00E1t nebo 
\u010D\u00EDslo nen\u00ED v rozsahu.
-elvys.plan.modal.crossdates=Datum "od" mus\u00ED b\u00FDt p\u0159ed datumem 
"do"
-elvys.plan.modal.conflict.begin.inside=Kolize se za\u010D\u00E1tkem 
jin\u00E9ho pl\u00E1nov\u00E1n\u00ED\: {0}
-elvys.plan.modal.conflict.end.inside=Kolize s koncem jin\u00E9ho 
pl\u00E1nov\u00E1n\u00ED\: {0}
-elvys.plan.modal.conflict.embrace=Pl\u00E1nov\u00E1n\u00ED je uvnit\u0159 
jin\u00E9ho pl\u00E1nov\u00E1n\u00ED. Start\: {0}; Konec\: {1}
+elvys.plan.modal.crossdates=Datum "od" mus\u00ED b\u00FDt p\u0159ed datumem 
"do".
+elvys.plan.modal.inpast=Datum "od" nesm\u00ED b\u00FDt v minulosti.
+elvys.plan.modal.conflict.begin.inside=Kolize se za\u010D\u00E1tkem 
jin\u00E9ho pl\u00E1nov\u00E1n\u00ED\: {0}.
+elvys.plan.modal.conflict.end.inside=Kolize s koncem jin\u00E9ho 
pl\u00E1nov\u00E1n\u00ED\: {0}.
+elvys.plan.modal.conflict.embrace=Pl\u00E1nov\u00E1n\u00ED je uvnit\u0159 
jin\u00E9ho pl\u00E1nov\u00E1n\u00ED. Start\: {0}; Konec\: {1}.
 elvys.plan.modal.nochosendocument=Mus\u00EDte vybrat dokument.
 elvys.plan.modal.nochosenvideo=Mus\u00EDte vybrat video.
 javax.faces.validator.LongRangeValidator.NOT_IN_RANGE={2}\: 
Valida\u010Dn\u00ED chyba\: Specified attribute is not between the expected 
values of {0} and {1}.
@@ -50,8 +51,8 @@
 javax.faces.converter.DateTimeConverter.DATE_detail={2}\: ''{0}'' 
nem\u016F\u017Ee b\u00FDt ch\u00E1p\u00E1n jako datum. P\u0159\u00EDklad\: {1}
 javax.faces.converter.DateTimeConverter.TIME={2}\: ''{0}'' nem\u016F\u017Ee 
b\u00FDt ch\u00E1p\u00E1n jako \u010Das.
 javax.faces.converter.DateTimeConverter.TIME_detail={2}\: ''{0}'' 
nem\u016F\u017Ee b\u00FDt ch\u00E1p\u00E1n jako \u010Das. P\u0159\u00EDklad\: 
{1}
-javax.faces.converter.DateTimeConverter.DATETIME={2}\: ''{0}'' 
nem\u016F\u017Ee b\u00FDt ch\u00E1p\u00E1n jako date and time.
-javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\: ''{0}'' 
nem\u016F\u017Ee b\u00FDt ch\u00E1p\u00E1n jako date and time. 
P\u0159\u00EDklad\: {1}
+javax.faces.converter.DateTimeConverter.DATETIME={2}\: ''{0}'' 
nem\u016F\u017Ee b\u00FDt ch\u00E1p\u00E1n jako datum a \u010Das.
+javax.faces.converter.DateTimeConverter.DATETIME_detail={2}\: ''{0}'' 
nem\u016F\u017Ee b\u00FDt ch\u00E1p\u00E1n jako datum a \u010Das. 
P\u0159\u00EDklad\: {1}
 javax.faces.converter.DateTimeConverter.PATTERN_TYPE={1}: A 'pattern' or 
'type' attribute must be specified to convert the value ''{0}''.
 javax.faces.converter.DoubleConverter.DOUBLE={2}: ''{0}'' must be a number 
consisting of one or more digits.
 javax.faces.converter.DoubleConverter.DOUBLE_detail={2}: ''{0}'' must be a 
number between 4.9E-324 and 1.7976931348623157E308 Example: {1}

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/utils/PropertyManager.java
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/utils/PropertyManager.java
    2010-02-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/utils/PropertyManager.java
    2010-02-11 16:09:49 UTC (rev 1709)
@@ -31,4 +31,10 @@
                String value = prop.getProperty("statistics.path");
                return value;
        }
+       
+       
+       public static Integer getDefaultPlanningPeriod() {
+               Integer value = 14;
+               return value;
+       }
 }

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-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/elvysrel/PlanDocumentBLImpl.java
   2010-02-11 16:09:49 UTC (rev 1709)
@@ -29,9 +29,7 @@
        private static final String CANT_LOAD_START_GAP = "Couldn't find start 
of the gap before visible planning.";
        private static final String CANT_LOAD_END_GAP = "Couldn't find start of 
the gap before visible planning.";
        
-       /* (non-Javadoc)
-        * @see 
cz.elvys.webServer.bl.api.elvysrel.PlanDocumentBL#prepareRectanglesForOneLayoutPosition(java.lang.Integer,
 java.lang.Integer, java.lang.Integer, java.util.List, java.util.Date, 
java.util.Date, int)
-        */
+       @Override
        public List<Rectangle> prepareRectanglesForOneLayoutPosition(Integer 
panelPl, Integer panelOrd, Integer layoutPos, Integer layoutId, List<Timeline> 
timelines, Date scheduleFrom, Date scheduleTo, int componentWidth) throws 
ExecutionException {
                List<Rectangle> result = new ArrayList<Rectangle>();
                

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-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/api/PlanningModalBL.java
  2010-02-11 16:09:49 UTC (rev 1709)
@@ -21,6 +21,7 @@
         * @param oldTimeline old frame content- null if you're not modifiyng 
planning (i.e. new planning)
         * @param valueDateFrom form value - dateFrom
         * @param valueDateTo form value - dateTo
+        * @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 selected type
         * @return List of validation message handler. Empty - no validation 
error occured.
         * @throws Exception when something went wrong
@@ -34,6 +35,7 @@
                        Timeline oldTimeline, 
                        Date valueDateFrom,
                        Date valueDateTo,
+                       Date now,
                        FrameContent formValues) throws Exception;
        
        
@@ -78,6 +80,7 @@
         * @param oldTimeline old frame content- null if you're not modifiyng 
planning (i.e. new planning)
         * @param valueDateFrom value of the form - planning from
         * @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)
         * @return list of validation messages. Empty means 'everything went 
ok, stored'
         */
@@ -90,6 +93,7 @@
                        Timeline oldTimeline,
                        Date valueDateFrom,
                        Date valueDateTo,
+                       Date now,
                        FrameContent formValues) throws Exception;
 
 }

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-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/planning/impl/PlanningModalBLImpl.java
     2010-02-11 16:09:49 UTC (rev 1709)
@@ -10,7 +10,6 @@
 import org.hibernate.Transaction;
 
 import cz.elvys.commons.utils.HibUtils;
-import cz.elvys.webServer.HIBgen.Elvys;
 import cz.elvys.webServer.HIBgen.FrameContent;
 import cz.elvys.webServer.HIBgen.Layout;
 import cz.elvys.webServer.HIBgen.Panel;
@@ -18,7 +17,6 @@
 import cz.elvys.webServer.db.InitSessionFactory;
 import cz.elvys.webServer.toSpring.planning.api.PlanningModalBL;
 import cz.elvys.webServer.toSpring.planning.api.PlanningModalSpecBL;
-import cz.elvys.webServer.utils.faces.BeanManager;
 import cz.elvys.webServer.utils.plug.PlugablePlanningTypeBeanUtils;
 import cz.elvys.webServer.utils.type.ValidationMessageHolder;
 import elvys.server.bl.Fact;
@@ -26,6 +24,10 @@
 
 public class PlanningModalBLImpl implements PlanningModalBL {
        
+       // consts
+       private static final String startFormId = 
"ChooseStartSpinner_date_input";
+       private static final String endFormId = "ChooseEndSpinner_date_input";
+       
        // messages
        private static final String ERR_STORING_FAILED = "Storing of new 
planning failed.";
        private static final String ERR_UPDATING_FAILED = "Updating of new 
planning failed.";
@@ -41,19 +43,25 @@
        
        public List<ValidationMessageHolder> validate(String formName,
                        Integer panelPl, Integer panelOrd, Integer layoutID, 
Integer positionID,
-                       Timeline oldTimeline, Date valueDateFrom, Date 
valueDateTo,
+                       Timeline oldTimeline, Date valueDateFrom, Date 
valueDateTo, Date now, 
                        FrameContent formValues) throws Exception {
+               if (now == null) throw new RuntimeException("now is null");
                
+               String formDateStartId = formName+":"+startFormId;
+               String formDateEndId = formName+":"+endFormId;
+               
+               // dateFrom must be specified
                List<ValidationMessageHolder> messages = new 
ArrayList<ValidationMessageHolder>();
                if (valueDateFrom == null) {
                        ValidationMessageHolder holder = new 
ValidationMessageHolder();
-                       holder.setComponentId(formName+":StartOfPlanningID");
+                       holder.setComponentId(formDateStartId);
                        
holder.setMessageRef("javax.faces.component.UIInput.REQUIRED");
                        messages.add(holder);
                }
+               // dateTo must be specified
                if (valueDateTo == null) {
                        ValidationMessageHolder message = new 
ValidationMessageHolder();
-                       message.setComponentId(formName+":EndOfPlanningID");
+                       message.setComponentId(formDateEndId);
                        
message.setMessageRef("javax.faces.component.UIInput.REQUIRED");
                        messages.add(message);
                }
@@ -61,16 +69,26 @@
                if (valueDateFrom == null || valueDateTo == null) {
                        return messages;
                }
+               
+               // validate dateFrom is not in the past (comparing to the now 
parameter)
+               if (valueDateFrom.before(now)) {
+                       ValidationMessageHolder message = new 
ValidationMessageHolder();
+                       message.setMessageRef("elvys.plan.modal.inpast");
+                       message.setComponentId(formDateStartId);
+                       messages.add(message);
+               }
+               
                // validate crossing of dates
                if (!valueDateFrom.before(valueDateTo)) {
                        ValidationMessageHolder message = new 
ValidationMessageHolder();
                        message.setMessageRef("elvys.plan.modal.crossdates");
-                       message.setComponentId(formName+":EndOfPlanningID");
+                       message.setComponentId(formDateEndId);
                        messages.add(message);
                }
                
                
                // validate that this planning don't cross other plannings
+               // TODO - concurrent access - this must be checked also in DB
                Session sess = 
InitSessionFactory.getInstance().getCurrentSession();
                Transaction tx= HibUtils.startTx(sess);
                try {
@@ -91,7 +109,7 @@
                        if (tlines1.size() != 0) {
                                ValidationMessageHolder message = new 
ValidationMessageHolder();
                                
message.setMessageRef("elvys.plan.modal.conflict.begin.inside");
-                               
message.setComponentId(formName+":EndOfPlanningID");
+                               message.setComponentId(formDateEndId);
                                message.setParams(new 
Object[]{tlines1.get(0).getShowStart()});
                                messages.add(message);
                        }
@@ -104,7 +122,7 @@
                        if (tlines2.size() != 0) {
                                ValidationMessageHolder message = new 
ValidationMessageHolder();
                                
message.setMessageRef("elvys.plan.modal.conflict.end.inside");
-                               
message.setComponentId(formName+":StartOfPlanningID");
+                               message.setComponentId(formDateStartId);
                                message.setParams(new 
Object[]{tlines2.get(0).getShowEnd()});
                                messages.add(message);
                        }
@@ -116,7 +134,7 @@
                        if (tlines3.size() != 0) {
                                ValidationMessageHolder message = new 
ValidationMessageHolder();
                                
message.setMessageRef("elvys.plan.modal.conflict.embrace");
-                               
message.setComponentId(formName+":StartOfPlanningID");
+                               message.setComponentId(formDateStartId);
                                message.setParams(new 
Object[]{tlines3.get(0).getShowStart(), tlines3.get(0).getShowEnd()});
                                messages.add(message);
                        }
@@ -215,13 +233,13 @@
        
        public List<ValidationMessageHolder> store(String formName,
                        Integer panelPl, Integer panelOrd, Integer layoutID, 
Integer positionID,
-                       Timeline oldTimeline, Date valueDateFrom, Date 
valueDateTo,
+                       Timeline oldTimeline, Date valueDateFrom, Date 
valueDateTo, Date now,
                        FrameContent formValues) throws Exception {
                
                // validation
                List<ValidationMessageHolder> messages = validate(formName,
-                               panelPl, panelOrd, layoutID,positionID, 
oldTimeline, valueDateFrom,
-                               valueDateTo, formValues);
+                               panelPl, panelOrd, layoutID, positionID, 
oldTimeline, valueDateFrom,
+                               valueDateTo, now, formValues);
                if (messages != null && messages.size()>0) {
                        return messages;
                }

Modified: 
trunk/server/webServer2/WebContent/js/components/timeSpinnerComponent.js
===================================================================
--- trunk/server/webServer2/WebContent/js/components/timeSpinnerComponent.js    
2010-02-11 10:18:47 UTC (rev 1708)
+++ trunk/server/webServer2/WebContent/js/components/timeSpinnerComponent.js    
2010-02-11 16:09:49 UTC (rev 1709)
@@ -25,21 +25,69 @@
        OPERA=true;
 } 
 
+function HandlerError(e){}
 
-// date='2/10/2010', time='19:10'
-function registerMyInstanceOfDateSpinner(fieldId,date,time) {
-       loadSearch('2/10/2010', 'Date');
-       var sDefTime='19:10';
-       mapOfCurrentDates[fieldId]
-}
 
-function loadSearch(DateSelect,id){
-       OurDate=new Date(DateSelect);
-       var today;
-       today=new Date();
+function onDtKeydown(event) {
+       try { 
+               var ikeyCode;
+               ikeyCode=0;
+               if(event.which) {
+                       ikeyCode=event.which;
+               } else if (event.keyCode) {
+                       ikeyCode=event.keyCode;
+               }
+               if (ikeyCode===38) {
+                       JourneyDateFore();
+                       refJourneyDate.select();
+                       event.returnValue=false;
+                       event.cancel=true;
+                       return false;
+               } else if(ikeyCode===40) {
+                       JourneyDateBack();
+                       refJourneyDate.select();
+                       event.returnValue=false;
+                       event.cancel=true;
+                       return false;
+               } else {
+                       return true;
+               }
+       } catch(e) { 
+               HandlerError(e);
+       }
 }
 
+function onTimeKeydown(event) {
+       try{
+               var ikeyCode;
+               ikeyCode=0;
+               if(event.which) {
+                       ikeyCode=event.which;
+               } else if(event.keyCode) {
+                       ikeyCode=event.keyCode;
+               }
+               oEl=document.getElementById("Time");
+               if(ikeyCode===38) {
+                       GetTime(null,"+");
+                       oEl.select();
+                       event.returnValue=false;
+                       event.cancel=true;
+                       return false;
+               } else if (ikeyCode===40) {
+                       GetTime(null,"-");
+                       oEl.select();
+                       event.returnValue=false;
+                       event.cancel=true;
+                       return false;
+               } else {
+                       return true;
+               }
+       } catch(e) {
+               HandlerError(e);
+       }
+} 
 
+
 // DATE SECTION
 function GetCalDate(event,sOperation,fieldId){ 
   if(IsNSOperaDblClick(event)){

Modified: 
trunk/server/webServer2/WebContent/secured/components/timeSpinnerComponent.xhtml
===================================================================
--- 
trunk/server/webServer2/WebContent/secured/components/timeSpinnerComponent.xhtml
    2010-02-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/WebContent/secured/components/timeSpinnerComponent.xhtml
    2010-02-11 16:09:49 UTC (rev 1709)
@@ -130,7 +130,7 @@
                                styleClass="calendar-time-spinner-input" 
                                value="#{valueTime}"
                                required="true" >
-                               <f:convertDateTime type="time" 
timeStyle="short"/>
+                               <f:convertDateTime pattern="HH:mm" 
timeZone="#{user.defaultTimezone}" type="time" timeStyle="short"/>
                        </h:inputText>
                </td>
                <td>                                            
@@ -175,8 +175,8 @@
        
        <!-- ERROR PART -->
        <a4j:outputPanel ajaxRendered="true">
-               <h:message id="#{id}_date_input_error" for="#{id}_date_input" 
styleClass="error"/>
-               <h:message id="#{id}_time_input_error" for="#{id}_time_input" 
styleClass="error"/>
+               <h:message id="#{id}_date_input_error" for="#{id}_date_input" 
styleClass="error error-spinner"/>
+               <h:message id="#{id}_time_input_error" for="#{id}_time_input" 
styleClass="error error-spinner"/>
        </a4j:outputPanel>
 </h:panelGroup>
 

Modified: 
trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml     
2010-02-11 10:18:47 UTC (rev 1708)
+++ trunk/server/webServer2/WebContent/secured/elvysrel/planDocuments.xhtml     
2010-02-11 16:09:49 UTC (rev 1709)
@@ -111,13 +111,13 @@
                                                <h:outputLabel 
value="#{lbl['elvys.plan.component.start']} "/>
                                                <b>
                                                        <h:outputLabel 
value="#{filePlanningBean.segmentFrom}">
-                                                               
<f:convertDateTime dateStyle="short" pattern="dd.MM.yyyy" type="date"/>
+                                                               
<f:convertDateTime dateStyle="short" timeZone="#{user.defaultTimezone}" 
pattern="dd.MM.yyyy" type="date"/>
                                                        </h:outputLabel>
                                                </b>
                                                <h:outputText 
value="#{lbl['elvys.plan.component.end']} "/>
                                                <b>
                                                        <h:outputLabel 
value="#{filePlanningBean.segmentTo}">
-                                                               
<f:convertDateTime dateStyle="short" pattern="dd.MM.yyyy" type="date"/>
+                                                               
<f:convertDateTime dateStyle="short" timeZone="#{user.defaultTimezone}" 
pattern="dd.MM.yyyy" type="date"/>
                                                        </h:outputLabel>
                                                </b>
                                        <h:panelGroup 
styleClass="scheduler-period-area">

Modified: trunk/server/webServer2/WebContent/secured/filerel/fileList.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/secured/filerel/fileList.xhtml   
2010-02-11 10:18:47 UTC (rev 1708)
+++ trunk/server/webServer2/WebContent/secured/filerel/fileList.xhtml   
2010-02-11 16:09:49 UTC (rev 1709)
@@ -91,9 +91,14 @@
                                                </h:column>
                                                <h:column>
                                                        <f:facet 
name="header">#{lbl['file.manager.list.time']}</f:facet>
-                                                       <h:outputText 
value="#{file.uploaded}" >
-                                                               
<f:convertDateTime dateStyle="short" pattern="dd.MM.yyyy HH:mm" type="both"/>
-                                                       </h:outputText>
+                                                       <div 
class="file-upload-datetime-div">
+                                                               <h:outputText 
value="#{file.uploaded}" styleClass="file-upload-date">
+                                                                       
<f:convertDateTime dateStyle="short" pattern="dd.MM.yyyy" 
timeZone="#{user.defaultTimezone}" type="date"/>
+                                                               </h:outputText>
+                                                               <h:outputText 
value="#{file.uploaded}" styleClass="file-upload-time">
+                                                                       
<f:convertDateTime dateStyle="short" pattern="HH:mm" 
timeZone="#{user.defaultTimezone}" type="time"/>
+                                                               </h:outputText>
+                                                       </div>
                                                </h:column>
                                                <rich:column>
                                    <f:facet name="header">

Modified: 
trunk/server/webServer2/WebContent/styles/components/timeSpinnerComponent.css
===================================================================
--- 
trunk/server/webServer2/WebContent/styles/components/timeSpinnerComponent.css   
    2010-02-11 10:18:47 UTC (rev 1708)
+++ 
trunk/server/webServer2/WebContent/styles/components/timeSpinnerComponent.css   
    2010-02-11 16:09:49 UTC (rev 1709)
@@ -57,4 +57,8 @@
 
 .calendar-time-spinner-over {
        background-color: #A4D800;
-}
\ No newline at end of file
+}
+
+.error-spinner {
+       float: left;
+}

Modified: trunk/server/webServer2/WebContent/styles/filerel/fileList.css
===================================================================
--- trunk/server/webServer2/WebContent/styles/filerel/fileList.css      
2010-02-11 10:18:47 UTC (rev 1708)
+++ trunk/server/webServer2/WebContent/styles/filerel/fileList.css      
2010-02-11 16:09:49 UTC (rev 1709)
@@ -5,4 +5,18 @@
 .FileList
 {
                
+}
+
+
+.file-upload-datetime-div {
+       
+}
+
+.file-upload-date {
+       float: right;
+}
+
+
+.file-upload-time {
+       float: right;
 }
\ No newline at end of file


Other related posts:

  • » [elvystrac] r1709 - better planning, part 3. - elvys