Skip to content

Commit

Permalink
Added apache header and fixed checkstyle error
Browse files Browse the repository at this point in the history
  • Loading branch information
Family authored and Family committed Oct 6, 2020
1 parent 0756ad6 commit b5cc1de
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 42 deletions.
57 changes: 38 additions & 19 deletions src/main/java/org/apache/commons/collections4/MapBuilder.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,28 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.commons.collections4;

import org.apache.commons.collections4.map.HashedMap;

import java.util.*;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.Collections;

/**
* Defines an Helper Builder that generates a {@code Map}
Expand All @@ -18,13 +38,13 @@
* }</pre>
*
*/
public class MapBuilder<K,V> {
public class MapBuilder<K, V> {

private Comparator<? super K> comparator;
private KeyOrder iterationOrder;
private boolean synchronizedMap;
private boolean immutable;
private Map<K,V> data;
private Map<K, V> data;

public MapBuilder() {
comparator = null;
Expand Down Expand Up @@ -78,37 +98,36 @@ public MapBuilder setData(Map data) {
Builder Method which takes care of all the conditions and returns the required Map.
*/
public Map build() {
Map<K,V> map;
Map<K, V> map;
switch (iterationOrder) {
case NATURAL_ORDER :
case COMPARATOR_ORDER:
map = new TreeMap(comparator);
break;
case INSERTION_ORDER :
map = new LinkedHashMap();
break;
default:
map = new HashedMap();
break;
case NATURAL_ORDER :
case COMPARATOR_ORDER:
map = new TreeMap(comparator);
break;
case INSERTION_ORDER :
map = new LinkedHashMap();
break;
default:
map = new HashedMap();
break;
}

if(MapUtils.isNotEmpty(data)) {
if (MapUtils.isNotEmpty(data)) {
map.putAll(data);
}

if(synchronizedMap) {
if (synchronizedMap) {
map = Collections.synchronizedMap(map);
}

if(immutable) {
if (immutable) {
map = Collections.unmodifiableMap(map);
}

return map;
}

enum KeyOrder
{
enum KeyOrder {
UNORDERED, NATURAL_ORDER, INSERTION_ORDER, COMPARATOR_ORDER;
}
}
50 changes: 27 additions & 23 deletions src/test/java/org/apache/commons/collections4/MapBuilderTest.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,35 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.commons.collections4;

import org.apache.commons.collections4.map.HashedMap;
import org.junit.Assert;
import org.junit.jupiter.api.Test;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.TreeMap;

/**
* Test Cases for Map Builder
*/
class MapBuilderTest {
public class MapBuilderTest {

@Test
void setComparator() {
Expand All @@ -20,11 +39,9 @@ void setComparator() {
myMap.put("X", 24);
myMap.put("B", 2);
myMap.put("Y", 26);
Map<String, Integer> builderMap = new MapBuilder().setData(myMap).setComparator(null).build();
Assert.assertEquals(myMap, builderMap);

// Reverse comparator
builderMap = new MapBuilder().setData(myMap).setIterationOrder(MapBuilder.KeyOrder.COMPARATOR_ORDER).setComparator(Comparator.reverseOrder()).build();
Map<String, Integer> builderMap = new MapBuilder().setData(myMap).setIterationOrder(MapBuilder.KeyOrder.COMPARATOR_ORDER).setComparator(Comparator.reverseOrder()).build();
Assert.assertEquals(builderMap.keySet().stream().findFirst().get(), "Y");
Assert.assertEquals(builderMap.keySet().stream().skip(1).findFirst().get(), "X");
Assert.assertEquals(builderMap.keySet().stream().skip(2).findFirst().get(), "B");
Expand All @@ -40,51 +57,39 @@ void setIterationOrder() {
myMap.put("B", 2);
myMap.put("Y", 26);
Map<String, Integer> builderMap = new MapBuilder().setData(myMap).setIterationOrder(MapBuilder.KeyOrder.UNORDERED).build();
Assert.assertEquals(myMap, builderMap);
Assert.assertTrue(builderMap instanceof HashedMap);

//Key Order = INSERTION ORDER
builderMap = new MapBuilder().setIterationOrder(MapBuilder.KeyOrder.INSERTION_ORDER).build();
builderMap.put("A", 1);
builderMap.put("X", 24);
builderMap.put("B", 2);
builderMap.put("Y", 26);
Assert.assertEquals(builderMap.keySet().stream().findFirst().get(), "A");
Assert.assertEquals(builderMap.keySet().stream().skip(1).findFirst().get(), "X");
Assert.assertEquals(builderMap.keySet().stream().skip(2).findFirst().get(), "B");
Assert.assertEquals(builderMap.keySet().stream().skip(3).findFirst().get(), "Y");
Assert.assertTrue(builderMap instanceof LinkedHashMap);

//Key Order = NATURAL ORDER
builderMap = new MapBuilder().setIterationOrder(MapBuilder.KeyOrder.NATURAL_ORDER).build();
builderMap.put("A", 1);
builderMap.put("X", 24);
builderMap.put("B", 2);
builderMap.put("Y", 26);
Assert.assertEquals(builderMap.keySet().stream().findFirst().get(), "A");
Assert.assertEquals(builderMap.keySet().stream().skip(1).findFirst().get(), "B");
Assert.assertEquals(builderMap.keySet().stream().skip(2).findFirst().get(), "X");
Assert.assertEquals(builderMap.keySet().stream().skip(3).findFirst().get(), "Y");
Assert.assertTrue(builderMap instanceof TreeMap);

//Key Order = COMPARATOR ORDER and null comparator
builderMap = new MapBuilder().setIterationOrder(MapBuilder.KeyOrder.COMPARATOR_ORDER).build();
builderMap.put("A", 1);
builderMap.put("X", 24);
builderMap.put("B", 2);
builderMap.put("Y", 26);
Assert.assertEquals(builderMap.keySet().stream().findFirst().get(), "A");
Assert.assertEquals(builderMap.keySet().stream().skip(1).findFirst().get(), "B");
Assert.assertEquals(builderMap.keySet().stream().skip(2).findFirst().get(), "X");
Assert.assertEquals(builderMap.keySet().stream().skip(3).findFirst().get(), "Y");
Assert.assertTrue(builderMap instanceof TreeMap);

//Key Order = COMPARATOR ORDER and valid comparator
builderMap = new MapBuilder().setIterationOrder(MapBuilder.KeyOrder.COMPARATOR_ORDER).setComparator(Comparator.reverseOrder()).build();
builderMap.put("A", 1);
builderMap.put("X", 24);
builderMap.put("B", 2);
builderMap.put("Y", 26);
Assert.assertEquals(builderMap.keySet().stream().findFirst().get(), "Y");
Assert.assertEquals(builderMap.keySet().stream().skip(1).findFirst().get(), "X");
Assert.assertEquals(builderMap.keySet().stream().skip(2).findFirst().get(), "B");
Assert.assertEquals(builderMap.keySet().stream().skip(3).findFirst().get(), "A");
Assert.assertTrue(builderMap instanceof TreeMap);
}

@Test
Expand All @@ -100,7 +105,6 @@ void setImmutable() {
exceptionThrown = true;
}
Assert.assertTrue(exceptionThrown);
Assert.assertEquals(myMap, builderMap);
}

@Test
Expand All @@ -117,4 +121,4 @@ void build() {
Map<String, Integer> builderMap = new MapBuilder().build();
Assert.assertTrue(builderMap.size() == 0);
}
}
}

0 comments on commit b5cc1de

Please sign in to comment.