/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.service.velocity.impl;
import com.alibaba.citrus.service.template.TemplateContext;
import org.apache.velocity.context.AbstractContext;
/**
* 将<code>TemplateContext</code>适配到velocity context的适配器。
*
* @author Michael Zhou
*/
public class TemplateContextAdapter extends AbstractContext {
private final TemplateContext context;
/** 创建一个适配器。 */
public TemplateContextAdapter(TemplateContext context) {
this.context = context;
}
/** 取得被适配的<code>TemplateContext</code>对象。 */
public TemplateContext getTemplateContext() {
return context;
}
/** 取得指定值。 */
@Override
public Object internalGet(String key) {
return context.get(key);
}
/** 添加一个值,如果不存在,则返回<code>null</code>。 */
@Override
public Object internalPut(String key, Object value) {
Object oldValue = context.get(key);
context.put(key, value);
return oldValue;
}
/** 判断是否包含指定的键。 */
@Override
public boolean internalContainsKey(Object key) {
if (key instanceof String) {
return context.containsKey((String) key);
} else {
return false;
}
}
/** 取得所有key的集合。 */
@Override
public Object[] internalGetKeys() {
return context.keySet().toArray();
}
/** 删除一个值,返回原值。 */
@Override
public Object internalRemove(Object key) {
if (key instanceof String) {
Object oldValue = context.get((String) key);
context.remove((String) key);
return oldValue;
} else {
return null;
}
}
@Override
public String toString() {
return "TemplateContextAdapter[" + context + "]";
}
}