001/* *********************************************************************** *
002 * project: org.matsim.*
003 * *********************************************************************** *
004 *                                                                         *
005 * copyright       : (C) 2007 by the members listed in the COPYING,        *
006 *                   LICENSE and WARRANTY file.                            *
007 * email           : info at matsim dot org                                *
008 *                                                                         *
009 * *********************************************************************** *
010 *                                                                         *
011 *   This program is free software; you can redistribute it and/or modify  *
012 *   it under the terms of the GNU General Public License as published by  *
013 *   the Free Software Foundation; either version 2 of the License, or     *
014 *   (at your option) any later version.                                   *
015 *   See also COPYING, LICENSE and WARRANTY file                           *
016 *                                                                         *
017 * *********************************************************************** */
018
019package org.matsim.contrib.freight;
020
021import org.matsim.core.config.ConfigGroup;
022import org.matsim.core.config.ReflectiveConfigGroup;
023
024import javax.validation.constraints.Positive;
025import java.net.URL;
026import java.util.Map;
027
028public class FreightConfigGroup extends ReflectiveConfigGroup {
029
030    public static final String GROUPNAME="freight" ;
031
032    private String carriersFile;
033    public static final String CARRIERSFILEDE = "carriersFile";
034    private static final String CARRIERSFILEDESC = "Freight Carriers File, according to MATSim freight contrib";
035
036    private String carriersVehicleTypesFile;
037    public static final String CARRIERSVEHICLETYPED = "carriersVehicleTypeFile";
038    private static final String CARRIERSVEHICLETYPEDESC = "Carrier Vehicle Types file, according to MATSim freight contrib";
039
040    private String vehicleRoutingAlgortihmFile;
041    public static final String VEHICLEROUTINGALGORITHM = "vehicleRoutingAlgortihmFile";
042    private static final String VEHICLEROUTINGALGORITHMDESC = "(Optional) Vehicle Routing Algorithm File, according to jsprit library. "
043           + "Empty value \"\" means an default algorithm is used.";
044
045    @Positive
046    private int travelTimeSliceWidth = 1800;
047    public static final String TRAVELTIMESLICEWIDTH = "travelTimeSliceWidth";
048    private static final String TRAVELTIMESLICEWIDTHDESC = "time slice width used for calculation of travel times in seconds." +
049            " The smaller the value, the more precise the calculation of routing costs but the longer the computation time." +
050            " Default value is 1800 seconds.";
051    
052    public enum UseDistanceConstraintForTourPlanning {noDistanceConstraint, basedOnEnergyConsumption};
053    private static final String USE_DISTANCE_CONSTRAINT = "useDistanceConstraintForTourPlanning";
054    private UseDistanceConstraintForTourPlanning useDistanceConstraintForTourPlanning = UseDistanceConstraintForTourPlanning.noDistanceConstraint;
055    private static final String USE_DISTANCE_CONSTRAINT_DESC = "Use distant constraint within the tour planning phase. This does NOT ensure that the tours in MATSim will respect this limitation";
056
057    public FreightConfigGroup() {
058        super(GROUPNAME);
059    }
060
061    //### CarriersFile ###
062    /**
063     * @return -- {@value #CARRIERSFILEDESC}
064     */
065//    @StringGetter(CARRIERSFILEDE)
066    public String getCarriersFile() {
067        return carriersFile;
068    }
069
070    URL getCarriersFileUrl(URL context) {
071        return ConfigGroup.getInputFileURL(context, this.carriersFile);
072    }
073
074    /**
075     * @param -- {@value #CARRIERSFILEDESC}
076     */
077//    @StringSetter(CARRIERSFILEDE)
078    public void setCarriersFile(String carriersFile) {
079        this.carriersFile = carriersFile;
080    }
081
082    
083    //### CarriersVehicleTypeFile ###
084    /**
085     * @return -- {@value #CARRIERSVEHICLETYPEDESC}
086     */
087//    @StringGetter(CARRIERSVEHICLETYPED)
088    public String getCarriersVehicleTypesFile() {
089        return carriersVehicleTypesFile;
090    }
091
092    URL getCarriersVehicleTypesFileUrl(URL context) {
093        return ConfigGroup.getInputFileURL(context, this.carriersVehicleTypesFile);
094    }
095    
096    /**
097     * @param -- {@value #CARRIERSVEHICLETYPEDESC}
098     */
099//    @StringSetter(CARRIERSVEHICLETYPED)
100    public void setCarriersVehicleTypesFile(String carriersVehicleTypesFile) {
101        this.carriersVehicleTypesFile = carriersVehicleTypesFile;
102    }
103
104    //### VehicleRoutingAlgorithmFile ###
105    /**
106     * @return -- {@value #VEHICLEROUTINGALGORITHMDESC}
107     */
108//    @StringGetter(VEHICLEROUTINGALGORITHM)
109    public String getVehicleRoutingAlgortihmFile() {
110        return vehicleRoutingAlgortihmFile;
111    }
112
113    URL getVehicleAlgortihemsFileUrl(URL context) {
114        return ConfigGroup.getInputFileURL(context, this.vehicleRoutingAlgortihmFile);
115    }
116
117    /**
118     * @param -- {@value #VEHICLEROUTINGALGORITHMDESC}
119     */
120//    @StringSetter(VEHICLEROUTINGALGORITHM)
121    public void setVehicleRoutingAlgortihmFileFile(String vehicleRoutingAlgortihmFile) {
122        this.vehicleRoutingAlgortihmFile = vehicleRoutingAlgortihmFile;
123    }
124
125
126    //### TravelTimeSliceWidth ###
127    /**
128     * @return travelTimeSliceWidth --{@value #TRAVELTIMESLICEWIDTHDESC}
129     */
130//    @StringGetter(TRAVELTIMESLICEWIDTH)
131    public int getTravelTimeSliceWidth() {
132        return travelTimeSliceWidth;
133    }
134
135    /**
136     * @param travelTimeSliceWidth --{@value #TRAVELTIMESLICEWIDTHDESC}
137     */
138//    @StringSetter(JSPRITTIMESLICEWIDTH)
139    public void setTravelTimeSliceWidth(int travelTimeSliceWidth) {
140        this.travelTimeSliceWidth = travelTimeSliceWidth;
141    }
142
143    //### TimeWindowHandling ###
144    public enum TimeWindowHandling{ ignore, enforceBeginnings }
145    private TimeWindowHandling timeWindowHandling = TimeWindowHandling.enforceBeginnings ;
146    /**
147     * Physically enforces beginnings of time windows for freight activities, i.e. freight agents
148     * wait before closed doors until they can deliver / pick up their goods, and then take their required duration.
149     */
150    public void setTimeWindowHandling( TimeWindowHandling handling ) {
151        this.timeWindowHandling = handling ;
152    }
153    public TimeWindowHandling getTimeWindowHandling() {
154        return this.timeWindowHandling ;
155    }
156
157
158    
159    //---
160    //---
161    /**
162         * @return useDistanceConstraint
163         */
164    @StringGetter(USE_DISTANCE_CONSTRAINT)
165        public UseDistanceConstraintForTourPlanning getUseDistanceConstraintForTourPlanning() {
166                return useDistanceConstraintForTourPlanning;
167        }
168        /**
169         * @param useDistanceConstraintForTourPlanning {@value #USE_DISTANCE_CONSTRAINT_DESC}
170         */
171    @StringSetter(USE_DISTANCE_CONSTRAINT)
172        public void setUseDistanceConstraintForTourPlanning(UseDistanceConstraintForTourPlanning useDistanceConstraintForTourPlanning) {
173                this.useDistanceConstraintForTourPlanning = useDistanceConstraintForTourPlanning;
174        }
175
176        //---
177        //---
178        @Override
179    public Map<String, String> getComments() {
180        Map<String, String> map = super.getComments();
181        map.put(CARRIERSFILEDE, CARRIERSFILEDESC);
182        map.put(CARRIERSVEHICLETYPED, CARRIERSVEHICLETYPEDESC);
183        map.put(VEHICLEROUTINGALGORITHM, VEHICLEROUTINGALGORITHMDESC);
184        map.put(TRAVELTIMESLICEWIDTH, TRAVELTIMESLICEWIDTHDESC);
185        map.put(USE_DISTANCE_CONSTRAINT, USE_DISTANCE_CONSTRAINT_DESC);
186        return map;
187    }
188
189}