// 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/FileResource.java
// public class FileResource extends Resource {
//     
//     private final File file;
// 
//     public FileResource(final File file, final boolean filter, final String target, final String user, final String group, final int mode) {
//         super(filter, target, user, group, mode);
//         
//         this.file = checkNotNull(file);
//         Preconditions.checkArgument(file.exists(), String.format("File %s not found", file.getAbsolutePath()));
//     }
// 
//     @Override
//     public ByteSource getSource() {
//         return Files.asByteSource(file);
//     }
// }
// 
// 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;
//     }
// }


import com.google.common.base.Function;
import com.jamierf.dropwizard.debpkg.config.ResourceConfiguration;
import com.jamierf.dropwizard.debpkg.resource.FileResource;
import com.jamierf.dropwizard.debpkg.resource.Resource;
package com.jamierf.dropwizard.debpkg.transforms;


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);
// 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/FileResource.java
// public class FileResource extends Resource {
//     
//     private final File file;
// 
//     public FileResource(final File file, final boolean filter, final String target, final String user, final String group, final int mode) {
//         super(filter, target, user, group, mode);
//         
//         this.file = checkNotNull(file);
//         Preconditions.checkArgument(file.exists(), String.format("File %s not found", file.getAbsolutePath()));
//     }
// 
//     @Override
//     public ByteSource getSource() {
//         return Files.asByteSource(file);
//     }
// }
// 
// 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
import com.google.common.base.Function;
import com.jamierf.dropwizard.debpkg.config.ResourceConfiguration;
import com.jamierf.dropwizard.debpkg.resource.FileResource;
import com.jamierf.dropwizard.debpkg.resource.Resource;

package com.jamierf.dropwizard.debpkg.transforms;


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());