← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 17739: add annotation for setting explicit property type, and property range (not visible in schema yet)

 

------------------------------------------------------------
revno: 17739
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Fri 2014-12-19 13:31:55 +0100
message:
  add annotation for setting explicit property type, and property range (not visible in schema yet)
added:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/Property.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/PropertyRange.java
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/PropertyType.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java	2014-12-01 05:36:11 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/BaseIdentifiableObject.java	2014-12-19 12:31:55 +0000
@@ -42,6 +42,8 @@
 import org.hisp.dhis.common.view.SharingBasicView;
 import org.hisp.dhis.common.view.SharingDetailedView;
 import org.hisp.dhis.common.view.SharingExportView;
+import org.hisp.dhis.schema.PropertyType;
+import org.hisp.dhis.schema.annotation.Property;
 import org.hisp.dhis.user.User;
 import org.hisp.dhis.user.UserGroupAccess;
 
@@ -186,6 +188,7 @@
     @JsonProperty( value = "id" )
     @JacksonXmlProperty( localName = "id", isAttribute = true )
     @Description( "The Unique Identifier for this Object." )
+    @Property( PropertyType.IDENTIFIER )
     public String getUid()
     {
         return uid;

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java	2014-12-15 10:57:23 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java	2014-12-19 12:31:55 +0000
@@ -34,7 +34,6 @@
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
-
 import org.apache.commons.lang.StringUtils;
 import org.hisp.dhis.attribute.AttributeValue;
 import org.hisp.dhis.common.BaseIdentifiableObject;
@@ -49,6 +48,8 @@
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataset.DataSet;
 import org.hisp.dhis.period.PeriodType;
+import org.hisp.dhis.schema.PropertyType;
+import org.hisp.dhis.schema.annotation.Property;
 import org.hisp.dhis.user.User;
 
 import java.util.ArrayList;
@@ -332,7 +333,7 @@
     {
         return !this.children.isEmpty();
     }
-    
+
     public boolean isLeaf()
     {
         return children == null || children.isEmpty();
@@ -366,20 +367,20 @@
             {
                 return true;
             }
-            
+
             unit = unit.getParent();
         }
-        
+
         return false;
     }
-    
+
     public boolean isDescendant( Set<OrganisationUnit> ancestors )
     {
         if ( ancestors == null || ancestors.isEmpty() )
         {
             return false;
         }
-        
+
         OrganisationUnit unit = this;
 
         while ( unit != null )
@@ -388,11 +389,11 @@
             {
                 return true;
             }
-            
+
             unit = unit.getParent();
         }
-        
-        return false;        
+
+        return false;
     }
 
     public boolean hasCoordinatesUp()
@@ -404,7 +405,7 @@
                 return parent.getParent().hasChildrenWithCoordinates();
             }
         }
-        
+
         return false;
     }
 
@@ -579,9 +580,9 @@
 
     /**
      * Returns the list of ancestor organisation units up the any of the given roots
-     * for this organisation unit. Does not include itself. The list is ordered 
-     * by root first. 
-     * 
+     * for this organisation unit. Does not include itself. The list is ordered
+     * by root first.
+     *
      * @param roots the root organisation units, if null using real roots.
      */
     public List<OrganisationUnit> getAncestors( Collection<OrganisationUnit> roots )
@@ -593,19 +594,19 @@
         while ( unit != null )
         {
             units.add( unit );
-            
+
             if ( roots != null && roots.contains( unit ) )
             {
                 break;
             }
-            
+
             unit = unit.getParent();
         }
 
         Collections.reverse( units );
         return units;
     }
-    
+
     public Set<DataElement> getDataElementsInDataSets()
     {
         Set<DataElement> dataElements = new HashSet<>();
@@ -620,21 +621,21 @@
 
     public Map<PeriodType, Set<DataElement>> getDataElementsInDataSetsByPeriodType()
     {
-    	Map<PeriodType,Set<DataElement>> map = new HashMap<>();
-    	
+        Map<PeriodType, Set<DataElement>> map = new HashMap<>();
+
         for ( DataSet dataSet : dataSets )
         {
             Set<DataElement> dataElements = map.get( dataSet.getPeriodType() );
-            
+
             if ( dataElements == null )
             {
                 dataElements = new HashSet<>();
                 map.put( dataSet.getPeriodType(), dataElements );
             }
-            
+
             dataElements.addAll( dataSet.getDataElements() );
         }
-        
+
         return map;
     }
 
@@ -699,7 +700,7 @@
     /**
      * Returns a string representing the graph of ancestors. The string is delimited
      * by "/". The ancestors are ordered by root first and represented by UIDs.
-     * 
+     *
      * @param roots the root organisation units, if null using real roots.
      */
     public String getParentGraph( Collection<OrganisationUnit> roots )
@@ -731,7 +732,7 @@
         {
             builder.append( "/" ).append( name );
         }
-        
+
         return builder.toString();
     }
 
@@ -742,7 +743,7 @@
     public static Map<String, String> getParentGraphMap( List<OrganisationUnit> organisationUnits, Collection<OrganisationUnit> roots )
     {
         Map<String, String> map = new HashMap<>();
-        
+
         if ( organisationUnits != null )
         {
             for ( OrganisationUnit unit : organisationUnits )
@@ -750,7 +751,7 @@
                 map.put( unit.getUid(), unit.getParentGraph( roots ) );
             }
         }
-        
+
         return map;
     }
 
@@ -761,7 +762,7 @@
     public static Map<String, String> getParentNameGraphMap( List<OrganisationUnit> organisationUnits, Collection<OrganisationUnit> roots, boolean includeThis )
     {
         Map<String, String> map = new HashMap<>();
-        
+
         if ( organisationUnits != null )
         {
             for ( OrganisationUnit unit : organisationUnits )
@@ -769,7 +770,7 @@
                 map.put( unit.getName(), unit.getParentNameGraph( roots, includeThis ) );
             }
         }
-        
+
         return map;
     }
 
@@ -777,7 +778,7 @@
     {
         return level > 0;
     }
-    
+
     @Override
     public boolean haveUniqueNames()
     {
@@ -788,7 +789,7 @@
     {
         return parent == null;
     }
-    
+
     // -------------------------------------------------------------------------
     // Getters and setters
     // -------------------------------------------------------------------------
@@ -821,7 +822,7 @@
     }
 
     @JsonProperty
-    @JsonSerialize( contentUsing = JacksonOrganisationUnitChildrenSerializer.class)
+    @JsonSerialize( contentUsing = JacksonOrganisationUnitChildrenSerializer.class )
     @JsonView( { DetailedView.class } )
     @JacksonXmlElementWrapper( localName = "children", namespace = DxfNamespaces.DXF_2_0 )
     @JacksonXmlProperty( localName = "child", namespace = DxfNamespaces.DXF_2_0 )
@@ -912,6 +913,7 @@
     @JsonProperty
     @JsonView( { DetailedView.class, ExportView.class } )
     @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+    @Property( PropertyType.GEOLOCATION )
     public String getCoordinates()
     {
         return coordinates;
@@ -925,6 +927,7 @@
     @JsonProperty
     @JsonView( { DetailedView.class, ExportView.class } )
     @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+    @Property( PropertyType.URL )
     public String getUrl()
     {
         return url;
@@ -964,6 +967,7 @@
     @JsonProperty
     @JsonView( { DetailedView.class, ExportView.class } )
     @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+    @Property( PropertyType.EMAIL )
     public String getEmail()
     {
         return email;
@@ -977,6 +981,7 @@
     @JsonProperty
     @JsonView( { DetailedView.class, ExportView.class } )
     @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+    @Property( PropertyType.PHONENUMBER )
     public String getPhoneNumber()
     {
         return phoneNumber;
@@ -1047,8 +1052,8 @@
 
     @JsonProperty( value = "attributeValues" )
     @JsonView( { DetailedView.class, ExportView.class } )
-    @JacksonXmlElementWrapper( localName = "attributeValues", namespace = DxfNamespaces.DXF_2_0)
-    @JacksonXmlProperty( localName = "attributeValue", namespace = DxfNamespaces.DXF_2_0)
+    @JacksonXmlElementWrapper( localName = "attributeValues", namespace = DxfNamespaces.DXF_2_0 )
+    @JacksonXmlProperty( localName = "attributeValue", namespace = DxfNamespaces.DXF_2_0 )
     public Set<AttributeValue> getAttributeValues()
     {
         return attributeValues;

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/PropertyType.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/PropertyType.java	2014-12-19 11:18:40 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/PropertyType.java	2014-12-19 12:31:55 +0000
@@ -37,6 +37,7 @@
 @JacksonXmlRootElement( localName = "propertyType", namespace = DxfNamespaces.DXF_2_0 )
 public enum PropertyType
 {
+    IDENTIFIER,
     TEXT,
     NUMBER,
     INTEGER,

=== added directory 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation'
=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/Property.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/Property.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/Property.java	2014-12-19 12:31:55 +0000
@@ -0,0 +1,44 @@
+package org.hisp.dhis.schema.annotation;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+@Target( { ElementType.FIELD, ElementType.METHOD } )
+@Retention( RetentionPolicy.RUNTIME )
+public @interface Property
+{
+    org.hisp.dhis.schema.PropertyType value() default org.hisp.dhis.schema.PropertyType.TEXT;
+}

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/PropertyRange.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/PropertyRange.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/schema/annotation/PropertyRange.java	2014-12-19 12:31:55 +0000
@@ -0,0 +1,57 @@
+package org.hisp.dhis.schema.annotation;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Property annotation for setting min/max range.
+ * <p/>
+ * Behavior changes according to type:
+ * <ul>
+ * <ol>PropertyType.TEXT: min/max length of TEXT</li>
+ * <ol>PropertyType.COLLECTION: min/max size of collection</li>
+ * <ol>PropertyType.NUMBER: min/max values (only integer min/max currently allowed)</li>
+ * <ol>PropertyType.INTEGER: min/max values</li>
+ * </ul>
+ *
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ * @see Property
+ */
+@Target( { ElementType.FIELD, ElementType.METHOD } )
+@Retention( RetentionPolicy.RUNTIME )
+public @interface PropertyRange
+{
+    int min() default 0;
+
+    int max() default Integer.MAX_VALUE;
+}

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java	2014-12-18 19:55:42 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java	2014-12-19 12:31:55 +0000
@@ -46,6 +46,9 @@
 import org.hisp.dhis.dataelement.CategoryOptionGroupSet;
 import org.hisp.dhis.dataelement.DataElementCategory;
 import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.schema.PropertyType;
+import org.hisp.dhis.schema.annotation.Property;
+import org.hisp.dhis.schema.annotation.PropertyRange;
 import org.springframework.util.StringUtils;
 
 import java.util.Collection;
@@ -451,6 +454,8 @@
 
     @JsonProperty
     @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
+    @Property( PropertyType.PASSWORD )
+    @PropertyRange( min = 8, max = 35 )
     public void setPassword( String password )
     {
         this.password = password;