/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2010, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotoolkit.csw.xml;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.spi.ServiceRegistry;
import org.geotoolkit.feature.catalog.util.Multiplicity;
import org.geotoolkit.ows.xml.v100.ExceptionReport;
import org.apache.sis.metadata.iso.DefaultMetadata;
import org.apache.sis.util.logging.Logging;
/**
*
* @author Guilhem Legal (Geomatys)
*/
public class CSWClassesContext {
private static final Logger LOGGER = Logging.getLogger("org.geotoolkit.csw.xml");
protected CSWClassesContext() {}
/**
* List of classes for the french profile of metadata.
*/
public static final List<Class> FRA_CLASSES = new ArrayList<>();
static {
FRA_CLASSES.addAll(Arrays.asList(
org.apache.sis.internal.profile.fra.Constraints.class,
org.apache.sis.internal.profile.fra.DataIdentification.class,
org.apache.sis.internal.profile.fra.DirectReferenceSystem.class,
org.apache.sis.internal.profile.fra.IndirectReferenceSystem.class,
org.apache.sis.internal.profile.fra.LegalConstraints.class,
org.apache.sis.internal.profile.fra.SecurityConstraints.class));
}
/**
* Return the list of all the marshallable classes.
*/
public static List<Class> getAllClassesList() {
final List<Class> classeList = new ArrayList<>();
//ISO 19115 class
classeList.add(DefaultMetadata.class);
//ISO 19115 French profile class
classeList.addAll(FRA_CLASSES);
// Inspire classes
classeList.add(org.geotoolkit.inspire.xml.ObjectFactory.class);
// xsd classes classes
classeList.add(org.geotoolkit.xsd.xml.v2001.ObjectFactory.class);
//CSW 2.0.2 classes
classeList.addAll(Arrays.asList(org.geotoolkit.csw.xml.v202.ObjectFactory.class,
ExceptionReport.class,
org.geotoolkit.ows.xml.v110.ExceptionReport.class, // TODO remove
org.geotoolkit.dublincore.xml.v2.terms.ObjectFactory.class));
//CSW 2.0.0 classes
classeList.addAll(Arrays.asList(org.geotoolkit.csw.xml.v200.ObjectFactory.class,
org.geotoolkit.dublincore.xml.v1.terms.ObjectFactory.class));
// GML base factory
classeList.add(org.apache.sis.internal.jaxb.geometry.ObjectFactory.class);
classeList.add(org.geotoolkit.gml.xml.v311.ObjectFactory.class);
classeList.add(org.geotoolkit.gml.xml.v321.ObjectFactory.class);
// vertical CRS
try {
Class vcrsClass = Class.forName("org.apache.sis.referencing.crs.DefaultVerticalCRS");
classeList.add(vcrsClass);
} catch (ClassNotFoundException ex) {}
// we add the extensions classes
classeList.add(org.apache.sis.metadata.iso.identification.DefaultServiceIdentification.class);
classeList.addAll(Arrays.asList(org.geotoolkit.feature.catalog.AssociationRoleImpl.class,
org.geotoolkit.feature.catalog.BindingImpl.class,
org.geotoolkit.feature.catalog.BoundFeatureAttributeImpl.class,
org.geotoolkit.feature.catalog.ConstraintImpl.class,
org.geotoolkit.feature.catalog.DefinitionReferenceImpl.class,
org.geotoolkit.feature.catalog.DefinitionSourceImpl.class,
org.geotoolkit.feature.catalog.FeatureAssociationImpl.class,
org.geotoolkit.feature.catalog.FeatureAttributeImpl.class,
org.geotoolkit.feature.catalog.FeatureCatalogueImpl.class,
org.geotoolkit.feature.catalog.FeatureOperationImpl.class,
org.geotoolkit.feature.catalog.FeatureTypeImpl.class,
org.geotoolkit.feature.catalog.InheritanceRelationImpl.class,
org.geotoolkit.feature.catalog.ListedValueImpl.class,
org.geotoolkit.feature.catalog.PropertyTypeImpl.class,
Multiplicity.class));
final List<String> extraClasses = new ArrayList<>();
final Iterator<CSWClassesFactory> ite = ServiceRegistry.lookupProviders(CSWClassesFactory.class);
while (ite.hasNext()) {
final CSWClassesFactory currentFactory = ite.next();
extraClasses.addAll(currentFactory.getExtraClasses());
}
for (String extraClassName : extraClasses) {
try {
Class extraClass = Class.forName(extraClassName);
classeList.add(extraClass);
} catch (ClassNotFoundException ex) {
LOGGER.log(Level.FINER, "unable to find extra class:" + extraClassName, ex);
}
}
return classeList;
}
public static List<Class> getCSWClassesList() {
final List<Class> classeList = new ArrayList<>();
//CSW 2.0.2 classes
classeList.addAll(Arrays.asList(org.geotoolkit.csw.xml.v202.LimitedObjectFactory.class,
ExceptionReport.class,
org.geotoolkit.ows.xml.v110.ExceptionReport.class, // TODO remove
org.geotoolkit.dublincore.xml.v2.terms.ObjectFactory.class));
//CSW 2.0.0 classes
classeList.addAll(Arrays.asList(org.geotoolkit.csw.xml.v200.ObjectFactory.class,
org.geotoolkit.dublincore.xml.v1.terms.ObjectFactory.class));
// GML base factory
classeList.add(org.apache.sis.internal.jaxb.geometry.ObjectFactory.class);
return classeList;
}
/**
* Returns the marshallable classes in an array.
*/
public static Class[] getAllClasses() {
final List<Class> classes = getAllClassesList();
return classes.toArray(new Class[classes.size()]);
}
/**
* Returns the marshallable classes in an array.
*/
public static Class[] getCSWClasses() {
final List<Class> classes = getCSWClassesList();
return classes.toArray(new Class[classes.size()]);
}
}