/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.metadata; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.NavigableMap; import java.util.TreeMap; import org.teiid.adminapi.impl.DataPolicyMetadata.PermissionMetaData; import org.teiid.runtime.client.Messages; /** * Simple holder for metadata. */ public class MetadataStore implements Serializable { protected static class Grant implements Serializable { private static final long serialVersionUID = -3768577122034702953L; protected String role; protected PermissionMetaData perm; public Grant(String role, PermissionMetaData perm) { this.role = role; this.perm = perm; } public String getRole() { return role; } public PermissionMetaData getPermission() { return perm; } } private static final long serialVersionUID = -3130247626435324312L; protected NavigableMap<String, Schema> schemas = new TreeMap<String, Schema>(String.CASE_INSENSITIVE_ORDER); protected List<Schema> schemaList = new ArrayList<Schema>(); //used for a stable ordering protected NavigableMap<String, Datatype> datatypes = new TreeMap<String, Datatype>(String.CASE_INSENSITIVE_ORDER); protected List<Grant> grants; public NavigableMap<String, Schema> getSchemas() { return schemas; } public Schema getSchema(String name) { return this.schemas.get(name); } public void addSchema(Schema schema) { if (this.schemas.put(schema.getName(), schema) != null) { throw new RuntimeException(Messages.gs(Messages.TEIID.TEIID60012, schema.getName())); } this.schemaList.add(schema); } public List<Schema> getSchemaList() { return schemaList; } public void addDataTypes(Collection<Datatype> types) { if (types != null){ for (Datatype type:types) { addDatatype(type); } } } public void addDatatype(Datatype datatype) { if (!this.datatypes.containsKey(datatype.getName())) { this.datatypes.put(datatype.getName(), datatype); } } public NavigableMap<String, Datatype> getDatatypes() { return datatypes; } public void merge(MetadataStore store) { if (store != null) { for (Schema s:store.getSchemaList()) { addSchema(s); } addDataTypes(store.getDatatypes().values()); addGrants(store.grants); } } void addGrants(List<Grant> g) { if (g == null) { return; } if (this.grants == null) { this.grants = new ArrayList<Grant>(); } this.grants.addAll(g); } }