Commits

Sebastian Sdorra committed a5e53df Merge

merge with branch issue-405

Comments (0)

Files changed (2)

scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java

  */
 
 
+
 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;
 //~--- 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;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
-import javax.xml.transform.stream.StreamSource;
 
 /**
  *
 {
 
   /** Field description */
-  private static final Object LOCK = new Object();
-
-  /** Field description */
   private static final String TAG_CONFIGURATION = "configuration";
 
   /** Field description */
    * @param file
    * @param type
    */
-  JAXBConfigurationEntryStore(KeyGenerator keyGenerator, File file,
+  JAXBConfigurationEntryStore(File file, KeyGenerator keyGenerator,
     Class<V> type)
   {
+    this.file = file;
     this.keyGenerator = keyGenerator;
-    this.file = file;
     this.type = type;
 
     try
   {
     logger.debug("clear configuration store");
 
-    synchronized (LOCK)
+    synchronized (file)
     {
       entries.clear();
       store();
   {
     logger.debug("put item {} to configuration store", id);
 
-    synchronized (LOCK)
+    synchronized (file)
     {
       entries.put(id, item);
       store();
   {
     logger.debug("remove item {} from configuration store", id);
 
-    synchronized (LOCK)
+    synchronized (file)
     {
       entries.remove(id);
       store();
   }
 
   /**
+   * 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
    *
    *
     {
       Unmarshaller u = context.createUnmarshaller();
 
-      reader = xmlInputFactory.createXMLStreamReader(new StreamSource(file));
+      reader = xmlInputFactory.createXMLStreamReader(createReader());
       reader.nextTag();
       reader.nextTag();
 
       //J-
       writer = new IndentXMLStreamWriter(
         XMLOutputFactory.newFactory().createXMLStreamWriter(
-          new FileOutputStream(file)
+          createWriter()
         )
       );
       //J+
   //~--- 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;
 
   /** Field description */

scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java

  */
 
 
+
 package sonia.scm.store;
 
 //~--- non-JDK imports --------------------------------------------------------
     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 ---------------------------------------------------------------