/* * Copyright (c) 2013-2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.common; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.model.Cf; import com.emc.storageos.db.client.model.DataObject; import com.emc.storageos.db.client.model.DbKeyspace; import com.emc.storageos.db.client.model.TimeSeries; import com.emc.storageos.db.client.model.TimeSeriesSerializer; import com.emc.storageos.db.common.schema.DataObjectSchema; import com.emc.storageos.db.common.schema.DataPointSchema; import com.emc.storageos.db.common.schema.DbSchema; import com.emc.storageos.db.common.schema.DbSchemas; import com.emc.storageos.db.common.schema.TimeSeriesSchema; public class DbSchemaScanner extends PackageScanner { private static final Logger log = LoggerFactory.getLogger(DbSchemaScanner.class); private DbSchemas schemas = new DbSchemas(); private List<DbSchema> geoSchemas = new ArrayList<>(); public DbSchemaScanner(String[] pkgs) { super(pkgs); } public void scan() { scan(Cf.class, XmlRootElement.class); } @Override protected void processClass(Class clazz) { DbSchema schema = null; if (DataObject.class.isAssignableFrom(clazz)) { if (_scannerInterceptor != null && _scannerInterceptor.isClassIgnored(clazz.getSimpleName())) { log.info("{} is ignored in schema due to interceptor", clazz.getSimpleName()); return; } schema = new DataObjectSchema(clazz, _scannerInterceptor); if (clazz.isAnnotationPresent(DbKeyspace.class)) { DbKeyspace anno = (DbKeyspace) clazz.getAnnotation(DbKeyspace.class); if (DbKeyspace.Keyspaces.GLOBAL.equals(anno.value())) { geoSchemas.add(schema); } } } else if (TimeSeries.class.isAssignableFrom(clazz)) { schema = new TimeSeriesSchema(clazz); } else if (TimeSeriesSerializer.DataPoint.class.isAssignableFrom(clazz)) { schema = new DataPointSchema(clazz); } else { return; } schemas.addSchema(schema); } public DbSchemas getSchemas() { return schemas; } public List<DbSchema> getGeoSchemas() { return geoSchemas; } }