Package org.apache.cloudstack.storage.image.store

Source Code of org.apache.cloudstack.storage.image.store.ImageStoreImpl

/*
* 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.store;

import java.util.Date;
import java.util.Set;
import java.util.concurrent.ExecutionException;

import javax.inject.Inject;

import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
import org.apache.cloudstack.engine.subsystem.api.storage.ImageStoreProvider;
import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.framework.async.AsyncCallFuture;
import org.apache.cloudstack.storage.command.CommandResult;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
import org.apache.cloudstack.storage.image.ImageStoreDriver;
import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
import org.apache.cloudstack.storage.to.ImageStoreTO;
import org.apache.log4j.Logger;

import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.capacity.dao.CapacityDao;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.utils.component.ComponentContext;

public class ImageStoreImpl implements ImageStoreEntity {
    private static final Logger s_logger = Logger.getLogger(ImageStoreImpl.class);
    @Inject
    VMTemplateDao imageDao;
    @Inject
    private ObjectInDataStoreManager objectInStoreMgr;
    @Inject
    private CapacityDao capacityDao;
    protected ImageStoreDriver driver;
    protected ImageStoreVO imageDataStoreVO;
    protected ImageStoreProvider provider;

    public ImageStoreImpl() {
        super();
    }

    protected void configure(ImageStoreVO dataStoreVO, ImageStoreDriver imageDataStoreDriver,
            ImageStoreProvider provider) {
        this.driver = imageDataStoreDriver;
        this.imageDataStoreVO = dataStoreVO;
        this.provider = provider;
    }

    public static ImageStoreEntity getDataStore(ImageStoreVO dataStoreVO, ImageStoreDriver imageDataStoreDriver,
            ImageStoreProvider provider) {
        ImageStoreImpl instance = ComponentContext.inject(ImageStoreImpl.class);
        instance.configure(dataStoreVO, imageDataStoreDriver, provider);
        return instance;
    }

    @Override
    public Set<TemplateInfo> listTemplates() {
        return null;
    }

    @Override
    public DataStoreDriver getDriver() {
        return this.driver;
    }

    @Override
    public DataStoreRole getRole() {
        return this.imageDataStoreVO.getRole();
    }

    @Override
    public long getId() {
        return this.imageDataStoreVO.getId();
    }

    @Override
    public String getUri() {
        return this.imageDataStoreVO.getUrl();
    }

    @Override
    public Scope getScope() {
        return new ZoneScope(imageDataStoreVO.getDataCenterId());
    }

    @Override
    public TemplateInfo getTemplate(long templateId) {
        return null;
    }

    @Override
    public VolumeInfo getVolume(long volumeId) {
        return null;
    }

    @Override
    public SnapshotInfo getSnapshot(long snapshotId) {
        return null;
    }

    @Override
    public boolean exists(DataObject object) {
        return (objectInStoreMgr.findObject(object, this) != null) ? true : false;
    }

    @Override
    public String getUuid() {
        return this.imageDataStoreVO.getUuid();
    }

    public Date getCreated() {
        return this.imageDataStoreVO.getCreated();
    }

    @Override
    public DataObject create(DataObject obj) {
        DataObject object = objectInStoreMgr.create(obj, this);
        return object;
    }

    @Override
    public boolean delete(DataObject obj) {
        AsyncCallFuture<CommandResult> future = new AsyncCallFuture<CommandResult>();
        this.driver.deleteAsync(obj.getDataStore(), obj, future);
        try {
            future.get();
        } catch (InterruptedException e) {
            s_logger.debug("failed delete obj", e);
            return false;
        } catch (ExecutionException e) {
            s_logger.debug("failed delete obj", e);
            return false;
        }
        objectInStoreMgr.delete(obj);
        return true;
    }

    @Override
    public String getName() {
        return imageDataStoreVO.getName();
    }

    @Override
    public Long getDataCenterId() {
        return imageDataStoreVO.getDataCenterId();
    }

    @Override
    public String getProviderName() {
        return imageDataStoreVO.getProviderName();
    }

    @Override
    public String getProtocol() {
        return imageDataStoreVO.getProtocol();
    }

    @Override
    public DataStoreTO getTO() {
        DataStoreTO to = getDriver().getStoreTO(this);
        if (to == null) {
            ImageStoreTO primaryTO = new ImageStoreTO();
            primaryTO.setProviderName(getProviderName());
            primaryTO.setRole(getRole());
            primaryTO.setType(getProtocol());
            primaryTO.setUri(getUri());
            return primaryTO;
        }
        return to;
    }

    @Override
    public String getMountPoint() {
        return imageDataStoreVO.getParent();
    }

    @Override
    public String createEntityExtractUrl(String installPath, ImageFormat format, DataObject dataObject) {
        return driver.createEntityExtractUrl(this, installPath, format, dataObject);
    }


}
TOP

Related Classes of org.apache.cloudstack.storage.image.store.ImageStoreImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.