Skip to content

Commit 7faa38b

Browse files
committed
backend
1 parent 7a86e1c commit 7faa38b

2 files changed

Lines changed: 502 additions & 0 deletions

File tree

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
package org.bimserver.serializers;
2+
3+
import java.util.Comparator;
4+
import java.util.HashMap;
5+
import java.util.HashSet;
6+
import java.util.Iterator;
7+
import java.util.Map;
8+
import java.util.ServiceLoader;
9+
import java.util.Set;
10+
import java.util.TreeMap;
11+
import java.util.TreeSet;
12+
13+
import nl.tue.buildingsmart.express.dictionary.SchemaDefinition;
14+
15+
import org.bimserver.SettingsManager;
16+
import org.bimserver.citygml.CityGmlSerializer;
17+
import org.bimserver.collada.ColladaSerializer;
18+
import org.bimserver.collada.KmzSerializer;
19+
import org.bimserver.exceptions.NoSerializerFoundException;
20+
import org.bimserver.ifc.EmfSerializer;
21+
import org.bimserver.ifc.FieldIgnoreMap;
22+
import org.bimserver.ifc.IfcModel;
23+
import org.bimserver.ifc.PackageDefinition;
24+
import org.bimserver.ifc.SerializerException;
25+
import org.bimserver.ifc.file.writer.IfcStepSerializer;
26+
import org.bimserver.ifc.xml.writer.IfcXmlSerializer;
27+
import org.bimserver.ifcengine.IfcEngineFactory;
28+
import org.bimserver.models.store.Project;
29+
import org.bimserver.models.store.User;
30+
import org.bimserver.o3d.O3dJsonSerializer;
31+
import org.bimserver.shared.ResourceFetcher;
32+
import org.bimserver.shared.ResultType;
33+
import org.bimserver.shared.ResultType.DefaultSelected;
34+
import org.bimserver.shared.ResultType.Type;
35+
import org.bimserver.shared.ResultType.UseInCheckout;
36+
import org.bimserver.shared.ResultType.UserType;
37+
import org.bimserver.version.Version;
38+
39+
public class EmfSerializerFactory {
40+
41+
public abstract class EmfSerializerCreator {
42+
public abstract EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException;
43+
}
44+
45+
Comparator<ResultType> resultTypeComparator = new Comparator<ResultType>(){
46+
@Override
47+
public int compare(ResultType o1, ResultType o2) {
48+
return o1.compareTo(o2);
49+
}};
50+
51+
private static final EmfSerializerFactory INSTANCE = new EmfSerializerFactory();
52+
private final Map<String, ResultType> resultTypes = new TreeMap<String, ResultType>();
53+
private final Map<ResultType, EmfSerializerCreator> serializerCreators = new HashMap<ResultType, EmfSerializerCreator>();
54+
private FieldIgnoreMap fieldIgnoreMap;
55+
private PackageDefinition colladaSettings;
56+
private SchemaDefinition schemaDefinition;
57+
private Version version;
58+
59+
private IfcEngineFactory ifcEngineFactory;
60+
private ResourceFetcher resourceFetcher;
61+
private SettingsManager settingsManager;
62+
63+
private EmfSerializerFactory() {
64+
}
65+
66+
public static EmfSerializerFactory getInstance() {
67+
return INSTANCE;
68+
}
69+
70+
public void init(Version version, SchemaDefinition schemaDefinition, FieldIgnoreMap fieldIgnoreMap, IfcEngineFactory ifcEngineFactory, PackageDefinition colladaSettings, ResourceFetcher resourceFetcher, SettingsManager settingsManager) {
71+
this.version = version;
72+
this.schemaDefinition = schemaDefinition;
73+
this.fieldIgnoreMap = fieldIgnoreMap;
74+
this.ifcEngineFactory = ifcEngineFactory;
75+
this.colladaSettings = colladaSettings;
76+
this.resourceFetcher = resourceFetcher;
77+
this.settingsManager = settingsManager;
78+
}
79+
80+
public void register(ResultType resultType, EmfSerializerCreator emfSerializerCreator) {
81+
resultTypes.put(resultType.getName(), resultType);
82+
serializerCreators.put(resultType, emfSerializerCreator);
83+
}
84+
85+
public void unregister(ResultType resultType, EmfSerializerCreator emfSerializerCreator) {
86+
resultTypes.remove(resultType.getName());
87+
serializerCreators.remove(resultType);
88+
}
89+
90+
public EmfSerializer create(Project project, User user, ResultType resultType, IfcModel model, String name) throws NoSerializerFoundException, SerializerException {
91+
EmfSerializerCreator emfSerializerCreator = serializerCreators.get(resultType);
92+
if (emfSerializerCreator == null) {
93+
throw new NoSerializerFoundException("Serializer for type " + resultType.getNiceName() + " not found or not enabled");
94+
}
95+
return emfSerializerCreator.create(project, user, model, name);
96+
}
97+
98+
public Set<ResultType> getMultipleResultTypes() {
99+
Set<ResultType> result = new TreeSet<ResultType>(resultTypeComparator);
100+
for (ResultType resultType : resultTypes.values()) {
101+
if (resultType.getMultiple() == Type.MULTIPLE) {
102+
result.add(resultType);
103+
}
104+
}
105+
return result;
106+
}
107+
108+
public Set<ResultType> getSingleResultTypes() {
109+
Set<ResultType> result = new TreeSet<ResultType>(resultTypeComparator);
110+
for (ResultType resultType : resultTypes.values()) {
111+
if (resultType.getMultiple() == Type.SINGLE) {
112+
result.add(resultType);
113+
}
114+
}
115+
return result;
116+
}
117+
118+
public void initSerializers() {
119+
String enabledExportTypesString = settingsManager.getSettings().getEnabledExportTypes();
120+
String[] enabledExportTypes = enabledExportTypesString.split(",");
121+
Set<String> enabled = new HashSet<String>();
122+
for (String type : enabledExportTypes) {
123+
String upperCase = type.trim().toUpperCase();
124+
if (!upperCase.equals("")) {
125+
enabled.add(upperCase);
126+
}
127+
}
128+
register(new ResultType("JSON_MODEL_FORMAT_2", "JSON Model Formal 2.0", "js", "appliction/collada", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("JSON_MODEL_FORMAT_2")), new EmfSerializerCreator() {
129+
@Override
130+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
131+
JSONModelFormat2Serializer jsonModelFormat2Serializer = new JSONModelFormat2Serializer();
132+
jsonModelFormat2Serializer.init(project, user, fileName, model, fieldIgnoreMap, schemaDefinition, ifcEngineFactory);
133+
return jsonModelFormat2Serializer;
134+
}
135+
});
136+
register(new ResultType("IFC", "IFC2x3", "ifc", "application/ifc", UseInCheckout.USE_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.TRUE, enabled.contains("IFC")), new EmfSerializerCreator(){
137+
@Override
138+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) {
139+
IfcStepSerializer ifcSerializer = new IfcStepSerializer(project, user, fileName, model, schemaDefinition);
140+
ifcSerializer.setFileDescription("Bimserver.org " + version.getVersion() + " generated IFC file");
141+
ifcSerializer.setPreProcessorVersion("Bimserver.org " + version.getVersion());
142+
return ifcSerializer;
143+
}
144+
});
145+
register(new ResultType("IFCXML", "IFCXML2x3", "ifcxml", "application/ifcxml", UseInCheckout.USE_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("IFCXML")), new EmfSerializerCreator() {
146+
@Override
147+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
148+
return new IfcXmlSerializer(fileName, model, schemaDefinition);
149+
}
150+
});
151+
register(new ResultType("IFCTXT", "Plain text IFC", "txt", "text", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("IFCTXT")), new EmfSerializerCreator() {
152+
@Override
153+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
154+
IfcStepSerializer ifcSerializer = new IfcStepSerializer(project, user, fileName, model, schemaDefinition);
155+
ifcSerializer.setFileDescription("Bimserver.org " + version.getVersion() + " generated IFC file");
156+
ifcSerializer.setPreProcessorVersion("Bimserver.org " + version.getVersion());
157+
return ifcSerializer;
158+
}
159+
});
160+
register(new ResultType("CITYGML", "City GML 1.0.0", "gml", "application/gml", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("CITYGML")), new EmfSerializerCreator() {
161+
@Override
162+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
163+
CityGmlSerializer cityGmlSerializer = new CityGmlSerializer();
164+
cityGmlSerializer.init(project, user, fileName, model, schemaDefinition, fieldIgnoreMap, ifcEngineFactory);
165+
return cityGmlSerializer;
166+
}
167+
});
168+
register(new ResultType("COLLADA", "Collada", "dae", "appliction/collada", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("COLLADA")), new EmfSerializerCreator() {
169+
@Override
170+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
171+
ColladaSerializer colladaSerializer = new ColladaSerializer();
172+
colladaSerializer.init(project, user, fileName, model, schemaDefinition, fieldIgnoreMap, ifcEngineFactory, colladaSettings);
173+
return colladaSerializer;
174+
}
175+
});
176+
register(new ResultType("KMZ", "KMZ", "kmz", "application/vnd.google-earth.kmz", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("KMZ")), new EmfSerializerCreator() {
177+
@Override
178+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
179+
KmzSerializer kmzSerializer = new KmzSerializer();
180+
kmzSerializer.init(project, user, fileName, model, schemaDefinition, fieldIgnoreMap, ifcEngineFactory, colladaSettings);
181+
return kmzSerializer;
182+
}
183+
});
184+
register(new ResultType("O3D_JSON", "WebGL", "o3djson", "appliction/json", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.MULTIPLE, DefaultSelected.FALSE, enabled.contains("O3D_JSON")), new EmfSerializerCreator() {
185+
@Override
186+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) throws SerializerException {
187+
O3dJsonSerializer o3dJsonSerializer = new O3dJsonSerializer();
188+
o3dJsonSerializer.init(project, user, fileName, model, fieldIgnoreMap, schemaDefinition, ifcEngineFactory);
189+
return o3dJsonSerializer;
190+
}
191+
});
192+
register(new ResultType("OBJECT_INFO", "Object Info", "html", "text/html", UseInCheckout.USE_NOT_IN_CHECKOUT, UserType.USER_TYPE, Type.SINGLE, DefaultSelected.FALSE, enabled.contains("OBJECT_INFO")), new EmfSerializerCreator() {
193+
@Override
194+
public EmfSerializer create(Project project, User user, IfcModel model, String fileName) {
195+
ObjectInfoSerializer objectInfoSerializer = new ObjectInfoSerializer();
196+
objectInfoSerializer.init(fileName, model);
197+
return objectInfoSerializer;
198+
}
199+
});
200+
}
201+
202+
public ResultType getResultType(String resultTypeName) {
203+
return resultTypes.get(resultTypeName);
204+
}
205+
206+
public boolean resultTypeEnabled(String resultTypeName) {
207+
return getResultType(resultTypeName).isEnabled();
208+
}
209+
210+
public Set<String> getAllSerializerClassNames() {
211+
Set<String> classNames = new HashSet<String>();
212+
ServiceLoader<EmfSerializer> loader = ServiceLoader.load(EmfSerializer.class);
213+
Iterator<EmfSerializer> iterator = loader.iterator();
214+
while (iterator.hasNext()) {
215+
EmfSerializer next = iterator.next();
216+
classNames.add(next.getClass().getSimpleName());
217+
}
218+
return classNames;
219+
}
220+
}

0 commit comments

Comments
 (0)