Moving LabelResourceManager to incubator

Breaking apart resource package into {device, link, label}
Refactored cluster serializers so they are visible

Change-Id: I71051bcd5e790ae6abeb154bf58286e584c32858
diff --git a/core/api/src/main/java/org/onosproject/net/intent/Constraint.java b/core/api/src/main/java/org/onosproject/net/intent/Constraint.java
index ca2acdc..ee28f6e 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/Constraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/Constraint.java
@@ -17,7 +17,7 @@
 
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 /**
  * Representation of a connectivity constraint capable of evaluating a link
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java b/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java
index 4f0a55d..da39184 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.net.intent;
 
-import org.onosproject.net.resource.LinkResourceAllocations;
+import org.onosproject.net.resource.link.LinkResourceAllocations;
 
 import java.util.List;
 import java.util.Set;
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java
index 6733296..36e6157 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java
@@ -17,7 +17,7 @@
 
 import com.google.common.base.MoreObjects;
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java
index 26ba61b..df709f9 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java
@@ -18,7 +18,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 import org.onosproject.net.intent.Constraint;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java
index be75880..b4518d4 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java
@@ -16,9 +16,9 @@
 package org.onosproject.net.intent.constraint;
 
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.BandwidthResource;
-import org.onosproject.net.resource.BandwidthResourceRequest;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.BandwidthResource;
+import org.onosproject.net.resource.link.BandwidthResourceRequest;
+import org.onosproject.net.resource.link.LinkResourceService;
 import org.onosproject.net.resource.ResourceRequest;
 import org.onosproject.net.resource.ResourceType;
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java
index 1a46754..02d4a42 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java
@@ -18,7 +18,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 import org.onosproject.net.intent.Constraint;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 /**
  * Abstract base class for various constraints that evaluate link viability
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java
index f9bf42e..a73e375 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java
@@ -16,8 +16,8 @@
 package org.onosproject.net.intent.constraint;
 
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.LambdaResource;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LambdaResource;
+import org.onosproject.net.resource.link.LinkResourceService;
 import org.onosproject.net.resource.ResourceRequest;
 import org.onosproject.net.resource.ResourceType;
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java
index c3f5488..6b47e83 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java
@@ -19,7 +19,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 import org.onosproject.net.intent.Constraint;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.time.Duration;
 import java.time.temporal.ChronoUnit;
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java
index 21048cf..590715b 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java
@@ -17,7 +17,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Objects;
 import java.util.Set;
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java
index 9f92a39..24ef191 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java
@@ -19,7 +19,7 @@
 import com.google.common.collect.ImmutableSet;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Collections;
 import java.util.Objects;
diff --git a/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java b/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java
index 49a52ec..579e44d 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java
@@ -21,7 +21,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
 import org.onosproject.net.intent.Constraint;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Collections;
 import java.util.LinkedList;
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DefaultLabelResource.java b/core/api/src/main/java/org/onosproject/net/resource/DefaultLabelResource.java
deleted file mode 100644
index 41651de..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/DefaultLabelResource.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.onosproject.net.resource;
-
-import java.util.Objects;
-
-import org.onosproject.net.Annotations;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.provider.ProviderId;
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * the implementation of a label resource of a device.
- */
-public final class DefaultLabelResource implements LabelResource {
-
-    private DeviceId deviceId;
-
-    private LabelResourceId labelResourceId;
-
-    /**
-     * Initialize a label resource object.
-     * @param deviceId device identifier
-     * @param labelResourceId label resource id
-     */
-    public DefaultLabelResource(String deviceId, long labelResourceId) {
-        this.deviceId = DeviceId.deviceId(deviceId);
-        this.labelResourceId = LabelResourceId.labelResourceId(labelResourceId);
-    }
-
-    /**
-     * Initialize a label resource object.
-     * @param deviceId device identifier
-     * @param labelResourceId label resource id
-     */
-    public DefaultLabelResource(DeviceId deviceId,
-                                LabelResourceId labelResourceId) {
-        this.deviceId = deviceId;
-        this.labelResourceId = labelResourceId;
-    }
-
-    @Override
-    public DeviceId deviceId() {
-        return deviceId;
-    }
-
-    @Override
-    public LabelResourceId labelResourceId() {
-        return labelResourceId;
-    }
-
-    @Override
-    public Annotations annotations() {
-        return null;
-    }
-
-    @Override
-    public ProviderId providerId() {
-        return null;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(deviceId, labelResourceId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof DefaultLabelResource) {
-            DefaultLabelResource that = (DefaultLabelResource) obj;
-            return Objects.equals(this.deviceId, that.deviceId)
-                    && Objects.equals(this.labelResourceId,
-                                      that.labelResourceId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return toStringHelper(this).add("deviceId", deviceId)
-                .add("labelResourceId", labelResourceId).toString();
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java
deleted file mode 100644
index eac1d81..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.net.Annotated;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.NetworkResource;
-import org.onosproject.net.Provided;
-
-/**
- * Representation of label resource.
- */
-public interface LabelResource extends Annotated, Provided, NetworkResource {
-    /**
-     * Returns device id.
-     * @return DeviceId
-     */
-    DeviceId deviceId();
-
-    /**
-     * Returns labelResource Id.
-     * @return LabelResourceId
-     */
-    LabelResourceId labelResourceId();
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceAdminService.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceAdminService.java
deleted file mode 100644
index 8d29500..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceAdminService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.net.DeviceId;
-
-/**
- * Service for managing label resource.
- */
-public interface LabelResourceAdminService {
-    /**
-     * Creates the only label resource of some device id from begin label to end
-     * label.
-     *
-     * @param deviceId device identifier
-     * @param beginLabel represents for the first label id in the range of label
-     *            pool
-     * @param endLabel represents for the last label id in the range of label
-     *            pool
-     * @return success or fail
-     */
-    boolean createDevicePool(DeviceId deviceId, LabelResourceId beginLabel,
-                             LabelResourceId endLabel);
-
-    /**
-     * Creates the only global label resource pool.
-     *
-     * @param beginLabel represents for the first label id in the range of label
-     *            pool
-     * @param endLabel represents for the last label id in the range of label
-     *            pool
-     * @return success or fail
-     */
-    boolean createGlobalPool(LabelResourceId beginLabel,
-                             LabelResourceId endLabel);
-
-    /**
-     * Destroys a label resource pool of a specific device id.
-     *
-     * @param deviceId device identifier
-     * @return success or fail
-     */
-    boolean destroyDevicePool(DeviceId deviceId);
-
-    /**
-     * Destroys the global label resource pool.
-     *
-     * @return success or fail
-     */
-    boolean destroyGlobalPool();
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceDelegate.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceDelegate.java
deleted file mode 100644
index c8ff44f..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceDelegate.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.store.StoreDelegate;
-/**
- * Label resource store delegate.
- */
-public interface LabelResourceDelegate extends StoreDelegate<LabelResourceEvent> {
-
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceEvent.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceEvent.java
deleted file mode 100644
index 93f1d19..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.event.AbstractEvent;
-
-/**
- * Describes label resource event.
- */
-public final class LabelResourceEvent
-        extends AbstractEvent<LabelResourceEvent.Type, LabelResourcePool> {
-
-    /**
-     * Type of label resource event.
-     */
-    public enum Type {
-        /**
-         * Signifies that a new pool has been administratively created.
-         */
-        POOL_CREATED,
-        /**
-         * Signifies that a new pool has been administratively destroyed.
-         */
-        POOL_DESTROYED,
-        /**
-         * Signifies that a new pool has been administratively changed.
-         */
-        POOL_CAPACITY_CHANGED
-    }
-
-    /**
-     * Creates an event of a given type and the given LabelResourcePool.
-     *
-     * @param type event type
-     * @param subject pool
-     */
-    public LabelResourceEvent(Type type, LabelResourcePool subject) {
-        super(type, subject);
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceId.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceId.java
deleted file mode 100644
index f23ad6d..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceId.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.onosproject.net.resource;
-
-import java.util.Objects;
-
-/**
- * Representation of a label.
- */
-public final class LabelResourceId implements ResourceId {
-
-    private long labelId;
-
-    public static LabelResourceId labelResourceId(long labelResourceId) {
-        return new LabelResourceId(labelResourceId);
-    }
-
-    // Public construction is prohibited
-    private LabelResourceId(long labelId) {
-        this.labelId = labelId;
-    }
-
-    public long labelId() {
-        return labelId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(labelId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof LabelResourceId) {
-            LabelResourceId that = (LabelResourceId) obj;
-            return Objects.equals(this.labelId, that.labelId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return String.valueOf(this.labelId);
-    }
-
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceListener.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceListener.java
deleted file mode 100644
index 3aee8d8..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.event.EventListener;
-/**
- * Entity capable of receiving label resource related events.
- */
-public interface LabelResourceListener extends EventListener<LabelResourceEvent> {
-
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourcePool.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourcePool.java
deleted file mode 100644
index 02ff9ee..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourcePool.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.onosproject.net.resource;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import java.util.Collections;
-import java.util.Objects;
-import java.util.Set;
-
-import org.onosproject.net.DeviceId;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Abstraction of the capacity of device label resource or global label
- * resource. it's contiguous range of label resource.when a application apply
- * some labels of some device,first catch from Set that store
- * available labels,if the size of the Set less than the apply number,then get
- * labels by calculating with three attributes, beginLabel,endLabel and
- * currentUsedMaxLabelId
- */
-public class LabelResourcePool {
-
-    private final DeviceId deviceId;
-    private final LabelResourceId beginLabel;
-    private final LabelResourceId endLabel;
-    private final long totalNum; // capacity of label resource pool
-    private final long usedNum; // have used label number
-    private final LabelResourceId currentUsedMaxLabelId; // the maximal label
-                                                        // number id
-    private ImmutableSet<LabelResource> releaseLabelId; // Set of released label
-
-    /**
-     * Creates a pool by device id,begin label id,end label id.
-     *
-     * @param deviceId device identifier
-     * @param beginLabel represents for the first label id in the range of label
-     *            resource pool
-     * @param endLabel represents for the last label id in the range of label
-     *            resource pool
-     */
-    public LabelResourcePool(String deviceId, long beginLabel, long endLabel) {
-        this(deviceId, beginLabel, endLabel, endLabel - beginLabel + 1, 0L,
-             beginLabel, ImmutableSet.copyOf(Collections.emptySet()));
-    }
-
-    /**
-     * Creates a pool by device id,begin label id,end label id.
-     * used to update a pool in the store.
-     * @param deviceId device identifier
-     * @param beginLabel represents for the first label id in the range of label
-     *            resource pool
-     * @param endLabel represents for the last label id in the range of label
-     *            resource pool
-     * @param totalNum capacity of label resource pool
-     * @param usedNum have used label number
-     * @param currentUsedMaxLabelId the maximal label number id
-     * @param releaseLabelId Set of released label
-     */
-    public LabelResourcePool(String deviceId, long beginLabel, long endLabel,
-                             long totalNum, long usedNum,
-                             long currentUsedMaxLabelId,
-                             ImmutableSet<LabelResource> releaseLabelId) {
-        checkArgument(endLabel >= beginLabel,
-                      "endLabel %s must be greater than or equal to beginLabel %s",
-                      endLabel, beginLabel);
-        this.deviceId = DeviceId.deviceId(deviceId);
-        this.beginLabel = LabelResourceId.labelResourceId(beginLabel);
-        this.endLabel = LabelResourceId.labelResourceId(endLabel);
-        this.totalNum = totalNum;
-        this.usedNum = usedNum;
-        this.currentUsedMaxLabelId = LabelResourceId
-                .labelResourceId(currentUsedMaxLabelId);
-        this.releaseLabelId = releaseLabelId;
-    }
-
-    /**
-     * Returns a device id.
-     *
-     * @return DeviceId
-     */
-    public DeviceId deviceId() {
-        return deviceId;
-    }
-
-    /**
-     * Returns a begin Label id.
-     *
-     * @return begin Label id
-     */
-    public LabelResourceId beginLabel() {
-        return beginLabel;
-    }
-
-    /**
-     * Returns a end Label id.
-     *
-     * @return end Label id
-     */
-    public LabelResourceId endLabel() {
-        return endLabel;
-    }
-
-    /**
-     * Returns a begin Label id.
-     *
-     * @return current Used Maximal Label Id
-     */
-    public LabelResourceId currentUsedMaxLabelId() {
-        return currentUsedMaxLabelId;
-    }
-
-    /**
-     * Returns total number.
-     *
-     * @return the total label number
-     */
-    public long totalNum() {
-        return totalNum;
-    }
-
-    /**
-     * Returns used number.
-     *
-     * @return the used label number
-     */
-    public long usedNum() {
-        return usedNum;
-    }
-
-    /**
-     * Returns the Set of released label before.
-     *
-     * @return the Set of LabelResource
-     */
-    public Set<LabelResource> releaseLabelId() {
-        return releaseLabelId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(this.deviceId, this.beginLabel, this.endLabel,
-                            this.totalNum, this.usedNum,
-                            this.currentUsedMaxLabelId, this.releaseLabelId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof LabelResourcePool) {
-            LabelResourcePool that = (LabelResourcePool) obj;
-            return Objects.equals(this.deviceId, that.deviceId)
-                    && Objects.equals(this.beginLabel, that.beginLabel)
-                    && Objects.equals(this.endLabel, that.endLabel)
-                    && Objects.equals(this.totalNum, that.totalNum)
-                    && Objects.equals(this.usedNum, that.usedNum)
-                    && Objects.equals(this.currentUsedMaxLabelId,
-                                      that.currentUsedMaxLabelId)
-                    && Objects.equals(this.releaseLabelId, that.releaseLabelId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        // TODO Auto-generated method stub
-        return MoreObjects.toStringHelper(this).add("deviceId", this.deviceId)
-                .add("beginLabel", this.beginLabel)
-                .add("endLabel", this.endLabel).add("totalNum", this.totalNum)
-                .add("usedNum", this.usedNum)
-                .add("currentUsedMaxLabelId", this.currentUsedMaxLabelId)
-                .add("releaseLabelId", this.releaseLabelId).toString();
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProvider.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProvider.java
deleted file mode 100644
index 5c5183a..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProvider.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.net.provider.Provider;
-/**
- * Abstraction of an entity providing information about label resource
- * to the core.
- */
-public interface LabelResourceProvider extends Provider {
-
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProviderRegistry.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProviderRegistry.java
deleted file mode 100644
index 689ff4e..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProviderRegistry.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.net.provider.ProviderRegistry;
-/**
- * Abstraction of an label resource provider registry.
- */
-public interface LabelResourceProviderRegistry
-        extends ProviderRegistry<LabelResourceProvider, LabelResourceProviderService> {
-
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProviderService.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProviderService.java
deleted file mode 100644
index 6e2fa5b..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceProviderService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.provider.ProviderService;
-
-/**
- * Means for injecting label information into the core.
- */
-public interface LabelResourceProviderService extends ProviderService<LabelResourceProvider> {
-
-    /**
-     * Signals that a device label resource pool has been detected.
-     * @param deviceId device identifier
-     * @param beginLabel the begin label number of resource
-     * @param endLabel the end label number of resource
-     */
-    void deviceLabelResourcePoolDetected(DeviceId deviceId,
-                                         LabelResourceId beginLabel,
-                                         LabelResourceId endLabel);
-
-    /**
-     * Signals that an label resource pool has been destroyed.
-     * @param deviceId device identifier
-     */
-    void deviceLabelResourcePoolDestroyed(DeviceId deviceId);
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceRequest.java
deleted file mode 100644
index f28e33b..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceRequest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.onosproject.net.resource;
-
-import java.util.Collection;
-import java.util.Objects;
-
-import org.onosproject.net.DeviceId;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableSet;
-/**
- * Represents for a label request.
- */
-public class LabelResourceRequest {
-
-    private final DeviceId deviceId;
-    private final Type type;
-    private final long applyNum;
-    private ImmutableSet<LabelResource> releaseCollection;
-
-    /**
-     * Creates LabelResourceRequest object.
-     * @param deviceId device identifier
-     * @param type request type
-     * @param applyNum apply the number of labels
-     * @param releaseCollection Set of released label
-     */
-    public LabelResourceRequest(DeviceId deviceId,
-                                Type type,
-                                long applyNum,
-                                ImmutableSet<LabelResource> releaseCollection) {
-        this.deviceId = deviceId;
-        this.type = type;
-        this.applyNum = applyNum;
-        this.releaseCollection = releaseCollection;
-    }
-    /**
-     * Returns a device id.
-     * @return DeviceId
-     */
-    public DeviceId deviceId() {
-        return deviceId;
-    }
-
-    /**
-     * Returns request type.
-     * @return Type
-     */
-    public Type type() {
-        return type;
-    }
-
-    /**
-     * Returns apply label number.
-     * @return label number
-     */
-    public long applyNum() {
-        return applyNum;
-    }
-
-    /**
-     * Returns the collection of release labels.
-     * @return Collection of DefaultLabelResource
-     */
-    public Collection<LabelResource> releaseCollection() {
-        return releaseCollection;
-    }
-
-    /**
-     * Request type.
-     */
-    public enum Type {
-        APPLY, //apple label request
-        RELEASE //release label request
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(this.deviceId, this.applyNum, this.type,
-                            this.releaseCollection);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj instanceof LabelResourceRequest) {
-            LabelResourceRequest that = (LabelResourceRequest) obj;
-            return Objects.equals(this.deviceId, that.deviceId)
-                    && Objects.equals(this.applyNum, that.applyNum)
-                    && Objects.equals(this.type, that.type)
-                    && Objects.equals(this.releaseCollection,
-                                      that.releaseCollection);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this).add("deviceId", this.deviceId)
-                .add("applyNum", this.applyNum).add("type", this.type)
-                .add("releaseCollection", this.releaseCollection).toString();
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceService.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceService.java
deleted file mode 100644
index e88a215..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceService.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.onosproject.net.resource;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.onosproject.net.DeviceId;
-
-import com.google.common.collect.Multimap;
-
-/**
- * Service for providing label resource allocation.
- */
-public interface LabelResourceService {
-
-    /**
-     * Returns labels from resource pool by a specific device id.
-     *
-     * @param deviceId device identifier
-     * @param applyNum the applying number
-     * @return collection of applying labels
-     */
-    Collection<LabelResource> applyFromDevicePool(DeviceId deviceId,
-                                                  long applyNum);
-
-    /**
-     * Returns labels from the global label resource pool.
-     *
-     * @param applyNum the applying number
-     * @return collection of applying labels
-     */
-    Collection<LabelResource> applyFromGlobalPool(long applyNum);
-
-    /**
-     * Releases unused labels to device pools .
-     *
-     * @param release the collection of releasing labels
-     * @return success or fail
-     */
-    boolean releaseToDevicePool(Multimap<DeviceId, LabelResource> release);
-
-    /**
-     * Releases unused labels to the global resource pool.
-     *
-     * @param release release the collection of releasing labels
-     * @return success or fail
-     */
-    boolean releaseToGlobalPool(Set<LabelResourceId> release);
-
-    /**
-     * Judges if the pool of a specific device id is full.
-     *
-     * @param deviceId device identifier
-     * @return yes or no
-     */
-    boolean isDevicePoolFull(DeviceId deviceId);
-
-    /**
-     * Judges if the global resource pool is full.
-     *
-     * @return yes or no
-     */
-    boolean isGlobalPoolFull();
-
-    /**
-     * Returns the unused label number of a label resource pool by a specific device
-     * id.
-     *
-     * @param deviceId device identifier
-     * @return number of unused labels
-     */
-    long getFreeNumOfDevicePool(DeviceId deviceId);
-
-    /**
-     * Returns the unused label number of a global label resource pool.
-     *
-     * @return number of unused labels
-     */
-    long getFreeNumOfGlobalPool();
-
-    /**
-     * Returns the label resource pool of a label resource by a specific device
-     * id.
-     *
-     * @param deviceId device identifier
-     * @return the device label resource pool
-     */
-    LabelResourcePool getDeviceLabelResourcePool(DeviceId deviceId);
-
-    /**
-     * Returns the global label resource pool.
-     *
-     * @return the global label resource pool
-     */
-    LabelResourcePool getGlobalLabelResourcePool();
-
-    /**
-     * Adds the specified label resource listener.
-     *
-     * @param listener label resource listener
-     */
-    void addListener(LabelResourceListener listener);
-
-    /**
-     * Removes the specified label resource listener.
-     *
-     * @param listener label resource listener
-     */
-    void removeListener(LabelResourceListener listener);
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceStore.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResourceStore.java
deleted file mode 100644
index 451969d..0000000
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResourceStore.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.onosproject.net.resource;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.onosproject.net.DeviceId;
-import org.onosproject.store.Store;
-
-import com.google.common.collect.Multimap;
-
-/**
- * Manages inventory of label; not intended for direct use.
- *
- */
-public interface LabelResourceStore
-        extends Store<LabelResourceEvent, LabelResourceDelegate> {
-
-    /**
-     * Creates a label resource of some device id from begin label to end label.
-     *
-     * @param deviceId device identifier
-     * @param beginLabel represents for the first label id in the range of label
-     *            pool
-     * @param endLabel represents for the last label id in the range of label
-     *            pool
-     * @return success or fail
-     */
-    boolean createDevicePool(DeviceId deviceId, LabelResourceId beginLabel,
-                             LabelResourceId endLabel);
-
-    /**
-     * Creates the global label resource pool.
-     *
-     * @param beginLabel represents for the first label id in the range of label
-     *            pool
-     * @param endLabel represents for the last label id in the range of label
-     *            pool
-     * @return success or fail
-     */
-    boolean createGlobalPool(LabelResourceId beginLabel,
-                             LabelResourceId endLabel);
-
-    /**
-     * Destroys a label resource pool of a specific device id.
-     *
-     * @param deviceId device identifier
-     * @return success or fail
-     */
-    boolean destroyDevicePool(DeviceId deviceId);
-
-    /**
-     * Destroys a the global label resource pool.
-     *
-     * @return success or fail
-     */
-    boolean destroyGlobalPool();
-
-    /**
-     * Returns labels from resource pool by a specific device id.
-     *
-     * @param deviceId device identifier
-     * @param applyNum the applying number
-     * @return collection of applying labels
-     */
-    Collection<LabelResource> applyFromDevicePool(DeviceId deviceId,
-                                                  long applyNum);
-
-    /**
-     * Returns labels from the global label resource pool.
-     *
-     * @param applyNum apply the number of labels
-     * @return collection of labels
-     */
-    Collection<LabelResource> applyFromGlobalPool(long applyNum);
-
-    /**
-     * Releases unused labels to device pools .
-     *
-     * @param release the collection of releasing labels
-     * @return success or fail
-     */
-    boolean releaseToDevicePool(Multimap<DeviceId, LabelResource> release);
-
-    /**
-     * Releases unused labels to the global resource pool.
-     *
-     * @param release release the collection of releasing labels
-     * @return success or fail
-     */
-    boolean releaseToGlobalPool(Set<LabelResourceId> release);
-
-    /**
-     * Judges if the pool of a specific device id is full.
-     *
-     * @param deviceId device identifier
-     * @return yes or no
-     */
-    boolean isDevicePoolFull(DeviceId deviceId);
-
-    /**
-     * Judges if the global resource pool is full.
-     *
-     * @return yes or no
-     */
-    boolean isGlobalPoolFull();
-
-    /**
-     * Returns the unused label number of a label resource pool by a specific device
-     * id.
-     *
-     * @param deviceId device identifier
-     * @return number of unused labels
-     */
-    long getFreeNumOfDevicePool(DeviceId deviceId);
-
-    /**
-     * Returns the unused number of a global label resource pool.
-     *
-     * @return number of unused labels
-     */
-    long getFreeNumOfGlobalPool();
-
-    /**
-     * Returns the label resource pool by a specific device id.
-     *
-     * @param deviceId device identifier
-     * @return the device label resource pool
-     */
-    LabelResourcePool getDeviceLabelResourcePool(DeviceId deviceId);
-
-    /**
-     * Returns the global label resource pool.
-     *
-     * @return the global label resource pool
-     */
-    LabelResourcePool getGlobalLabelResourcePool();
-}
diff --git a/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java b/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java
index 3fbe1d7..dd11153 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java
@@ -16,7 +16,7 @@
 package org.onosproject.net.resource;
 
 /**
- * Representation of ID for allocated resource.
+ * Resource identifier.
  */
 public interface ResourceId {
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceService.java b/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceService.java
similarity index 96%
rename from core/api/src/main/java/org/onosproject/net/resource/DeviceResourceService.java
rename to core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceService.java
index 10e5911..acbc486 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceService.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceService.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.device;
 
 import org.onosproject.net.Port;
 import org.onosproject.net.intent.Intent;
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceStore.java b/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java
similarity index 95%
rename from core/api/src/main/java/org/onosproject/net/resource/DeviceResourceStore.java
rename to core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java
index 5df661c..3437f4b 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DeviceResourceStore.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/device/DeviceResourceStore.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.device;
 
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Port;
diff --git a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResource.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResource.java
index 3c8ebea..bd0ba23 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResource.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResource.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import org.onlab.util.Bandwidth;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java
similarity index 90%
rename from core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceAllocation.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java
index 7260536..de2f52f 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java
@@ -13,9 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.resource.ResourceAllocation;
+import org.onosproject.net.resource.ResourceType;
 
 /**
  * Representation of allocated bandwidth resource.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceRequest.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceRequest.java
index bf72d42..91cc3d1 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/BandwidthResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceRequest.java
@@ -13,11 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Objects;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.resource.ResourceRequest;
+import org.onosproject.net.resource.ResourceType;
 
 /**
  * Representation of a request for bandwidth resource.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java b/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java
similarity index 94%
rename from core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java
index 3a2f66d..0227d3f 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceAllocations.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -23,6 +23,9 @@
 
 import org.onosproject.net.Link;
 import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.resource.ResourceAllocation;
+import org.onosproject.net.resource.ResourceRequest;
+import org.onosproject.net.resource.ResourceType;
 
 import java.util.Collection;
 import java.util.Collections;
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceRequest.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceRequest.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceRequest.java
index 8d08e3b..5153aeb 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DefaultLinkResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceRequest.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Collection;
 import java.util.HashSet;
@@ -29,6 +29,8 @@
 
 import org.onosproject.net.intent.constraint.BandwidthConstraint;
 import org.onosproject.net.intent.constraint.LambdaConstraint;
+import org.onosproject.net.resource.ResourceRequest;
+import org.onosproject.net.resource.ResourceType;
 
 /**
  * Implementation of {@link LinkResourceRequest}.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LambdaResource.java b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResource.java
similarity index 98%
rename from core/api/src/main/java/org/onosproject/net/resource/LambdaResource.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LambdaResource.java
index e4df34e..7ed8847 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LambdaResource.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResource.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import org.onosproject.net.IndexedLambda;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java
similarity index 92%
rename from core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java
index e34dab5..210bba6 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java
@@ -13,9 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.resource.ResourceAllocation;
+import org.onosproject.net.resource.ResourceType;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceRequest.java
similarity index 87%
rename from core/api/src/main/java/org/onosproject/net/resource/LambdaResourceRequest.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceRequest.java
index de64a17..b0391f5 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LambdaResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceRequest.java
@@ -13,9 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.resource.ResourceRequest;
+import org.onosproject.net.resource.ResourceType;
 
 /**
  * Representation of a request for lambda resource.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResource.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResource.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResource.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResource.java
index 2c83dab..6cfa38d 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResource.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResource.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 /**
  * Abstraction of link resource.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceAllocations.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
similarity index 90%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceAllocations.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
index ebca82a..172e902 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceAllocations.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
@@ -13,11 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Set;
 
 import org.onosproject.net.Link;
+import org.onosproject.net.resource.ResourceAllocation;
 
 /**
  * Representation of allocated link resources.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceEvent.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceEvent.java
similarity index 96%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceEvent.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceEvent.java
index d98e9c4..3edb386 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceEvent.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Collection;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceListener.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceListener.java
similarity index 94%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceListener.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceListener.java
index 80545b4..599dd4f 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceListener.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceListener.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import org.onosproject.event.EventListener;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceRequest.java
similarity index 95%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceRequest.java
index d0ed945..8023a92 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceRequest.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Collection;
 import java.util.Set;
@@ -21,6 +21,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.intent.Constraint;
 import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.resource.ResourceRequest;
 
 /**
  * Representation of a request for link resource.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceService.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceService.java
similarity index 96%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceService.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceService.java
index 1d1e697..69bdf4f 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceService.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceService.java
@@ -13,10 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import org.onosproject.net.Link;
 import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.resource.ResourceRequest;
 
 /**
  * Service for providing link resource allocation.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceStore.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStore.java
similarity index 95%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceStore.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStore.java
index e3e9db8..e6674db 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceStore.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStore.java
@@ -13,12 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Set;
 
 import org.onosproject.net.Link;
 import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.resource.ResourceAllocation;
 
 /**
  * Manages link resources.
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceStoreDelegate.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStoreDelegate.java
similarity index 94%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResourceStoreDelegate.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStoreDelegate.java
index e108349..6c051d6 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceStoreDelegate.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStoreDelegate.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import org.onosproject.store.StoreDelegate;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResources.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResources.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/resource/LinkResources.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/LinkResources.java
index 71fb4f4..dc00522 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResources.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResources.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Set;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/MplsLabel.java b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabel.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/resource/MplsLabel.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/MplsLabel.java
index 51bb5a7..317a130 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/MplsLabel.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabel.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/MplsLabelResourceAllocation.java b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/resource/MplsLabelResourceAllocation.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java
index 995c4a6..1b3b8fc 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/MplsLabelResourceAllocation.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java
@@ -14,9 +14,11 @@
  * limitations under the License.
  */
 
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.resource.ResourceAllocation;
+import org.onosproject.net.resource.ResourceType;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/resource/MplsLabelResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceRequest.java
similarity index 87%
rename from core/api/src/main/java/org/onosproject/net/resource/MplsLabelResourceRequest.java
rename to core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceRequest.java
index be1f758..0a03f45 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/MplsLabelResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceRequest.java
@@ -13,9 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.resource;
+package org.onosproject.net.resource.link;
 
 import com.google.common.base.MoreObjects;
+import org.onosproject.net.resource.ResourceRequest;
+import org.onosproject.net.resource.ResourceType;
 
 /**
  * Representation of a request for lambda resource.
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
index 6e03412..60857ca 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
@@ -19,7 +19,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.core.IdGenerator;
-import org.onosproject.net.resource.LinkResourceAllocations;
+import org.onosproject.net.resource.link.LinkResourceAllocations;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
index 47faf4a..6c7fe13 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
@@ -36,17 +36,17 @@
 import org.onosproject.net.flow.criteria.Criterion.Type;
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.resource.BandwidthResource;
-import org.onosproject.net.resource.BandwidthResourceRequest;
-import org.onosproject.net.resource.LambdaResource;
-import org.onosproject.net.resource.LambdaResourceAllocation;
-import org.onosproject.net.resource.LambdaResourceRequest;
-import org.onosproject.net.resource.LinkResourceAllocations;
-import org.onosproject.net.resource.LinkResourceListener;
-import org.onosproject.net.resource.LinkResourceRequest;
-import org.onosproject.net.resource.LinkResourceService;
-import org.onosproject.net.resource.MplsLabel;
-import org.onosproject.net.resource.MplsLabelResourceAllocation;
+import org.onosproject.net.resource.link.BandwidthResource;
+import org.onosproject.net.resource.link.BandwidthResourceRequest;
+import org.onosproject.net.resource.link.LambdaResource;
+import org.onosproject.net.resource.link.LambdaResourceAllocation;
+import org.onosproject.net.resource.link.LambdaResourceRequest;
+import org.onosproject.net.resource.link.LinkResourceAllocations;
+import org.onosproject.net.resource.link.LinkResourceListener;
+import org.onosproject.net.resource.link.LinkResourceRequest;
+import org.onosproject.net.resource.link.LinkResourceService;
+import org.onosproject.net.resource.link.MplsLabel;
+import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
 import org.onosproject.net.resource.ResourceAllocation;
 import org.onosproject.net.resource.ResourceRequest;
 import org.onosproject.net.resource.ResourceType;
diff --git a/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java b/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
index 988b0b4..88fa7f4 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
@@ -26,7 +26,7 @@
 import org.onosproject.net.NetTestTools;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.intent.constraint.LambdaConstraint;
-import org.onosproject.net.resource.LambdaResource;
+import org.onosproject.net.resource.link.LambdaResource;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.testing.EqualsTester;
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java
index c4f3a36..b87dc12 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/AnnotationConstraintTest.java
@@ -24,7 +24,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import static org.easymock.EasyMock.createMock;
 import static org.hamcrest.Matchers.closeTo;
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
index cc29a25..743fc252 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/ConstraintObjectsTest.java
@@ -18,8 +18,8 @@
 import org.junit.Test;
 import org.onlab.util.Bandwidth;
 import org.onosproject.net.Link;
-import org.onosproject.net.resource.BandwidthResource;
-import org.onosproject.net.resource.LambdaResource;
+import org.onosproject.net.resource.link.BandwidthResource;
+import org.onosproject.net.resource.link.LambdaResource;
 
 import com.google.common.testing.EqualsTester;
 
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/LatencyConstraintTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/LatencyConstraintTest.java
index 3d9429e..bab1749 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/LatencyConstraintTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/LatencyConstraintTest.java
@@ -27,7 +27,7 @@
 import org.onosproject.net.Path;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.time.Duration;
 import java.time.temporal.ChronoUnit;
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/ObstacleConstraintTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/ObstacleConstraintTest.java
index 291610a..f02787f 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/ObstacleConstraintTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/ObstacleConstraintTest.java
@@ -27,7 +27,7 @@
 import org.onosproject.net.Path;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Arrays;
 
diff --git a/core/api/src/test/java/org/onosproject/net/intent/constraint/WaypointConstraintTest.java b/core/api/src/test/java/org/onosproject/net/intent/constraint/WaypointConstraintTest.java
index 8e15711..f7e212a 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/constraint/WaypointConstraintTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/constraint/WaypointConstraintTest.java
@@ -25,7 +25,7 @@
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.intent.Constraint;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.resource.LinkResourceService;
+import org.onosproject.net.resource.link.LinkResourceService;
 
 import java.util.Arrays;
 
diff --git a/core/api/src/test/java/org/onosproject/net/resource/DefaultLabelResourceTest.java b/core/api/src/test/java/org/onosproject/net/resource/DefaultLabelResourceTest.java
deleted file mode 100644
index 0e5ec27..0000000
--- a/core/api/src/test/java/org/onosproject/net/resource/DefaultLabelResourceTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.junit.Test;
-import org.onosproject.event.AbstractEventTest;
-
-import com.google.common.testing.EqualsTester;
-
-/**
- * Tests of default label resource.
- */
-public class DefaultLabelResourceTest extends AbstractEventTest {
-
-    @Test
-    public void testEquality() {
-        String deviceId1 = "of:001";
-        String deviceId2 = "of:002";
-        long labelResourceId1 = 100;
-        long labelResourceId2 = 200;
-        DefaultLabelResource h1 = new DefaultLabelResource(deviceId1,
-                                                           labelResourceId1);
-        DefaultLabelResource h2 = new DefaultLabelResource(deviceId1,
-                                                           labelResourceId1);
-        DefaultLabelResource h3 = new DefaultLabelResource(deviceId2,
-                                                           labelResourceId2);
-        DefaultLabelResource h4 = new DefaultLabelResource(deviceId2,
-                                                           labelResourceId2);
-
-        new EqualsTester().addEqualityGroup(h1, h2).addEqualityGroup(h3, h4)
-                .testEquals();
-    }
-}
diff --git a/core/api/src/test/java/org/onosproject/net/resource/LabelResourcePoolTest.java b/core/api/src/test/java/org/onosproject/net/resource/LabelResourcePoolTest.java
deleted file mode 100644
index f4d91c1..0000000
--- a/core/api/src/test/java/org/onosproject/net/resource/LabelResourcePoolTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.onosproject.net.resource;
-
-import org.junit.Test;
-import org.onosproject.event.AbstractEventTest;
-
-import com.google.common.testing.EqualsTester;
-
-/**
- * Tests of the label resource pool.
- */
-public class LabelResourcePoolTest extends AbstractEventTest {
-
-    @Test
-    public void testEquality() {
-        LabelResourcePool h1 = new LabelResourcePool("of:001", 0, 100);
-        LabelResourcePool h2 = new LabelResourcePool("of:001", 0, 100);
-        LabelResourcePool h3 = new LabelResourcePool("of:002", 0, 100);
-        LabelResourcePool h4 = new LabelResourcePool("of:002", 0, 100);
-        new EqualsTester().addEqualityGroup(h1, h2).addEqualityGroup(h3, h4)
-                .testEquals();
-    }
-
-}
diff --git a/core/api/src/test/java/org/onosproject/net/resource/LabelResourceRequestTest.java b/core/api/src/test/java/org/onosproject/net/resource/LabelResourceRequestTest.java
deleted file mode 100644
index bc538b2..0000000
--- a/core/api/src/test/java/org/onosproject/net/resource/LabelResourceRequestTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.onosproject.net.resource;
-
-import java.util.Collections;
-
-import org.junit.Test;
-import org.onosproject.event.AbstractEventTest;
-import org.onosproject.net.DeviceId;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.testing.EqualsTester;
-
-/**
- * Tests of the label resource request.
- */
-public class LabelResourceRequestTest extends AbstractEventTest {
-
-    @Test
-    public void testEquality() {
-        DeviceId deviceId1 = DeviceId.deviceId("of:0001");
-        DeviceId deviceId2 = DeviceId.deviceId("of:0002");
-        long apply = 2;
-        ImmutableSet<LabelResource> releaseCollection = ImmutableSet
-                .copyOf(Collections.emptySet());
-        LabelResourceRequest h1 = new LabelResourceRequest(
-                                                           deviceId1,
-                                                           LabelResourceRequest.Type.APPLY,
-                                                           apply, null);
-        LabelResourceRequest h2 = new LabelResourceRequest(
-                                                           deviceId1,
-                                                           LabelResourceRequest.Type.APPLY,
-                                                           apply, null);
-        LabelResourceRequest h3 = new LabelResourceRequest(
-                                                           deviceId2,
-                                                           LabelResourceRequest.Type.RELEASE,
-                                                           0, releaseCollection);
-        LabelResourceRequest h4 = new LabelResourceRequest(
-                                                           deviceId2,
-                                                           LabelResourceRequest.Type.RELEASE,
-                                                           0, releaseCollection);
-
-        new EqualsTester().addEqualityGroup(h1, h2).addEqualityGroup(h3, h4)
-                .testEquals();
-    }
-}
diff --git a/core/api/src/test/java/org/onosproject/net/resource/MplsObjectsTest.java b/core/api/src/test/java/org/onosproject/net/resource/MplsObjectsTest.java
index 42ee5f4..56f7a47 100644
--- a/core/api/src/test/java/org/onosproject/net/resource/MplsObjectsTest.java
+++ b/core/api/src/test/java/org/onosproject/net/resource/MplsObjectsTest.java
@@ -18,6 +18,8 @@
 import org.junit.Test;
 
 import com.google.common.testing.EqualsTester;
+import org.onosproject.net.resource.link.MplsLabel;
+import org.onosproject.net.resource.link.MplsLabelResourceAllocation;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;