/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cids.custom.switchon.metadata;
import Sirius.navigator.connection.SessionManager;
import Sirius.server.middleware.types.MetaClass;
import Sirius.server.middleware.types.MetaObject;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import org.apache.log4j.Logger;
import java.net.URL;
import java.util.Map;
import java.util.UUID;
import de.cismet.cids.client.tools.DevelopmentTools;
import de.cismet.cids.dynamics.CidsBean;
import de.cismet.cids.navigator.utils.ClassCacheMultiple;
/**
* Import TRMM Resources.
*
* @author pd
* @version $Revision$, $Date$
*/
public class TRMMImport {
//~ Static fields/initializers ---------------------------------------------
private static final Logger LOG = Logger.getLogger(TRMMImport.class);
private static final int resourceTemplateObjectId = 10480; // 8969;
private static final String csvFile = "TRMM.csv"; // "GLDAS.csv";
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param args DOCUMENT ME!
*/
public static void main(final String[] args) {
try {
DevelopmentTools.initSessionManagerFromRestfulConnectionOnLocalhost(
"SWITCHON",
"Administratoren",
"admin",
"cismet");
LOG.info("server connection created");
final MetaClass resourceClass = ClassCacheMultiple.getMetaClass("SWITCHON", "resource");
final int resourceTemplateClassId = resourceClass.getId();
final CidsBean resourceTemplate = SessionManager.getProxy()
.getMetaObject(resourceTemplateObjectId + "@" + resourceTemplateClassId + "@SWITCHON")
.getBean();
if ((resourceTemplate.getBeanCollectionProperty("representation") == null)
|| resourceTemplate.getBeanCollectionProperty("representation").isEmpty()) {
throw new Exception("Template Bean '" + resourceTemplate + "' does not contain a representation!");
}
final CidsBean representationTemplate = resourceTemplate.getBeanCollectionProperty("representation").get(0);
resourceTemplate.getBeanCollectionProperty("representation").clear();
if (LOG.isDebugEnabled()) {
LOG.debug("Template Bean '" + resourceTemplate + "' loaded");
}
final CsvSchema bootstrapSchema = CsvSchema.emptySchema().withHeader();
final ObjectMapper mapper = new CsvMapper();
final MappingIterator<Map<String, String>> it = mapper.reader(Map.class)
.with(bootstrapSchema)
.readValues(GRDCStationTUWienImport.class.getResourceAsStream(csvFile));
int i = 0;
while (it.hasNext()) {
i++;
CidsBean resourceBean = null;
CidsBean representationBean = null;
final Map<String, String> rowAsMap = it.next();
final String resourceName = rowAsMap.get("name");
boolean isUpdate = false;
LOG.info("processing Resource #" + i + " '" + resourceName + "'");
System.out.println("processing Resource #" + i + " '" + resourceName + "'");
try {
String query = "SELECT " + resourceClass.getID() + ", " + resourceClass.getPrimaryKey() + " ";
query += "FROM " + resourceClass.getTableName();
query += " WHERE name ilike '%" + resourceName.replaceAll("'", "''") + "%' limit 1";
final MetaObject[] metaObjects = SessionManager.getProxy()
.getMetaObjectByQuery(SessionManager.getSession().getUser(), query, "SWITCHON");
if ((metaObjects != null) && (metaObjects.length > 0)) {
LOG.info("Resource '" + resourceName
+ "', does already exist, updating resource");
resourceBean = metaObjects[0].getBean();
isUpdate = true;
if (metaObjects.length > 1) {
LOG.warn(metaObjects.length + " entries for Resource '" + resourceName
+ "', do already exist, updating only the first resource!");
}
if ((resourceBean.getBeanCollectionProperty("representation") != null)
&& !resourceBean.getBeanCollectionProperty("representation").isEmpty()) {
representationBean = resourceBean.getBeanCollectionProperty("representation").get(0);
resourceBean.getBeanCollectionProperty("representation").clear();
} else {
representationBean = GRDCStationImport.cloneCidsBean(representationTemplate, false);
}
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("Resource '" + resourceName + "' not found, creating new resource");
}
resourceBean = GRDCStationImport.cloneCidsBean(resourceTemplate, false);
representationBean = GRDCStationImport.cloneCidsBean(representationTemplate, false);
}
} catch (Exception ex) {
LOG.error("could not search for Resource '" + resourceName + "'", ex);
}
if (resourceBean == null) {
resourceBean = GRDCStationImport.cloneCidsBean(resourceTemplate, false);
}
if (representationBean == null) {
representationBean = GRDCStationImport.cloneCidsBean(representationTemplate, false);
}
// RESOURCE ----------------------------------------------------
// resourceBean.getMetaObject().setStatus(MetaObject.NEW);
// resourceBean.setProperty("id", -1);
resourceBean.setProperty("name", resourceName);
if (LOG.isDebugEnabled()) {
LOG.debug("name: " + resourceBean.getProperty("name"));
}
final UUID uuid = UUID.randomUUID();
resourceBean.setProperty("uuid", uuid.toString());
if (LOG.isDebugEnabled()) {
LOG.debug("uuid: " + resourceBean.getProperty("uuid"));
}
// REPRESENTATION ----------------------------------------------
try {
final URL contentLocation = new URL(rowAsMap.get("uri"));
representationBean.setProperty("contentlocation", contentLocation.toString());
resourceBean.getBeanCollectionProperty("representation").add(representationBean);
} catch (Exception ex) {
LOG.error("could not set content location for Resource '" + resourceName + "'", ex);
continue;
}
// save the new resource
resourceBean = resourceBean.persist();
LOG.info("Resource #" + i + " '" + resourceName
+ "' successfully imported into Meta-Data Repository.");
}
LOG.info(i + " Resources processed");
System.exit(0);
} catch (Exception ex) {
LOG.fatal(ex.getMessage(), ex);
System.exit(1);
}
}
}