/* Copyright 2012 Google, Inc.
 *
 * 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.arbeitspferde.groningen.utility.open;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Logger;

import javax.annotation.concurrent.NotThreadSafe;

import org.arbeitspferde.groningen.utility.AbstractFile;
import org.arbeitspferde.groningen.utility.FileFactory;

import com.google.inject.Singleton;

/**
 * Produce {@link AbstractFile}s that proxy {@link LocalFile} and
 * {@link AbstractFile} operations.
 */
@Singleton
public class LocalFileFactory implements FileFactory {
  private static final Logger log = Logger.getLogger(LocalFileFactory.class.getCanonicalName());

  @Override
  public AbstractFile forFile(String path, String mode) throws IOException {
    log.info(String.format("Creating LocalFile proxy for '%s' '%s'.", path, mode));
    return new LocalFileProxy(path, mode);
  }

  @Override
  public AbstractFile forFile(String path) throws IOException {
    log.info(String.format("Creating LocalFile proxy for '%s' 'r'", path));
    return new LocalFileProxy(path, "r");
  }

  @NotThreadSafe
  private class LocalFileProxy implements AbstractFile {
    private final String path;
    private final String accessMode;

    public LocalFileProxy(final String path, final String accessMode) {
      this.path = path;
      this.accessMode = accessMode;
    }

    @Override
    public boolean delete() throws IOException, SecurityException {
      // TODO Auto-generated method stub
      return false;
    }

    @Override
    public boolean exists() throws IOException {
      // TODO Auto-generated method stub
      return false;
    }

    @Override
    public OutputStream outputStreamFor() throws IOException {
      // TODO Auto-generated method stub
      return null;
    }

    @Override
    public InputStream inputStreamFor() throws IOException {
      // TODO Auto-generated method stub
      return null;
    }

    @Override
    public void renameTo(String newName) throws IOException {
      // TODO Auto-generated method stub

    }

  }

}

@@ -649,27 +649,171 @@
 ort 
-java.io.IOException
+com.google.inject.Singleton;%0A%0Aimport org.arbeitspferde.groningen.utility.AbstractFile;%0Aimport org.arbeitspferde.groningen.utility.FileFactory;%0A%0Aimport java.io.File
 ;%0Aim
@@ -825,16 +825,20 @@
 java.io.
+File
 InputStr
@@ -857,16 +857,20 @@
 java.io.
+File
 OutputSt
@@ -891,229 +891,163 @@
 ava.
-util.logging.Logger;%0A%0Aimport javax.annotation.concurrent.NotThreadSafe;%0A%0Aimport org.arbeitspferde.groningen.utility.AbstractFile;%0Aimport org.arbeitspferde.groningen.utility.FileFactory;%0A%0Aimport com.google.inject.Singleton
+io.IOException;%0Aimport java.io.InputStream;%0Aimport java.io.OutputStream;%0Aimport java.util.logging.Logger;%0A%0Aimport javax.annotation.concurrent.NotThreadSafe
 ;%0A%0A/
@@ -1464,21 +1464,16 @@
 roxy for
- '%25s'
  '%25s'.%22,
@@ -1477,22 +1477,16 @@
 .%22, path
-, mode
 ));%0A    
@@ -1519,14 +1519,8 @@
 path
-, mode
 );%0A 
@@ -1664,19 +1664,10 @@
 '%25s'
- 'r'%22, path
+.%22
 ));%0A
@@ -1704,13 +1704,8 @@
 path
-, %22r%22
 );%0A 
@@ -1804,189 +1804,99 @@
 nal 
-String path;%0A    private final String accessMode;%0A%0A    public LocalFileProxy(final String path, final String accessMode) %7B%0A      this.path = path;%0A      this.accessMode = accessMode
+File file;%0A%0A    public LocalFileProxy(final String path) %7B%0A      this.file = new File(path)
 ;%0A  
@@ -1992,61 +1992,28 @@
     
-// TODO Auto-generated method stub%0A      return false
+return file.delete()
 ;%0A  
@@ -2090,61 +2090,28 @@
     
-// TODO Auto-generated method stub%0A      return false
+return file.exists()
 ;%0A  
@@ -2202,60 +2202,41 @@
     
-// TODO Auto-generated method stub%0A      return null
+return new FileOutputStream(file)
 ;%0A  
@@ -2325,60 +2325,40 @@
     
-// TODO Auto-generated method stub%0A      return null
+return new FileInputStream(file)
 ;%0A  
@@ -2448,43 +2448,41 @@
     
-// TODO Auto-generated method stub%0A
+file.renameTo(new File(newName));
 %0A   

Implement LocalFileProxy using java.io.File and java.io.File<Input/Output>Stream