/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.components.jsprit.tabledefinitions; import static com.opendoorlogistics.api.components.PredefinedTags.*; import com.opendoorlogistics.api.ODLApi; import com.opendoorlogistics.api.components.PredefinedTags; import com.opendoorlogistics.api.tables.ODLColumnType; import com.opendoorlogistics.api.tables.ODLDatastoreAlterable; import com.opendoorlogistics.api.tables.ODLTableDefinitionAlterable; import com.opendoorlogistics.components.jsprit.VRPConfig; import com.opendoorlogistics.components.jsprit.VRPBuilder.TravelCostType; /** * Class storing the column indices of various details for each stop on a route * * @author Phil * */ public class StopDetailsTableDfn extends StopOrderTableDfn { public final int jobId; public final int[] arrivalQuantities; public final int[] arrivalCapacityViolations; public final int arrivalTime; public final int hasViolation; public final int incomingPath; public final int[] leaveQuantities; public final int[] leaveCapacityViolations; // public final int arrivalDistance; public final int leaveTime; public final int outgoingPath; public final int stopAddress; public final int stopDuration; public final LatLongDfn stopLatLong; public final int stopName; public final int stopNumber; public final int[] stopQuantities; public final int requiredSkills; public final int timeWindowEnd; public final int timeWindowStart; public final int timeWindowViolation; public final int[] totalTravelCosts = new int[3]; public final int[] travelCosts = new int[3]; public final int type; public final int vehicleName; public final int waitingTime; public StopDetailsTableDfn(ODLApi api,ODLDatastoreAlterable<? extends ODLTableDefinitionAlterable> ds, VRPConfig config) { super(api,ds, "Stop-Details"); jobId = addStrColumn(JOB_ID); vehicleName = addStrColumn(VEHICLE_NAME); stopNumber = addColumn(ODLColumnType.LONG, STOP_NUMBER); stopName = addStrColumn(STOP_NAME); type = addColumn(ODLColumnType.STRING, TYPE); stopAddress = addStrColumn(STOP_ADDRESS); stopLatLong = new LatLongDfn(api,table, "stop-"); requiredSkills = addStrColumn("required-skills"); hasViolation = addLngColumn("has-violation"); arrivalTime = addTimeColumn(ARRIVAL_TIME); waitingTime = addTimeColumn(PredefinedTags.WAITING_TIME); stopDuration = addTimeColumn(STOP_DURATION); leaveTime = addTimeColumn(LEAVE_TIME); timeWindowStart = addTimeColumn(START_TIME_WINDOW); timeWindowEnd = addTimeColumn(END_TIME_WINDOW); timeWindowViolation = addTimeColumn(TIME_WINDOW_VIOLATION); arrivalQuantities = addQuantities(ARRIVAL_QUANTITY, config); arrivalCapacityViolations = addQuantities("arrival-capacity-violation", config); stopQuantities = addQuantities(STOP_QUANTITY, config); leaveQuantities = addQuantities(LEAVE_QUANTITY, config); leaveCapacityViolations = addQuantities("leave-capacity-violation", config); travelCosts[TravelCostType.COST.ordinal()] = addDblColumn(TRAVEL_COST); travelCosts[TravelCostType.DISTANCE_KM.ordinal()] = addDblColumn(TRAVEL_KM); travelCosts[TravelCostType.TIME.ordinal()] = addTimeColumn(TRAVEL_TIME); totalTravelCosts[TravelCostType.COST.ordinal()] = addDblColumn(TOTAL_TRAVEL_COST); totalTravelCosts[TravelCostType.DISTANCE_KM.ordinal()] = addDblColumn(TOTAL_TRAVEL_KM); totalTravelCosts[TravelCostType.TIME.ordinal()] = addTimeColumn(TOTAL_TRAVEL_TIME); incomingPath = addColumn(ODLColumnType.GEOM, PredefinedTags.INCOMING_PATH); outgoingPath = addColumn(ODLColumnType.GEOM, PredefinedTags.OUTGOING_PATH); } }