Package org.geotools.data.efeature.internal

Source Code of org.geotools.data.efeature.internal.EFeatureAttributeDelegate

/**
* <copyright>
* </copyright>
*
* $Id$
*/
package org.geotools.data.efeature.internal;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.emf.ecore.EAttribute;
import org.geotools.data.efeature.EFeatureAttribute;
import org.geotools.data.efeature.EFeatureAttributeInfo;
import org.geotools.data.efeature.EFeatureStatus;
import org.opengis.feature.Attribute;
import org.opengis.feature.type.AttributeDescriptor;
import org.opengis.feature.type.AttributeType;
import org.opengis.feature.type.Name;
import org.opengis.filter.identity.Identifier;

/**
* An abstract implementation of the model data type {@link EFeatureAttribute}.
*
* @author kengu, 22. apr. 2011
*
* @source $URL$
*/
public class EFeatureAttributeDelegate<V> extends
        EFeaturePropertyDelegate<V, Attribute, EAttribute> implements EFeatureAttribute<V> {
   
    /**
     * Cached value when detached
     */
    protected V eValue;
   

    // -----------------------------------------------------
    //  Constructors
    // -----------------------------------------------------


    /**
     * Default constructor.
     * <p>
     * @param eInternal -
     * @param eName -
     * @param valueType - {@link #getValue() property value} type.
     */
    public EFeatureAttributeDelegate(EFeatureInternal eInternal, String eName, Class<V> valueType) {
        super(eInternal, eName, Attribute.class, valueType);
    }

    // -----------------------------------------------------
    //  EFeaturePropertyDelegate implementation
    // -----------------------------------------------------

    @Override
    public EFeatureAttributeInfo getStructure() {
        return getStructure();
    }

    @Override
    protected Attribute create() {
        return new AttributeDelegate();
    }

    @Override
    protected V validate(Attribute data) {
        EFeatureStatus s;
        if (!(s = getStructure().validate(data)).isSuccess()) {
            throw new IllegalArgumentException(s.getMessage());
        }
        return eValueType.cast(data.getValue());
    }

    @Override
    protected V validate(Object value) {
        EFeatureStatus s;
        if (!(s = getStructure().validate(value)).isSuccess()) {
            throw new IllegalArgumentException(s.getMessage(), s.getCause());
        }

        // Is valid, cast to value type
        //
        return eValueType.cast(eData.getValue());
    }

    // -----------------------------------------------------
    //  Attribute delegate implementation
    // -----------------------------------------------------

    private class AttributeDelegate implements Attribute {

        /**
         * Cached User data
         */
        private Map<Object, Object> userData;

        @Override
        public Identifier getIdentifier() {
            return null;
        }

        @Override
        public Name getName() {
            return getType().getName();
        }

        @Override
        public boolean isNillable() {
            return getDescriptor().isNillable();
        }

        @Override
        public AttributeType getType() {
            return getDescriptor().getType();
        }

        @Override
        public AttributeDescriptor getDescriptor() {
            return getStructure().getDescriptor();
        }

        @Override
        public Object getValue() {
            return EFeatureAttributeDelegate.this.getValue();
        }

        @Override
        public void setValue(Object newValue) {
            // Cast to value type
            //
            V value = eValueType.cast(newValue);
            //
            // Update delegate
            //
            EFeatureAttributeDelegate.this.setValue(value);
        }

        @Override
        public Map<Object, Object> getUserData() {
            if (userData == null) {
                userData = new HashMap<Object, Object>();
            }
            return userData;
        }

        @Override
        public void validate() throws IllegalArgumentException {
            EFeatureAttributeDelegate.this.validate(getValue());
        }

    }

} // EFeatureAttributeDelegate
TOP

Related Classes of org.geotools.data.efeature.internal.EFeatureAttributeDelegate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.