// Path: src/main/java/com/jamierf/dropwizard/debpkg/config/ResourceConfiguration.java
// public class ResourceConfiguration {
// 
//     @Parameter(required = true)
//     private File source;
// 
//     @Parameter(required = true)
//     private String target;
// 
//     @Parameter
//     private boolean filter = true;
// 
//     @Parameter
//     private String user = null;
// 
//     @Parameter
//     private int mode = TarEntry.DEFAULT_FILE_MODE;
// 
//     public File getSource() {
//         return source;
//     }
// 
//     public ResourceConfiguration setSource(final File source) {
//         this.source = source;
//         return this;
//     }
// 
//     public String getTarget() {
//         return target;
//     }
// 
//     public ResourceConfiguration setTarget(final String target) {
//         this.target = target;
//         return this;
//     }
// 
//     public boolean isFilter() {
//         return filter;
//     }
// 
//     public ResourceConfiguration setFilter(final boolean filter) {
//         this.filter = filter;
//         return this;
//     }
// 
//     public Optional<String> getUser() {
//         return Optional.fromNullable(user);
//     }
// 
//     public ResourceConfiguration setUser(final String user) {
//         this.user = user;
//         return this;
//     }
// 
//     public int getMode() {
//         return mode;
//     }
// 
//     public ResourceConfiguration setMode(final int mode) {
//         this.mode = mode;
//         return this;
//     }
// }
// 
// Path: src/main/java/com/jamierf/dropwizard/debpkg/resource/Resource.java
// public abstract class Resource {
// 
//     private final boolean filter;
//     private final String target;
//     private final String user;
//     private final String group;
//     private final int mode;
// 
//     public Resource(final boolean filter, final String target, final String user, final String group, final int mode) {
//         this.target = checkNotNull(target);
//         this.user = checkNotNull(user);
//         this.group = checkNotNull(group);
//         this.filter = filter;
//         this.mode = mode;
//     }
// 
//     public abstract ByteSource getSource();
// 
//     public boolean isFilter() {
//         return filter;
//     }
// 
//     public String getTarget() {
//         return target;
//     }
// 
//     public String getUser() {
//         return user;
//     }
// 
//     public String getGroup() {
//         return group;
//     }
// 
//     public int getMode() {
//         return mode;
//     }
// }
// 
// Path: src/main/java/com/jamierf/dropwizard/debpkg/transforms/ResourceProducer.java
// public class ResourceProducer implements Function<ResourceConfiguration, Resource> {
// 
//     private final String defaultUser;
// 
//     public ResourceProducer(final String defaultUser) {
//         this.defaultUser = defaultUser;
//     }
// 
//     @Override
//     public Resource apply(final ResourceConfiguration input) {
//         final String user = input.getUser().or(defaultUser);
//         return new FileResource(input.getSource(), input.isFilter(), input.getTarget(), user, user, input.getMode());
//     }
// }


import com.google.common.io.Files;
import com.jamierf.dropwizard.debpkg.config.ResourceConfiguration;
import com.jamierf.dropwizard.debpkg.resource.Resource;
import com.jamierf.dropwizard.debpkg.transforms.ResourceProducer;
import org.apache.tools.tar.TarEntry;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import static org.junit.Assert.*;
package com.jamierf.dropwizard.debpkg.transforms;




public class ResourceProducerTest {

    @Rule
    public TemporaryFolder temporaryFolder = new TemporaryFolder();

    private File source;
    private ResourceProducer producer;

    @Before
    public void setUp() throws IOException {
        source = temporaryFolder.newFile();
        Files.write("hello world".getBytes(), source);

        producer = new ResourceProducer("tester");
    }

    @Test
    public void testDefaults() {
// Path: src/main/java/com/jamierf/dropwizard/debpkg/config/ResourceConfiguration.java
// public class ResourceConfiguration {
// 
//     @Parameter(required = true)
//     private File source;
// 
//     @Parameter(required = true)
//     private String target;
// 
//     @Parameter
//     private boolean filter = true;
// 
//     @Parameter
//     private String user = null;
// 
//     @Parameter
//     private int mode = TarEntry.DEFAULT_FILE_MODE;
// 
//     public File getSource() {
//         return source;
//     }
// 
//     public ResourceConfiguration setSource(final File source) {
//         this.source = source;
//         return this;
//     }
// 
//     public String getTarget() {
//         return target;
//     }
// 
//     public ResourceConfiguration setTarget(final String target) {
//         this.target = target;
//         return this;
//     }
// 
//     public boolean isFilter() {
//         return filter;
//     }
// 
//     public ResourceConfiguration setFilter(final boolean filter) {
//         this.filter = filter;
//         return this;
//     }
// 
//     public Optional<String> getUser() {
//         return Optional.fromNullable(user);
//     }
// 
//     public ResourceConfiguration setUser(final String user) {
//         this.user = user;
//         return this;
//     }
// 
//     public int getMode() {
//         return mode;
//     }
// 
//     public ResourceConfiguration setMode(final int mode) {
//         this.mode = mode;
//         return this;
//     }
// }
// 
// Path: src/main/java/com/jamierf/dropwizard/debpkg/resource/Resource.java
// public abstract class Resource {
// 
//     private final boolean filter;
//     private final String target;
//     private final String user;
//     private final String group;
//     private final int mode;
// 
//     public Resource(final boolean filter, final String target, final String user, final String group, final int mode) {
//         this.target = checkNotNull(target);
//         this.user = checkNotNull(user);
//         this.group = checkNotNull(group);
//         this.filter = filter;
//         this.mode = mode;
//     }
// 
//     public abstract ByteSource getSource();
// 
//     public boolean isFilter() {
//         return filter;
//     }
// 
//     public String getTarget() {
//         return target;
//     }
// 
//     public String getUser() {
//         return user;
//     }
// 
//     public String getGroup() {
//         return group;
//     }
// 
//     public int getMode() {
//         return mode;
//     }
// }
// 
// Path: src/main/java/com/jamierf/dropwizard/debpkg/transforms/ResourceProducer.java
// public class ResourceProducer implements Function<ResourceConfiguration, Resource> {
// 
//     private final String defaultUser;
// 
//     public ResourceProducer(final String defaultUser) {
//         this.defaultUser = defaultUser;
//     }
// 
//     @Override
//     public Resource apply(final ResourceConfiguration input) {
//         final String user = input.getUser().or(defaultUser);
//         return new FileResource(input.getSource(), input.isFilter(), input.getTarget(), user, user, input.getMode());
//     }
// }


// Path: src/test/java/com/jamierf/dropwizard/debpkg/transforms/ResourceProducerTest.java
import com.google.common.io.Files;
import com.jamierf.dropwizard.debpkg.config.ResourceConfiguration;
import com.jamierf.dropwizard.debpkg.resource.Resource;
import com.jamierf.dropwizard.debpkg.transforms.ResourceProducer;
import org.apache.tools.tar.TarEntry;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import static org.junit.Assert.*;

package com.jamierf.dropwizard.debpkg.transforms;




public class ResourceProducerTest {

    @Rule
    public TemporaryFolder temporaryFolder = new TemporaryFolder();

    private File source;
    private ResourceProducer producer;

    @Before
    public void setUp() throws IOException {
        source = temporaryFolder.newFile();
        Files.write("hello world".getBytes(), source);

        producer = new ResourceProducer("tester");
    }

    @Test
    public void testDefaults() {
        final Resource resource = producer.apply(new ResourceConfiguration().setSource(source).setTarget("/tmp/test"));