/*
* 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.kml.model;
import java.awt.Color;
import java.net.URI;
import org.apache.sis.feature.builder.FeatureTypeBuilder;
import org.geotoolkit.atom.model.AtomLink;
import org.geotoolkit.atom.model.AtomPersonConstruct;
import org.geotoolkit.data.kml.xml.KmlConstants;
import org.geotoolkit.xal.model.AddressDetails;
import org.apache.sis.referencing.CommonCRS;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureAssociationRole;
import org.opengis.feature.FeatureType;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
/**
*
* @author Samuel Andrés
* @module
*/
public final class KmlModelConstants {
public static final CoordinateReferenceSystem KML_CRS = CommonCRS.WGS84.normalizedGeographic();
public static final String KML_NAMESPACE = "http://www.opengis.net/kml";
public static final FeatureType TYPE_KML_ENTITY;
public static final AttributeType<IdAttributes> ATT_ID_ATTRIBUTES;
public static final AttributeType<String> ATT_NAME;
public static final AttributeType<Boolean> ATT_VISIBILITY;
public static final AttributeType<Boolean> ATT_OPEN;
public static final AttributeType<AtomPersonConstruct> ATT_AUTHOR;
public static final AttributeType<AtomLink> ATT_LINK;
public static final AttributeType<String> ATT_ADDRESS;
public static final AttributeType<AddressDetails> ATT_ADDRESS_DETAILS;
public static final AttributeType<String> ATT_PHONE_NUMBER;
public static final AttributeType<Object> ATT_SNIPPET;
public static final AttributeType<Object> ATT_DESCRIPTION;
public static final AttributeType<AbstractView> ATT_VIEW;
public static final AttributeType<AbstractTimePrimitive> ATT_TIME_PRIMITIVE;
public static final AttributeType<URI> ATT_STYLE_URL;
public static final AttributeType<AbstractStyleSelector> ATT_STYLE_SELECTOR;
public static final AttributeType<Region> ATT_REGION;
public static final AttributeType<Object> ATT_EXTENDED_DATA;
public static final AttributeType<Extensions> ATT_EXTENSIONS;
public static final FeatureType TYPE_PLACEMARK;
public static final AttributeType<AbstractGeometry> ATT_PLACEMARK_GEOMETRY;
public static final FeatureType TYPE_NETWORK_LINK;
public static final AttributeType<Boolean> ATT_NETWORK_LINK_REFRESH_VISIBILITY;
public static final AttributeType<Boolean> ATT_NETWORK_LINK_FLY_TO_VIEW;
public static final AttributeType<Link> ATT_NETWORK_LINK_LINK;
public static final FeatureType TYPE_CONTAINER;
public static final FeatureType TYPE_FOLDER;
public static final FeatureAssociationRole ATT_FOLDER_FEATURES;
public static final FeatureType TYPE_DOCUMENT;
public static final FeatureAssociationRole ATT_DOCUMENT_FEATURES;
public static final AttributeType<Schema> ATT_DOCUMENT_SCHEMAS;
public static final FeatureType TYPE_OVERLAY;
public static final AttributeType<Color> ATT_OVERLAY_COLOR;
public static final AttributeType<Integer> ATT_OVERLAY_DRAW_ORDER;
public static final AttributeType<Link> ATT_OVERLAY_ICON;
public static final FeatureType TYPE_GROUND_OVERLAY;
public static final AttributeType<Double> ATT_GROUND_OVERLAY_ALTITUDE;
public static final AttributeType<EnumAltitudeMode> ATT_GROUND_OVERLAY_ALTITUDE_MODE;
public static final AttributeType<LatLonBox> ATT_GROUND_OVERLAY_LAT_LON_BOX;
public static final FeatureType TYPE_SCREEN_OVERLAY;
public static final AttributeType<Vec2> ATT_SCREEN_OVERLAY_OVERLAYXY;
public static final AttributeType<Vec2> ATT_SCREEN_OVERLAY_SCREENXY;
public static final AttributeType<Vec2> ATT_SCREEN_OVERLAY_ROTATIONXY;
public static final AttributeType<Vec2> ATT_SCREEN_OVERLAY_SIZE;
public static final AttributeType<Double> ATT_SCREEN_OVERLAY_ROTATION;
public static final FeatureType TYPE_PHOTO_OVERLAY;
public static final AttributeType<Double> ATT_PHOTO_OVERLAY_ROTATION;
public static final AttributeType<ViewVolume> ATT_PHOTO_OVERLAY_VIEW_VOLUME;
public static final AttributeType<ImagePyramid> ATT_PHOTO_OVERLAY_IMAGE_PYRAMID;
public static final AttributeType<Point> ATT_PHOTO_OVERLAY_POINT;
public static final AttributeType<Shape> ATT_PHOTO_OVERLAY_SHAPE;
static {
FeatureTypeBuilder ftb;
//-------------------- GENERIC KML ENTITY ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_ID_ATTRIBUTES = ftb.addAttribute(IdAttributes.class).setName(KmlConstants.ATT_ID).build();
ATT_NAME = ftb.addAttribute(String.class).setName(KmlConstants.TAG_NAME).build();
ATT_VISIBILITY = ftb.addAttribute(Boolean.class).setName(KmlConstants.TAG_VISIBILITY).setDefaultValue(KmlConstants.DEF_VISIBILITY).build();
ATT_OPEN = ftb.addAttribute(Boolean.class).setName(KmlConstants.TAG_OPEN).setDefaultValue(KmlConstants.DEF_OPEN).build();
ATT_AUTHOR = ftb.addAttribute(AtomPersonConstruct.class).setName(KmlConstants.TAG_ATOM_AUTHOR).build();
ATT_LINK = ftb.addAttribute(AtomLink.class).setName(KmlConstants.TAG_ATOM_LINK).build();
ATT_ADDRESS = ftb.addAttribute(String.class).setName(KmlConstants.TAG_ADDRESS).build();
ATT_ADDRESS_DETAILS = ftb.addAttribute(AddressDetails.class).setName(KmlConstants.TAG_XAL_ADDRESS_DETAILS).build();
ATT_PHONE_NUMBER = ftb.addAttribute(String.class).setName(KmlConstants.TAG_PHONE_NUMBER).build();
ATT_SNIPPET = ftb.addAttribute(Object.class).setName(KmlConstants.TAG_SNIPPET).build();
ATT_DESCRIPTION = ftb.addAttribute(Object.class).setName(KmlConstants.TAG_DESCRIPTION).build();
ATT_VIEW = ftb.addAttribute(AbstractView.class).setName(KmlConstants.TAG_VIEW).build();
ATT_TIME_PRIMITIVE = ftb.addAttribute(AbstractTimePrimitive.class).setName(KmlConstants.TAG_TIME_PRIMITIVE).build();
ATT_STYLE_URL = ftb.addAttribute(URI.class).setName(KmlConstants.TAG_STYLE_URL).build();
ATT_STYLE_SELECTOR = ftb.addAttribute(AbstractStyleSelector.class).setName(KmlConstants.TAG_STYLE_SELECTOR).setMaximumOccurs(Integer.MAX_VALUE).build();
ATT_REGION = ftb.addAttribute(Region.class).setName(KmlConstants.TAG_REGION).build();
ATT_EXTENDED_DATA = ftb.addAttribute(Object.class).setName(KmlConstants.TAG_EXTENDED_DATA).setMaximumOccurs(Integer.MAX_VALUE).build();
ATT_EXTENSIONS = ftb.addAttribute(Extensions.class).setName(KmlConstants.TAG_EXTENSIONS).setMinimumOccurs(1).build();
TYPE_KML_ENTITY = ftb.setName("KMLEntity").setAbstract(true).build();
//-------------------- PLACEMARK ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_PLACEMARK_GEOMETRY = ftb.addAttribute(AbstractGeometry.class).setName(KmlConstants.TAG_GEOMETRY).build();
TYPE_PLACEMARK = ftb.setSuperTypes(TYPE_KML_ENTITY).setName(KmlConstants.TAG_PLACEMARK).build();
//-------------------- NETWORK_LINK ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_NETWORK_LINK_REFRESH_VISIBILITY = ftb.addAttribute(Boolean.class).setName(KmlConstants.TAG_REFRESH_VISIBILITY).setDefaultValue(KmlConstants.DEF_REFRESH_VISIBILITY).build();
ATT_NETWORK_LINK_FLY_TO_VIEW = ftb.addAttribute(Boolean.class).setName(KmlConstants.TAG_FLY_TO_VIEW).setDefaultValue(KmlConstants.DEF_FLY_TO_VIEW).build();
ATT_NETWORK_LINK_LINK = ftb.addAttribute(Link.class).setName(KmlConstants.TAG_LINK).build();
TYPE_NETWORK_LINK = ftb.setSuperTypes(TYPE_KML_ENTITY).setName(KmlConstants.TAG_DOCUMENT).build();
//-------------------- GENERIC CONTAINER ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
TYPE_CONTAINER = ftb.setSuperTypes(TYPE_KML_ENTITY).setName("Container").setAbstract(true).build();
//-------------------- FOLDER ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, Integer.MAX_VALUE);
ATT_FOLDER_FEATURES = ftb.addAssociation(TYPE_KML_ENTITY).setName(KmlConstants.TAG_FEATURES).build();
TYPE_FOLDER = ftb.setSuperTypes(TYPE_CONTAINER).setName(KmlConstants.TAG_FOLDER).build();
//-------------------- DOCUMENT ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, Integer.MAX_VALUE);
ATT_DOCUMENT_FEATURES = ftb.addAssociation(TYPE_KML_ENTITY).setName(KmlConstants.TAG_FEATURES).build();
ATT_DOCUMENT_SCHEMAS = ftb.addAttribute(Schema.class).setName(KmlConstants.TAG_SCHEMA).build();
TYPE_DOCUMENT = ftb.setSuperTypes(TYPE_CONTAINER).setName(KmlConstants.TAG_DOCUMENT).build();
//-------------------- GENERIC OVERLAY ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_OVERLAY_COLOR = ftb.addAttribute(Color.class).setName(KmlConstants.TAG_COLOR).setDefaultValue(KmlConstants.DEF_COLOR).build();
ATT_OVERLAY_DRAW_ORDER = ftb.addAttribute(Integer.class).setName(KmlConstants.TAG_DRAW_ORDER).setDefaultValue(KmlConstants.DEF_DRAW_ORDER).build();
ATT_OVERLAY_ICON = ftb.addAttribute(Link.class).setName(KmlConstants.TAG_ICON).build();
TYPE_OVERLAY = ftb.setSuperTypes(TYPE_KML_ENTITY).setName("Overlay").setAbstract(true).build();
//-------------------- GROUND OVERLAY ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_GROUND_OVERLAY_ALTITUDE = ftb.addAttribute(Double.class).setName(KmlConstants.TAG_ALTITUDE).setDefaultValue(KmlConstants.DEF_ALTITUDE).build();
ATT_GROUND_OVERLAY_ALTITUDE_MODE = ftb.addAttribute(EnumAltitudeMode.class).setName(KmlConstants.TAG_ALTITUDE_MODE).setDefaultValue(KmlConstants.DEF_ALTITUDE_MODE).build();
ATT_GROUND_OVERLAY_LAT_LON_BOX = ftb.addAttribute(LatLonBox.class).setName(KmlConstants.TAG_LAT_LON_BOX).build();
TYPE_GROUND_OVERLAY = ftb.setSuperTypes(TYPE_OVERLAY).setName("GroundOverlay").build();
//-------------------- SCREEN OVERLAY ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_SCREEN_OVERLAY_ROTATIONXY = ftb.addAttribute(Vec2.class).setName(KmlConstants.TAG_ROTATION_XY).build();
ATT_SCREEN_OVERLAY_OVERLAYXY = ftb.addAttribute(Vec2.class).setName(KmlConstants.TAG_OVERLAY_XY).build();
ATT_SCREEN_OVERLAY_SCREENXY = ftb.addAttribute(Vec2.class).setName(KmlConstants.TAG_SCREEN_XY).build();
ATT_SCREEN_OVERLAY_SIZE = ftb.addAttribute(Vec2.class).setName(KmlConstants.TAG_SIZE).build();
ATT_SCREEN_OVERLAY_ROTATION = ftb.addAttribute(Double.class).setName(KmlConstants.TAG_ROTATION).setDefaultValue(KmlConstants.DEF_ROTATION).build();
TYPE_SCREEN_OVERLAY = ftb.setSuperTypes(TYPE_OVERLAY).setName("ScreenOverlay").build();
//-------------------- PHOTO OVERLAY ------------------------------
ftb = new FeatureTypeBuilder().setDefaultScope(KML_NAMESPACE).setDefaultCardinality(0, 1);
ATT_PHOTO_OVERLAY_ROTATION = ftb.addAttribute(Double.class).setName(KmlConstants.TAG_ROTATION).setDefaultValue(KmlConstants.DEF_ROTATION).build();
ATT_PHOTO_OVERLAY_VIEW_VOLUME = ftb.addAttribute(ViewVolume.class).setName(KmlConstants.TAG_VIEW_VOLUME).build();
ATT_PHOTO_OVERLAY_IMAGE_PYRAMID = ftb.addAttribute(ImagePyramid.class).setName(KmlConstants.TAG_IMAGE_PYRAMID).build();
ATT_PHOTO_OVERLAY_POINT = ftb.addAttribute(Point.class).setName(KmlConstants.TAG_POINT).build();
ATT_PHOTO_OVERLAY_SHAPE = ftb.addAttribute(Shape.class).setName(KmlConstants.TAG_SHAPE).build();
TYPE_PHOTO_OVERLAY = ftb.setSuperTypes(TYPE_OVERLAY).setName("PhotoOverlay").build();
}
private KmlModelConstants() {
}
}