/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis; import java.net.URI; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.DataObject; import com.emc.storageos.db.client.model.DiscoveredDataObject; import com.emc.storageos.db.client.model.DiscoveredSystemObject; import com.emc.storageos.db.exceptions.DatabaseException; import com.emc.storageos.model.ResourceOperationTypeEnum; import com.emc.storageos.volumecontroller.AsyncTask; import com.emc.storageos.volumecontroller.impl.ControllerServiceImpl; public class MeteringTaskCompleter extends DataCollectionTaskCompleter { private static final long serialVersionUID = -150746701650259111L; public MeteringTaskCompleter(Class clazz, URI id, String opId) { super(clazz, id, opId); } public MeteringTaskCompleter(AsyncTask task) { super(task); } public String getJobType() { return ControllerServiceImpl.METERING; } protected void updateObjectState(DbClient dbClient, DiscoveredDataObject.DataCollectionJobStatus jobStatus) { Class type = getType(); if (DiscoveredSystemObject.class.isAssignableFrom(type)) { try { DiscoveredSystemObject dbObject = (DiscoveredSystemObject) DataObject.createInstance(type, getId()); dbObject.trackChanges(); dbObject.setMeteringStatus(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 (DiscoveredSystemObject.class.isAssignableFrom(type)) { try { DiscoveredSystemObject dbObject = (DiscoveredSystemObject) DataObject.createInstance(type, getId()); dbObject.trackChanges(); dbObject.setNextMeteringRunTime(time); 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 setLastTime(DbClient dbClient, long time) { Class type = getType(); if (DiscoveredSystemObject.class.isAssignableFrom(type)) { try { DiscoveredSystemObject dbObject = (DiscoveredSystemObject) DataObject.createInstance(type, getId()); dbObject.trackChanges(); dbObject.setLastMeteringRunTime(time); 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 setSuccessTime(DbClient dbClient, long time) { Class type = getType(); if (DiscoveredSystemObject.class.isAssignableFrom(type)) { try { DiscoveredSystemObject dbObject = (DiscoveredSystemObject) DataObject.createInstance(type, getId()); dbObject.trackChanges(); dbObject.setSuccessMeteringTime(time); 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 protected void createDefaultOperation(DbClient dbClient) { dbClient.createTaskOpStatus(getType(), getId(), getOpId(), ResourceOperationTypeEnum.METERING_STORAGE_SYSTEM); } }