From 6373d46f21c4b564124d2aeaedbb8a80c77a4580 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Tue, 19 Jul 2011 11:18:46 +0000
Subject: [PATCH] LMS-2392 Support returning registration details in the
 experiment.

SVN: 22208
---
 .../generic/server/api/v1/Translator.java     |  20 ++
 .../api/v1/dto/EntityRegistrationDetails.java | 186 ++++++++++++++++++
 .../generic/shared/api/v1/dto/Experiment.java |  34 +++-
 .../api/v1/GeneralInformationServiceTest.java |  11 +-
 4 files changed, 249 insertions(+), 2 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/EntityRegistrationDetails.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
index 1254f103109..63d2e26f038 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/Translator.java
@@ -34,6 +34,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.Connections;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.DataSetInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType.DataSetTypeInitializer;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityRegistrationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Experiment.ExperimentInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Project;
@@ -47,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample.SampleInitializ
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleLevel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
@@ -147,6 +149,10 @@ public class Translator
             initializer.putProperty(prop.getPropertyType().getCode(), prop.tryGetAsString());
         }
 
+        EntityRegistrationDetails registrationDetails =
+                translateRegistrationDetails(privateExperiment);
+        initializer.setRegistrationDetails(registrationDetails);
+
         return new Experiment(initializer);
     }
 
@@ -297,6 +303,20 @@ public class Translator
         return new DataSet(initializer);
     }
 
+    private static EntityRegistrationDetails translateRegistrationDetails(
+            ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistration<?> thingWithRegistrationDetails)
+    {
+        Person registrator = thingWithRegistrationDetails.getRegistrator();
+        EntityRegistrationDetails.EntityRegistrationDetailsInitializer initializer =
+                new EntityRegistrationDetails.EntityRegistrationDetailsInitializer();
+        initializer.setEmail(registrator.getEmail());
+        initializer.setFirstName(registrator.getFirstName());
+        initializer.setLastName(registrator.getLastName());
+        initializer.setUserId(registrator.getUserId());
+        initializer.setRegistrationDate(thingWithRegistrationDetails.getRegistrationDate());
+        return new EntityRegistrationDetails(initializer);
+    }
+
     private Translator()
     {
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/EntityRegistrationDetails.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/EntityRegistrationDetails.java
new file mode 100644
index 00000000000..fade38d0056
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/EntityRegistrationDetails.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+
+/**
+ * A class that encapsulates the details about entity registration.
+ * 
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class EntityRegistrationDetails implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Class used to initialize an EntityRegistrationDetails object.
+     * 
+     * @author Chandrasekhar Ramakrishnan
+     */
+    public static class EntityRegistrationDetailsInitializer
+    {
+        private String firstName;
+
+        private String lastName;
+
+        private String email;
+
+        private String userId;
+
+        private Date registrationDate;
+
+        public String getFirstName()
+        {
+            return firstName;
+        }
+
+        public void setFirstName(String firstName)
+        {
+            this.firstName = firstName;
+        }
+
+        public String getLastName()
+        {
+            return lastName;
+        }
+
+        public void setLastName(String lastName)
+        {
+            this.lastName = lastName;
+        }
+
+        public String getEmail()
+        {
+            return email;
+        }
+
+        public void setEmail(String email)
+        {
+            this.email = email;
+        }
+
+        public String getUserId()
+        {
+            return userId;
+        }
+
+        public void setUserId(String userId)
+        {
+            this.userId = userId;
+        }
+
+        public Date getRegistrationDate()
+        {
+            return registrationDate;
+        }
+
+        public void setRegistrationDate(Date registrationDate)
+        {
+            this.registrationDate = registrationDate;
+        }
+
+    }
+
+    private final String userFirstName;
+
+    private final String userLastName;
+
+    private final String userEmail;
+
+    private final String userId;
+
+    private final Date registrationDate;
+
+    public EntityRegistrationDetails(EntityRegistrationDetailsInitializer initializer)
+    {
+        this.userFirstName = initializer.getFirstName();
+        this.userLastName = initializer.getLastName();
+        this.userEmail = initializer.getEmail();
+        this.userId = initializer.getUserId();
+        this.registrationDate = initializer.getRegistrationDate();
+    }
+
+    public String getUserFirstName()
+    {
+        return userFirstName;
+    }
+
+    public String getUserLastName()
+    {
+        return userLastName;
+    }
+
+    public String getUserEmail()
+    {
+        return userEmail;
+    }
+
+    public String getUserId()
+    {
+        return userId;
+    }
+
+    public Date getRegistrationDate()
+    {
+        return registrationDate;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (obj == this)
+        {
+            return true;
+        }
+        if (obj instanceof EntityRegistrationDetails == false)
+        {
+            return false;
+        }
+
+        EqualsBuilder builder = new EqualsBuilder();
+        EntityRegistrationDetails other = (EntityRegistrationDetails) obj;
+        builder.append(getUserId(), other.getUserId());
+        builder.append(getRegistrationDate(), other.getRegistrationDate());
+        return builder.isEquals();
+    }
+
+    @Override
+    public int hashCode()
+    {
+        HashCodeBuilder builder = new HashCodeBuilder();
+        builder.append(getUserId());
+        builder.append(getRegistrationDate());
+        return builder.toHashCode();
+    }
+
+    @Override
+    public String toString()
+    {
+        ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
+        builder.append(getUserId());
+        builder.append(getRegistrationDate());
+        return builder.toString();
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Experiment.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Experiment.java
index ac09770b102..7ca76ad3aa5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Experiment.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/Experiment.java
@@ -56,6 +56,8 @@ public final class Experiment implements Serializable
 
         private String experimentTypeCode;
 
+        private EntityRegistrationDetails registrationDetails;
+
         private HashMap<String, String> properties = new HashMap<String, String>();
 
         public void setId(Long id)
@@ -117,6 +119,16 @@ public final class Experiment implements Serializable
         {
             properties.put(propCode, value);
         }
+
+        public void setRegistrationDetails(EntityRegistrationDetails registrationDetails)
+        {
+            this.registrationDetails = registrationDetails;
+        }
+
+        public EntityRegistrationDetails getRegistrationDetails()
+        {
+            return registrationDetails;
+        }
     }
 
     private final Long id;
@@ -129,6 +141,8 @@ public final class Experiment implements Serializable
 
     private final String experimentTypeCode;
 
+    private final EntityRegistrationDetails registrationDetails;
+
     private final HashMap<String, String> properties;
 
     /**
@@ -150,9 +164,13 @@ public final class Experiment implements Serializable
         checkValidString(initializer.getIdentifier(), "Unspecified identifier.");
         this.identifier = initializer.getIdentifier();
 
-        checkValidString(initializer.getExperimentTypeCode(), "Unspecified eperiment type code.");
+        checkValidString(initializer.getExperimentTypeCode(), "Unspecified experiment type code.");
         this.experimentTypeCode = initializer.getExperimentTypeCode();
 
+        checkValidRegistrationDetails(initializer.getRegistrationDetails(),
+                "Unspecified entity registration details.");
+        this.registrationDetails = initializer.getRegistrationDetails();
+
         this.properties = initializer.getProperties();
     }
 
@@ -172,6 +190,15 @@ public final class Experiment implements Serializable
         }
     }
 
+    private void checkValidRegistrationDetails(EntityRegistrationDetails details, String message)
+            throws IllegalArgumentException
+    {
+        if (details == null)
+        {
+            throw new IllegalArgumentException(message);
+        }
+    }
+
     /**
      * Returns the experiment id.
      */
@@ -212,6 +239,11 @@ public final class Experiment implements Serializable
         return experimentTypeCode;
     }
 
+    public EntityRegistrationDetails getRegistrationDetails()
+    {
+        return registrationDetails;
+    }
+
     public Map<String, String> getProperties()
     {
         return Collections.unmodifiableMap(properties);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java
index 544ed7949b6..30a0c4139ce 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceTest.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -48,6 +49,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetRelatedEntities;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder;
@@ -446,10 +448,17 @@ public class GeneralInformationServiceTest extends AbstractServerTestCase
                     one(commonServer).listExperiments(SESSION_TOKEN, returnExperimentType,
                             projectIdentifier);
 
+                    Person registrator = new Person();
+                    registrator.setEmail("mail@mail.com");
+                    registrator.setFirstName("First");
+                    registrator.setLastName("Last");
+                    registrator.setUserId("personId");
+
                     ExperimentBuilder experiment =
                             new ExperimentBuilder().id(1L).code("EXP-CODE").permID("EXP-PERMID")
                                     .identifier("/SPACE-1/PROJECT-1/EXP-CODE")
-                                    .type(returnExperimentType.getCode());
+                                    .type(returnExperimentType.getCode()).registrator(registrator)
+                                    .date(new Date());
                     will(returnValue(Collections.singletonList(experiment.getExperiment())));
                 }
             });
-- 
GitLab