/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.config; import org.geoserver.catalog.MetadataLinkInfo; /** * Factory used to create geoserver configuration objects. * * @author Justin Deoliveira, The Open Planning Project * */ public interface GeoServerFactory { /** * Creates a new configuration. */ GeoServerInfo createGlobal(); /** * Creates a new settings. */ SettingsInfo createSettings(); /** * Creates a new contact. */ ContactInfo createContact(); /** * Creates a new jai. */ JAIInfo createJAI(); /** * Creates a new metadata link. */ MetadataLinkInfo createMetadataLink(); /** * Creates a new Imaging. */ //ImagingInfo createImaging(); /** * Creates a new image format. */ //ImageFormatInfo createImageFormat(); /** * Creates a new service. */ ServiceInfo createService(); /** * Creates a new logging. */ LoggingInfo createLogging(); /** * Extensible factory method. * <p> * This method should lookup the appropritae instance of {@link Extension} * to create the object. The lookup mechanism is specific to the runtime * environement. * </p> * * @param clazz * The class of object to create. * * @return The new object. */ <T extends Object> T create(Class<T> clazz); /** * Factory extension. */ interface Extension { /** * Determines if the extension can create objects of the specified * class. * * @param clazz The class of object to create. * */ <T extends Object> boolean canCreate(Class<T> clazz); /** * Creates an instance of the specified class. * <p> * This method is only called if {@link #canCreate(Class)} returns * <code>true</code>. * </p> * * @param clazz The class of object to create. * * @return The new object. */ <T extends Object> T create(Class<T> clazz); } }