/* * Copyright (c) 2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis; import java.io.Serializable; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.StorageSystem.Discovery_Namespaces; import com.emc.storageos.exceptions.DeviceControllerException; import com.emc.storageos.svcs.errorhandling.model.ServiceCoded; import com.emc.storageos.volumecontroller.ControllerException; /** * Jobs common for Scanner and Discovery and even Metering. */ public abstract class DataCollectionJob implements Serializable { private static final long serialVersionUID = 3080188098065596509L; public static enum JobOrigin { USER_API, SCHEDULER; } private JobOrigin _origin; public DataCollectionJob(JobOrigin origin) { _origin = origin; } public abstract DataCollectionTaskCompleter getCompleter() throws ControllerException; public abstract void ready(DbClient dbClient) throws DeviceControllerException; public abstract void error(DbClient dbClient, ServiceCoded serviceCoded) throws DeviceControllerException; public abstract void schedule(DbClient dbClient); public abstract void setTaskError(DbClient dbClient, ServiceCoded code); public abstract void setTaskReady(DbClient dbClient, String message); public abstract void updateTask(DbClient dbClient, String message); public abstract boolean isActiveJob(DbClient dbClient); public boolean isSchedulerJob() { return (_origin == JobOrigin.SCHEDULER); } public abstract String getType(); public abstract String systemString(); public String getNamespace() { return Discovery_Namespaces.ALL.toString(); } /** * determines if the two data collection jobs are identical * * @param job * @return */ public boolean matches(DataCollectionJob job) { return (this.getClass().equals(job.getClass()) && getCompleter().getId().equals(job.getCompleter().getId()) && getCompleter().getJobType().equals(job.getCompleter().getJobType()) && getNamespace().equals(job.getNamespace())); } }