All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.tue.buildingsmart.express.population.ModelPopulation Maven / Gradle / Ivy

package nl.tue.buildingsmart.express.population;

/******************************************************************************
 * Copyright (C) 2009-2016  BIMserver.org
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero 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 Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see {@literal}.
 *****************************************************************************/

import java.io.FileInputStream;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import nl.tue.buildingsmart.schema.EntityDefinition;
import nl.tue.buildingsmart.schema.SchemaDefinition;

@SuppressWarnings("all")
public class ModelPopulation {

	private static final Logger LOGGER = LoggerFactory.getLogger(ModelPopulation.class);
	private HashMap instances;
	// hashmap of all instances sorted by type name;
	private HashMap> typeNameMap;
	private SchemaDefinition schema;
	private Part21Parser parser;
	private Path schemaFile;
	private String entityPrefixString = "ENTITY_";

	public ModelPopulation(FileInputStream input) {

		parser = new Part21Parser(input);

	}

	public SchemaDefinition getSchema() {
		return schema;
	}

	public void setSchema(SchemaDefinition schema) {
		this.schema = schema;
		if (this.parser != null)
			this.parser.setSchema(schema);
	}

	public Path getSchemaFile() {
		return schemaFile;
	}

	public void setSchemaFile(Path schemaFile) {
		this.schemaFile = schemaFile;
		parser.setSchemaFile(schemaFile);
	}

	public void load() {
		try {
			parser.setModel(this);
			parser.init();
			parser.syntax();
			this.setInstances(parser.getInstances());
			buildTypeNameMap();

		} catch (ParseException e) {
			// TODO Auto-generated catch block
			LOGGER.error("", e);
		}
	}

	public HashMap getInstances() {
		return instances;
	}

	public void setInstances(HashMap instances) {
		this.instances = instances;
	}

	public EntityInstance getEntity(Integer id) {
		return instances.get(id);
	}

	private void buildTypeNameMap() {
		typeNameMap = new HashMap>();
		for (Iterator instKeyIter = instances.keySet().iterator(); instKeyIter.hasNext();) {
			EntityInstance inst = instances.get(instKeyIter.next());

			String typeName = inst.getEntityDefinition().getName();
			if (!typeNameMap.containsKey(typeName)) {
				typeNameMap.put(typeName, new Vector());
			}
			typeNameMap.get(typeName).add(inst);
		}
	}

	public Vector getInstancesOfType(String typeName) {
		return getInstancesOfType(typeName, false);
	}

	/**
	 * Given an (abstract) supertype recursively descends down the subtype axis
	 * until the first layer first layer of concrete types is found and returns
	 * all instances
	 * 
	 * @param typeName
	 *            the (abstract) type name
	 * @return a vector of EntityInstances of possible various (concrete) types
	 */
	public Vector getInstancesOfFirstNonAbstractTypes(String typeName) {
		Vector instances = new Vector();
		EntityDefinition ent = schema.getEnitiesBN().get(typeName.toUpperCase());
		if (!ent.isInstantiable()) {
			for (EntityDefinition subEnt : ent.getSubtypes()) {
				Vector tmp = getInstancesOfFirstNonAbstractTypes(subEnt.getName());
				instances.addAll(tmp);
			}

		} else {
			Vector tmp = getInstancesOfType(ent.getName());
			instances.addAll(tmp);

		}

		return instances;
	}

	public Vector getInstancesOfType(String typeName, boolean includeSubClasses) {
		// get the direct instances
		System.out.println("checking:" + typeName);
		// typeName=typeName.toUpperCase();
		Vector instances = typeNameMap.get(typeName);
		if (includeSubClasses) {
			// recurse into subtypes and get respective instances
			EntityDefinition ent = schema.getEnitiesBN().get(typeName.toUpperCase());
			for (EntityDefinition subClass : ent.getSubtypes()) {
				Vector subClassInstances = getInstancesOfType(subClass.getName(), includeSubClasses);
				if (subClassInstances != null) {
					if (instances == null)
						instances = new Vector();
					instances.addAll(subClassInstances);
				}
			}
		}

		if (instances == null)
			instances = new Vector();
		return instances;
	}

	public String getEntityPrefix() {
		// TODO Auto-generated method stub
		return entityPrefixString;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy