/*
* 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.DefaultAngles;
import org.geotoolkit.data.gx.model.DefaultAnimatedUpdate;
import org.geotoolkit.data.gx.model.DefaultFlyTo;
import org.geotoolkit.data.gx.model.DefaultLatLonQuad;
import org.geotoolkit.data.gx.model.DefaultMultiTrack;
import org.geotoolkit.data.gx.model.DefaultPlayList;
import org.geotoolkit.data.gx.model.DefaultSoundCue;
import org.geotoolkit.data.gx.model.DefaultTourControl;
import org.geotoolkit.data.gx.model.DefaultTrack;
import org.geotoolkit.data.gx.model.DefaultWait;
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.GxModelConstants;
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.Extensions;
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.xml.KmlConstants;
import org.geotoolkit.data.kml.xsd.SimpleTypeContainer;
import org.geotoolkit.xal.model.AddressDetails;
import org.opengis.feature.Feature;
/**
*
* @author Samuel Andrés
* @module
*/
public class DefaultGxFactory implements GxFactory {
private static final GxFactory GXF = new DefaultGxFactory();
private DefaultGxFactory(){}
public static GxFactory getInstance(){
return GXF;
}
@Override
public Angles createAngles() {
return new DefaultAngles();
}
@Override
public Angles createAngles(double... angles) {
return new DefaultAngles(angles);
}
@Override
public AnimatedUpdate createAnimatedUpdate() {
return new DefaultAnimatedUpdate();
}
@Override
public AnimatedUpdate createAnimatedUpdate(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, double duration, Update update) {
return new DefaultAnimatedUpdate(objectSimpleExtensions,
idAttributes, duration, update);
}
@Override
public Coordinate createCoordinate(String listCoordinates) {
return GxUtilities.toCoordinate(listCoordinates);
}
@Override
public FlyTo createFlyTo() {
return new DefaultFlyTo();
}
@Override
public FlyTo createFlyTo(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, double duration,
EnumFlyToMode flyToMOde, AbstractView view) {
return new DefaultFlyTo(objectSimpleExtensions, idAttributes,
duration, flyToMOde, view);
}
@Override
public LatLonQuad createLatLonQuad() {
return new DefaultLatLonQuad();
}
@Override
public LatLonQuad createLatLonQuad(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, CoordinateSequence coordinates) {
return new DefaultLatLonQuad(objectSimpleExtensions, idAttributes, coordinates);
}
@Override
public MultiTrack createMultiTrack() {
return new DefaultMultiTrack();
}
@Override
public MultiTrack createMultiTrack(AltitudeMode altitudeMode,
boolean interpolate, List<Track> tracks) {
return new DefaultMultiTrack(altitudeMode, interpolate, tracks);
}
@Override
public PlayList createPlayList() {
return new DefaultPlayList();
}
@Override
public PlayList createPlayList(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, List<AbstractTourPrimitive> tourPrimitives)
{
return new DefaultPlayList(objectSimpleExtensions, idAttributes, tourPrimitives);
}
@Override
public Feature createTour() {
final Feature f = GxModelConstants.TYPE_TOUR.newInstance();
f.setPropertyValue(KmlConstants.TAG_EXTENSIONS, new Extensions());
return f;
}
@Override
public 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)
{
Extensions extensions = new Extensions();
if (objectSimpleExtensions != null) {
extensions.simples(Extensions.Names.OBJECT).addAll(objectSimpleExtensions);
}
if (abstractFeatureSimpleExtensions != null) {
extensions.simples(Extensions.Names.FEATURE).addAll(abstractFeatureSimpleExtensions);
}
if (abstractFeatureObjectExtensions != null) {
extensions.complexes(Extensions.Names.FEATURE).addAll(abstractFeatureObjectExtensions);
}
final Feature f = GxModelConstants.TYPE_TOUR.newInstance();
f.setPropertyValue(KmlConstants.ATT_ID, idAttributes);
f.setPropertyValue(KmlConstants.TAG_NAME, name);
f.setPropertyValue(KmlConstants.TAG_VISIBILITY, visibility);
f.setPropertyValue(KmlConstants.TAG_OPEN, open);
f.setPropertyValue(KmlConstants.TAG_ATOM_AUTHOR, author);
f.setPropertyValue(KmlConstants.TAG_ATOM_LINK, link);
f.setPropertyValue(KmlConstants.TAG_ADDRESS, address);
f.setPropertyValue(KmlConstants.TAG_XAL_ADDRESS_DETAILS, addressDetails);
f.setPropertyValue(KmlConstants.TAG_PHONE_NUMBER, phoneNumber);
f.setPropertyValue(KmlConstants.TAG_SNIPPET, snippet);
f.setPropertyValue(KmlConstants.TAG_DESCRIPTION, description);
f.setPropertyValue(KmlConstants.TAG_VIEW, view);
f.setPropertyValue(KmlConstants.TAG_TIME_PRIMITIVE, timePrimitive);
f.setPropertyValue(KmlConstants.TAG_STYLE_URL, styleUrl);
f.setPropertyValue(KmlConstants.TAG_STYLE_SELECTOR, styleSelector);
f.setPropertyValue(KmlConstants.TAG_REGION, region);
f.setPropertyValue(KmlConstants.TAG_EXTENDED_DATA, extendedData);
f.setPropertyValue(KmlConstants.ATT_PLAYLIST, playLists);
f.setPropertyValue(KmlConstants.TAG_EXTENSIONS, extensions);
return f;
}
@Override
public SoundCue createSoundCue() {
return new DefaultSoundCue();
}
@Override
public SoundCue createSoundCue(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, String href)
{
return new DefaultSoundCue(objectSimpleExtensions, idAttributes, href);
}
@Override
public TourControl createTourControl() {
return new DefaultTourControl();
}
@Override
public TourControl createTourControl(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, EnumPlayMode playMode)
{
return new DefaultTourControl(objectSimpleExtensions, idAttributes, playMode);
}
@Override
public Track createTrack() {
return new DefaultTrack();
}
@Override
public Track createTrack(AltitudeMode altitudeMode, List<Calendar> whens,
CoordinateSequence coord, List<Angles> angleList, Model model,
ExtendedData extendedData)
{
return new DefaultTrack(altitudeMode, whens, coord, angleList, model, extendedData);
}
@Override
public Wait createWait() {
return new DefaultWait();
}
@Override
public Wait createWait(List<SimpleTypeContainer> objectSimpleExtensions,
IdAttributes idAttributes, double duration)
{
return new DefaultWait(objectSimpleExtensions, idAttributes, duration);
}
}