added GemfireItemWriter
This commit is contained in:
committed by
Michael Minella
parent
61923bcd7d
commit
e4095ab26b
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* 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.springframework.batch.item;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A base class to implement any {@link ItemWriter} that writes to a key value store
|
||||
* using a {@link Converter} to derive a key from an item
|
||||
*
|
||||
* @author David Turanski
|
||||
* @since 2.2
|
||||
*
|
||||
*/
|
||||
public abstract class KeyValueItemWriter<K, V> implements ItemWriter<V>, InitializingBean {
|
||||
|
||||
protected Converter<V, K> itemKeyMapper;
|
||||
protected boolean delete;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.item.ItemWriter#write(java.util.List)
|
||||
*/
|
||||
@Override
|
||||
public void write(List<? extends V> items) throws Exception {
|
||||
if (items == null) {
|
||||
return;
|
||||
}
|
||||
for (V item : items) {
|
||||
K key = itemKeyMapper.convert(item);
|
||||
writeKeyValue(key, item);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Subclasses implement this method to write each item to key value store
|
||||
* @param key the key
|
||||
* @param value the item
|
||||
*/
|
||||
protected abstract void writeKeyValue(K key, V value);
|
||||
|
||||
/**
|
||||
* afterPropertiesSet() hook
|
||||
*/
|
||||
protected abstract void init();
|
||||
|
||||
/**
|
||||
* Set the {@link Converter} to use to derive the key from the item
|
||||
* @param itemKeyMapper
|
||||
*/
|
||||
public void setItemKeyMapper(Converter<V, K> itemKeyMapper) {
|
||||
this.itemKeyMapper = itemKeyMapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the delete flag to have the item writer perform deletes
|
||||
* @param delete
|
||||
*/
|
||||
public void setDelete(boolean delete) {
|
||||
this.delete = delete;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
|
||||
*/
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
Assert.notNull(itemKeyMapper, "itemKeyMapper requires a Converter type.");
|
||||
init();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* 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.springframework.batch.item;
|
||||
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.ExpressionParser;
|
||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||
|
||||
/**
|
||||
* An implementation of {@link Converter} that uses SpEL to map a Value to a key
|
||||
* @author David Turanski
|
||||
* @since 2.2
|
||||
*/
|
||||
public class SpELItemKeyMapper<K,V> implements Converter<V,K> {
|
||||
private final ExpressionParser parser = new SpelExpressionParser();
|
||||
private final Expression parsedExpression;
|
||||
|
||||
public SpELItemKeyMapper(String keyExpression) {
|
||||
parsedExpression = parser.parseExpression(keyExpression);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.item.ItemKeyMapper#mapKey(java.lang.Object)
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public K convert(V item) {
|
||||
return (K) parsedExpression.getValue(item);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* 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.springframework.batch.item.data;
|
||||
|
||||
import org.springframework.batch.item.KeyValueItemWriter;
|
||||
import org.springframework.data.gemfire.GemfireTemplate;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* An {@ link ItemWriter} that stores items in GemFire
|
||||
*
|
||||
* @author David Turanski
|
||||
* @since 2.2
|
||||
*
|
||||
*/
|
||||
public class GemfireItemWriter<K,V> extends KeyValueItemWriter<K,V> {
|
||||
private GemfireTemplate gemfireTemplate;
|
||||
/**
|
||||
* @param gemfireTemplate the {@link GemfireTemplate} to set
|
||||
*/
|
||||
public void setTemplate(GemfireTemplate gemfireTemplate) {
|
||||
this.gemfireTemplate = gemfireTemplate;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.item.KeyValueItemWriter#writeKeyValue(java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
protected void writeKeyValue(K key, V value) {
|
||||
if (delete) {
|
||||
gemfireTemplate.remove(key);
|
||||
} else {
|
||||
gemfireTemplate.put(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.item.KeyValueItemWriter#init()
|
||||
*/
|
||||
@Override
|
||||
protected void init() {
|
||||
Assert.notNull(gemfireTemplate, "A GemfireTemplate is required.");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* 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.springframework.batch.item.data;
|
||||
|
||||
import org.springframework.batch.item.SpELItemKeyMapper;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A convenient {@link GemfireItemWriter} implementation that uses a {@ link SpELItemKeyMapper}
|
||||
*
|
||||
* @author David Turanski
|
||||
* @since 2.2
|
||||
*/
|
||||
public class SpELMappingGemfireItemWriter<K,V> extends GemfireItemWriter<K, V>{
|
||||
/**
|
||||
* A constructor that accepts a SpEL expression used to derive the key
|
||||
* @param keyExpression
|
||||
*/
|
||||
SpELMappingGemfireItemWriter(String keyExpression) {
|
||||
super();
|
||||
Assert.hasText(keyExpression,"a valid keyExpression is required.");
|
||||
setItemKeyMapper(new SpELItemKeyMapper<K, V>(keyExpression));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user