← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 11603: Map generation, impl utility method for generating width and height

 

------------------------------------------------------------
revno: 11603
committer: Lars Helge Øverland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2013-08-07 15:03:17 +0200
message:
  Map generation, impl utility method for generating width and height
added:
  dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java
modified:
  dhis-2/dhis-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.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-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.java'
--- dhis-2/dhis-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.java	2013-07-18 17:16:22 +0000
+++ dhis-2/dhis-services/dhis-service-mapgeneration/src/main/java/org/hisp/dhis/mapgeneration/MapUtils.java	2013-08-07 13:03:17 +0000
@@ -196,6 +196,45 @@
         
         return image;
     }
+    
+    /**
+     * Calcuates the width and height of an two-dimensional area. If width is set,
+     * the width will be used and the height will be calculated. If the height is
+     * set, the height will be used and the width will be calculated. If both width
+     * and height are set: If area is higher than wider, the height will be used
+     * and the width calculated; if the area is wider than higher, the width will
+     * be used and the height calculated.
+     * 
+     * @param maxWidth the maximum width.
+     * @param maxHeight the maxium height.
+     * @param widthToHeightFactor the width to height factor.
+     * @return array where first position holds the width and second the height.
+     * @throws IllegalArgumentException if none of width and height are specified.
+     */
+    public static int[] getWidthHeight( Integer maxWidth, Integer maxHeight, double widthToHeightFactor )
+    {
+        if ( maxWidth == null && maxHeight == null )
+        {
+            throw new IllegalArgumentException( "At least one of width and height must be specified" );
+        }
+        
+        boolean high = widthToHeightFactor < 1d;
+        boolean bothSpanSet = maxWidth != null && maxHeight != null;
+        
+        if ( maxWidth == null || ( bothSpanSet && high ) )
+        {
+            maxWidth = (int) Math.ceil( maxHeight * widthToHeightFactor );
+        }
+                
+        if ( maxHeight == null || ( bothSpanSet && !high ) )
+        {
+            maxHeight = (int) Math.ceil( maxWidth / widthToHeightFactor );
+        }
+                
+        int[] result = { maxWidth, maxHeight };
+        
+        return result;
+    }
 
     /**
      * Creates a feature layer based on a map object.

=== added file 'dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java'
--- dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-mapgeneration/src/test/java/org/hisp/dhis/mapgenerator/MapUtilsTest.java	2013-08-07 13:03:17 +0000
@@ -0,0 +1,61 @@
+package org.hisp.dhis.mapgenerator;
+
+/*
+ * Copyright (c) 2004-2012, 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 org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.hisp.dhis.mapgeneration.MapUtils.*;
+
+public class MapUtilsTest
+{
+    @Test
+    public void testGetWidthHeight()
+    {
+        assertEquals( 150, getWidthHeight( 200, 300, 0.5 )[0] );
+        assertEquals( 300, getWidthHeight( 200, 300, 0.5 )[1] );
+        assertEquals( 200, getWidthHeight( 200, 300, 2 )[0] );
+        assertEquals( 100, getWidthHeight( 200, 300, 2 )[1] );
+
+        assertEquals( 200, getWidthHeight( 200, null, 0.5 )[0] );
+        assertEquals( 400, getWidthHeight( 200, null, 0.5 )[1] );
+        assertEquals( 200, getWidthHeight( 200, null, 2 )[0] );
+        assertEquals( 100, getWidthHeight( 200, null, 2 )[1] );
+
+        assertEquals( 150, getWidthHeight( null, 300, 0.5 )[0] );
+        assertEquals( 300, getWidthHeight( null, 300, 0.5 )[1] );
+        assertEquals( 600, getWidthHeight( null, 300, 2 )[0] );
+        assertEquals( 300, getWidthHeight( null, 300, 2 )[1] );
+    }
+
+    @Test( expected = IllegalArgumentException.class )
+    public void testGetWidthHeightIllegalArgument()
+    {
+        getWidthHeight( null, null, 0.5 );
+    }
+}