/*
* citygml4j - The Open Source Java API for CityGML
* https://github.com/citygml4j
*
* Copyright 2013-2017 Claus Nagel <claus.nagel@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.citygml4j.model.module.citygml;
import java.util.ArrayList;
import java.util.List;
import org.citygml4j.model.module.AbstractModuleConfiguration;
import org.citygml4j.model.module.Module;
import org.citygml4j.model.module.gml.GMLCoreModule;
import org.citygml4j.model.module.gml.GMLModule;
import org.citygml4j.model.module.gml.XLinkModule;
import org.citygml4j.model.module.xal.AbstractXALModule;
import org.citygml4j.model.module.xal.XALCoreModule;
public class CityGMLVersion extends AbstractModuleConfiguration {
private static final List<CityGMLVersion> instances = new ArrayList<CityGMLVersion>();
public static final CityGMLVersion DEFAULT;
public static final CityGMLVersion v2_0_0;
public static final CityGMLVersion v1_0_0;
private CityGMLVersion(Module... modules) {
super(modules);
instances.add(this);
}
static {
v2_0_0 = new CityGMLVersion(
AppearanceModule.v2_0_0,
BridgeModule.v2_0_0,
BuildingModule.v2_0_0,
CityFurnitureModule.v2_0_0,
CityObjectGroupModule.v2_0_0,
CoreModule.v2_0_0,
GenericsModule.v2_0_0,
LandUseModule.v2_0_0,
ReliefModule.v2_0_0,
TexturedSurfaceModule.v2_0_0,
TransportationModule.v2_0_0,
TunnelModule.v2_0_0,
VegetationModule.v2_0_0,
WaterBodyModule.v2_0_0,
GMLCoreModule.v3_1_1,
XLinkModule.v3_1_1,
XALCoreModule.v2_0
);
v1_0_0 = new CityGMLVersion(
AppearanceModule.v1_0_0,
BuildingModule.v1_0_0,
CityFurnitureModule.v1_0_0,
CityObjectGroupModule.v1_0_0,
CoreModule.v1_0_0,
GenericsModule.v1_0_0,
LandUseModule.v1_0_0,
ReliefModule.v1_0_0,
TexturedSurfaceModule.v1_0_0,
TransportationModule.v1_0_0,
VegetationModule.v1_0_0,
WaterBodyModule.v1_0_0,
GMLCoreModule.v3_1_1,
XLinkModule.v3_1_1,
XALCoreModule.v2_0
);
DEFAULT = v2_0_0;
}
public List<CityGMLModule> getCityGMLModules() {
List<CityGMLModule> citygml = new ArrayList<CityGMLModule>();
for (Module module : modules)
if (module instanceof CityGMLModule)
citygml.add((CityGMLModule)module);
return citygml;
}
public CityGMLModule getCityGMLModule(CityGMLModuleType type) {
for (CityGMLModule module : getCityGMLModules())
if (module.getType() == type)
return module;
return null;
}
public List<GMLModule> getGMLModules() {
List<GMLModule> gml = new ArrayList<GMLModule>();
for (Module module : modules)
if (module instanceof GMLModule)
gml.add((GMLModule)module);
return gml;
}
public List<AbstractXALModule> getXALModules() {
List<AbstractXALModule> xal = new ArrayList<AbstractXALModule>();
for (Module module : modules)
if (module instanceof AbstractXALModule)
xal.add((AbstractXALModule)module);
return xal;
}
public static CityGMLVersion fromCityGMLModule(CityGMLModule module) {
for (CityGMLVersion version : instances)
if (version.contains(module))
return version;
return null;
}
public static CityGMLVersion fromCityGMLNamespaceURI(String namespaceURI) {
for (CityGMLVersion version : instances) {
for (CityGMLModule module : version.getCityGMLModules()) {
if (module.getNamespaceURI().equals(namespaceURI))
return version;
}
}
return null;
}
public static List<CityGMLVersion> getInstances() {
return instances;
}
@Override
public String toString() {
if (this == v2_0_0)
return "2.0.0";
else if (this == v1_0_0)
return "1.0.0";
else
return super.toString();
}
}