/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis;
import java.net.URI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.DiscoveredDataObject.DataCollectionJobStatus;
import com.emc.storageos.db.client.model.StorageProvider;
import com.emc.storageos.db.exceptions.DatabaseException;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.model.ResourceOperationTypeEnum;
import com.emc.storageos.volumecontroller.AsyncTask;
import com.emc.storageos.volumecontroller.impl.ControllerServiceImpl;
public class ScanTaskCompleter extends DataCollectionTaskCompleter {
/**
* Reference to logger
*/
private transient static final Logger _log = LoggerFactory.getLogger(ScanTaskCompleter.class);
private static final long serialVersionUID = -3243938417237476539L;
public ScanTaskCompleter(Class clazz, URI id, String opId) {
super(clazz, id, opId);
}
public ScanTaskCompleter(AsyncTask task) {
super(task);
}
public String getJobType() {
return ControllerServiceImpl.SCANNER;
}
protected void setLastTime(StorageProvider dbObject) {
dbObject.setLastScanTime(System.currentTimeMillis());
}
@Override
protected void updateObjectState(DbClient dbClient,
DataCollectionJobStatus jobStatus) {
Class type = getType();
if (StorageProvider.class.isAssignableFrom(type)) {
try {
StorageProvider dbObject = (StorageProvider) DataObject.createInstance(type, getId());
dbObject.trackChanges();
dbObject.setScanStatus(jobStatus.toString());
dbClient.persistObject(dbObject);
} catch (InstantiationException ex) {
DatabaseException.fatals.queryFailed(ex);
} catch (IllegalAccessException ex) {
DatabaseException.fatals.queryFailed(ex);
}
}
else {
throw new RuntimeException("Unsupported system Type : " + type.toString());
}
}
@Override
final public void setNextRunTime(DbClient dbClient, long time) {
Class type = getType();
if (StorageProvider.class.isAssignableFrom(type)) {
try {
StorageProvider dbObject = (StorageProvider) DataObject.createInstance(type, getId());
dbObject.trackChanges();
dbObject.setNextScanTime(time);
dbClient.persistObject(dbObject);
} catch (InstantiationException ex) {
DatabaseException.fatals.queryFailed(ex);
} catch (IllegalAccessException ex) {
DatabaseException.fatals.queryFailed(ex);
}
}
else {
throw DeviceControllerException.exceptions.invalidSystemType(type.toString());
}
}
@Override
final public void setLastTime(DbClient dbClient, long time) {
Class type = getType();
if (StorageProvider.class.isAssignableFrom(type)) {
try {
StorageProvider dbObject = (StorageProvider) DataObject.createInstance(type, getId());
dbObject.trackChanges();
dbObject.setLastScanTime(time);
dbClient.persistObject(dbObject);
} catch (InstantiationException ex) {
DatabaseException.fatals.queryFailed(ex);
} catch (IllegalAccessException ex) {
DatabaseException.fatals.queryFailed(ex);
}
}
else {
throw DeviceControllerException.exceptions.invalidSystemType(type.toString());
}
}
@Override
final public void setSuccessTime(DbClient dbClient, long time) {
Class type = getType();
if (StorageProvider.class.isAssignableFrom(type)) {
try {
StorageProvider dbObject = (StorageProvider) DataObject.createInstance(type, getId());
dbObject.trackChanges();
dbObject.setSuccessScanTime(time);
dbClient.persistObject(dbObject);
} catch (InstantiationException ex) {
DatabaseException.fatals.queryFailed(ex);
} catch (IllegalAccessException ex) {
DatabaseException.fatals.queryFailed(ex);
}
}
else {
throw DeviceControllerException.exceptions.invalidSystemType(type.toString());
}
}
@Override
final protected void createDefaultOperation(DbClient dbClient) {
dbClient.createTaskOpStatus(getType(), getId(), getOpId(),
ResourceOperationTypeEnum.SCAN_STORAGEPROVIDER);
}
}