Package org.switchyard.internal

Source Code of org.switchyard.internal.DefaultContext

/*
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.switchyard.internal;

import static org.switchyard.internal.ContextUtil.checkScope;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.switchyard.Context;
import org.switchyard.Property;
import org.switchyard.Scope;
import org.switchyard.serial.graph.AccessType;
import org.switchyard.serial.graph.Strategy;

/**
* Base context implementation.
*/
@Strategy(access=AccessType.FIELD)
public class DefaultContext implements Context {

    private Scope _scope;
    private final Map<String, Property> _properties;

    /**
     * Create a new DefaultContext instance using the specified property map.
     * @param defaultScope Scope handled by context.
     * @param properties context properties
     */
    public DefaultContext(Scope defaultScope, Map<String, Property> properties) {
        _scope = defaultScope;
        _properties = properties;
    }

    /**
     * Creates new context with given scope.
     *
     * @param defaultScope Scope handled by context.
     */
    public DefaultContext(Scope defaultScope) {
        this(defaultScope, new HashMap<String, Property>());
    }

    /**
     * Creates new context with exchange scope.
     */
    public DefaultContext() {
        this(Scope.EXCHANGE);
    }

    @Override
    @SuppressWarnings("unchecked")
    public <T> T getPropertyValue(String name) {
       Property prop = _properties.get(name);
       if (prop != null) {
           return (T) prop.getValue();
       }
       return null;
    }

    @Override
    public void removeProperties() {
        _properties.clear();
    }

    @Override
    public Context setProperties(Set<Property> properties) {
        for (Property p : properties) {
            _properties.put(p.getName(), p);
        }
        return this;
    }

    @Override
    public Set<Property> getProperties() {
        return new HashSet<Property>(_properties.values());
    }

    @Override
    public void removeProperty(Property property) {
        checkScope(_scope, property.getScope());
        _properties.remove(property.getName());
    }

    @Override
    public Property getProperty(String name) {
        return _properties.get(name);
    }

    @Override
    public Property setProperty(String name, Object val) {
        Property p = new ContextProperty(name, _scope, val);
        _properties.put(p.getName(), p);
        return p;
    }

    @Override
    public void mergeInto(Context context) {
        ContextUtil.copy(this, context);
    }

    @Override
    public Set<Property> getProperties(String label) {
        Set<Property> props = new HashSet<Property>();
        for (Property p : getProperties()) {
            if (p.hasLabel(label)) {
                props.add(p);
            }
        }
        return props;
    }

    @Override
    public void removeProperties(String label) {
        for (Property p : getProperties()) {
            if (p.hasLabel(label)) {
                removeProperty(p);
            }
        }
    }

    @Override
    public Property getProperty(String name, Scope scope) {
        checkScope(_scope, scope);
        return _properties.get(name);
    }

    @Override
    public Set<Property> getProperties(Scope scope) {
        checkScope(_scope, scope);
        return getProperties();
    }

    @Override
    public void removeProperties(Scope scope) {
        checkScope(_scope, scope);
        _properties.clear();
    }

    @Override
    public Property setProperty(String name, Object val, Scope scope) {
        checkScope(_scope, scope);
        ContextProperty value = new ContextProperty(name, scope, val);
        _properties.put(name, value);
        return value;
    }

    /**
     * Allows to specify default scope of this context.
     *
     * @param scope Scope of this context instance.
     */
    public void setScope(Scope scope) {
        this._scope = scope;
    }

    @Override
    public String toString() {
        return _properties.toString();
    }
}
TOP

Related Classes of org.switchyard.internal.DefaultContext

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.