Move static factory methods to the utility class

Change-Id: Icf458adf78f51823e4ffa31346595fa9716485bf
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
index f5301f7..431fcd8 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
@@ -98,7 +98,7 @@
 
     @Override
     public Optional<DiscreteResource> parent() {
-        return id.parent().map(x -> Resource.discrete(x).resource());
+        return id.parent().map(x -> Resources.discrete(x).resource());
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
index f1876d5..4ed281c 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
@@ -80,17 +80,17 @@
     public DiscreteResource child(Object child) {
         checkArgument(!(child instanceof Class<?>));
 
-        return Resource.discrete(id.child(child)).resource();
+        return Resources.discrete(id.child(child)).resource();
     }
 
     @Override
     public ContinuousResource child(Class<?> child, double value) {
-        return Resource.continuous(id.child(child)).resource(value);
+        return Resources.continuous(id.child(child)).resource(value);
     }
 
     @Override
     public Optional<DiscreteResource> parent() {
-        return id.parent().map(x -> Resource.discrete(x).resource());
+        return id.parent().map(x -> Resources.discrete(x).resource());
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
index 804dfba..4b83344 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
@@ -50,14 +50,14 @@
     public DiscreteResourceId child(Object child) {
         checkArgument(!(child instanceof Class<?>));
 
-        return Resource.discrete(this, child).id();
+        return Resources.discrete(this, child).id();
     }
 
     @Override
     public ContinuousResourceId child(Class<?> child) {
         checkNotNull(child);
 
-        return Resource.continuous(this, child).id();
+        return Resources.continuous(this, child).id();
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
index 749d87e..c402b42 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
@@ -16,17 +16,10 @@
 package org.onosproject.net.newresource;
 
 import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableList;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * An object that represent a resource in a network.
  * A Resource can represents path-like hierarchical structure with its ID. An ID of resource is
@@ -106,189 +99,4 @@
      * @return the ID of this resource path
      */
     ResourceId id();
-
-    /**
-     * Create a factory for discrete-type with the specified resource ID.
-     *
-     * @param id resource ID
-     * @return {@link DiscreteFactory}
-     */
-    static DiscreteFactory discrete(DiscreteResourceId id) {
-        checkNotNull(id);
-
-        return new DiscreteFactory(id);
-    }
-
-    /**
-     * Creates a factory for discrete-type with the specified parent ID and child.
-     *
-     * @param parent ID of the parent
-     * @param child child
-     * @return {@link DiscreteFactory}
-     */
-    static DiscreteFactory discrete(DiscreteResourceId parent, Object child) {
-        checkNotNull(parent);
-        checkNotNull(child);
-        checkArgument(!(child instanceof Class<?>));
-
-        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
-                .addAll(parent.components())
-                .add(child)
-                .build()));
-    }
-
-    /**
-     * Create a factory for discrete-type with the specified device ID.
-     *
-     * @param device device ID
-     * @return {@link DiscreteFactory}
-     */
-    static DiscreteFactory discrete(DeviceId device) {
-        checkNotNull(device);
-
-        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.of(device)));
-    }
-
-    /**
-     * Create a factory for discrete-type with the specified device ID and components.
-     *
-     * @param device device ID
-     * @param components resource ID components other than the device ID
-     * @return {@link DiscreteFactory}
-     */
-    static DiscreteFactory discrete(DeviceId device, Object... components) {
-        checkNotNull(device);
-        checkNotNull(components);
-
-        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
-                .add(device)
-                .add(components)
-                .build()));
-    }
-
-    /**
-     * Create a factory for discrete-type with the specified device ID, port number and components.
-     *
-     * @param device device ID
-     * @param port port number
-     * @param components resource ID components other than the device ID and port number
-     * @return {@link DiscreteFactory}
-     */
-    static DiscreteFactory discrete(DeviceId device, PortNumber port, Object... components) {
-        checkNotNull(device);
-        checkNotNull(port);
-        checkNotNull(components);
-
-        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
-                .add(device)
-                .add(port)
-                .add(components)
-                .build()));
-    }
-
-    /**
-     * Create a factory for continuous-type with the specified resource ID.
-     *
-     * @param id resource ID
-     * @return {@link ContinuousFactory}
-     */
-    static ContinuousFactory continuous(ContinuousResourceId id) {
-        checkNotNull(id);
-
-        return new ContinuousFactory(id);
-    }
-
-    /**
-     * Creates a factory for continuous-type wit the specified parent ID and child.
-     *
-     * @param parent ID of the parent
-     * @param child child
-     * @return {@link ContinuousFactory}
-     */
-    static ContinuousFactory continuous(DiscreteResourceId parent, Class<?> child) {
-        checkNotNull(parent);
-        checkNotNull(child);
-
-        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
-                .addAll(parent.components()), child));
-    }
-
-    /**
-     * Create a factory for continuous-type with the specified device ID and type.
-     *
-     * @param device device ID
-     * @param cls type of resource the returned factory will create
-     * @return {@link ContinuousFactory}
-     */
-    static ContinuousFactory continuous(DeviceId device, Class<?> cls) {
-        checkNotNull(device);
-        checkNotNull(cls);
-
-        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder().add(device), cls));
-    }
-
-    /**
-     * Create a factory for continuous-type with the specified device ID and components.
-     * The last element of the components must be a {@link Class} instance. Otherwise,
-     * an {@link IllegalArgumentException} is thrown.
-     *
-     * @param device device ID
-     * @param components resource ID components other than the device ID.
-     * @return {@link ContinuousFactory}
-     */
-    static ContinuousFactory continuous(DeviceId device, Object... components) {
-        checkNotNull(device);
-        checkNotNull(components);
-        checkArgument(components.length > 1);
-
-        Object last = components[components.length - 1];
-        checkArgument(last instanceof Class<?>);
-
-        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
-                .add(device)
-                .add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last));
-    }
-
-    /**
-     * Create a factory for continuous-type with the specified device ID, port number and type.
-     *
-     * @param device device ID
-     * @param port port number
-     * @param cls type of resource the returned factory will create
-     * @return {@link ContinuousFactory}
-     */
-    static ContinuousFactory continuous(DeviceId device, PortNumber port, Class<?> cls) {
-        checkNotNull(device);
-        checkNotNull(port);
-        checkNotNull(cls);
-
-        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
-                .add(device)
-                .add(port), cls));
-    }
-
-    /**
-     * Create a factory for continuous-type with the specified device ID and components.
-     * The last element of the components must be a {@link Class} instance. Otherwise,
-     * an {@link IllegalArgumentException} is thrown.
-     *
-     * @param device device ID
-     * @param port port number
-     * @param components resource ID components other than the device ID and port number.
-     * @return {@link ContinuousFactory}
-     */
-    static ContinuousFactory continuous(DeviceId device, PortNumber port, Object... components) {
-        checkNotNull(device);
-        checkNotNull(port);
-        checkNotNull(components);
-        checkArgument(components.length > 1);
-
-        Object last = components[components.length - 1];
-        checkArgument(last instanceof Class<?>);
-
-        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
-                .add(device)
-                .add(port)
-                .add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last));
-    }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/Resources.java b/core/api/src/main/java/org/onosproject/net/newresource/Resources.java
new file mode 100644
index 0000000..13b226e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/newresource/Resources.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * 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 org.onosproject.net.newresource;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+
+import java.util.Arrays;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Utility class for resource related classes.
+ */
+@Beta
+public final class Resources {
+    // public construction is prohibited
+    private Resources() {}
+
+    /**
+     * Create a factory for discrete-type with the specified resource ID.
+     *
+     * @param id resource ID
+     * @return {@link DiscreteFactory}
+     */
+    public static DiscreteFactory discrete(DiscreteResourceId id) {
+        checkNotNull(id);
+
+        return new DiscreteFactory(id);
+    }
+
+    /**
+     * Creates a factory for discrete-type with the specified parent ID and child.
+     *
+     * @param parent ID of the parent
+     * @param child child
+     * @return {@link DiscreteFactory}
+     */
+    public static DiscreteFactory discrete(DiscreteResourceId parent, Object child) {
+        checkNotNull(parent);
+        checkNotNull(child);
+        checkArgument(!(child instanceof Class<?>));
+
+        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
+                .addAll(parent.components())
+                .add(child)
+                .build()));
+    }
+
+    /**
+     * Create a factory for discrete-type with the specified device ID.
+     *
+     * @param device device ID
+     * @return {@link DiscreteFactory}
+     */
+    public static DiscreteFactory discrete(DeviceId device) {
+        checkNotNull(device);
+
+        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.of(device)));
+    }
+
+    /**
+     * Create a factory for discrete-type with the specified device ID and components.
+     *
+     * @param device device ID
+     * @param components resource ID components other than the device ID
+     * @return {@link DiscreteFactory}
+     */
+    public static DiscreteFactory discrete(DeviceId device, Object... components) {
+        checkNotNull(device);
+        checkNotNull(components);
+
+        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
+                .add(device)
+                .add(components)
+                .build()));
+    }
+
+    /**
+     * Create a factory for discrete-type with the specified device ID, port number and components.
+     *
+     * @param device device ID
+     * @param port port number
+     * @param components resource ID components other than the device ID and port number
+     * @return {@link DiscreteFactory}
+     */
+    public static DiscreteFactory discrete(DeviceId device, PortNumber port, Object... components) {
+        checkNotNull(device);
+        checkNotNull(port);
+        checkNotNull(components);
+
+        return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
+                .add(device)
+                .add(port)
+                .add(components)
+                .build()));
+    }
+
+    /**
+     * Create a factory for continuous-type with the specified resource ID.
+     *
+     * @param id resource ID
+     * @return {@link ContinuousFactory}
+     */
+    public static ContinuousFactory continuous(ContinuousResourceId id) {
+        checkNotNull(id);
+
+        return new ContinuousFactory(id);
+    }
+
+    /**
+     * Creates a factory for continuous-type wit the specified parent ID and child.
+     *
+     * @param parent ID of the parent
+     * @param child child
+     * @return {@link ContinuousFactory}
+     */
+    public static ContinuousFactory continuous(DiscreteResourceId parent, Class<?> child) {
+        checkNotNull(parent);
+        checkNotNull(child);
+
+        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
+                .addAll(parent.components()), child));
+    }
+
+    /**
+     * Create a factory for continuous-type with the specified device ID and type.
+     *
+     * @param device device ID
+     * @param cls type of resource the returned factory will create
+     * @return {@link ContinuousFactory}
+     */
+    public static ContinuousFactory continuous(DeviceId device, Class<?> cls) {
+        checkNotNull(device);
+        checkNotNull(cls);
+
+        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder().add(device), cls));
+    }
+
+    /**
+     * Create a factory for continuous-type with the specified device ID and components.
+     * The last element of the components must be a {@link Class} instance. Otherwise,
+     * an {@link IllegalArgumentException} is thrown.
+     *
+     * @param device device ID
+     * @param components resource ID components other than the device ID.
+     * @return {@link ContinuousFactory}
+     */
+    public static ContinuousFactory continuous(DeviceId device, Object... components) {
+        checkNotNull(device);
+        checkNotNull(components);
+        checkArgument(components.length > 1);
+
+        Object last = components[components.length - 1];
+        checkArgument(last instanceof Class<?>);
+
+        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
+                .add(device)
+                .add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last));
+    }
+
+    /**
+     * Create a factory for continuous-type with the specified device ID, port number and type.
+     *
+     * @param device device ID
+     * @param port port number
+     * @param cls type of resource the returned factory will create
+     * @return {@link ContinuousFactory}
+     */
+    public static ContinuousFactory continuous(DeviceId device, PortNumber port, Class<?> cls) {
+        checkNotNull(device);
+        checkNotNull(port);
+        checkNotNull(cls);
+
+        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
+                .add(device)
+                .add(port), cls));
+    }
+
+    /**
+     * Create a factory for continuous-type with the specified device ID and components.
+     * The last element of the components must be a {@link Class} instance. Otherwise,
+     * an {@link IllegalArgumentException} is thrown.
+     *
+     * @param device device ID
+     * @param port port number
+     * @param components resource ID components other than the device ID and port number.
+     * @return {@link ContinuousFactory}
+     */
+    public static ContinuousFactory continuous(DeviceId device, PortNumber port, Object... components) {
+        checkNotNull(device);
+        checkNotNull(port);
+        checkNotNull(components);
+        checkArgument(components.length > 1);
+
+        Object last = components[components.length - 1];
+        checkArgument(last instanceof Class<?>);
+
+        return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
+                .add(device)
+                .add(port)
+                .add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last));
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java
index c8c1b17..4a5a450 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java
@@ -32,9 +32,9 @@
 
     @Test
     public void testEquals() {
-        ResourceAllocation alloc1 = new ResourceAllocation(Resource.discrete(D1, P1, VLAN1).resource(), IID1);
-        ResourceAllocation sameAsAlloc1 = new ResourceAllocation(Resource.discrete(D1, P1, VLAN1).resource(), IID1);
-        ResourceAllocation alloc2 = new ResourceAllocation(Resource.discrete(D2, P1, VLAN1).resource(), IID1);
+        ResourceAllocation alloc1 = new ResourceAllocation(Resources.discrete(D1, P1, VLAN1).resource(), IID1);
+        ResourceAllocation sameAsAlloc1 = new ResourceAllocation(Resources.discrete(D1, P1, VLAN1).resource(), IID1);
+        ResourceAllocation alloc2 = new ResourceAllocation(Resources.discrete(D2, P1, VLAN1).resource(), IID1);
 
         new EqualsTester()
                 .addEqualityGroup(alloc1, sameAsAlloc1)
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ResourceIdTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ResourceIdTest.java
index 1d2257b..aa97892 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ResourceIdTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ResourceIdTest.java
@@ -32,20 +32,20 @@
 
     @Test
     public void testDiscreteToString() {
-        ResourceId resource = Resource.discrete(D1, P1).id();
+        ResourceId resource = Resources.discrete(D1, P1).id();
 
         assertThat(resource.toString(), is(Arrays.asList(D1, P1).toString()));
     }
 
     @Test
     public void testContinuousToString() {
-        ResourceId resource = Resource.continuous(D1, P1, Bandwidth.class).id();
+        ResourceId resource = Resources.continuous(D1, P1, Bandwidth.class).id();
 
         assertThat(resource.toString(), is(Arrays.asList(D1, P1, Bandwidth.class.getSimpleName()).toString()));
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void testInitWithNonClassInstance() {
-        Resource.continuous(D1, P1, BW1).id();
+        Resources.continuous(D1, P1, BW1).id();
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java
index a14b947..59f327f 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ResourceTest.java
@@ -39,11 +39,11 @@
 
     @Test
     public void testEquals() {
-        Resource resource1 = Resource.discrete(D1, P1, VLAN1).resource();
-        Resource sameAsResource1 = Resource.discrete(D1, P1, VLAN1).resource();
-        Resource resource2 = Resource.discrete(D2, P1, VLAN1).resource();
-        Resource resource3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
-        Resource sameAsResource3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
+        Resource resource1 = Resources.discrete(D1, P1, VLAN1).resource();
+        Resource sameAsResource1 = Resources.discrete(D1, P1, VLAN1).resource();
+        Resource resource2 = Resources.discrete(D2, P1, VLAN1).resource();
+        Resource resource3 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
+        Resource sameAsResource3 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
 
         new EqualsTester()
                 .addEqualityGroup(resource1, sameAsResource1)
@@ -54,19 +54,19 @@
 
     @Test
     public void testComponents() {
-        Resource port = Resource.discrete(D1, P1).resource();
+        Resource port = Resources.discrete(D1, P1).resource();
 
         assertThat(port.components(), contains(D1, P1));
     }
 
     @Test
     public void testIdEquality() {
-        ResourceId id1 = Resource.discrete(D1, P1, VLAN1).id();
-        ResourceId sameAsId1 = Resource.discrete(D1, P1, VLAN1).id();
-        ResourceId id2 = Resource.discrete(D2, P1, VLAN1).id();
-        ResourceId id3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps()).id();
+        ResourceId id1 = Resources.discrete(D1, P1, VLAN1).id();
+        ResourceId sameAsId1 = Resources.discrete(D1, P1, VLAN1).id();
+        ResourceId id2 = Resources.discrete(D2, P1, VLAN1).id();
+        ResourceId id3 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps()).id();
         // intentionally set a different value
-        ResourceId sameAsId3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW2.bps()).id();
+        ResourceId sameAsId3 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW2.bps()).id();
 
         new EqualsTester()
                 .addEqualityGroup(id1, sameAsId1)
@@ -76,30 +76,30 @@
 
     @Test
     public void testChild() {
-        Resource r1 = Resource.discrete(D1).resource().child(P1);
-        Resource sameAsR2 = Resource.discrete(D1, P1).resource();
+        Resource r1 = Resources.discrete(D1).resource().child(P1);
+        Resource sameAsR2 = Resources.discrete(D1, P1).resource();
 
         assertThat(r1, is(sameAsR2));
     }
 
     @Test
     public void testThereIsParent() {
-        Resource resource = Resource.discrete(D1, P1, VLAN1).resource();
-        Resource parent = Resource.discrete(D1, P1).resource();
+        Resource resource = Resources.discrete(D1, P1, VLAN1).resource();
+        Resource parent = Resources.discrete(D1, P1).resource();
 
         assertThat(resource.parent(), is(Optional.of(parent)));
     }
 
     @Test
     public void testNoParent() {
-        Resource resource = Resource.discrete(D1).resource();
+        Resource resource = Resources.discrete(D1).resource();
 
         assertThat(resource.parent(), is(Optional.of(Resource.ROOT)));
     }
 
     @Test
     public void testBase() {
-        Resource resource = Resource.discrete(D1).resource();
+        Resource resource = Resources.discrete(D1).resource();
 
         DeviceId child = (DeviceId) resource.last();
         assertThat(child, is(D1));
@@ -107,7 +107,7 @@
 
     @Test
     public void testVolumeOfDiscrete() {
-        Resource resource = Resource.discrete(D1).resource();
+        Resource resource = Resources.discrete(D1).resource();
 
         DeviceId volume = resource.volume();
         assertThat(volume, is(D1));
@@ -115,7 +115,7 @@
 
     @Test
     public void testVolumeOfContinuous() {
-        Resource resource = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
+        Resource resource = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
 
         double volume = resource.volume();
         assertThat(volume, is(BW1.bps()));