001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2008-2013 Open Geospatial Consortium, Inc.
006     *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007     *
008     *    Permission to use, copy, and modify this software and its documentation, with
009     *    or without modification, for any purpose and without fee or royalty is hereby
010     *    granted, provided that you include the following on ALL copies of the software
011     *    and documentation or portions thereof, including modifications, that you make:
012     *
013     *    1. The full text of this NOTICE in a location viewable to users of the
014     *       redistributed or derivative work.
015     *    2. Notice of any changes or modifications to the OGC files, including the
016     *       date changes were made.
017     *
018     *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019     *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020     *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021     *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022     *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023     *
024     *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025     *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026     *
027     *    The name and trademarks of copyright holders may NOT be used in advertising or
028     *    publicity pertaining to the software without specific, written prior permission.
029     *    Title to copyright in this software and any associated documentation will at all
030     *    times remain with copyright holders.
031     */
032    package org.opengis.sld;
033    
034    import java.util.Collection;
035    
036    import java.util.List;
037    
038    import org.opengis.feature.Feature;
039    import org.opengis.feature.type.Name;
040    import org.opengis.filter.Filter;
041    import org.opengis.metadata.citation.OnlineResource;
042    import org.opengis.style.Style;
043    
044    
045    /**
046     * Factory used in the production of SLD objects.
047     * <p>
048     * This factory is responsible for the production of sld objects; where noted
049     * these create methods are in agreement with the Style Layer Descriptor 1.1
050     * specification.
051     * 
052     * This factory is pending. We need feedback from implementors before writting methods
053     * in this one.
054     * 
055     * @author Open Geospatial Consortium
056     * @author Johann Sorel (Geomatys)
057     * @since GeoAPI 2.2
058     */
059    public interface SLDFactory {
060    
061        /**
062         * Create an empty Style layer descriptor.
063         */
064        StyledLayerDescriptor createSLD();
065        
066        /**
067         * Create an SLD library, an SLD library holds a online
068         * reference to a SLD file.
069         * @param online : OnlineResource, can not be null.
070         */
071        SLDLibrary createSLDLibrary(OnlineResource online);
072        
073        /**
074         * Create a default named layer.
075         */
076        NamedLayer createNamedLayer();
077        
078        /**
079         * Create a default user layer.
080         */
081        UserLayer createUserLayer();
082        
083        /**
084         * Create a default named style.
085         */
086        NamedStyle createNamedStyle();
087        
088        /**
089         * Create a default User style.
090         * @return Style : this object is a OGC SE Style defined in the style package.
091         */
092        Style createUserStyle();
093        
094        /**
095         * Create a RemoteOWS information object.
096         * @param service : can not be null
097         * @param online : can not be null
098         */
099        RemoteOWS createRemoteOWS(String service, OnlineResource online);
100        
101        /**
102         * Create a Inline feature content.
103         * @param features : collection of features, can be null
104         */
105        InlineFeature createInLineFeature(Collection<Collection<Feature>> features);
106        
107        /**
108         * Create a default layer coverage constraints.
109         */
110        LayerCoverageConstraints createLayerCoverageConstraints();
111        
112        /**
113         * Create a default layer feature constraints.
114         */
115        LayerFeatureConstraints createLayerFeatureConstraints();
116        
117        /**
118         * Create a coverage constraint.
119         * 
120         * @param name : can not be null
121         * @param extent : can be null
122         */
123        CoverageConstraint createCoverageConstraint(String name, CoverageExtent extent);
124        
125        /**
126         * Create a feature type constraint.
127         * 
128         * @param name : can be null
129         * @param filter : can be null
130         * @param extents : can be null
131         */
132        FeatureTypeConstraint createFeatureTypeConstraint(Name name, Filter filter, List<Extent> extents);
133        
134        /**
135         * Create a coverage extent.
136         * 
137         * @param timeperiod : can not be null
138         */
139        CoverageExtent createCoverageExtent(String timeperiod);
140        
141        /**
142         * Create a coverage extent.
143         * 
144         * @param ranges : can be null or empty
145         */
146        CoverageExtent createCoverageExtent(List<RangeAxis> ranges);
147        
148        /**
149         * Create a feature extent.
150         * 
151         * @param name : can not be null
152         * @param value : can not be null
153         */
154        Extent createExtent(String name, String value);
155        
156        /**
157         * Create a Range axis.
158         * 
159         * @param name : can not be null
160         * @param value : can not be null
161         */
162        RangeAxis createRangeAxis(String name, String value);
163        
164    }