package org.hawk.ifc; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Iterator; import nl.tue.buildingsmart.emf.SchemaLoader; import org.bimserver.emf.IdEObject; import org.bimserver.emf.IfcModelInterface; import org.bimserver.ifc.step.deserializer.IfcStepDeserializer; import org.bimserver.ifc.xml.deserializer.IfcXmlDeserializer; import org.bimserver.plugins.deserializers.Deserializer; import org.hawk.core.model.*; import org.hawk.core.IModelResourceFactory;; public class IFCModelResource implements IHawkModelResource { File ifc; private IModelResourceFactory parser; @Override public void unload() { ifc = null; } public IFCModelResource(File f, IModelResourceFactory p) { parser = p; ifc = f; } @Override public Iterator<IHawkObject> getAllContents() { return getAllContentsSet().iterator(); } @Override public HashSet<IHawkObject> getAllContentsSet() { HashSet<IHawkObject> allElements = new HashSet<IHawkObject>(); Deserializer d = new IfcStepDeserializer(); String[] split = ifc.getPath().split("\\."); String ext = split[split.length - 1]; if (ext.toLowerCase().equals("xml")){ d = new IfcXmlDeserializer(); } File schema = new File("../uk.ac.york.cs.mde.hawk.ifc/schema/IFC2X3_TC1.exp"); //FIXME: check it works in eclipse app if (schema.canRead() && schema.isFile()) d.init(SchemaLoader.loadSchema(schema)); else System.err.println("IFC schema file IFC2X3_TC1.exp cannot be read"); try { IfcModelInterface s = d.read(ifc); Iterator<IdEObject> it = s.getValues().iterator(); while (it.hasNext()) { allElements.add(new IFCObject(it.next())); } } catch (Exception e) { e.printStackTrace(); } return allElements; } @Override public String getType() { return parser.getType(); } @Override public int getSignature(IHawkObject o) { return o.hashCode(); } }