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.