// 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;
//   }
// }


import com.beust.jcommander.Parameter;
import com.beust.jcommander.converters.BooleanConverter;
import com.beust.jcommander.converters.LongConverter;
import com.beust.jcommander.converters.PathConverter;
import com.google.dicomwebfuse.entities.CloudConf;
import com.google.dicomwebfuse.entities.cache.CacheTime;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
// Copyright 2019 Google LLC
//
// 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 com.google.dicomwebfuse.parser;


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
  )
// 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
import com.beust.jcommander.Parameter;
import com.beust.jcommander.converters.BooleanConverter;
import com.beust.jcommander.converters.LongConverter;
import com.beust.jcommander.converters.PathConverter;
import com.google.dicomwebfuse.entities.CloudConf;
import com.google.dicomwebfuse.entities.cache.CacheTime;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

// Copyright 2019 Google LLC
//
// 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 com.google.dicomwebfuse.parser;


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