// Path: src/main/java/com/google/dicomwebfuse/dao/FuseDao.java
// public interface FuseDao {
// 
//   List<DicomStore> getAllDicomStores(QueryBuilder queryBuilder) throws DicomFuseException;
//   DicomStore getSingleDicomStore(QueryBuilder queryBuilder) throws DicomFuseException;
//   List<Study> getStudies(QueryBuilder queryBuilder) throws DicomFuseException;
//   Study getSingleStudy(QueryBuilder queryBuilder) throws DicomFuseException;
//   List<Series> getSeries(QueryBuilder queryBuilder) throws DicomFuseException;
//   Series getSingleSeries(QueryBuilder queryBuilder) throws DicomFuseException;
//   List<Instance> getInstances(QueryBuilder queryBuilder) throws DicomFuseException;
//   Instance getSingleInstance(QueryBuilder queryBuilder) throws DicomFuseException;
// 
//   void downloadInstance(QueryBuilder queryBuilder) throws DicomFuseException;
//   void uploadInstance(QueryBuilder queryBuilder) throws DicomFuseException;
//   void deleteInstance(QueryBuilder queryBuilder) throws DicomFuseException;
//   void createDicomStore(QueryBuilder queryBuilder) throws DicomFuseException;
//   void deleteDicomStore(QueryBuilder queryBuilder) throws DicomFuseException;
// }
// 
// Path: src/main/java/com/google/dicomwebfuse/entities/CloudConf.java
// public class CloudConf {
// 
//   private String stage;
//   private String project;
//   private String location;
//   private String dataSet;
// 
//   public CloudConf(String stage, String project, String location, String dataSet) {
//     this.stage = stage;
//     this.project = project;
//     this.location = location;
//     this.dataSet = dataSet;
//   }
// 
//   public String getStage() {
//     return stage;
//   }
// 
//   public String getProject() {
//     return project;
//   }
// 
//   public String getLocation() {
//     return location;
//   }
// 
//   public String getDataSet() {
//     return dataSet;
//   }
// }
// 
// Path: src/main/java/com/google/dicomwebfuse/entities/cache/CacheTime.java
// public class CacheTime {
// 
//   private final long objectsCacheTime;
//   private final long instanceFilesCacheTime;
// 
//   public CacheTime(long objectsCacheTime, long instanceFilesCacheTime) {
//     this.objectsCacheTime = objectsCacheTime;
//     this.instanceFilesCacheTime = instanceFilesCacheTime;
//   }
// 
//   public long getObjectsCacheTime() {
//     return objectsCacheTime;
//   }
// 
//   public long getInstanceFilesCacheTime() {
//     return instanceFilesCacheTime;
//   }
// 
//   @Override
//   public String toString() {
//     return objectsCacheTime + "," + instanceFilesCacheTime;
//   }
// }
// 
// Path: src/main/java/com/google/dicomwebfuse/parser/Arguments.java
// public class Arguments {
// 
//   @Parameter(
//       names = {"--datasetAddr", "-a"},
//       descriptionKey = "option.datasetAddr",
//       required = true,
//       order = 0,
//       converter = CloudConfigurationConverter.class
//   )
//   public CloudConf cloudConf;
// 
//   @Parameter(
//       names = {"--mountPath", "-p"},
//       descriptionKey = "option.mountPath",
//       required = true,
//       order = 1,
//       converter = PathConverter.class
//   )
//   public Path mountPath;
// 
//   @Parameter(
//       names = {"--cacheTime", "-t"},
//       descriptionKey = "option.cacheTime",
//       converter = CacheTimeConverter.class,
//       order = 2,
//       validateWith = CacheTimePositiveValidator.class
//   )
//   public CacheTime cacheTime = new CacheTime(60, 300);
// 
//   @Parameter(
//       names = {"--cacheSize", "-s"},
//       descriptionKey = "option.cacheSize",
//       converter = LongConverter.class,
//       order = 3,
//       validateWith = CacheSizePositiveValidator.class
//   )
//   public long cacheSize = 10000;
// 
//   @Parameter(
//       names = {"--enableDeletion", "-d"},
//       descriptionKey = "option.enableDeletion",
//       order = 4,
//       converter = BooleanConverter.class
//   )
//   public boolean enableDeletion = true;
// 
//   @Parameter(
//       names = {"--keyFile", "-k"},
//       descriptionKey = "option.keyFile",
//       order = 5,
//       converter = PathConverter.class
//   )
//   public Path keyPath;
// 
//   @Parameter(
//       names = {"--extraMountOptions"},
//       descriptionKey = "option.extraMountOptions",
//       order = 6
//   )
//   public List<String> extraMountOptions = new ArrayList<>();
// 
//   @Parameter(
//       names = {"--help", "-h"},
//       help = true,
//       descriptionKey = "option.help",
//       order = 7
//   )
//   public boolean help = false;
// }


import com.google.dicomwebfuse.dao.FuseDao;
import com.google.dicomwebfuse.entities.CloudConf;
import com.google.dicomwebfuse.entities.cache.CacheTime;
import com.google.dicomwebfuse.parser.Arguments;
import jnr.ffi.Platform.OS;

  public Parameters(FuseDao fuseDAO, Arguments arguments, OS os) {
    this.fuseDAO = fuseDAO;
    this.cloudConf = arguments.cloudConf;
    this.cacheTime = arguments.cacheTime;
    this.cacheSize = arguments.cacheSize;
    this.enableDeletion = arguments.enableDeletion;
    this.os = os;
  }

  public FuseDao getFuseDAO() {
    return fuseDAO;
  }

  public CloudConf getCloudConf() {
    return cloudConf;
  }

  public CacheTime getCacheTime() {
    return cacheTime;
  }

  public long getCacheSize() {
    return cacheSize;
  }

  boolean isEnableDeletion() {
    return enableDeletion;
  }

// Path: src/main/java/com/google/dicomwebfuse/dao/FuseDao.java
// public interface FuseDao {
// 
//   List<DicomStore> getAllDicomStores(QueryBuilder queryBuilder) throws DicomFuseException;
//   DicomStore getSingleDicomStore(QueryBuilder queryBuilder) throws DicomFuseException;
//   List<Study> getStudies(QueryBuilder queryBuilder) throws DicomFuseException;
//   Study getSingleStudy(QueryBuilder queryBuilder) throws DicomFuseException;
//   List<Series> getSeries(QueryBuilder queryBuilder) throws DicomFuseException;
//   Series getSingleSeries(QueryBuilder queryBuilder) throws DicomFuseException;
//   List<Instance> getInstances(QueryBuilder queryBuilder) throws DicomFuseException;
//   Instance getSingleInstance(QueryBuilder queryBuilder) throws DicomFuseException;
// 
//   void downloadInstance(QueryBuilder queryBuilder) throws DicomFuseException;
//   void uploadInstance(QueryBuilder queryBuilder) throws DicomFuseException;
//   void deleteInstance(QueryBuilder queryBuilder) throws DicomFuseException;
//   void createDicomStore(QueryBuilder queryBuilder) throws DicomFuseException;
//   void deleteDicomStore(QueryBuilder queryBuilder) throws DicomFuseException;
// }
// 
// Path: src/main/java/com/google/dicomwebfuse/entities/CloudConf.java
// public class CloudConf {
// 
//   private String stage;
//   private String project;
//   private String location;
//   private String dataSet;
// 
//   public CloudConf(String stage, String project, String location, String dataSet) {
//     this.stage = stage;
//     this.project = project;
//     this.location = location;
//     this.dataSet = dataSet;
//   }
// 
//   public String getStage() {
//     return stage;
//   }
// 
//   public String getProject() {
//     return project;
//   }
// 
//   public String getLocation() {
//     return location;
//   }
// 
//   public String getDataSet() {
//     return dataSet;
//   }
// }
// 
// Path: src/main/java/com/google/dicomwebfuse/entities/cache/CacheTime.java
// public class CacheTime {
// 
//   private final long objectsCacheTime;
//   private final long instanceFilesCacheTime;
// 
//   public CacheTime(long objectsCacheTime, long instanceFilesCacheTime) {
//     this.objectsCacheTime = objectsCacheTime;
//     this.instanceFilesCacheTime = instanceFilesCacheTime;
//   }
// 
//   public long getObjectsCacheTime() {
//     return objectsCacheTime;
//   }
// 
//   public long getInstanceFilesCacheTime() {
//     return instanceFilesCacheTime;
//   }
// 
//   @Override
//   public String toString() {
//     return objectsCacheTime + "," + instanceFilesCacheTime;
//   }
// }
// 
// Path: src/main/java/com/google/dicomwebfuse/parser/Arguments.java
// public class Arguments {
// 
//   @Parameter(
//       names = {"--datasetAddr", "-a"},
//       descriptionKey = "option.datasetAddr",
//       required = true,
//       order = 0,
//       converter = CloudConfigurationConverter.class
//   )
//   public CloudConf cloudConf;
// 
//   @Parameter(
//       names = {"--mountPath", "-p"},
//       descriptionKey = "option.mountPath",
//       required = true,
//       order = 1,
//       converter = PathConverter.class
//   )
//   public Path mountPath;
// 
//   @Parameter(
//       names = {"--cacheTime", "-t"},
//       descriptionKey = "option.cacheTime",
//       converter = CacheTimeConverter.class,
//       order = 2,
//       validateWith = CacheTimePositiveValidator.class
//   )
//   public CacheTime cacheTime = new CacheTime(60, 300);
// 
//   @Parameter(
//       names = {"--cacheSize", "-s"},
//       descriptionKey = "option.cacheSize",
//       converter = LongConverter.class,
//       order = 3,
//       validateWith = CacheSizePositiveValidator.class
//   )
//   public long cacheSize = 10000;
// 
//   @Parameter(
//       names = {"--enableDeletion", "-d"},
//       descriptionKey = "option.enableDeletion",
//       order = 4,
//       converter = BooleanConverter.class
//   )
//   public boolean enableDeletion = true;
// 
//   @Parameter(
//       names = {"--keyFile", "-k"},
//       descriptionKey = "option.keyFile",
//       order = 5,
//       converter = PathConverter.class
//   )
//   public Path keyPath;
// 
//   @Parameter(
//       names = {"--extraMountOptions"},
//       descriptionKey = "option.extraMountOptions",
//       order = 6
//   )
//   public List<String> extraMountOptions = new ArrayList<>();
// 
//   @Parameter(
//       names = {"--help", "-h"},
//       help = true,
//       descriptionKey = "option.help",
//       order = 7
//   )
//   public boolean help = false;
// }


// Path: src/main/java/com/google/dicomwebfuse/fuse/Parameters.java
import com.google.dicomwebfuse.dao.FuseDao;
import com.google.dicomwebfuse.entities.CloudConf;
import com.google.dicomwebfuse.entities.cache.CacheTime;
import com.google.dicomwebfuse.parser.Arguments;
import jnr.ffi.Platform.OS;


  public Parameters(FuseDao fuseDAO, Arguments arguments, OS os) {
    this.fuseDAO = fuseDAO;
    this.cloudConf = arguments.cloudConf;
    this.cacheTime = arguments.cacheTime;
    this.cacheSize = arguments.cacheSize;
    this.enableDeletion = arguments.enableDeletion;
    this.os = os;
  }

  public FuseDao getFuseDAO() {
    return fuseDAO;
  }

  public CloudConf getCloudConf() {
    return cloudConf;
  }

  public CacheTime getCacheTime() {
    return cacheTime;
  }

  public long getCacheSize() {
    return cacheSize;
  }

  boolean isEnableDeletion() {
    return enableDeletion;
  }

  OS getOs() {