Updated Branches:
  refs/heads/javelin a388a748d -> dcf3790e8

add volume types


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/dcf3790e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/dcf3790e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/dcf3790e

Branch: refs/heads/javelin
Commit: dcf3790e8169e4fc587f724b5501ae615a3dbb24
Parents: a388a74
Author: Edison Su <[email protected]>
Authored: Thu Oct 25 17:35:08 2012 -0700
Committer: Edison Su <[email protected]>
Committed: Thu Oct 25 17:35:18 2012 -0700

----------------------------------------------------------------------
 .../apache/cloudstack/storage/volume/Volume.java   |   40 +++++++++++++--
 .../cloudstack/storage/volume/VolumeService.java   |    8 ++-
 .../storage/volume/VolumeServiceImpl.java          |   23 +++-----
 .../cloudstack/storage/volume/VolumeType.java      |   27 ----------
 .../cloudstack/storage/volume/db/VolumeDao.java    |    4 +-
 .../storage/volume/db/VolumeDaoImpl.java           |   15 ++++-
 .../cloudstack/storage/volume/db/VolumeVO.java     |   29 +++++++---
 .../cloudstack/storage/volume/disktype/QCOW2.java  |   10 ++++
 .../storage/volume/disktype/Unknown.java           |    7 +++
 .../cloudstack/storage/volume/disktype/VHD.java    |   10 ++++
 .../cloudstack/storage/volume/disktype/VMDK.java   |   10 ++++
 .../storage/volume/disktype/VolumeDiskType.java    |    5 ++
 .../volume/disktype/VolumeDiskTypeBase.java        |   23 ++++++++
 .../volume/disktype/VolumeDiskTypeHelper.java      |   24 +++++++++
 .../cloudstack/storage/volume/type/DataDisk.java   |   10 ++++
 .../apache/cloudstack/storage/volume/type/Iso.java |   10 ++++
 .../cloudstack/storage/volume/type/RootDisk.java   |   10 ++++
 .../cloudstack/storage/volume/type/Unknown.java    |    8 +++
 .../cloudstack/storage/volume/type/VolumeType.java |   23 ++++++++
 .../storage/volume/type/VolumeTypeBase.java        |   20 +++++++
 .../storage/volume/type/VolumeTypeHelper.java      |   24 +++++++++
 .../cloudstack/storage/test/volumeServiceTest.java |   14 ++++-
 22 files changed, 291 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
index 15ab86b..6780f60 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
@@ -1,17 +1,47 @@
 package org.apache.cloudstack.storage.volume;
 
+import javax.inject.Inject;
+
+import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.storage.volume.db.VolumeVO;
+import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType;
+import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper;
+import org.apache.cloudstack.storage.volume.type.VolumeType;
+import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper;
 
 import com.cloud.utils.fsm.StateObject;
 
-public class Volume implements StateObject<VolumeState>{
-       private VolumeVO volumeVO;
+public class Volume implements StateObject<VolumeState> {
+       protected VolumeVO volumeVO;
+       protected DataStore dataStore;
+       @Inject
+       VolumeDiskTypeHelper diskTypeHelper;
+       @Inject
+       VolumeTypeHelper volumeTypeHelper;
+       
+       public Volume(DataStore dataStore, VolumeVO volumeVO) {
+               this.volumeVO = volumeVO;
+               this.dataStore = dataStore;
+       }
+       
        @Override
        public VolumeState getState() {
-               // TODO Auto-generated method stub
-               return null;
+               return volumeVO.getState();
        }
 
+       public DataStore getDataStore() {
+               return dataStore;
+       }
        
-
+       public long getSize() {
+               return volumeVO.getSize();
+       }
+       
+       public VolumeDiskType getDiskType() {
+               return diskTypeHelper.getDiskType(volumeVO.getDiskType());
+       }
+       
+       public VolumeType getType() {
+               return volumeTypeHelper.getType(volumeVO.getVolumeType());
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
index 12a6f6a..c160bc6 100644
--- 
a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
@@ -18,11 +18,15 @@
  */
 package org.apache.cloudstack.storage.volume;
 
-
-import com.cloud.storage.Volume;
+import org.apache.cloudstack.storage.volume.type.VolumeType;
 
 public interface VolumeService {
 
+       /**
+        * 
+        */
+       Volume allocateVolumeInDb(long size, VolumeType type);
+       
     /**
      * Creates the volume based on the given criteria
      * 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index 57e5a68..ca12b4d 100644
--- 
a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -18,22 +18,13 @@
  */
 package org.apache.cloudstack.storage.volume;
 
-import org.apache.cloudstack.storage.volume.db.VolumeDao;
-import org.apache.cloudstack.storage.volume.db.VolumeVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.apache.cloudstack.storage.volume.type.VolumeType;
+import org.springframework.stereotype.Service;
 
-import com.cloud.storage.SnapshotVO;
-import com.cloud.storage.Volume;
-import com.cloud.storage.dao.SnapshotDao;
-import com.cloud.upgrade.dao.VersionDao;
-import com.cloud.upgrade.dao.VersionVO;
 import com.cloud.utils.db.DB;
 
-@Component
+@Service
 public class VolumeServiceImpl implements VolumeService {
-       @Autowired
-       VolumeDao _volumeDao;
        @Override
        public Volume createVolume(long volumeId) {
                // TODO Auto-generated method stub
@@ -43,8 +34,6 @@ public class VolumeServiceImpl implements VolumeService {
        @DB
        @Override
        public boolean deleteVolume(long volumeId) {
-               VolumeVO vol = new VolumeVO(VolumeType.ROOT, "root", 1, 1,1 
,1,1);
-               _volumeDao.persist(vol);
                return true;
        }
 
@@ -71,4 +60,10 @@ public class VolumeServiceImpl implements VolumeService {
                // TODO Auto-generated method stub
                return false;
        }
+
+       @Override
+       public Volume allocateVolumeInDb(long size, VolumeType type) {
+               // TODO Auto-generated method stub
+               return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeType.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeType.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeType.java
deleted file mode 100644
index ca9bfed..0000000
--- a/platform/storage/src/org/apache/cloudstack/storage/volume/VolumeType.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cloudstack.storage.volume;
-
-public enum VolumeType {
-       UNKNOWN, 
-       ROOT, 
-       SWAP, 
-       DATADISK, 
-       ISO
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java
index 0ac26f9..1f8da57 100644
--- 
a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java
@@ -21,7 +21,7 @@ import java.util.List;
 import org.apache.cloudstack.storage.volume.Volume;
 import org.apache.cloudstack.storage.volume.VolumeEvent;
 import org.apache.cloudstack.storage.volume.VolumeState;
-import org.apache.cloudstack.storage.volume.VolumeType;
+import org.apache.cloudstack.storage.volume.type.VolumeType;
 
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.Storage.ImageFormat;
@@ -76,4 +76,6 @@ public interface VolumeDao extends GenericDao<VolumeVO, 
Long>, StateDao<VolumeSt
     List<VolumeVO> findReadyRootVolumesByInstance(long instanceId);
     
     List<Long> listPoolIdsByVolumeCount(long dcId, Long podId, Long clusterId, 
long accountId);
+
+    VolumeVO allocVolume(long size, VolumeType type);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java
index 6557e8a..7f41696 100644
--- 
a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java
@@ -25,9 +25,11 @@ import java.util.List;
 
 import javax.ejb.Local;
 
+import org.apache.cloudstack.storage.volume.Volume;
 import org.apache.cloudstack.storage.volume.VolumeEvent;
 import org.apache.cloudstack.storage.volume.VolumeState;
-import org.apache.cloudstack.storage.volume.VolumeType;
+import org.apache.cloudstack.storage.volume.type.RootDisk;
+import org.apache.cloudstack.storage.volume.type.VolumeType;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
@@ -104,7 +106,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, 
Long> implements Vol
         SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
         sc.setParameters("poolId", poolId);
         sc.setParameters("notDestroyed", VolumeState.Destroy);
-        sc.setParameters("vType", VolumeType.ROOT.toString());
+        sc.setParameters("vType", new RootDisk().toString());
            return listBy(sc);
        }
     
@@ -146,7 +148,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, 
Long> implements Vol
                SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();
                sc.setParameters("instanceId", instanceId);
                sc.setParameters("state", VolumeState.Ready);
-               sc.setParameters("vType", VolumeType.ROOT);             
+               sc.setParameters("vType", new RootDisk().toString());           
                return listBy(sc);
        }
        
@@ -413,4 +415,11 @@ public class VolumeDaoImpl extends 
GenericDaoBase<VolumeVO, Long> implements Vol
         txn.commit();
         return result;
     }
+    
+    @Override
+    @DB
+    public VolumeVO allocVolume(long size, VolumeType type) {
+       VolumeVO vol = new VolumeVO();
+       return vol;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
index 7dca42e..651b2b6 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
@@ -32,7 +32,8 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
 import org.apache.cloudstack.storage.volume.VolumeState;
-import org.apache.cloudstack.storage.volume.VolumeType;
+import org.apache.cloudstack.storage.volume.disktype.Unknown;
+import org.apache.cloudstack.storage.volume.type.VolumeType;
 
 import com.cloud.api.Identity;
 import com.cloud.storage.Storage.StoragePoolType;
@@ -104,13 +105,15 @@ public class VolumeVO implements Identity {
  String firstSnapshotBackupUuid;
 
  @Column(name = "volume_type")
- @Enumerated(EnumType.STRING)
- VolumeType volumeType = VolumeType.UNKNOWN;
+ String volumeType = "UNKNOWN";
 
  @Column(name = "pool_type")
  @Enumerated(EnumType.STRING)
  StoragePoolType poolType;
-
+ 
+ @Column(name = "disk_type")
+ String diskType = new Unknown().toString();
+ 
  @Column(name = GenericDao.REMOVED_COLUMN)
  Date removed;
 
@@ -139,7 +142,7 @@ public class VolumeVO implements Identity {
  
  // Real Constructor
  public VolumeVO(VolumeType type, String name, long dcId, long domainId, long 
accountId, long diskOfferingId, long size) {
-     this.volumeType = type;
+     this.volumeType = type.toString();
      this.name = name;
      this.dataCenterId = dcId;
      this.accountId = accountId;
@@ -150,7 +153,7 @@ public class VolumeVO implements Identity {
      this.uuid = UUID.randomUUID().toString();
  }
 
- public VolumeVO(String name, long dcId, long podId, long accountId, long 
domainId, Long instanceId, String folder, String path, long size, VolumeType 
vType) {
+ public VolumeVO(String name, long dcId, long podId, long accountId, long 
domainId, Long instanceId, String folder, String path, long size, String vType) 
{
      this.name = name;
      this.accountId = accountId;
      this.domainId = domainId;
@@ -160,7 +163,7 @@ public class VolumeVO implements Identity {
      this.size = size;
      this.podId = podId;
      this.dataCenterId = dcId;
-     this.volumeType = vType;
+     this.volumeType = vType.toString();
      this.state = VolumeState.Allocated;
      this.recreatable = false;
      this.uuid = UUID.randomUUID().toString();
@@ -267,7 +270,7 @@ public class VolumeVO implements Identity {
      this.deviceId = deviceId;
  }
 
- public VolumeType getVolumeType() {
+ public String getVolumeType() {
      return volumeType;
  }
 
@@ -311,7 +314,7 @@ public class VolumeVO implements Identity {
      this.dataCenterId = dataCenterId;
  }
 
- public void setVolumeType(VolumeType type) {
+ public void setVolumeType(String type) {
      volumeType = type;
  }
 
@@ -430,5 +433,13 @@ public class VolumeVO implements Identity {
  public void setUuid(String uuid) {
        this.uuid = uuid;
  }
+ 
+ public String getDiskType() {
+        return diskType;
+ }
+ 
+ public void setDiskType(String type) {
+        diskType = type;
+ }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java
new file mode 100644
index 0000000..105801c
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class QCOW2 extends VolumeDiskTypeBase {
+       public QCOW2() {
+               this.type = "QCOW2";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java
new file mode 100644
index 0000000..e22acce
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java
@@ -0,0 +1,7 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+public class Unknown extends VolumeDiskTypeBase {
+       public Unknown() {
+               this.type = "Unknown";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java
new file mode 100644
index 0000000..4535748
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class VHD extends VolumeDiskTypeBase {
+       public VHD() {
+               this.type = "VHD";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java
new file mode 100644
index 0000000..10623ab
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class VMDK extends VolumeDiskTypeBase {
+       public VMDK() {
+               this.type = "VMDK";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
new file mode 100644
index 0000000..c2d2804
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
@@ -0,0 +1,5 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+public interface VolumeDiskType {
+       boolean equals(String diskType);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
new file mode 100644
index 0000000..1ee3141
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
@@ -0,0 +1,23 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+public class VolumeDiskTypeBase implements VolumeDiskType {
+       protected String type = "Unknown";
+
+       @Override
+       public boolean equals(String diskType) {
+               if (getType().equalsIgnoreCase(diskType)) {
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+       
+       @Override
+       public String toString() {
+               return getType();
+       }
+       
+       protected String getType() {
+               return this.type;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java
new file mode 100644
index 0000000..666f89b
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java
@@ -0,0 +1,24 @@
+package org.apache.cloudstack.storage.volume.disktype;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class VolumeDiskTypeHelper {
+       @Inject
+       protected List<VolumeDiskType> diskTypes;
+       protected VolumeDiskType defaultType = new Unknown();
+       
+       public VolumeDiskType getDiskType(String type) {
+               for (VolumeDiskType diskType : diskTypes) {
+                       if (diskType.equals(type)) {
+                               return diskType;
+                       }
+               }
+               
+               return defaultType;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java
new file mode 100644
index 0000000..1e30768
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.storage.volume.type;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class DataDisk extends VolumeTypeBase {
+       public DataDisk() {
+               this.type = "DataDisk";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java
new file mode 100644
index 0000000..61e4e35
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.storage.volume.type;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class Iso extends VolumeTypeBase {
+       public Iso() {
+               this.type = "iso";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java
new file mode 100644
index 0000000..c616cea
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java
@@ -0,0 +1,10 @@
+package org.apache.cloudstack.storage.volume.type;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class RootDisk extends VolumeTypeBase {
+       public RootDisk() {
+               this.type = "Root";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java
new file mode 100644
index 0000000..c1a77b1
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java
@@ -0,0 +1,8 @@
+package org.apache.cloudstack.storage.volume.type;
+
+public class Unknown extends VolumeTypeBase {
+       public Unknown() {
+               this.type = "Unknown";
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java
new file mode 100644
index 0000000..6f11b09
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.volume.type;
+
+public interface VolumeType {
+       boolean equals(String type);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java
new file mode 100644
index 0000000..3597517
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java
@@ -0,0 +1,20 @@
+package org.apache.cloudstack.storage.volume.type;
+
+public class VolumeTypeBase implements VolumeType {
+       protected String type = "Unknown";
+       
+       @Override
+       public boolean equals(String type) {
+               if (this.type.equalsIgnoreCase(type)) {
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+       
+       @Override
+       public String toString() {
+               return type;
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java
 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java
new file mode 100644
index 0000000..8f56758
--- /dev/null
+++ 
b/platform/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java
@@ -0,0 +1,24 @@
+package org.apache.cloudstack.storage.volume.type;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class VolumeTypeHelper {
+       @Inject
+       private List<VolumeType> types;
+       private VolumeType defaultType = new Unknown();
+       
+       public VolumeType getType(String type) {
+               for (VolumeType ty : types) {
+                       if (ty.equals(type)) {
+                               return ty;
+                       }
+               }
+               return defaultType;
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/dcf3790e/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
----------------------------------------------------------------------
diff --git 
a/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
 
b/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
index 8734d53..7f4f826 100644
--- 
a/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
+++ 
b/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
@@ -28,6 +28,8 @@ import javax.inject.Inject;
 import org.apache.cloudstack.storage.volume.VolumeMotionService;
 import org.apache.cloudstack.storage.volume.VolumeService;
 import org.apache.cloudstack.storage.volume.db.VolumeDao;
+import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper;
+import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -51,13 +53,15 @@ public class volumeServiceTest {
        protected VolumeDao volumeDao;
        @Autowired
        protected VolumeMotionService vmotion;
- 
+       @Autowired
+       protected VolumeTypeHelper volTypeHelper;
+       @Inject
+       protected VolumeDiskTypeHelper volDiskTypeHelper;
        @Before
        public void setUp() {
                Mockito.when(vmotion.copyVolume(null, null)).thenReturn(false);
        }
        
-       @Test
        @DB
        public void test() {
                assertTrue(volService.deleteVolume(1) != false);
@@ -77,4 +81,10 @@ public class volumeServiceTest {
 
                fail("Not yet implemented");
        }
+       
+       @Test
+       public void test1() {
+               System.out.println(volTypeHelper.getType("Root"));
+               System.out.println(volDiskTypeHelper.getDiskType("vmdk"));
+       }
 }

Reply via email to