Java tutorial
/* Copyright 2013 Red Hat, Inc. and/or its affiliates. This file is part of lightblue. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.redhat.lightblue.mongo.config; import org.bson.BSONObject; import com.fasterxml.jackson.databind.JsonNode; import com.redhat.lightblue.common.mongo.DBResolver; import com.redhat.lightblue.common.mongo.MongoDataStore; import com.redhat.lightblue.config.AbstractMetadataConfiguration; import com.redhat.lightblue.config.DataSourceConfiguration; import com.redhat.lightblue.config.DataSourcesConfiguration; import com.redhat.lightblue.config.LightblueFactory; import com.redhat.lightblue.metadata.Metadata; import com.redhat.lightblue.metadata.mongo.MongoDataStoreParser; import com.redhat.lightblue.metadata.mongo.MongoMetadata; import com.redhat.lightblue.metadata.parser.Extensions; import com.redhat.lightblue.metadata.parser.JSONMetadataParser; import com.redhat.lightblue.metadata.types.DefaultTypes; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; public class MongoMetadataConfiguration extends AbstractMetadataConfiguration { private String datasource; private String collection; @Override public Metadata createMetadata(DataSourcesConfiguration datasources, JSONMetadataParser jsonParser, LightblueFactory factory) { DataSourceConfiguration cfg = datasources.getDataSourceConfiguration(datasource); if (cfg != null) { DBResolver dbresolver = new MongoDBResolver(datasources); Extensions<BSONObject> parserExtensions = new Extensions<>(); parserExtensions.addDefaultExtensions(); parserExtensions.registerDataStoreParser(MongoDataStoreParser.NAME, new MongoDataStoreParser<BSONObject>()); // register any of the common configuration bits from abstract parent registerWithExtensions(parserExtensions); try { factory.getJSONParser().getExtensions().mergeWith(parserExtensions); } catch (Exception e) { throw new IllegalArgumentException(e); } DefaultTypes typeResolver = new DefaultTypes(); MongoDataStore mdstore = new MongoDataStore(); mdstore.setDatasourceName(datasource); try { MongoMetadata mongoMetadata = null; if (collection == null) { mongoMetadata = new MongoMetadata(dbresolver.get(mdstore), parserExtensions, typeResolver, factory.getFactory()); } else { mongoMetadata = new MongoMetadata(dbresolver.get(mdstore), collection, parserExtensions, typeResolver, factory.getFactory()); } mongoMetadata.setRoleMap(getMappedRoles()); return mongoMetadata; } catch (RuntimeException re) { throw re; } catch (Exception e) { throw new IllegalArgumentException(e); } } else { throw new IllegalArgumentException(datasource); } } /** * @return the datasource name */ public String getDataSource() { return datasource; } /** * @param name the datasource name to set */ public void setDataSource(String name) { this.datasource = name; } /** * @return the collection */ public String getCollection() { return collection; } /** * @param collection the collection to set */ public void setCollection(String collection) { this.collection = collection; } @Override public String toString() { return "dataSource:" + datasource + " collection:" + collection; } @Override public void initializeFromJson(JsonNode node) { // init from super (gets hook configuration parsers and anything else that's common) super.initializeFromJson(node); if (node != null) { JsonNode x = node.get("dataSource"); if (x != null) { datasource = x.asText(); } x = node.get("collection"); if (x != null) { collection = x.asText(); } } } }