/*-
 * Copyright 2021 Hochschule für Technik Stuttgart
 *
 * 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 de.hft.stuttgart.ade.foodwaterenergycitygml4j.module;



import org.citygml4j.model.gml.feature.AbstractFeature;
import org.citygml4j.model.module.ade.ADEModule;
import org.citygml4j.model.module.citygml.CityGMLVersion;

import de.hft.stuttgart.ade.foodwaterenergycitygml4j.FoodWaterEnergyLandUseADEContext;
import de.hft.stuttgart.ade.foodwaterenergycitygml4j.landuse.model.FoodWaterEnergy;

import javax.xml.namespace.QName;
import java.net.URL;
import java.util.*;
import java.util.Map.Entry;

public class FoodWaterEnergyLandUseADEModule extends ADEModule {
	public static final String NAMESPACE_URI = "http://transfer.hft-stuttgart.de/pages/in-source/fwe-ade/FWELanduse/v2.1.1/XSD";
	public static final FoodWaterEnergyLandUseADEModule V0_1 = new FoodWaterEnergyLandUseADEModule();
	
	private HashMap<String, Class<? extends AbstractFeature>> features;
	private HashSet<String> featureProperties;
	
	private static final long serialVersionUID = 8208579547274734280L;

	private FoodWaterEnergyLandUseADEModule() {
		super(NAMESPACE_URI, "fwel", CityGMLVersion.v2_0_0);

		features = new HashMap<>();
		features.put("FoodWaterEnergy", FoodWaterEnergy.class);
		
		featureProperties = new HashSet<>();
	}

	@Override
	public URL getSchemaResource() {
		 return FoodWaterEnergyLandUseADEContext.class.getResource("/schema/FWELanduse.xsd");
	}

	@Override
	public List<String> getJAXBPackageNames() {
		return Collections.singletonList("de.hft.stuttgart.ade.foodwaterenergycitygml4j.landuse.model.xsd");
	}

	@Override
	public boolean hasFeatureProperty(String name) {
		return featureProperties.contains(name);
	}

	@Override
	public boolean hasFeature(String name) {
		return features.containsKey(name);
	}

	@Override
	public Class<? extends AbstractFeature> getFeatureClass(String name) {
		return features.get(name);
	}

	@Override
	public QName getFeatureName(Class<? extends AbstractFeature> featureClass) {
		for (Entry<String, Class<? extends AbstractFeature>> entry : features.entrySet()) {
			if (entry.getValue() == featureClass)
				return new QName(getNamespaceURI(), entry.getKey());
		}

		return null;
	}

	@Override
	public Map<String, Class<? extends AbstractFeature>> getFeatures() {
		return new HashMap<>(features);
	}

	@Override
	public boolean isTopLevelFeature(String name) {
		return false;
	}

}
