merge with branch issue-405

This commit is contained in:
Sebastian Sdorra
2013-06-23 18:45:29 +02:00
2 changed files with 52 additions and 16 deletions

View File

@@ -30,10 +30,12 @@
*/
package sonia.scm.store;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Charsets;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Maps;
@@ -47,7 +49,13 @@ import sonia.scm.xml.IndentXMLStreamWriter;
//~--- JDK imports ------------------------------------------------------------
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Collection;
import java.util.Collections;
@@ -65,7 +73,6 @@ import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.stream.StreamSource;
/**
*
@@ -77,9 +84,6 @@ public class JAXBConfigurationEntryStore<V>
implements ConfigurationEntryStore<V>
{
/** Field description */
private static final Object LOCK = new Object();
/** Field description */
private static final String TAG_CONFIGURATION = "configuration";
@@ -109,11 +113,11 @@ public class JAXBConfigurationEntryStore<V>
* @param file
* @param type
*/
JAXBConfigurationEntryStore(KeyGenerator keyGenerator, File file,
JAXBConfigurationEntryStore(File file, KeyGenerator keyGenerator,
Class<V> type)
{
this.keyGenerator = keyGenerator;
this.file = file;
this.keyGenerator = keyGenerator;
this.type = type;
try
@@ -142,7 +146,7 @@ public class JAXBConfigurationEntryStore<V>
{
logger.debug("clear configuration store");
synchronized (LOCK)
synchronized (file)
{
entries.clear();
store();
@@ -179,7 +183,7 @@ public class JAXBConfigurationEntryStore<V>
{
logger.debug("put item {} to configuration store", id);
synchronized (LOCK)
synchronized (file)
{
entries.put(id, item);
store();
@@ -197,7 +201,7 @@ public class JAXBConfigurationEntryStore<V>
{
logger.debug("remove item {} from configuration store", id);
synchronized (LOCK)
synchronized (file)
{
entries.remove(id);
store();
@@ -294,6 +298,32 @@ public class JAXBConfigurationEntryStore<V>
}
}
/**
* Method description
*
*
* @return
*
* @throws FileNotFoundException
*/
private Reader createReader() throws FileNotFoundException
{
return new InputStreamReader(new FileInputStream(file), Charsets.UTF_8);
}
/**
* Method description
*
*
* @return
*
* @throws FileNotFoundException
*/
private Writer createWriter() throws FileNotFoundException
{
return new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8);
}
/**
* Method description
*
@@ -312,7 +342,7 @@ public class JAXBConfigurationEntryStore<V>
{
Unmarshaller u = context.createUnmarshaller();
reader = xmlInputFactory.createXMLStreamReader(new StreamSource(file));
reader = xmlInputFactory.createXMLStreamReader(createReader());
reader.nextTag();
reader.nextTag();
@@ -357,7 +387,7 @@ public class JAXBConfigurationEntryStore<V>
//J-
writer = new IndentXMLStreamWriter(
XMLOutputFactory.newFactory().createXMLStreamWriter(
new FileOutputStream(file)
createWriter()
)
);
//J+
@@ -396,15 +426,15 @@ public class JAXBConfigurationEntryStore<V>
//~--- fields ---------------------------------------------------------------
/** Field description */
private final File file;
/** Field description */
private JAXBContext context;
/** Field description */
private Map<String, V> entries = Maps.newHashMap();
/** Field description */
private File file;
/** Field description */
private KeyGenerator keyGenerator;

View File

@@ -30,6 +30,7 @@
*/
package sonia.scm.store;
//~--- non-JDK imports --------------------------------------------------------
@@ -100,8 +101,13 @@ public class JAXBConfigurationEntryStoreFactory
logger.debug("create new configuration store for type {} with name {}",
type, name);
return new JAXBConfigurationEntryStore<T>(keyGenerator,
new File(directory, name.concat(StoreConstants.FILE_EXTENSION)), type);
//J-
return new JAXBConfigurationEntryStore<T>(
new File(directory,name.concat(StoreConstants.FILE_EXTENSION)),
keyGenerator,
type
);
//J+
}
//~--- fields ---------------------------------------------------------------