All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opengis.feature.Association Maven / Gradle / Ivy

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2011, Open Source Geospatial Foundation (OSGeo)
 *    (C) 2004-2007 Open Geospatial Consortium Inc.
 *
 *    All Rights Reserved. http://www.opengis.org/legal/
 */
package org.opengis.feature;

import org.opengis.feature.type.AssociationDescriptor;
import org.opengis.feature.type.AssociationType;
import org.opengis.feature.type.AttributeType;

/**
 * Extension of Property to represent an Association, or relationship, between two attributes.
 *
 * 

The notion of an "association" is similar to that of an association in UML and is used to * model a relationship between entities. Examples of such a relationship could be: * *

    *
  • aggregation: An attribute may contain another attribute *
  • spatial: A feature is spatial related to another (touches, intersects, etc..) *
  • temporal: An is a previous version of another attribute in a versioning system *
* *

Example

* *

The value of an association is an {@link Attribute}. As an example consider the following xml * complex type definitions: * *

 *   <complexType name="fooType">
 *     ...
 *   </complexType>
 *   <element name="foo" type="fooType"/>
 *
 *   <complexType name="barType">
 *     <sequence>
 *       <element name="intAttribute" type="xs:int"/>
 *       <element name="stringAttribute" type="xs:string"/>
 *       <element name="fooAssociation" type="xlink:href"/>
 *     </sequence>
 *   </complexType>
 *   <element name="bar" type="barType"/>
 * 
* * In the above, "fooType" is an identifiable type. Now consider the following section of an xml * instance document: * *
 *   <foo id="someId">
 *     ...
 *   </foo>
 *   ...
 *   <bar>
 *     <intAttribute>1</intAttribute>
 *     <stringAttribute>one</stringAttribute>
 *     <fooAssociation>someId</fooAssociation>
 *   </bar>
 * 
* * Realizing this as objects with attributes and associations we get: * *
 *   ComplexAttribute bar = ...;
 *
 *   //intAttribute
 *   Attribute intAttribute = (Attribute) bar.getProperty( "intAttribute" );
 *   intAttribute.getValue() == 1
 *
 *   //stringAttribute
 *   Attribute stringAttribute = (Attribute) bar.getProperty( "stringAttribute" );
 *   stringAttribute.getValue() == "one"
 *
 *   //fooAssociation
 *   Association fooAssociation = (Association) bar.getProperty( "fooAssociation" );
 *   Attribute foo =  fooAssociation.getValue();
 * 
* * @author Jody Garnett, Refractions Research * @author Justin Deoliveira, The Open Planning Project */ public interface Association extends Property { /** * Description of the relationship between two attributes. * *

Override of {@link Property#getDescriptor()} which type narrows to {@link * AssociationDescriptor}. * * @see Property#getDescriptor() * @return AssociationDescriptor used to describe the relationship between two attributes; * because two attributes are required the descriptor should not be null. */ AssociationDescriptor getDescriptor(); /** * Type of association represented. * *

Override of {@link Property#getType()} which type narrows to {@link AssociationType}. * * @see Property#getType() */ AssociationType getType(); /** * Override of {@link Property#getValue()} which type narrows to {@link Attribute}. * * @see Property#getValue() */ Attribute getValue(); /** * Override of {@link Property#setValue(Object)} which specifies that newValue should * be an instance of {@link Attribute}. * * @throws IllegalArgumentException If newValue is not an attribute. */ void setValue(Object newValue) throws IllegalArgumentException; /** * Returns the type of the associated attribute. * *

This method is a convenience for: * *

     * getType().getRelatedType()
     * 
* *

* * @return type of the attribute of the association. */ AttributeType getRelatedType(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy