add image skeleton

This commit is contained in:
Edison Su 2012-11-05 19:36:56 -08:00
parent 6dd2318b44
commit 17c82b7270
14 changed files with 198 additions and 16 deletions

View File

@ -0,0 +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.image;
public class ImageMotionServiceImpl implements ImageMotionService {
@Override
public boolean copyTemplate(String templateUri, String destTemplateUri) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean copyIso(String isoUri, String destIsoUri) {
// TODO Auto-generated method stub
return false;
}
}

View File

@ -22,15 +22,16 @@ import javax.inject.Inject;
import org.apache.cloudstack.storage.image.downloader.ImageDownloader; import org.apache.cloudstack.storage.image.downloader.ImageDownloader;
import org.apache.cloudstack.storage.image.manager.ImageDataStoreManager; import org.apache.cloudstack.storage.image.manager.ImageDataStoreManager;
import org.apache.cloudstack.storage.image.provider.ImageDataStoreProviderManager;
import org.apache.cloudstack.storage.image.store.ImageDataStore; import org.apache.cloudstack.storage.image.store.ImageDataStore;
public class ImageServiceImpl implements ImageService { public class ImageServiceImpl implements ImageService {
@Inject @Inject
ImageDataStoreManager imageStoreMgr; ImageDataStoreProviderManager imageStoreProviderMgr;
@Override @Override
public boolean registerTemplate(long templateId, long imageStoreId) { public boolean registerTemplate(long templateId, long imageStoreId) {
ImageDataStore ids = imageStoreMgr.getImageDataStore(imageStoreId); ImageDataStore ids = imageStoreProviderMgr.getDataStore(imageStoreId);
Template template = ids.registerTemplate(templateId); Template template = ids.registerTemplate(templateId);
if (ids.needDownloadToCacheStorage()) { if (ids.needDownloadToCacheStorage()) {
ImageDownloader imageDl = ids.getImageDownloader(); ImageDownloader imageDl = ids.getImageDownloader();
@ -59,8 +60,8 @@ public class ImageServiceImpl implements ImageService {
@Override @Override
public String grantTemplateAccess(long templateId, long endpointId) { public String grantTemplateAccess(long templateId, long endpointId) {
// TODO Auto-generated method stub ImageDataStore ids = imageStoreProviderMgr.getDataStoreFromTemplateId(templateId);
return null; return ids.grantAccess(templateId, endpointId);
} }
@Override @Override

View File

@ -33,4 +33,12 @@ public class Template {
return this.dataStore; return this.dataStore;
} }
public void setImageDataStoreId(long dataStoreId) {
imageVO.setImageDataStoreId(dataStoreId);
}
public long getImageDataStoreId() {
return imageVO.getImageDataStoreId();
}
} }

View File

@ -20,6 +20,6 @@ package org.apache.cloudstack.storage.image.db;
import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericDaoBase;
public class ImageDaoStoreDaoImpl extends GenericDaoBase<ImageDataStoreVO, Long> implements ImageDaoStoreDao { public class ImageDaoStoreDaoImpl extends GenericDaoBase<ImageDataStoreVO, Long> implements ImageDataStoreDao {
} }

View File

@ -20,6 +20,6 @@ package org.apache.cloudstack.storage.image.db;
import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.GenericDao;
public interface ImageDaoStoreDao extends GenericDao<ImageDataStoreVO, Long> { public interface ImageDataStoreDao extends GenericDao<ImageDataStoreVO, Long> {
} }

View File

@ -18,6 +18,32 @@
*/ */
package org.apache.cloudstack.storage.image.db; package org.apache.cloudstack.storage.image.db;
public interface ImageDataStoreProviderVO { import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
@Entity
@Table(name="image_data_store_provider")
public class ImageDataStoreProviderVO {
@Id
@TableGenerator(name="image_data_store_provider_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="image_data_store_provider_seq", allocationSize=1)
@Column(name="id", nullable = false)
private long id;
@Column(name="name", nullable = false)
private String name;
public long getId() {
return this.id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
} }

View File

@ -129,6 +129,9 @@ public class ImageDataVO implements Identity {
@Column(name="enable_sshkey") @Column(name="enable_sshkey")
private boolean enableSshKey; private boolean enableSshKey;
@Column(name="image_data_store_id")
private long imageDataStoreId;
@Transient @Transient
Map details; Map details;
@ -378,4 +381,12 @@ public class ImageDataVO implements Identity {
enableSshKey = enable; enableSshKey = enable;
} }
public long getImageDataStoreId() {
return this.imageDataStoreId;
}
public void setImageDataStoreId(long dataStoreId) {
this.imageDataStoreId = dataStoreId;
}
} }

View File

@ -22,6 +22,8 @@ import org.apache.cloudstack.storage.image.Template;
public class ImageDataStoreDriverImpl implements ImageDataStoreDriver { public class ImageDataStoreDriverImpl implements ImageDataStoreDriver {
public ImageDataStoreDriverImpl() {
}
@Override @Override
public boolean registerTemplate(Template template) { public boolean registerTemplate(Template template) {
//TODO: check the availability of template //TODO: check the availability of template

View File

@ -21,14 +21,14 @@ package org.apache.cloudstack.storage.image.manager;
import javax.inject.Inject; import javax.inject.Inject;
import org.apache.cloudstack.storage.datastore.db.DataStoreVO; import org.apache.cloudstack.storage.datastore.db.DataStoreVO;
import org.apache.cloudstack.storage.image.db.ImageDaoStoreDao; import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataDao; import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO; import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.store.ImageDataStore; import org.apache.cloudstack.storage.image.store.ImageDataStore;
public class ImageDataStoreManagerImpl implements ImageDataStoreManager { public class ImageDataStoreManagerImpl implements ImageDataStoreManager {
@Inject @Inject
ImageDaoStoreDao dataStoreDao; ImageDataStoreDao dataStoreDao;
@Inject @Inject
ImageDataDao imageDataDao; ImageDataDao imageDataDao;
@Override @Override

View File

@ -0,0 +1,53 @@
/*
* 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.image.provider;
import javax.inject.Inject;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriver;
import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriverImpl;
import org.apache.cloudstack.storage.image.store.ImageDataStore;
import org.apache.cloudstack.storage.image.store.ImageDataStoreImpl;
import org.springframework.stereotype.Component;
@Component
public class DefaultImageDataStoreProvider implements ImageDataStoreProvider {
private final String providerName = "DefaultProvider";
@Inject
ImageDataStoreProviderDao providerDao;
@Inject
ImageDataStoreDao imageStoreDao;
@Override
public ImageDataStore getImageDataStore(long imageStoreId) {
ImageDataStoreVO idsv = imageStoreDao.findById(imageStoreId);
ImageDataStoreDriver driver = new ImageDataStoreDriverImpl();
ImageDataStore ids = new ImageDataStoreImpl(idsv, driver, false, null);
return ids;
}
@Override
public String getName() {
return providerName;
}
}

View File

@ -22,4 +22,5 @@ import org.apache.cloudstack.storage.image.store.ImageDataStore;
public interface ImageDataStoreProvider { public interface ImageDataStoreProvider {
ImageDataStore getImageDataStore(long imageStoreId); ImageDataStore getImageDataStore(long imageStoreId);
public String getName();
} }

View File

@ -18,6 +18,10 @@
*/ */
package org.apache.cloudstack.storage.image.provider; package org.apache.cloudstack.storage.image.provider;
import org.apache.cloudstack.storage.image.store.ImageDataStore;
public interface ImageDataStoreProviderManager { public interface ImageDataStoreProviderManager {
public ImageDataStoreProvider getProvider(long providerId); public ImageDataStoreProvider getProvider(long providerId);
public ImageDataStore getDataStore(long dataStoreId);
public ImageDataStore getDataStoreFromTemplateId(long templateId);
} }

View File

@ -18,20 +18,56 @@
*/ */
package org.apache.cloudstack.storage.image.provider; package org.apache.cloudstack.storage.image.provider;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderDao; import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderVO;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.db.ImageDataVO;
import org.apache.cloudstack.storage.image.store.ImageDataStore;
import org.springframework.stereotype.Component;
@Component
public class ImageDataStoreProviderManagerImpl implements ImageDataStoreProviderManager { public class ImageDataStoreProviderManagerImpl implements ImageDataStoreProviderManager {
@Inject @Inject
ImageDataStoreProviderDao providerDao; ImageDataStoreProviderDao providerDao;
@Inject
ImageDataStoreDao dataStoreDao;
@Inject
ImageDataDao imageDataDao;
@Inject
List<ImageDataStoreProvider> providers;
@Override @Override
public ImageDataStoreProvider getProvider(long providerId) { public ImageDataStoreProvider getProvider(long providerId) {
return null; return null;
} }
protected ImageDataStoreProvider getProvider(String name) {
for (ImageDataStoreProvider provider : providers) {
if (provider.getName().equalsIgnoreCase(name)) {
return provider;
}
}
return null;
}
@Override
public ImageDataStore getDataStore(long dataStoreId) {
ImageDataStoreVO idsv = dataStoreDao.findById(dataStoreId);
long providerId = idsv.getProvider();
ImageDataStoreProviderVO idspv = providerDao.findById(providerId);
ImageDataStoreProvider provider = getProvider(idspv.getName());
return provider.getImageDataStore(dataStoreId);
}
@Override
public ImageDataStore getDataStoreFromTemplateId(long templateId) {
ImageDataVO iddv = imageDataDao.findById(templateId);
return getDataStore(iddv.getId());
}
} }

View File

@ -22,6 +22,8 @@ import javax.inject.Inject;
import org.apache.cloudstack.storage.image.Template; import org.apache.cloudstack.storage.image.Template;
import org.apache.cloudstack.storage.image.db.ImageDataDao; import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.db.ImageDataVO; import org.apache.cloudstack.storage.image.db.ImageDataVO;
import org.apache.cloudstack.storage.image.downloader.ImageDownloader; import org.apache.cloudstack.storage.image.downloader.ImageDownloader;
import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriver; import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriver;
@ -31,13 +33,15 @@ public class ImageDataStoreImpl implements ImageDataStore {
ImageDataDao imageDao; ImageDataDao imageDao;
ImageDataStoreDriver driver; ImageDataStoreDriver driver;
ImageDownloader downloader; ImageDownloader downloader;
ImageDataStoreVO imageDataStoreVO;
boolean needDownloadToCacheStorage = false; boolean needDownloadToCacheStorage = false;
public ImageDataStoreImpl(ImageDataStoreDriver driver, boolean needDownloadToCacheStorage, ImageDownloader downloader) { public ImageDataStoreImpl(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver driver, boolean needDownloadToCacheStorage, ImageDownloader downloader) {
this.driver = driver; this.driver = driver;
this.needDownloadToCacheStorage = needDownloadToCacheStorage; this.needDownloadToCacheStorage = needDownloadToCacheStorage;
this.downloader = downloader; this.downloader = downloader;
this.imageDataStoreVO = dataStoreVO;
} }
@Override @Override
@ -45,6 +49,7 @@ public class ImageDataStoreImpl implements ImageDataStore {
ImageDataVO idv = imageDao.findById(templateId); ImageDataVO idv = imageDao.findById(templateId);
Template template = new Template(this, idv); Template template = new Template(this, idv);
if (driver.registerTemplate(template)) { if (driver.registerTemplate(template)) {
template.setImageDataStoreId(imageDataStoreVO.getId());
return template; return template;
} else { } else {
return null; return null;
@ -53,8 +58,8 @@ public class ImageDataStoreImpl implements ImageDataStore {
@Override @Override
public String grantAccess(long templateId, long endPointId) { public String grantAccess(long templateId, long endPointId) {
// TODO Auto-generated method stub ImageDataVO idv = imageDao.findById(templateId);
return null; return idv.getUrl();
} }
@Override @Override