You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/01/15 03:04:54 UTC

[26/44] Revert "Merge remote-tracking branch 'origin/javelin' into javelin"

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionDriver.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionDriver.java b/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionDriver.java
deleted file mode 100644
index 3a59b21..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionDriver.java
+++ /dev/null
@@ -1,25 +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.motion;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-
-public interface DataMotionDriver {
-    public void copy(DataObject srcObj, DataObject destObj);
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionService.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionService.java b/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionService.java
deleted file mode 100644
index db36f64..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionService.java
+++ /dev/null
@@ -1,28 +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.motion;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-
-public interface DataMotionService {
-    public void copyAsync(DataObject srcData, DataObject destData,
-            AsyncCompletionCallback<CopyCommandResult> callback);
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java b/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java
deleted file mode 100644
index 343140f..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java
+++ /dev/null
@@ -1,61 +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.motion;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-import org.springframework.stereotype.Component;
-
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@Component
-public class DataMotionServiceImpl implements DataMotionService {
-    @Inject
-    List<DataMotionStrategy> strategies;
-
-    @Override
-    public void copyAsync(DataObject srcData, DataObject destData,
-            AsyncCompletionCallback<CopyCommandResult> callback) {
-
-        if (srcData.getDataStore().getDriver().canCopy(srcData, destData)) {
-            srcData.getDataStore().getDriver()
-                    .copyAsync(srcData, destData, callback);
-            return;
-        } else if (destData.getDataStore().getDriver()
-                .canCopy(srcData, destData)) {
-            destData.getDataStore().getDriver()
-                    .copyAsync(srcData, destData, callback);
-            return;
-        }
-
-        for (DataMotionStrategy strategy : strategies) {
-            if (strategy.canHandle(srcData, destData)) {
-                strategy.copyAsync(srcData, destData, callback);
-                return;
-            }
-        }
-        throw new CloudRuntimeException("can't find strategy to move data");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionStrategy.java b/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionStrategy.java
deleted file mode 100644
index ba40c6d..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/motion/DataMotionStrategy.java
+++ /dev/null
@@ -1,30 +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.motion;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-
-public interface DataMotionStrategy {
-    public boolean canHandle(DataObject srcData, DataObject destData);
-
-    public Void copyAsync(DataObject srcData, DataObject destData,
-            AsyncCompletionCallback<CopyCommandResult> callback);
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactory.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactory.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactory.java
deleted file mode 100644
index 22d328f..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactory.java
+++ /dev/null
@@ -1,25 +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.snapshot;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-
-public interface SnapshotDataFactory {
-    public SnapshotInfo getSnapshot(long snapshotId, DataStore store);
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
index d57d078..1363251 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java
@@ -1,3 +1,19 @@
+// 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.snapshot;
 
 import java.lang.reflect.Method;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotInfo.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotInfo.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotInfo.java
index 983ec4d..1c572cf 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotInfo.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotInfo.java
@@ -1,9 +1,24 @@
+// 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.snapshot;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 
-public interface SnapshotInfo extends DataObject {
+public interface SnapshotInfo {
 	public String getName();
 	public SnapshotInfo getParent();
 	public SnapshotInfo getChild();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java
index bc56e62..d50c9a0 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java
@@ -1,3 +1,19 @@
+// 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.snapshot;
 
 import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategy.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategy.java
index 980b2dd..4e31186 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategy.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotStrategy.java
@@ -1,3 +1,19 @@
+// 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.snapshot;
 
 public interface SnapshotStrategy {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
index 9f59a4f..43998a3 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
@@ -1,6 +1,22 @@
+// 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.to;
 
-import org.apache.cloudstack.storage.image.datastore.ImageDataStoreInfo;
+import org.apache.cloudstack.storage.image.store.ImageDataStoreInfo;
 
 public class ImageDataStoreTO {
     private final String type;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
index 18743d7..f7c2322 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
@@ -22,11 +22,11 @@ import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
 
 public class ImageOnPrimayDataStoreTO {
     private final String pathOnPrimaryDataStore;
-    private  PrimaryDataStoreTO dataStore;
+    private final PrimaryDataStoreTO dataStore;
     private final TemplateTO template;
     public ImageOnPrimayDataStoreTO(TemplateOnPrimaryDataStoreInfo template) {
         this.pathOnPrimaryDataStore = template.getPath();
-        //this.dataStore = template.getPrimaryDataStore().getDataStoreTO();
+        this.dataStore = template.getPrimaryDataStore().getDataStoreTO();
         this.template = new TemplateTO(template.getTemplate());
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
index 06ff16b..96fb6bb 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
@@ -1,3 +1,19 @@
+// 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.to;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
index 13d51ac..cd67b97 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
@@ -1,3 +1,19 @@
+// 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.to;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
index 26a523a..b9db8cc 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
@@ -1,19 +1,35 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
 package org.apache.cloudstack.storage.to;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.image.datastore.ImageDataStoreInfo;
+import org.apache.cloudstack.storage.image.store.ImageDataStoreInfo;
 
 public class TemplateTO {
     private final String path;
     private final String uuid;
-    private  DiskFormat diskType;
+    private final VolumeDiskType diskType;
     private final ImageDataStoreTO imageDataStore;
 
     public TemplateTO(TemplateInfo template) {
         this.path = template.getPath();
         this.uuid = template.getUuid();
-        //this.diskType = template.getDiskType();
+        this.diskType = template.getDiskType();
         this.imageDataStore = new ImageDataStoreTO((ImageDataStoreInfo)template.getDataStore());
     }
     
@@ -25,7 +41,7 @@ public class TemplateTO {
         return this.uuid;
     }
     
-    public DiskFormat getDiskType() {
+    public VolumeDiskType getDiskType() {
         return this.diskType;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
index 4373bad..af71344 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
@@ -1,29 +1,44 @@
+// 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.to;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
 
 public class VolumeTO {
     private final String uuid;
     private final String path;
-    private  VolumeType volumeType;
-    private  DiskFormat diskType;
+    private final VolumeType volumeType;
+    private final VolumeDiskType diskType;
     private PrimaryDataStoreTO dataStore;
-    private  String name;
+    private final String name;
     private final long size;
     public VolumeTO(VolumeInfo volume) {
         this.uuid = volume.getUuid();
-        this.path = volume.getUri();
-        //this.volumeType = volume.getType();
-        //this.diskType = volume.getDiskType();
+        this.path = volume.getPath();
+        this.volumeType = volume.getType();
+        this.diskType = volume.getDiskType();
         if (volume.getDataStore() != null) {
-            this.dataStore = new PrimaryDataStoreTO((PrimaryDataStoreInfo)volume.getDataStore());
+            this.dataStore = new PrimaryDataStoreTO(volume.getDataStore());
         } else {
             this.dataStore = null;
         }
-        //this.name = volume.getName();
+        this.name = volume.getName();
         this.size = volume.getSize();
     }
     
@@ -39,7 +54,7 @@ public class VolumeTO {
         return this.volumeType;
     }
     
-    public DiskFormat getDiskType() {
+    public VolumeDiskType getDiskType() {
         return this.diskType;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java b/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
index d0530d1..11cf2ef 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
@@ -23,11 +23,8 @@ import com.cloud.utils.fsm.StateObject;
 public interface ObjectInDataStoreStateMachine extends StateObject<ObjectInDataStoreStateMachine.State> {
     enum State {
         Allocated("The initial state"),
-        Creating2("This is only used with createOnlyRequested event"),
-        Creating("The object is being creating on data store"),
-        Created("The object is created"),
+        Creating("The template is being downloading to data store"),
         Ready("Template downloading is complished"),
-        Copying("The object is being coping"),
         Destroying("Template is destroying"),
         Destroyed("Template is destroyed"),
         Failed("Failed to download template");
@@ -44,11 +41,8 @@ public interface ObjectInDataStoreStateMachine extends StateObject<ObjectInDataS
     
     enum Event {
         CreateRequested,
-        CreateOnlyRequested,
         DestroyRequested,
         OperationSuccessed,
         OperationFailed,
-        CopyingRequested,
-        
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/PrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/PrimaryDataStoreDriver.java b/engine/storage/src/org/apache/cloudstack/storage/volume/PrimaryDataStoreDriver.java
deleted file mode 100644
index 60db60b..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/PrimaryDataStoreDriver.java
+++ /dev/null
@@ -1,29 +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;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
-import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
-
-public interface PrimaryDataStoreDriver extends DataStoreDriver {
-    public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CommandResult> callback);
-    public void revertSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CommandResult> callback);
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
new file mode 100644
index 0000000..b90a6d6
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
@@ -0,0 +1,246 @@
+/*
+ * 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;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+
+import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity;
+import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
+import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
+import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
+import org.apache.cloudstack.framework.async.AsyncCallFuture;
+import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
+import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStoreEntityImpl;
+import org.apache.cloudstack.storage.image.TemplateEntityImpl;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.volume.VolumeService.VolumeApiResult;
+
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class VolumeEntityImpl implements VolumeEntity {
+    private VolumeInfo volumeInfo;
+    private final VolumeService vs;
+    private VolumeApiResult result;
+    
+    protected VolumeEntityImpl() {
+        this.vs = null;
+    }
+    
+    public VolumeEntityImpl(VolumeInfo volumeObject, VolumeService vs) {
+        this.volumeInfo = volumeObject;
+        this.vs = vs;
+    }
+
+    public VolumeInfo getVolumeInfo() {
+        return volumeInfo;
+    }
+
+    @Override 
+    public String getUuid() {
+        return volumeInfo.getUuid();
+    }
+
+    @Override
+    public long getId() {
+        return volumeInfo.getId();
+    }
+
+    public String getExternalId() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String getCurrentState() {
+        return volumeInfo.getCurrentState().toString();
+    }
+
+    @Override
+    public String getDesiredState() {
+        return volumeInfo.getDesiredState().toString();
+    }
+
+    @Override
+    public Date getCreatedTime() {
+        return volumeInfo.getCreatedDate();
+    }
+
+    @Override
+    public Date getLastUpdatedTime() {
+        return volumeInfo.getUpdatedDate();
+    }
+
+    @Override
+    public String getOwner() {
+        return volumeInfo.getOwner();
+    }
+
+  
+    @Override
+    public List<Method> getApplicableActions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public SnapshotEntity takeSnapshotOf(boolean full) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String reserveForMigration(long expirationTime) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void migrate(String reservationToken) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public VolumeEntity setupForCopy() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void copy(VolumeEntity dest) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void attachTo(String vm, long deviceId) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void detachFrom() {
+        // TODO Auto-generated method stub
+
+    }
+
+
+    @Override
+    public long getSize() {
+        return volumeInfo.getSize();
+    }
+
+    @Override
+    public VolumeDiskType getDiskType() {
+        return volumeInfo.getDiskType();
+    }
+
+    @Override
+    public VolumeType getType() {
+        return volumeInfo.getType();
+    }
+
+    @Override
+    public StorageEntity getDataStore() {
+        return new PrimaryDataStoreEntityImpl(volumeInfo.getDataStore());
+    }
+
+    @Override
+    public boolean createVolumeFromTemplate(long dataStoreId, VolumeDiskType diskType, TemplateEntity template) {
+        TemplateInfo ti = ((TemplateEntityImpl)template).getTemplateInfo();
+          
+        AsyncCallFuture<VolumeApiResult> future = vs.createVolumeFromTemplateAsync(volumeInfo, dataStoreId, diskType, ti);
+        try {
+            result = future.get();
+            if (!result.isSuccess()) {
+                throw new CloudRuntimeException("create volume from template failed: " + result.getResult()); 
+            }
+            return true;
+        } catch (InterruptedException e) {
+           throw new CloudRuntimeException("wait result failed", e);
+        } catch (ExecutionException e) {
+            throw new CloudRuntimeException("wait result failed", e);
+        }
+    }
+
+    @Override
+    public boolean createVolume(long dataStoreId, VolumeDiskType diskType) {
+        AsyncCallFuture<VolumeApiResult> future = vs.createVolumeAsync(volumeInfo, dataStoreId, diskType);
+        try {
+            result = future.get();
+            if (result.isSuccess()) {
+                return true;
+            } else {
+                throw new CloudRuntimeException("Failed to create volume:" + result.getResult());
+            }
+        } catch (InterruptedException e) {
+            throw new CloudRuntimeException("wait volume info failed", e);
+        } catch (ExecutionException e) {
+            throw new CloudRuntimeException("wait volume failed", e);
+        }
+    }
+    
+    @Override
+    public void destroy() {
+        AsyncCallFuture<VolumeApiResult> future = vs.deleteVolumeAsync(volumeInfo);
+        try {
+            result = future.get();
+            if (!result.isSuccess()) {
+                throw new CloudRuntimeException("Failed to create volume:" + result.getResult());
+            }
+        } catch (InterruptedException e) {
+           throw new CloudRuntimeException("wait to delete volume info failed", e);
+        } catch (ExecutionException e) {
+            throw new CloudRuntimeException("wait to delete volume failed", e);
+        }
+    }
+
+	@Override
+	public Map<String, String> getDetails() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void addDetail(String name, String value) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void delDetail(String name, String value) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void updateDetail(String name, String value) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
index 19a4c3a..2bd2127 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
@@ -19,13 +19,13 @@
 package org.apache.cloudstack.storage.volume;
 
 import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
-import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
 import org.apache.cloudstack.framework.async.AsyncCallFuture;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
+import org.apache.cloudstack.storage.EndPoint;
+import org.apache.cloudstack.storage.command.CommandResult;
 import org.apache.cloudstack.storage.image.TemplateInfo;
 
 public interface VolumeService {
@@ -52,7 +52,7 @@ public interface VolumeService {
      * 
      * @return the volume object
      */
-    AsyncCallFuture<VolumeApiResult> createVolumeAsync(VolumeInfo volume, long dataStoreId);
+    AsyncCallFuture<VolumeApiResult> createVolumeAsync(VolumeInfo volume, long dataStoreId, VolumeDiskType diskType);
 
     /**
      * Delete volume
@@ -87,5 +87,5 @@ public interface VolumeService {
 
     VolumeEntity getVolumeEntity(long volumeId);
 
-    AsyncCallFuture<VolumeApiResult> createVolumeFromTemplateAsync(VolumeInfo volume, long dataStoreId, TemplateInfo template);
+    AsyncCallFuture<VolumeApiResult> createVolumeFromTemplateAsync(VolumeInfo volume, long dataStoreId, VolumeDiskType diskType, TemplateInfo template);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
deleted file mode 100644
index a7397e1..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java
+++ /dev/null
@@ -1,77 +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.datastore;
-
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
-import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
-import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
-import org.springframework.stereotype.Component;
-
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@Component
-public class PrimaryDataStoreHelper {
-    @Inject
-    private PrimaryDataStoreDao dataStoreDao;
-    public PrimaryDataStoreVO createPrimaryDataStore(Map<String, String> params) {
-        PrimaryDataStoreVO dataStoreVO = dataStoreDao.findPoolByUUID(params.get("uuid"));
-        if (dataStoreVO != null) {
-            throw new CloudRuntimeException("duplicate uuid: " + params.get("uuid"));
-        }
-        
-        dataStoreVO = new PrimaryDataStoreVO();
-        dataStoreVO.setStorageProviderId(Long.parseLong(params.get("providerId")));
-        dataStoreVO.setHostAddress(params.get("server"));
-        dataStoreVO.setPath(params.get("path"));
-        dataStoreVO.setPoolType(params.get("protocol"));
-        dataStoreVO.setPort(Integer.parseInt(params.get("port")));
-        //dataStoreVO.setKey(params.get("key"));
-        dataStoreVO.setName(params.get("name"));
-        dataStoreVO.setUuid(params.get("uuid"));
-        dataStoreVO = dataStoreDao.persist(dataStoreVO);
-        return dataStoreVO;
-    }
-    
-    public boolean deletePrimaryDataStore(long id) {
-        PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(id);
-        if (dataStoreVO == null) {
-            throw new CloudRuntimeException("can't find store: " + id);
-        }
-        dataStoreDao.remove(id);
-        return true;
-    }
-    
-    public void attachCluster(DataStore dataStore) {
-        //send down AttachPrimaryDataStoreCmd command to all the hosts in the cluster
-        AttachPrimaryDataStoreCmd cmd = new AttachPrimaryDataStoreCmd(dataStore.getUri());
-        /*for (EndPoint ep : dataStore.getEndPoints()) {
-            ep.sendMessage(cmd);
-        } */
-    }
-    
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
index 0eb0ac3..1e12498 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
@@ -38,7 +38,7 @@ import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Volume;
 import com.cloud.tags.dao.ResourceTagsDaoImpl;
 import com.cloud.utils.Pair;
-import com.cloud.utils.component.ComponentLocator;
+
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.GenericSearchBuilder;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
index da8234e..ee1600d 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java
@@ -33,7 +33,7 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
 import org.apache.cloudstack.api.Identity;
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.Unknown;
 
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.Volume;
@@ -113,7 +113,7 @@ public class VolumeVO implements Identity, StateObject<Volume.State> {
     StoragePoolType poolType;
 
     @Column(name = "disk_type")
-    DiskFormat diskType;
+    String diskType = new Unknown().toString();
 
     @Column(name = GenericDao.REMOVED_COLUMN)
     Date removed;
@@ -406,11 +406,11 @@ public class VolumeVO implements Identity, StateObject<Volume.State> {
         this.uuid = uuid;
     }
 
-    public DiskFormat getDiskType() {
+    public String getDiskType() {
         return diskType;
     }
 
-    public void setDiskType(DiskFormat type) {
+    public void setDiskType(String type) {
         diskType = type;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/storage.ucls
----------------------------------------------------------------------
diff --git a/engine/storage/storage.ucls b/engine/storage/storage.ucls
index 9b3a47c..23a7b21 100644
--- a/engine/storage/storage.ucls
+++ b/engine/storage/storage.ucls
@@ -1,3 +1,21 @@
+<!--
+  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.
+-->
 <class-diagram version="1.0.11" icons="true" automaticImage="JPEG" always-add-relationships="false" 
   generalizations="true" realizations="true" associations="true" dependencies="false" nesting-relationships="true">    
   <class id="1" corner="BOTTOM_RIGHT" language="java" 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
new file mode 100644
index 0000000..23551e4
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.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.datastore;
+
+public enum DataStoreStatus {
+    Initial, Initialized, Creating, Attaching, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Removed;
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
index a67a47c..ff95aa0 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
@@ -1,46 +1,65 @@
+// 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.datastore;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.inject.Inject;
 
 import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
-import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
-import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
-import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
-import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
+import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
+import org.apache.cloudstack.storage.EndPoint;
+import org.apache.cloudstack.storage.HypervisorHostEndPoint;
+import org.apache.cloudstack.storage.command.CommandResult;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
-import org.apache.cloudstack.storage.datastore.provider.DataStoreProvider;
-import org.apache.cloudstack.storage.image.ImageDataFactory;
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
 import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.snapshot.SnapshotDataFactory;
 import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
-import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
+import org.apache.cloudstack.storage.volume.TemplatePrimaryDataStoreManager;
 import org.apache.cloudstack.storage.volume.VolumeObject;
 import org.apache.cloudstack.storage.volume.db.VolumeDao2;
 import org.apache.cloudstack.storage.volume.db.VolumeVO;
 import org.apache.log4j.Logger;
 
+import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+import edu.emory.mathcs.backport.java.util.Collections;
 
 public class DefaultPrimaryDataStore implements PrimaryDataStore {
-    private static final Logger s_logger = Logger
-            .getLogger(DefaultPrimaryDataStore.class);
+    private static final Logger s_logger = Logger.getLogger(DefaultPrimaryDataStore.class);
     protected PrimaryDataStoreDriver driver;
     protected PrimaryDataStoreVO pdsv;
     protected PrimaryDataStoreLifeCycle lifeCycle;
-    protected DataStoreProvider provider;
-    //protected StorageProtocolTransformer protocalTransformer;
+    protected PrimaryDataStoreProvider provider;
+    protected StorageProtocolTransformer protocalTransformer;
     private HypervisorType supportedHypervisor;
     private boolean isLocalStorageSupported = false;
     @Inject
@@ -50,30 +69,42 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
     @Inject
     private PrimaryDataStoreDao dataStoreDao;
     @Inject
-    private ObjectInDataStoreManager objectInStoreMgr;
-    @Inject
-    ImageDataFactory imageDataFactory;
-    @Inject
-    SnapshotDataFactory snapshotFactory;
+    private TemplatePrimaryDataStoreManager templatePrimaryStoreMgr;
 
-    private DefaultPrimaryDataStore(PrimaryDataStoreVO pdsv,
-            PrimaryDataStoreDriver driver,
-            DataStoreProvider provider) {
+    private DefaultPrimaryDataStore(PrimaryDataStoreVO pdsv) {
         this.pdsv = pdsv;
+    }
+
+    public void setDriver(PrimaryDataStoreDriver driver) {
+        driver.setDataStore(this);
         this.driver = driver;
+    }
+
+    public void setLifeCycle(PrimaryDataStoreLifeCycle lifeCycle) {
+        lifeCycle.setDataStore(this);
+        this.lifeCycle = lifeCycle;
+    }
+
+    public void setProvider(PrimaryDataStoreProvider provider) {
         this.provider = provider;
     }
 
+    public void setProtocolTransFormer(StorageProtocolTransformer transformer) {
+        this.protocalTransformer = transformer;
+    }
+
+    @Override
+    public PrimaryDataStoreTO getDataStoreTO() {
+        return this.protocalTransformer.getDataStoreTO(this);
+    }
+
     @Override
-    public PrimaryDataStoreDriver getDriver() {
-        return this.driver;
+    public VolumeTO getVolumeTO(VolumeInfo volume) {
+        return this.protocalTransformer.getVolumeTO(volume);
     }
 
-    public static DefaultPrimaryDataStore createDataStore(
-            PrimaryDataStoreVO pdsv,
-            PrimaryDataStoreDriver driver,
-            DataStoreProvider provider) {
-        DefaultPrimaryDataStore dataStore = new DefaultPrimaryDataStore(pdsv, driver, provider);
+    public static DefaultPrimaryDataStore createDataStore(PrimaryDataStoreVO pdsv) {
+        DefaultPrimaryDataStore dataStore = new DefaultPrimaryDataStore(pdsv);
         return ComponentContext.inject(dataStore);
     }
 
@@ -94,13 +125,16 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
         return volumeInfos;
     }
 
-/*    @Override
-    public void deleteAsync(DataObject volume,
-            AsyncCompletionCallback<CommandResult> callback) {
-        this.driver.deleteAsync((VolumeObject) volume, callback);
+    @Override
+    public void deleteVolumeAsync(VolumeInfo volume, AsyncCompletionCallback<CommandResult> callback) {
+        CommandResult result = new CommandResult();
+        if (volume.isAttachedVM()) {
+            result.setResult("Can't delete volume: " + volume.getId() + ", if it's attached to a VM");
+            callback.complete(result);
+        }
+        this.driver.deleteVolumeAsync((VolumeObject)volume, callback);
     }
-*/
-    /*
+
     @Override
     public List<EndPoint> getEndPoints() {
         Long clusterId = pdsv.getClusterId();
@@ -115,14 +149,13 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
         List<EndPoint> endpoints = new ArrayList<EndPoint>();
         List<HostVO> hosts = hostDao.findHypervisorHostInCluster(clusterId);
         for (HostVO host : hosts) {
-            HypervisorHostEndPoint ep = new HypervisorHostEndPoint(
-                    host.getId(), host.getPrivateIpAddress());
-            ComponentInject.inject(ep);
+            HypervisorHostEndPoint ep = new HypervisorHostEndPoint(host.getId(), host.getPrivateIpAddress());
+            ComponentContext.inject(ep);
             endpoints.add(ep);
         }
         Collections.shuffle(endpoints);
         return endpoints;
-    }*/
+    }
 
     public void setSupportedHypervisor(HypervisorType type) {
         this.supportedHypervisor = type;
@@ -143,53 +176,43 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
     }
 
     @Override
-    public boolean isVolumeDiskTypeSupported(DiskFormat diskType) {
+    public boolean isVolumeDiskTypeSupported(VolumeDiskType diskType) {
         return true;
     }
 
     @Override
     public long getCapacity() {
-        return 0;
+        return this.driver.getCapacity();
     }
 
     @Override
     public long getAvailableCapacity() {
-        //return this.driver.getAvailableCapacity();
-        return 0;
+        return this.driver.getAvailableCapacity();
     }
 
-/*    @Override
-    public void createAsync(DataObject data,
-            AsyncCompletionCallback<CommandResult> callback) {
-        this.provider.getVolumeDriver().createAsync(data, callback);
-    }
-*/
-/*    @Override
-    public void takeSnapshot(SnapshotInfo snapshot,
-            AsyncCompletionCallback<CommandResult> callback) {
-        this.provider.getSnapshotDriver().takeSnapshot(snapshot, callback);
-    }
-*/
-/*    @Override
-    public void revertSnapshot(SnapshotInfo snapshot,
-            AsyncCompletionCallback<CommandResult> callback) {
-        this.provider.getSnapshotDriver().revertSnapshot(snapshot, callback);
+    @Override
+    public void createVolumeAsync(VolumeInfo vi, VolumeDiskType diskType, AsyncCompletionCallback<CommandResult> callback) {
+        if (!isVolumeDiskTypeSupported(diskType)) {
+            throw new CloudRuntimeException("disk type " + diskType + " is not supported");
+        }
+        VolumeObject vo = (VolumeObject) vi;
+        vo.setVolumeDiskType(diskType);
+        this.driver.createVolumeAsync(vo, callback);
     }
 
     @Override
-    public void deleteSnapshot(SnapshotInfo snapshot,
-            AsyncCompletionCallback<CommandResult> callback) {
-        this.provider.getSnapshotDriver().deleteSnapshot(snapshot, callback);
+    public boolean exists(VolumeInfo vi) {
+        VolumeVO vol = volumeDao.findByVolumeIdAndPoolId(vi.getId(), this.getId());
+        return (vol != null) ? true : false;
     }
-*/
+
     @Override
-    public boolean exists(DataObject data) {
-        return (objectInStoreMgr.findObject(data.getId(), data.getType(), this.getId(), this.getRole()) != null) ? true
-                : false;
+    public boolean templateExists(TemplateInfo template) {
+        return (templatePrimaryStoreMgr.findTemplateOnPrimaryDataStore(template, this) != null) ? true : false;
     }
 
     @Override
-    public DiskFormat getDefaultDiskType() {
+    public VolumeDiskType getDefaultDiskType() {
         // TODO Auto-generated method stub
         return null;
     }
@@ -200,19 +223,31 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
     }
 
     @Override
-    public TemplateInfo getTemplate(long templateId) {
-       return imageDataFactory.getTemplate(templateId, this);
+    public TemplateOnPrimaryDataStoreInfo getTemplate(TemplateInfo template) {
+        return templatePrimaryStoreMgr.findTemplateOnPrimaryDataStore(template, this);
+    }
+
+    @Override
+    public VolumeInfo createVoluemFromBaseImage(VolumeInfo volume, TemplateOnPrimaryDataStoreInfo template) {
+        VolumeObject vo = (VolumeObject) volume;
+        vo.setVolumeDiskType(template.getTemplate().getDiskType());
+        //this.driver.createVolumeFromBaseImage(vo, template);
+        return volume;
     }
 
-/*    @Override
-    public void createVoluemFromBaseImageAsync(VolumeInfo volume,
-            TemplateInfo template,
-            AsyncCompletionCallback<CommandResult> callback) {
+    @Override
+    public void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateInfo templateStore, AsyncCompletionCallback<CommandResult> callback) {
         VolumeObject vo = (VolumeObject) volume;
-        vo.setVolumeDiskType(template.getDiskType());
-        this.driver.createVolumeFromBaseImageAsync(vo, template, callback);
+        vo.setVolumeDiskType(templateStore.getDiskType());
+        String templateUri = templateStore.getDataStore().grantAccess(templateStore, this.getEndPoints().get(0));
+        this.driver.createVolumeFromBaseImageAsync(vo, templateUri, callback);
+    }
+
+    @Override
+    public boolean installTemplate(TemplateOnPrimaryDataStoreInfo template) {
+        // TODO Auto-generated method stub
+        return true;
     }
-*/
 
     @Override
     public String getUuid() {
@@ -234,40 +269,55 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
         return this.pdsv.getPoolType();
     }
 
-    public DataStoreProvider getProvider() {
+    @Override
+    public PrimaryDataStoreLifeCycle getLifeCycle() {
+        return lifeCycle;
+    }
+
+    @Override
+    public PrimaryDataStoreProvider getProvider() {
         return this.provider;
     }
 
     @Override
-    public DataStoreRole getRole() {
-        return DataStoreRole.Primary;
+    public String grantAccess(VolumeInfo volume, EndPoint ep) {
+        return this.driver.grantAccess((VolumeObject)volume, ep);
     }
 
     @Override
-    public String getUri() {
-        return this.pdsv.getPoolType() + File.separator
-                + this.pdsv.getHostAddress() + File.separator
-                + this.pdsv.getPath();
+    public boolean revokeAccess(VolumeInfo volume, EndPoint ep) {
+        // TODO Auto-generated method stub
+        return false;
     }
 
     @Override
-    public PrimaryDataStoreLifeCycle getLifeCycle() {
-        return this.lifeCycle;
+    public String grantAccess(TemplateInfo template, EndPoint ep) {
+        // TODO Auto-generated method stub
+        return null;
     }
 
     @Override
-    public SnapshotInfo getSnapshot(long snapshotId) {
-        return snapshotFactory.getSnapshot(snapshotId, this);
+    public boolean revokeAccess(TemplateInfo template, EndPoint ep) {
+        // TODO Auto-generated method stub
+        return false;
     }
 
     @Override
-    public Scope getScope() {
-        if (pdsv.getScope() == ScopeType.CLUSTER) {
-            return new ClusterScope(pdsv.getClusterId(), pdsv.getPodId(), pdsv.getDataCenterId());
-        } else if (pdsv.getScope() == ScopeType.ZONE) {
-            return new ZoneScope(pdsv.getDataCenterId());
-        }
-        
+    public String grantAccess(SnapshotInfo snapshot, EndPoint ep) {
+        // TODO Auto-generated method stub
         return null;
     }
+
+    @Override
+    public boolean revokeAccess(SnapshotInfo snapshot, EndPoint ep) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public String getRole() {
+        // TODO Auto-generated method stub
+        return "volumeStore";
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java
new file mode 100644
index 0000000..2ecbfbf
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java
@@ -0,0 +1,54 @@
+// 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.datastore.configurator;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public abstract class AbstractPrimaryDataStoreConfigurator implements PrimaryDataStoreConfigurator {
+    @Inject
+    protected PrimaryDataStoreDao dataStoreDao;
+    
+    protected abstract PrimaryDataStoreLifeCycle getLifeCycle();
+    
+    protected abstract PrimaryDataStoreDriver getDriver();
+    
+    protected abstract boolean isLocalStorageSupported();
+
+    @Override
+    public PrimaryDataStore getDataStore(long dataStoreId) {
+        PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
+        if (dataStoreVO == null) {
+            throw new CloudRuntimeException("Can't find primary data store: " + dataStoreId);
+        }
+        
+        DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO);
+        dataStore.setDriver(getDriver());
+        dataStore.setLifeCycle(getLifeCycle());
+        dataStore.setSupportedHypervisor(getSupportedHypervisor());
+        dataStore.setLocalStorageFlag(isLocalStorageSupported());
+        dataStore.setProtocolTransFormer(getProtocolTransformer());
+        return dataStore;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
new file mode 100644
index 0000000..e868b4e
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
@@ -0,0 +1,32 @@
+/*
+ * 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.datastore.configurator;
+
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.Storage.StoragePoolType;
+
+public interface PrimaryDataStoreConfigurator {
+    public HypervisorType getSupportedHypervisor();
+    public String getSupportedDataStoreType();
+    public PrimaryDataStore getDataStore(long dataStoreId);
+    public StorageProtocolTransformer getProtocolTransformer();
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
new file mode 100644
index 0000000..008af85
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
@@ -0,0 +1,48 @@
+/*
+ * 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.datastore.configurator.kvm;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.storage.datastore.configurator.AbstractPrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+import org.apache.cloudstack.storage.datastore.lifecycle.DefaultKvmPrimaryDataStoreLifeCycle;
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+
+public abstract class AbstractKvmConfigurator extends AbstractPrimaryDataStoreConfigurator {
+    @Inject
+    PrimaryDataStoreDao dataStoreDao;
+    
+    @Override
+    public HypervisorType getSupportedHypervisor() {
+        return HypervisorType.KVM;
+    }
+    
+    protected PrimaryDataStoreLifeCycle getLifeCycle() {
+        return new DefaultKvmPrimaryDataStoreLifeCycle(dataStoreDao);
+    }
+    
+    protected PrimaryDataStoreDriver getDriver() {
+        return new DefaultPrimaryDataStoreDriverImpl();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
new file mode 100644
index 0000000..f0b581f
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
@@ -0,0 +1,47 @@
+/*
+ * 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.datastore.configurator.kvm;
+
+import org.apache.cloudstack.storage.datastore.configurator.validator.CLVMProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+@Component
+@Qualifier("defaultProvider")
+public class KvmCLVMConfigurator extends AbstractKvmConfigurator {
+
+    @Override
+    public String getSupportedDataStoreType() {
+        return "clvm";
+    }
+
+    @Override
+    public StorageProtocolTransformer getProtocolTransformer() {
+        return new CLVMProtocolTransformer();
+    }
+
+    @Override
+    protected boolean isLocalStorageSupported() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
new file mode 100644
index 0000000..1c36f15
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
@@ -0,0 +1,51 @@
+/*
+ * 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.datastore.configurator.kvm;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.storage.datastore.configurator.validator.NfsProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@Qualifier("defaultProvider")
+public class KvmNfsConfigurator extends AbstractKvmConfigurator {
+    @Inject
+    PrimaryDataStoreDao dataStoreDao;
+
+    @Override
+    public String getSupportedDataStoreType() {
+        return "nfs";
+    }
+
+    @Override
+    public StorageProtocolTransformer getProtocolTransformer() {
+        return new NfsProtocolTransformer(dataStoreDao);
+    }
+
+    @Override
+    protected boolean isLocalStorageSupported() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
new file mode 100644
index 0000000..a644239
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
@@ -0,0 +1,46 @@
+/*
+ * 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.datastore.configurator.kvm;
+
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.configurator.validator.RBDValidator;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import com.cloud.storage.Storage.StoragePoolType;
+
+@Component
+@Qualifier("defaultProvider")
+public class KvmRBDConfigurator extends AbstractKvmConfigurator {
+
+    public String getSupportedDataStoreType() {
+        return "rbd";
+    }
+
+    @Override
+    public StorageProtocolTransformer getProtocolTransformer() {
+        return new RBDValidator();
+    }
+
+    @Override
+    protected boolean isLocalStorageSupported() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMProtocolTransformer.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMProtocolTransformer.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMProtocolTransformer.java
new file mode 100644
index 0000000..4dd19d2
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMProtocolTransformer.java
@@ -0,0 +1,56 @@
+/*
+ * 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.datastore.configurator.validator;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class CLVMProtocolTransformer implements StorageProtocolTransformer {
+
+    @Override
+    public boolean normalizeUserInput(Map<String, String> params) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public List<String> getInputParamNames() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public VolumeTO getVolumeTO(VolumeInfo volume) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110465b5/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
new file mode 100644
index 0000000..8e1180e
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
@@ -0,0 +1,56 @@
+/*
+ * 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.datastore.configurator.validator;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class FileSystemValidator implements StorageProtocolTransformer {
+
+    @Override
+    public boolean normalizeUserInput(Map<String, String> params) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public List<String> getInputParamNames() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public VolumeTO getVolumeTO(VolumeInfo volume) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+
+}