/*
* 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.data.gx;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import java.net.URI;
import java.util.Calendar;
import java.util.List;
import org.geotoolkit.atom.model.AtomLink;
import org.geotoolkit.atom.model.AtomPersonConstruct;
import org.geotoolkit.data.gx.model.AbstractTourPrimitive;
import org.geotoolkit.data.gx.model.Angles;
import org.geotoolkit.data.gx.model.AnimatedUpdate;
import org.geotoolkit.data.gx.model.EnumFlyToMode;
import org.geotoolkit.data.gx.model.EnumPlayMode;
import org.geotoolkit.data.gx.model.FlyTo;
import org.geotoolkit.data.gx.model.LatLonQuad;
import org.geotoolkit.data.gx.model.MultiTrack;
import org.geotoolkit.data.gx.model.PlayList;
import org.geotoolkit.data.gx.model.SoundCue;
import org.geotoolkit.data.gx.model.TourControl;
import org.geotoolkit.data.gx.model.Track;
import org.geotoolkit.data.gx.model.Wait;
import org.geotoolkit.data.kml.model.AbstractObject;
import org.geotoolkit.data.kml.model.AbstractStyleSelector;
import org.geotoolkit.data.kml.model.AbstractTimePrimitive;
import org.geotoolkit.data.kml.model.AbstractView;
import org.geotoolkit.data.kml.model.AltitudeMode;
import org.geotoolkit.data.kml.model.ExtendedData;
import org.geotoolkit.data.kml.model.IdAttributes;
import org.geotoolkit.data.kml.model.Model;
import org.geotoolkit.data.kml.model.Region;
import org.geotoolkit.data.kml.model.Update;
import org.geotoolkit.data.kml.xsd.SimpleTypeContainer;
import org.geotoolkit.xal.model.AddressDetails;
import org.opengis.feature.Feature;
/**
*
* @author Samuel Andrés
* @module
*/
public interface GxFactory {
/**
*
* @return
*/
Angles createAngles();
/**
*
* @param angles heading, tilt and roll values.
* @return an Angle object containing heading, tilt and roll.
*/
Angles createAngles(double... angles);
/**
*
* @return
*/
AnimatedUpdate createAnimatedUpdate();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param duration
* @param update
* @return
*/
AnimatedUpdate createAnimatedUpdate(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, double duration, Update update);
/**
*
* @param listCoordinates
* @return
*/
Coordinate createCoordinate(String listCoordinates);
/**
*
* @return
*/
FlyTo createFlyTo();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param duration
* @param flyToMOde
* @param view
* @return
*/
FlyTo createFlyTo(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, double duration,
EnumFlyToMode flyToMOde, AbstractView view);
/**
*
* @return
*/
LatLonQuad createLatLonQuad();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param coordinates
* @return
*/
LatLonQuad createLatLonQuad(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, CoordinateSequence coordinates);
/**
*
* @return
*/
PlayList createPlayList();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param tourPrimitives
* @return
*/
PlayList createPlayList(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes,
List<AbstractTourPrimitive> tourPrimitives);
/**
*
* @return
*/
Feature createTour();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param name
* @param visibility
* @param open
* @param author
* @param link
* @param address
* @param addressDetails
* @param phoneNumber
* @param snippet
* @param description
* @param view
* @param timePrimitive
* @param styleUrl
* @param styleSelector
* @param region
* @param extendedData
* @param abstractFeatureSimpleExtensions
* @param abstractFeatureObjectExtensions
* @param playLists
* @return
*/
Feature createTour(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes,
String name,
boolean visibility,
boolean open,
AtomPersonConstruct author,
AtomLink link,
String address,
AddressDetails addressDetails,
String phoneNumber, Object snippet,
Object description, AbstractView view,
AbstractTimePrimitive timePrimitive,
URI styleUrl, List<AbstractStyleSelector> styleSelector,
Region region, Object extendedData,
List<SimpleTypeContainer> abstractFeatureSimpleExtensions,
List<AbstractObject> abstractFeatureObjectExtensions,
List<PlayList> playLists);
/**
*
* @return
*/
MultiTrack createMultiTrack();
/**
*
* @param altitudeMode
* @param interpolate
* @param tracks
* @return
*/
MultiTrack createMultiTrack(AltitudeMode altitudeMode,
boolean interpolate, List<Track> tracks);
/**
*
* @return
*/
Track createTrack();
/**
*
* @param altitudeMode
* @param whens
* @param coord
* @param angleList
* @param model
* @param extendedData
* @return
*/
Track createTrack(AltitudeMode altitudeMode,
List<Calendar> whens, CoordinateSequence coord,
List<Angles> angleList, Model model, ExtendedData extendedData);
/**
*
* @return
*/
SoundCue createSoundCue();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param href
* @return
*/
SoundCue createSoundCue(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, String href);
/**
*
* @return
*/
TourControl createTourControl();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param playMode
* @return
*/
TourControl createTourControl(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, EnumPlayMode playMode);
/**
*
* @return
*/
Wait createWait();
/**
*
* @param objectSimpleExtensions
* @param idAttributes
* @param duration
* @return
*/
Wait createWait(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, double duration);
}