/*
* Copyright 2015 EMC Corporation
* Copyright 2016 Intel Corporation
*
* Licensed 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 com.emc.storageos.api.service.impl.response;
import static com.emc.storageos.model.ResourceTypeEnum.ACTIONABLE_EVENT;
import static com.emc.storageos.model.ResourceTypeEnum.AUTHN_PROVIDER;
import static com.emc.storageos.model.ResourceTypeEnum.AUTO_TIERING_POLICY;
import static com.emc.storageos.model.ResourceTypeEnum.BLOCK_CONSISTENCY_GROUP;
import static com.emc.storageos.model.ResourceTypeEnum.BLOCK_MIRROR;
import static com.emc.storageos.model.ResourceTypeEnum.BLOCK_SNAPSHOT;
import static com.emc.storageos.model.ResourceTypeEnum.BLOCK_SNAPSHOT_SESSION;
import static com.emc.storageos.model.ResourceTypeEnum.BLOCK_VPOOL;
import static com.emc.storageos.model.ResourceTypeEnum.BUCKET;
import static com.emc.storageos.model.ResourceTypeEnum.CATALOG_CATEGORY;
import static com.emc.storageos.model.ResourceTypeEnum.CATALOG_IMAGE;
import static com.emc.storageos.model.ResourceTypeEnum.CATALOG_SERVICE;
import static com.emc.storageos.model.ResourceTypeEnum.CATALOG_SERVICE_FIELD;
import static com.emc.storageos.model.ResourceTypeEnum.CLUSTER;
import static com.emc.storageos.model.ResourceTypeEnum.COMPUTE_ELEMENT;
import static com.emc.storageos.model.ResourceTypeEnum.COMPUTE_IMAGE;
import static com.emc.storageos.model.ResourceTypeEnum.COMPUTE_IMAGESERVER;
import static com.emc.storageos.model.ResourceTypeEnum.COMPUTE_SYSTEM;
import static com.emc.storageos.model.ResourceTypeEnum.COMPUTE_VPOOL;
import static com.emc.storageos.model.ResourceTypeEnum.CUSTOM_CONFIG;
import static com.emc.storageos.model.ResourceTypeEnum.DATA_STORE;
import static com.emc.storageos.model.ResourceTypeEnum.EXECUTION_WINDOW;
import static com.emc.storageos.model.ResourceTypeEnum.EXPORT_GROUP;
import static com.emc.storageos.model.ResourceTypeEnum.FC_PORT_CONNECTION;
import static com.emc.storageos.model.ResourceTypeEnum.FILE;
import static com.emc.storageos.model.ResourceTypeEnum.FILE_POLICY;
import static com.emc.storageos.model.ResourceTypeEnum.FILE_SNAPSHOT;
import static com.emc.storageos.model.ResourceTypeEnum.FILE_VPOOL;
import static com.emc.storageos.model.ResourceTypeEnum.HOST;
import static com.emc.storageos.model.ResourceTypeEnum.INITIATOR;
import static com.emc.storageos.model.ResourceTypeEnum.IPINTERFACE;
import static com.emc.storageos.model.ResourceTypeEnum.MIGRATION;
import static com.emc.storageos.model.ResourceTypeEnum.NETWORK;
import static com.emc.storageos.model.ResourceTypeEnum.NETWORK_SYSTEM;
import static com.emc.storageos.model.ResourceTypeEnum.OBJECT_VPOOL;
import static com.emc.storageos.model.ResourceTypeEnum.OPENSTACK_TENANT;
import static com.emc.storageos.model.ResourceTypeEnum.ORDER;
import static com.emc.storageos.model.ResourceTypeEnum.PROJECT;
import static com.emc.storageos.model.ResourceTypeEnum.PROTECTION_SET;
import static com.emc.storageos.model.ResourceTypeEnum.PROTECTION_SYSTEM;
import static com.emc.storageos.model.ResourceTypeEnum.QUOTA_DIR;
import static com.emc.storageos.model.ResourceTypeEnum.RDF_GROUP;
import static com.emc.storageos.model.ResourceTypeEnum.SCHEDULE_POLICY;
import static com.emc.storageos.model.ResourceTypeEnum.SMIS_PROVIDER;
import static com.emc.storageos.model.ResourceTypeEnum.STORAGE_POOL;
import static com.emc.storageos.model.ResourceTypeEnum.STORAGE_PORT;
import static com.emc.storageos.model.ResourceTypeEnum.STORAGE_PROVIDER;
import static com.emc.storageos.model.ResourceTypeEnum.STORAGE_SYSTEM;
import static com.emc.storageos.model.ResourceTypeEnum.STORAGE_SYSTEM_TYPE;
import static com.emc.storageos.model.ResourceTypeEnum.STORAGE_TIER;
import static com.emc.storageos.model.ResourceTypeEnum.SYS_EVENT;
import static com.emc.storageos.model.ResourceTypeEnum.TASK;
import static com.emc.storageos.model.ResourceTypeEnum.TENANT;
import static com.emc.storageos.model.ResourceTypeEnum.UNMANAGED_FILESYSTEMS;
import static com.emc.storageos.model.ResourceTypeEnum.UNMANAGED_VOLUMES;
import static com.emc.storageos.model.ResourceTypeEnum.USER_GROUP;
import static com.emc.storageos.model.ResourceTypeEnum.VARRAY;
import static com.emc.storageos.model.ResourceTypeEnum.VCENTER;
import static com.emc.storageos.model.ResourceTypeEnum.VCENTERDATACENTER;
import static com.emc.storageos.model.ResourceTypeEnum.VDC;
import static com.emc.storageos.model.ResourceTypeEnum.VIRTUAL_NAS;
import static com.emc.storageos.model.ResourceTypeEnum.VOLUME;
import static com.emc.storageos.model.ResourceTypeEnum.VOLUME_GROUP;
import static com.emc.storageos.model.ResourceTypeEnum.VPLEX_MIRROR;
import static com.emc.storageos.model.ResourceTypeEnum.VPOOL;
import static com.emc.storageos.model.ResourceTypeEnum.WORKFLOW;
import static com.emc.storageos.model.ResourceTypeEnum.WORKFLOW_STEP;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.model.ActionableEvent;
import com.emc.storageos.db.client.model.AuthnProvider;
import com.emc.storageos.db.client.model.AutoTieringPolicy;
import com.emc.storageos.db.client.model.BlockConsistencyGroup;
import com.emc.storageos.db.client.model.BlockMirror;
import com.emc.storageos.db.client.model.BlockSnapshot;
import com.emc.storageos.db.client.model.BlockSnapshotSession;
import com.emc.storageos.db.client.model.Bucket;
import com.emc.storageos.db.client.model.Cluster;
import com.emc.storageos.db.client.model.ComputeElement;
import com.emc.storageos.db.client.model.ComputeImage;
import com.emc.storageos.db.client.model.ComputeImageServer;
import com.emc.storageos.db.client.model.ComputeSystem;
import com.emc.storageos.db.client.model.ComputeVirtualPool;
import com.emc.storageos.db.client.model.CustomConfig;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.ExportGroup;
import com.emc.storageos.db.client.model.FCEndpoint;
import com.emc.storageos.db.client.model.FilePolicy;
import com.emc.storageos.db.client.model.FileShare;
import com.emc.storageos.db.client.model.Host;
import com.emc.storageos.db.client.model.HostingDeviceInfo;
import com.emc.storageos.db.client.model.Initiator;
import com.emc.storageos.db.client.model.IpInterface;
import com.emc.storageos.db.client.model.Migration;
import com.emc.storageos.db.client.model.Network;
import com.emc.storageos.db.client.model.NetworkSystem;
import com.emc.storageos.db.client.model.OSTenant;
import com.emc.storageos.db.client.model.Project;
import com.emc.storageos.db.client.model.ProtectionSet;
import com.emc.storageos.db.client.model.ProtectionSystem;
import com.emc.storageos.db.client.model.QuotaDirectory;
import com.emc.storageos.db.client.model.RemoteDirectorGroup;
import com.emc.storageos.db.client.model.SMISProvider;
import com.emc.storageos.db.client.model.SchedulePolicy;
import com.emc.storageos.db.client.model.Snapshot;
import com.emc.storageos.db.client.model.StoragePool;
import com.emc.storageos.db.client.model.StoragePort;
import com.emc.storageos.db.client.model.StorageProvider;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.db.client.model.StorageSystemType;
import com.emc.storageos.db.client.model.StorageTier;
import com.emc.storageos.db.client.model.SysEvent;
import com.emc.storageos.db.client.model.Task;
import com.emc.storageos.db.client.model.TenantOrg;
import com.emc.storageos.db.client.model.UserGroup;
import com.emc.storageos.db.client.model.Vcenter;
import com.emc.storageos.db.client.model.VcenterDataCenter;
import com.emc.storageos.db.client.model.VirtualArray;
import com.emc.storageos.db.client.model.VirtualDataCenter;
import com.emc.storageos.db.client.model.VirtualNAS;
import com.emc.storageos.db.client.model.VirtualPool;
import com.emc.storageos.db.client.model.Volume;
import com.emc.storageos.db.client.model.VolumeGroup;
import com.emc.storageos.db.client.model.VplexMirror;
import com.emc.storageos.db.client.model.Workflow;
import com.emc.storageos.db.client.model.WorkflowStep;
import com.emc.storageos.db.client.model.UnManagedDiscoveredObjects.UnManagedFileSystem;
import com.emc.storageos.db.client.model.UnManagedDiscoveredObjects.UnManagedVolume;
import com.emc.storageos.db.client.model.uimodels.CatalogCategory;
import com.emc.storageos.db.client.model.uimodels.CatalogImage;
import com.emc.storageos.db.client.model.uimodels.CatalogService;
import com.emc.storageos.db.client.model.uimodels.CatalogServiceField;
import com.emc.storageos.db.client.model.uimodels.ExecutionWindow;
import com.emc.storageos.db.client.model.uimodels.Order;
import com.emc.storageos.model.ResourceTypeEnum;
public class ResourceTypeMapping {
private static final Logger _log = LoggerFactory.getLogger(ResourceTypeMapping.class);
// Mapping of Resource Type -> DB Class
private static final Map<ResourceTypeEnum, Class<? extends DataObject>> classMapping = new HashMap<>();
// Reverse mapping of DB Class -> Resource Type
private static final Map<Class<? extends DataObject>, ResourceTypeEnum> resourceMapping = new HashMap<>();
static {
classMapping.put(FILE, FileShare.class);
classMapping.put(VOLUME, Volume.class);
classMapping.put(BUCKET, Bucket.class);
classMapping.put(PROJECT, Project.class);
classMapping.put(TENANT, TenantOrg.class);
// TODO: Conflict between VPOOL types
classMapping.put(VPOOL, VirtualPool.class);
classMapping.put(BLOCK_VPOOL, VirtualPool.class);
classMapping.put(FILE_VPOOL, VirtualPool.class);
classMapping.put(OBJECT_VPOOL, VirtualPool.class);
classMapping.put(VARRAY, VirtualArray.class);
classMapping.put(STORAGE_SYSTEM, StorageSystem.class);
classMapping.put(STORAGE_POOL, StoragePool.class);
classMapping.put(STORAGE_TIER, StorageTier.class);
classMapping.put(STORAGE_PORT, StoragePort.class);
classMapping.put(RDF_GROUP, RemoteDirectorGroup.class);
classMapping.put(PROTECTION_SYSTEM, ProtectionSystem.class);
classMapping.put(PROTECTION_SET, ProtectionSet.class);
classMapping.put(FILE_SNAPSHOT, Snapshot.class);
classMapping.put(FILE_POLICY, FilePolicy.class);
classMapping.put(BLOCK_SNAPSHOT, BlockSnapshot.class);
classMapping.put(BLOCK_MIRROR, BlockMirror.class);
classMapping.put(VPLEX_MIRROR, VplexMirror.class);
classMapping.put(NETWORK, Network.class);
classMapping.put(EXPORT_GROUP, ExportGroup.class);
classMapping.put(SMIS_PROVIDER, SMISProvider.class);
classMapping.put(STORAGE_PROVIDER, StorageProvider.class);
classMapping.put(NETWORK_SYSTEM, NetworkSystem.class);
classMapping.put(FC_PORT_CONNECTION, FCEndpoint.class);
classMapping.put(AUTHN_PROVIDER, AuthnProvider.class);
classMapping.put(WORKFLOW, Workflow.class);
classMapping.put(WORKFLOW_STEP, WorkflowStep.class);
classMapping.put(HOST, Host.class);
classMapping.put(COMPUTE_SYSTEM, ComputeSystem.class);
classMapping.put(COMPUTE_ELEMENT, ComputeElement.class);
classMapping.put(COMPUTE_IMAGE, ComputeImage.class);
classMapping.put(COMPUTE_VPOOL, ComputeVirtualPool.class);
classMapping.put(VCENTER, Vcenter.class);
classMapping.put(CLUSTER, Cluster.class);
classMapping.put(INITIATOR, Initiator.class);
classMapping.put(IPINTERFACE, IpInterface.class);
classMapping.put(VCENTERDATACENTER, VcenterDataCenter.class);
classMapping.put(AUTO_TIERING_POLICY, AutoTieringPolicy.class);
classMapping.put(MIGRATION, Migration.class);
classMapping.put(UNMANAGED_VOLUMES, UnManagedVolume.class);
classMapping.put(UNMANAGED_FILESYSTEMS, UnManagedFileSystem.class);
classMapping.put(DATA_STORE, HostingDeviceInfo.class);
classMapping.put(BLOCK_CONSISTENCY_GROUP, BlockConsistencyGroup.class);
classMapping.put(VDC, VirtualDataCenter.class);
classMapping.put(TASK, Task.class);
classMapping.put(QUOTA_DIR, QuotaDirectory.class);
classMapping.put(CUSTOM_CONFIG, CustomConfig.class);
classMapping.put(SYS_EVENT, SysEvent.class);
classMapping.put(USER_GROUP, UserGroup.class);
classMapping.put(VIRTUAL_NAS, VirtualNAS.class);
classMapping.put(COMPUTE_IMAGESERVER, ComputeImageServer.class);
classMapping.put(VOLUME_GROUP, VolumeGroup.class);
classMapping.put(BLOCK_SNAPSHOT_SESSION, BlockSnapshotSession.class);
classMapping.put(SCHEDULE_POLICY, SchedulePolicy.class);
classMapping.put(OPENSTACK_TENANT, OSTenant.class);
classMapping.put(STORAGE_SYSTEM_TYPE, StorageSystemType.class);
classMapping.put(CATALOG_SERVICE, CatalogService.class);
classMapping.put(ORDER, Order.class);
classMapping.put(CATALOG_CATEGORY, CatalogCategory.class);
classMapping.put(CATALOG_SERVICE_FIELD, CatalogServiceField.class);
classMapping.put(CATALOG_IMAGE, CatalogImage.class);
classMapping.put(ACTIONABLE_EVENT, ActionableEvent.class);
classMapping.put(EXECUTION_WINDOW, ExecutionWindow.class);
for (Map.Entry<ResourceTypeEnum, Class<? extends DataObject>> entry : classMapping.entrySet()) {
resourceMapping.put(entry.getValue(), entry.getKey());
}
}
public static Class<? extends DataObject> getDataObjectClass(ResourceTypeEnum type) {
return classMapping.get(type);
}
public static ResourceTypeEnum getResourceType(DataObject object) {
return getResourceType(object.getClass());
}
public static ResourceTypeEnum getResourceType(Class objectClazz) {
if (!resourceMapping.containsKey(objectClazz)) {
_log.error("No resourceMapping for type " + objectClazz.getName());
}
return resourceMapping.get(objectClazz);
}
}