From a6da419358aa078dba652f90ab44aad6027c96b1 Mon Sep 17 00:00:00 2001
From: Viktor Kovtun <viktor.kovtun@id.ethz.ch>
Date: Mon, 31 Aug 2020 17:20:26 +0200
Subject: [PATCH] SSDM-10142 Added a new test that searches by date property
 represented by a string. Fixed an SQL error when making such an API call.

---
 .../harvester/HarvesterMaintenanceTask.java   |  2 +-
 ...aSetAndPathInfoDBConsistencyCheckTask.java |  2 +-
 .../etlserver/plugins/GroupingPolicy.java     |  2 +-
 .../etlserver/plugins/GroupingPolicyTest.java |  2 +-
 .../systemtests/CountStopCondition.java       |  2 +-
 .../systemtests/ParsedLogEntry.java           |  2 +-
 .../systemtests/SystemTestCase.java           |  3 +--
 .../translator/SearchCriteriaTranslator.java  |  8 +++---
 .../condition/utils/TranslatorUtils.java      | 27 ++++++++++---------
 .../ui/PropertyValueRenderers.java            |  2 +-
 .../RevertDeletionConfirmationDialog.java     |  2 +-
 .../application/ui/property/PropertyGrid.java |  2 +-
 .../application/ui/widget/HistoryWidget.java  |  2 +-
 .../generic/shared/basic/BasicConstant.java   |  6 ++---
 .../asapi/v3/SearchExperimentTest.java        | 22 +++++++++++----
 .../utils/EntityTypeLabelUtils.java           |  2 +-
 16 files changed, 51 insertions(+), 37 deletions(-)

diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/HarvesterMaintenanceTask.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/HarvesterMaintenanceTask.java
index 8bd22ec4236..1ef9e485ae7 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/HarvesterMaintenanceTask.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/HarvesterMaintenanceTask.java
@@ -417,7 +417,7 @@ public class HarvesterMaintenanceTask<T extends DataSetInformation> implements I
 
     private SimpleDateFormat createDateFormat()
     {
-        return new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+        return new SimpleDateFormat(BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN);
     }
 
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DataSetAndPathInfoDBConsistencyCheckTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DataSetAndPathInfoDBConsistencyCheckTask.java
index 8c886e99f74..ec7a14049d9 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DataSetAndPathInfoDBConsistencyCheckTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DataSetAndPathInfoDBConsistencyCheckTask.java
@@ -83,7 +83,7 @@ public class DataSetAndPathInfoDBConsistencyCheckTask extends AbstractMaintenanc
     static final String CONTINUING_TIME_POINT_KEY = "continuing-time-point";
 
     private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(
-            BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+            BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN);
 
     private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
             DataSetAndPathInfoDBConsistencyCheckTask.class);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicy.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicy.java
index 31bb8bf5e57..3b3ed491da6 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicy.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicy.java
@@ -168,7 +168,7 @@ public class GroupingPolicy extends BaseGroupingPolicy
             return groups.get(0).getList();
         }
         GroupWithAge oldestGroup = sortGroupsByAge(groups).get(0);
-        String timestamp = new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN).format(new Date(oldestGroup.age));
+        String timestamp = new SimpleDateFormat(BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN).format(new Date(oldestGroup.age));
         log(log, "All data sets of the selected group have been accessed at " + timestamp + " or before.");
         return oldestGroup.group.getList();
     }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicyTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicyTest.java
index 7c1cb5e376b..50ebaba79c7 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicyTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/GroupingPolicyTest.java
@@ -516,7 +516,7 @@ public class GroupingPolicyTest extends AbstractAutoArchiverPolicyTestCase
     private String oldestLog(long timestamp)
     {
         return String.format("All data sets of the selected group have been accessed at %s or before.",
-                new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN).format(new Date(timestamp)));
+                new SimpleDateFormat(BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN).format(new Date(timestamp)));
     }
 
     private String mergedLog(int groups)
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/CountStopCondition.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/CountStopCondition.java
index bb475898bd4..a88bf2d5136 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/CountStopCondition.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/CountStopCondition.java
@@ -54,7 +54,7 @@ public class CountStopCondition implements ILogMonitoringStopCondition
         {
             count++;
             operationLog.info(count + " of " + n + " expected entry detected at line " + logEntry.getLineIndex() + " at "
-                    + new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN).format(logEntry.getTimestamp()));
+                    + new SimpleDateFormat(BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN).format(logEntry.getTimestamp()));
             return count >= n;
         }
         return false;
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/ParsedLogEntry.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/ParsedLogEntry.java
index 83d3772f67b..577fd1f0cf5 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/ParsedLogEntry.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/ParsedLogEntry.java
@@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 
 public final class ParsedLogEntry
 {
-    private static final String FORMAT_TEMPLATE = "[{0,date," + BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN + "}][{1}][{2}][{3}]";
+    private static final String FORMAT_TEMPLATE = "[{0,date," + BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN + "}][{1}][{2}][{3}]";
 
     private int lineIndex;
 
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/SystemTestCase.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/SystemTestCase.java
index 298b3e7c754..fa468c6baaf 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/SystemTestCase.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/SystemTestCase.java
@@ -62,7 +62,6 @@ import ch.systemsx.cisd.etlserver.ETLDaemon;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSetRegistrationTransaction;
 import ch.systemsx.cisd.openbis.dss.generic.server.DataStoreServer;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.util.UpdateUtils;
 import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.Constants;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
@@ -342,7 +341,7 @@ public abstract class SystemTestCase extends AssertJUnit
         List<ParsedLogEntry> result = new ArrayList<ParsedLogEntry>();
         String[] logLines = getLogAppender().getLogContent().split("\n");
         Pattern pattern = Pattern.compile("^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}),\\d{3} ([^ ]*) \\[([^\\]]*)\\] (.*)$");
-        SimpleDateFormat dateFormat = new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+        SimpleDateFormat dateFormat = new SimpleDateFormat(BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN);
         ParsedLogEntry logEntry = null;
         for (int i = lineIndex; i < logLines.length; i++)
         {
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/SearchCriteriaTranslator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/SearchCriteriaTranslator.java
index b0fe1b74e2f..34abc36374b 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/SearchCriteriaTranslator.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/SearchCriteriaTranslator.java
@@ -57,11 +57,13 @@ import static ch.systemsx.cisd.openbis.generic.shared.dto.TableNames.METAPROJECT
 public class SearchCriteriaTranslator
 {
 
-    public static final DateFormat DATE_FORMAT = new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+    public static final DateFormat DATE_HOURS_MINUTES_SECONDS_FORMAT = new SimpleDateFormat(
+            BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN);
 
-    public static final DateFormat DATE_WITHOUT_TIME_FORMAT = new SimpleDateFormat(BasicConstant.DATE_WITHOUT_TIME_FORMAT_PATTERN);
+    public static final DateFormat DATE_HOURS_MINUTES_FORMAT = new SimpleDateFormat(
+            BasicConstant.DATE_HOURS_MINUTES_PATTERN);
 
-    public static final DateFormat DATE_WITH_SHORT_TIME_FORMAT = new SimpleDateFormat(BasicConstant.DATE_WITH_SHORT_TIME_PATTERN);
+    public static final DateFormat DATE_FORMAT = new SimpleDateFormat(BasicConstant.DATE_PATTERN);
 
     public static final String MAIN_TABLE_ALIAS = getAlias(new AtomicInteger(0));
 
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/utils/TranslatorUtils.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/utils/TranslatorUtils.java
index 089b56d056e..98deec69f3e 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/utils/TranslatorUtils.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/search/translator/condition/utils/TranslatorUtils.java
@@ -17,13 +17,12 @@
 package ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.condition.utils;
 
 import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SQLLexemes.*;
+import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator.DATE_HOURS_MINUTES_SECONDS_FORMAT;
 import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator.DATE_FORMAT;
-import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator.DATE_WITHOUT_TIME_FORMAT;
-import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator.DATE_WITH_SHORT_TIME_FORMAT;
+import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator.DATE_HOURS_MINUTES_FORMAT;
 import static ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator.MAIN_TABLE_ALIAS;
 import static ch.systemsx.cisd.openbis.generic.shared.dto.ColumnNames.*;
 import static ch.systemsx.cisd.openbis.generic.shared.dto.TableNames.CONTROLLED_VOCABULARY_TERM_TABLE;
-import static ch.systemsx.cisd.openbis.generic.shared.dto.TableNames.MATERIALS_TABLE;
 import static ch.systemsx.cisd.openbis.generic.shared.dto.TableNames.PROJECTS_TABLE;
 import static ch.systemsx.cisd.openbis.generic.shared.dto.TableNames.RELATIONSHIP_TYPES_TABLE;
 import static ch.systemsx.cisd.openbis.generic.shared.dto.TableNames.SPACES_TABLE;
@@ -70,7 +69,6 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.StringStartsWithVa
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.TimeZone;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.search.PSQLTypes;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.search.mapper.TableMapper;
-import ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SQLLexemes;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.SearchCriteriaTranslator;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.search.translator.condition.IAliasFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
@@ -80,11 +78,11 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames;
 public class TranslatorUtils
 {
 
-    public static final DateTimeFormatter DATE_WITHOUT_TIME_FORMATTER = DateTimeFormatter.ofPattern(BasicConstant.DATE_WITHOUT_TIME_FORMAT_PATTERN);
+    public static final DateTimeFormatter DATE_WITHOUT_TIME_FORMATTER = DateTimeFormatter.ofPattern(BasicConstant.DATE_PATTERN);
 
-    public static final DateTimeFormatter DATE_WITH_SHORT_TIME_FORMATTER = DateTimeFormatter.ofPattern(BasicConstant.DATE_WITH_SHORT_TIME_PATTERN);
+    public static final DateTimeFormatter DATE_WITH_SHORT_TIME_FORMATTER = DateTimeFormatter.ofPattern(BasicConstant.DATE_HOURS_MINUTES_PATTERN);
 
-    public static final DateTimeFormatter DATE_WITHOUT_TIMEZONE_FORMATTER = DateTimeFormatter.ofPattern(BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+    public static final DateTimeFormatter DATE_WITHOUT_TIMEZONE_FORMATTER = DateTimeFormatter.ofPattern(BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN);
 
     /** Indicator that the property is internal. */
     private static final String INTERNAL_PROPERTY_PREFIX = "$";
@@ -443,7 +441,7 @@ public class TranslatorUtils
         if (fieldValue instanceof AbstractDateValue)
         {
             // String type date value.
-            args.add(getDate((AbstractDateValue) fieldValue));
+            args.add(parseDate(((AbstractDateValue) fieldValue).getValue()));
         } else
         {
             // Date type date value.
@@ -451,22 +449,21 @@ public class TranslatorUtils
         }
     }
 
-    private static Date getDate(final AbstractDateValue fieldValue)
+    private static Date parseDate(final String dateString)
     {
-        final String dateString = fieldValue.getValue();
         try
         {
-            return DATE_FORMAT.parse(dateString);
+            return DATE_HOURS_MINUTES_SECONDS_FORMAT.parse(dateString);
         } catch (final ParseException e1)
         {
             try
             {
-                return DATE_WITH_SHORT_TIME_FORMAT.parse(dateString);
+                return DATE_HOURS_MINUTES_FORMAT.parse(dateString);
             } catch (ParseException e2)
             {
                 try
                 {
-                    return DATE_WITHOUT_TIME_FORMAT.parse(dateString);
+                    return DATE_FORMAT.parse(dateString);
                 } catch (final ParseException e3)
                 {
                     throw new IllegalArgumentException("Illegal date [dateString='" + dateString + "']", e3);
@@ -614,6 +611,10 @@ public class TranslatorUtils
         {
             return Double.parseDouble(value);
         }
+        if (Date.class == klass)
+        {
+            return parseDate(value);
+        }
 
         return value;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java
index bbce31d8424..a668eb6a873 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java
@@ -242,7 +242,7 @@ public final class PropertyValueRenderers
                     Dict.DELETION_TEMPLATE,
                     rendererPerson(deletion.getRegistrator()),
                     DateRenderer.renderDate(deletion.getRegistrationDate(),
-                            BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN), deletion.getReason());
+                            BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN), deletion.getReason());
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java
index 337578a13be..deee6876cc5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/RevertDeletionConfirmationDialog.java
@@ -119,7 +119,7 @@ public final class RevertDeletionConfirmationDialog extends AbstractDataConfirma
             String deletedBy = deletion.getRegistrator().toString();
             String deletionDate =
                     DateRenderer.renderDate(deletion.getRegistrationDate(),
-                            BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN);
+                            BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN);
             String deletionReason = StringEscapeUtils.unescapeHtml(deletion.getReason());
             return viewContext.getMessage(Dict.REVERT_ENTITY_DELETION_CONFIRMATION_MSG,
                     deletedEntity, deletedBy, deletionDate, deletionReason);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property/PropertyGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property/PropertyGrid.java
index 8aea94d81c3..4a7c2bc8466 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property/PropertyGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property/PropertyGrid.java
@@ -83,7 +83,7 @@ public final class PropertyGrid extends Grid
     private final void registerDefaultPropertyValueRenderers()
     {
         registerPropertyValueRenderer(Date.class, new DatePropertyValueRenderer(messageProvider,
-                BasicConstant.DATE_WITHOUT_TIMEZONE_PATTERN));
+                BasicConstant.DATE_HOURS_MINUTES_SECONDS_PATTERN));
         // Common
         registerPropertyValueRenderer(Person.class,
                 PropertyValueRenderers.createPersonPropertyValueRenderer(messageProvider));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HistoryWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HistoryWidget.java
index 4a37a8e1453..2571f238920 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HistoryWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/HistoryWidget.java
@@ -210,7 +210,7 @@ public class HistoryWidget extends ContentPanel
                         final Widget link = LinkRenderer.getLinkWidget(displayText, listener, href);
                         final String date =
                                 DateRenderer.renderDate(new Date(visit.getTimeStamp()),
-                                        BasicConstant.DATE_WITH_SHORT_TIME_PATTERN);
+                                        BasicConstant.DATE_HOURS_MINUTES_PATTERN);
 
                         FlowPanel panel = new FlowPanel();
                         panel.add(link);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java
index 978e14e2ef7..79b35a5961d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/BasicConstant.java
@@ -98,17 +98,17 @@ public class BasicConstant
     /**
      * Date format which does not include time zone.
      */
-    public static final String DATE_WITHOUT_TIMEZONE_PATTERN = "yyyy-MM-dd HH:mm:ss";
+    public static final String DATE_HOURS_MINUTES_SECONDS_PATTERN = "yyyy-MM-dd HH:mm:ss";
 
     /**
      * Date format which does not include time and time zone.
      */
-    public static final String DATE_WITHOUT_TIME_FORMAT_PATTERN = "yyyy-MM-dd";
+    public static final String DATE_PATTERN = "yyyy-MM-dd";
 
     /**
      * Date format which does not include seconds & time zone.
      */
-    public static final String DATE_WITH_SHORT_TIME_PATTERN = "yyyy-MM-dd HH:mm";
+    public static final String DATE_HOURS_MINUTES_PATTERN = "yyyy-MM-dd HH:mm";
 
     // constants used for link creation and handling
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExperimentTest.java
index 7f23dcbd20d..aad16615229 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExperimentTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExperimentTest.java
@@ -648,11 +648,15 @@ public class SearchExperimentTest extends AbstractExperimentTest
         experimentCreation.setProperty(propertyType.getPermId(), "/CISD/CL1");
         v3api.createExperiments(sessionToken, Arrays.asList(experimentCreation));
 
-        final ExperimentSearchCriteria criteria = new ExperimentSearchCriteria();
-        criteria.withOrOperator();
-        criteria.withAnyProperty().thatEquals("/CISD/CL1");
-
-        testSearch(TEST_USER, criteria, 1);
+//        final ExperimentSearchCriteria withAnyPropertySearchCriteria = new ExperimentSearchCriteria();
+//        withAnyPropertySearchCriteria.withOrOperator();
+//        withAnyPropertySearchCriteria.withAnyProperty().thatStartsWith("/CISD/CL");
+//        testSearch(TEST_USER, withAnyPropertySearchCriteria, "/CISD/DEFAULT/SAMPLE_PROPERTY_TEST");
+        
+        final ExperimentSearchCriteria withPropertySearchCriteria = new ExperimentSearchCriteria();
+        withPropertySearchCriteria.withOrOperator();
+        withPropertySearchCriteria.withProperty(propertyType.getPermId()).thatStartsWith("/CISD/CL");
+        testSearch(TEST_USER, withPropertySearchCriteria, "/CISD/DEFAULT/SAMPLE_PROPERTY_TEST");
 
         v3api.logout(sessionToken);
     }
@@ -953,6 +957,14 @@ public class SearchExperimentTest extends AbstractExperimentTest
                 "search-experiments  SEARCH_CRITERIA:\n'EXPERIMENT\n    with operator 'AND'\n    with attribute 'code' starts with 'EXP1'\n    with property 'DESCRIPTION' equal to 'abc'\n'\nFETCH_OPTIONS:\n'Experiment\n    with History\n    with Modifier\n'");
     }
 
+    @Test
+    public void testSearchForExperimentWithDatePropertyUsingWithProperty()
+    {
+        final ExperimentSearchCriteria criteria = new ExperimentSearchCriteria();
+        criteria.withProperty("PURCHASE_DATE").thatEquals("2009-02-09 10:00:00 +0100");
+        testSearch(TEST_USER, criteria, 1);
+    }
+
     private void testSearch(String user, ExperimentSearchCriteria criteria, String... expectedIdentifiers)
     {
         String sessionToken = v3api.login(user, PASSWORD);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java
index 623e005fcaa..75c8aa591e4 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/utils/EntityTypeLabelUtils.java
@@ -146,7 +146,7 @@ public class EntityTypeLabelUtils
     private static String renderDate(DatasetReference datasetReference)
     {
         return DateRenderer.renderDate(datasetReference.getRegistrationDate(),
-                BasicConstant.DATE_WITHOUT_TIME_FORMAT_PATTERN);
+                BasicConstant.DATE_PATTERN);
     }
 
     private static String getDatasetUserFriendlyTypeCode(DatasetReference datasetReference)
-- 
GitLab